Using new methods from engine-api, that make it clearer which element is
required when consuming the API.
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
| ... | ... |
@@ -48,13 +48,14 @@ func (cli *DockerCli) CmdAttach(args ...string) error {
|
| 48 | 48 |
cli.configFile.DetachKeys = *detachKeys |
| 49 | 49 |
} |
| 50 | 50 |
|
| 51 |
+ container := cmd.Arg(0) |
|
| 52 |
+ |
|
| 51 | 53 |
options := types.ContainerAttachOptions{
|
| 52 |
- ContainerID: cmd.Arg(0), |
|
| 53 |
- Stream: true, |
|
| 54 |
- Stdin: !*noStdin && c.Config.OpenStdin, |
|
| 55 |
- Stdout: true, |
|
| 56 |
- Stderr: true, |
|
| 57 |
- DetachKeys: cli.configFile.DetachKeys, |
|
| 54 |
+ Stream: true, |
|
| 55 |
+ Stdin: !*noStdin && c.Config.OpenStdin, |
|
| 56 |
+ Stdout: true, |
|
| 57 |
+ Stderr: true, |
|
| 58 |
+ DetachKeys: cli.configFile.DetachKeys, |
|
| 58 | 59 |
} |
| 59 | 60 |
|
| 60 | 61 |
var in io.ReadCloser |
| ... | ... |
@@ -63,11 +64,11 @@ func (cli *DockerCli) CmdAttach(args ...string) error {
|
| 63 | 63 |
} |
| 64 | 64 |
|
| 65 | 65 |
if *proxy && !c.Config.Tty {
|
| 66 |
- sigc := cli.forwardAllSignals(options.ContainerID) |
|
| 66 |
+ sigc := cli.forwardAllSignals(container) |
|
| 67 | 67 |
defer signal.StopCatch(sigc) |
| 68 | 68 |
} |
| 69 | 69 |
|
| 70 |
- resp, errAttach := cli.client.ContainerAttach(context.Background(), options) |
|
| 70 |
+ resp, errAttach := cli.client.ContainerAttach(context.Background(), container, options) |
|
| 71 | 71 |
if errAttach != nil && errAttach != httputil.ErrPersistEOF {
|
| 72 | 72 |
// ContainerAttach returns an ErrPersistEOF (connection closed) |
| 73 | 73 |
// means server met an error and put it in Hijacked connection |
| ... | ... |
@@ -98,7 +99,7 @@ func (cli *DockerCli) CmdAttach(args ...string) error {
|
| 98 | 98 |
return errAttach |
| 99 | 99 |
} |
| 100 | 100 |
|
| 101 |
- _, status, err := getExitCode(cli, options.ContainerID) |
|
| 101 |
+ _, status, err := getExitCode(cli, container) |
|
| 102 | 102 |
if err != nil {
|
| 103 | 103 |
return err |
| 104 | 104 |
} |
| ... | ... |
@@ -212,7 +212,6 @@ func (cli *DockerCli) CmdBuild(args ...string) error {
|
| 212 | 212 |
} |
| 213 | 213 |
|
| 214 | 214 |
options := types.ImageBuildOptions{
|
| 215 |
- Context: body, |
|
| 216 | 215 |
Memory: memory, |
| 217 | 216 |
MemorySwap: memorySwap, |
| 218 | 217 |
Tags: flTags.GetAll(), |
| ... | ... |
@@ -236,7 +235,7 @@ func (cli *DockerCli) CmdBuild(args ...string) error {
|
| 236 | 236 |
Labels: runconfigopts.ConvertKVStringsToMap(flLabels.GetAll()), |
| 237 | 237 |
} |
| 238 | 238 |
|
| 239 |
- response, err := cli.client.ImageBuild(context.Background(), options) |
|
| 239 |
+ response, err := cli.client.ImageBuild(context.Background(), body, options) |
|
| 240 | 240 |
if err != nil {
|
| 241 | 241 |
return err |
| 242 | 242 |
} |
| ... | ... |
@@ -2,7 +2,6 @@ package client |
| 2 | 2 |
|
| 3 | 3 |
import ( |
| 4 | 4 |
"encoding/json" |
| 5 |
- "errors" |
|
| 6 | 5 |
"fmt" |
| 7 | 6 |
|
| 8 | 7 |
"golang.org/x/net/context" |
| ... | ... |
@@ -10,7 +9,6 @@ import ( |
| 10 | 10 |
Cli "github.com/docker/docker/cli" |
| 11 | 11 |
"github.com/docker/docker/opts" |
| 12 | 12 |
flag "github.com/docker/docker/pkg/mflag" |
| 13 |
- "github.com/docker/docker/reference" |
|
| 14 | 13 |
"github.com/docker/engine-api/types" |
| 15 | 14 |
"github.com/docker/engine-api/types/container" |
| 16 | 15 |
) |
| ... | ... |
@@ -33,29 +31,10 @@ func (cli *DockerCli) CmdCommit(args ...string) error {
|
| 33 | 33 |
cmd.ParseFlags(args, true) |
| 34 | 34 |
|
| 35 | 35 |
var ( |
| 36 |
- name = cmd.Arg(0) |
|
| 37 |
- repositoryAndTag = cmd.Arg(1) |
|
| 38 |
- repositoryName string |
|
| 39 |
- tag string |
|
| 36 |
+ name = cmd.Arg(0) |
|
| 37 |
+ reference = cmd.Arg(1) |
|
| 40 | 38 |
) |
| 41 | 39 |
|
| 42 |
- //Check if the given image name can be resolved |
|
| 43 |
- if repositoryAndTag != "" {
|
|
| 44 |
- ref, err := reference.ParseNamed(repositoryAndTag) |
|
| 45 |
- if err != nil {
|
|
| 46 |
- return err |
|
| 47 |
- } |
|
| 48 |
- |
|
| 49 |
- repositoryName = ref.Name() |
|
| 50 |
- |
|
| 51 |
- switch x := ref.(type) {
|
|
| 52 |
- case reference.Canonical: |
|
| 53 |
- return errors.New("cannot commit to digest reference")
|
|
| 54 |
- case reference.NamedTagged: |
|
| 55 |
- tag = x.Tag() |
|
| 56 |
- } |
|
| 57 |
- } |
|
| 58 |
- |
|
| 59 | 40 |
var config *container.Config |
| 60 | 41 |
if *flConfig != "" {
|
| 61 | 42 |
config = &container.Config{}
|
| ... | ... |
@@ -65,17 +44,15 @@ func (cli *DockerCli) CmdCommit(args ...string) error {
|
| 65 | 65 |
} |
| 66 | 66 |
|
| 67 | 67 |
options := types.ContainerCommitOptions{
|
| 68 |
- ContainerID: name, |
|
| 69 |
- RepositoryName: repositoryName, |
|
| 70 |
- Tag: tag, |
|
| 71 |
- Comment: *flComment, |
|
| 72 |
- Author: *flAuthor, |
|
| 73 |
- Changes: flChanges.GetAll(), |
|
| 74 |
- Pause: *flPause, |
|
| 75 |
- Config: config, |
|
| 68 |
+ Reference: reference, |
|
| 69 |
+ Comment: *flComment, |
|
| 70 |
+ Author: *flAuthor, |
|
| 71 |
+ Changes: flChanges.GetAll(), |
|
| 72 |
+ Pause: *flPause, |
|
| 73 |
+ Config: config, |
|
| 76 | 74 |
} |
| 77 | 75 |
|
| 78 |
- response, err := cli.client.ContainerCommit(context.Background(), options) |
|
| 76 |
+ response, err := cli.client.ContainerCommit(context.Background(), name, options) |
|
| 79 | 77 |
if err != nil {
|
| 80 | 78 |
return err |
| 81 | 79 |
} |
| ... | ... |
@@ -9,6 +9,7 @@ import ( |
| 9 | 9 |
|
| 10 | 10 |
Cli "github.com/docker/docker/cli" |
| 11 | 11 |
"github.com/docker/docker/pkg/jsonmessage" |
| 12 |
+ // FIXME migrate to docker/distribution/reference |
|
| 12 | 13 |
"github.com/docker/docker/reference" |
| 13 | 14 |
"github.com/docker/docker/registry" |
| 14 | 15 |
runconfigopts "github.com/docker/docker/runconfig/opts" |
| ... | ... |
@@ -24,14 +25,6 @@ func (cli *DockerCli) pullImage(image string, out io.Writer) error {
|
| 24 | 24 |
return err |
| 25 | 25 |
} |
| 26 | 26 |
|
| 27 |
- var tag string |
|
| 28 |
- switch x := reference.WithDefaultTag(ref).(type) {
|
|
| 29 |
- case reference.Canonical: |
|
| 30 |
- tag = x.Digest().String() |
|
| 31 |
- case reference.NamedTagged: |
|
| 32 |
- tag = x.Tag() |
|
| 33 |
- } |
|
| 34 |
- |
|
| 35 | 27 |
// Resolve the Repository name from fqn to RepositoryInfo |
| 36 | 28 |
repoInfo, err := registry.ParseRepositoryInfo(ref) |
| 37 | 29 |
if err != nil {
|
| ... | ... |
@@ -45,12 +38,10 @@ func (cli *DockerCli) pullImage(image string, out io.Writer) error {
|
| 45 | 45 |
} |
| 46 | 46 |
|
| 47 | 47 |
options := types.ImageCreateOptions{
|
| 48 |
- Parent: ref.Name(), |
|
| 49 |
- Tag: tag, |
|
| 50 | 48 |
RegistryAuth: encodedAuth, |
| 51 | 49 |
} |
| 52 | 50 |
|
| 53 |
- responseBody, err := cli.client.ImageCreate(context.Background(), options) |
|
| 51 |
+ responseBody, err := cli.client.ImageCreate(context.Background(), image, options) |
|
| 54 | 52 |
if err != nil {
|
| 55 | 53 |
return err |
| 56 | 54 |
} |
| ... | ... |
@@ -21,8 +21,9 @@ func (cli *DockerCli) CmdExec(args ...string) error {
|
| 21 | 21 |
detachKeys := cmd.String([]string{"-detach-keys"}, "", "Override the key sequence for detaching a container")
|
| 22 | 22 |
|
| 23 | 23 |
execConfig, err := ParseExec(cmd, args) |
| 24 |
+ container := cmd.Arg(0) |
|
| 24 | 25 |
// just in case the ParseExec does not exit |
| 25 |
- if execConfig.Container == "" || err != nil {
|
|
| 26 |
+ if container == "" || err != nil {
|
|
| 26 | 27 |
return Cli.StatusError{StatusCode: 1}
|
| 27 | 28 |
} |
| 28 | 29 |
|
| ... | ... |
@@ -33,7 +34,7 @@ func (cli *DockerCli) CmdExec(args ...string) error {
|
| 33 | 33 |
// Send client escape keys |
| 34 | 34 |
execConfig.DetachKeys = cli.configFile.DetachKeys |
| 35 | 35 |
|
| 36 |
- response, err := cli.client.ContainerExecCreate(context.Background(), *execConfig) |
|
| 36 |
+ response, err := cli.client.ContainerExecCreate(context.Background(), container, *execConfig) |
|
| 37 | 37 |
if err != nil {
|
| 38 | 38 |
return err |
| 39 | 39 |
} |
| ... | ... |
@@ -128,13 +129,11 @@ func ParseExec(cmd *flag.FlagSet, args []string) (*types.ExecConfig, error) {
|
| 128 | 128 |
flUser = cmd.String([]string{"u", "-user"}, "", "Username or UID (format: <name|uid>[:<group|gid>])")
|
| 129 | 129 |
flPrivileged = cmd.Bool([]string{"-privileged"}, false, "Give extended privileges to the command")
|
| 130 | 130 |
execCmd []string |
| 131 |
- container string |
|
| 132 | 131 |
) |
| 133 | 132 |
cmd.Require(flag.Min, 2) |
| 134 | 133 |
if err := cmd.ParseFlags(args, true); err != nil {
|
| 135 | 134 |
return nil, err |
| 136 | 135 |
} |
| 137 |
- container = cmd.Arg(0) |
|
| 138 | 136 |
parsedArgs := cmd.Args() |
| 139 | 137 |
execCmd = parsedArgs[1:] |
| 140 | 138 |
|
| ... | ... |
@@ -143,7 +142,6 @@ func ParseExec(cmd *flag.FlagSet, args []string) (*types.ExecConfig, error) {
|
| 143 | 143 |
Privileged: *flPrivileged, |
| 144 | 144 |
Tty: *flTty, |
| 145 | 145 |
Cmd: execCmd, |
| 146 |
- Container: container, |
|
| 147 | 146 |
Detach: *flDetach, |
| 148 | 147 |
} |
| 149 | 148 |
|
| ... | ... |
@@ -23,7 +23,6 @@ func TestParseExec(t *testing.T) {
|
| 23 | 23 |
&arguments{
|
| 24 | 24 |
[]string{"container", "command"},
|
| 25 | 25 |
}: {
|
| 26 |
- Container: "container", |
|
| 27 | 26 |
Cmd: []string{"command"},
|
| 28 | 27 |
AttachStdout: true, |
| 29 | 28 |
AttachStderr: true, |
| ... | ... |
@@ -31,7 +30,6 @@ func TestParseExec(t *testing.T) {
|
| 31 | 31 |
&arguments{
|
| 32 | 32 |
[]string{"container", "command1", "command2"},
|
| 33 | 33 |
}: {
|
| 34 |
- Container: "container", |
|
| 35 | 34 |
Cmd: []string{"command1", "command2"},
|
| 36 | 35 |
AttachStdout: true, |
| 37 | 36 |
AttachStderr: true, |
| ... | ... |
@@ -44,7 +42,6 @@ func TestParseExec(t *testing.T) {
|
| 44 | 44 |
AttachStdout: true, |
| 45 | 45 |
AttachStderr: true, |
| 46 | 46 |
Tty: true, |
| 47 |
- Container: "container", |
|
| 48 | 47 |
Cmd: []string{"command"},
|
| 49 | 48 |
}, |
| 50 | 49 |
&arguments{
|
| ... | ... |
@@ -54,7 +51,6 @@ func TestParseExec(t *testing.T) {
|
| 54 | 54 |
AttachStdout: false, |
| 55 | 55 |
AttachStderr: false, |
| 56 | 56 |
Detach: true, |
| 57 |
- Container: "container", |
|
| 58 | 57 |
Cmd: []string{"command"},
|
| 59 | 58 |
}, |
| 60 | 59 |
&arguments{
|
| ... | ... |
@@ -65,7 +61,6 @@ func TestParseExec(t *testing.T) {
|
| 65 | 65 |
AttachStderr: false, |
| 66 | 66 |
Detach: true, |
| 67 | 67 |
Tty: true, |
| 68 |
- Container: "container", |
|
| 69 | 68 |
Cmd: []string{"command"},
|
| 70 | 69 |
}, |
| 71 | 70 |
} |
| ... | ... |
@@ -103,9 +98,6 @@ func compareExecConfig(config1 *types.ExecConfig, config2 *types.ExecConfig) boo |
| 103 | 103 |
if config1.AttachStdout != config2.AttachStdout {
|
| 104 | 104 |
return false |
| 105 | 105 |
} |
| 106 |
- if config1.Container != config2.Container {
|
|
| 107 |
- return false |
|
| 108 |
- } |
|
| 109 | 106 |
if config1.Detach != config2.Detach {
|
| 110 | 107 |
return false |
| 111 | 108 |
} |
| ... | ... |
@@ -12,7 +12,6 @@ import ( |
| 12 | 12 |
"github.com/docker/docker/pkg/jsonmessage" |
| 13 | 13 |
flag "github.com/docker/docker/pkg/mflag" |
| 14 | 14 |
"github.com/docker/docker/pkg/urlutil" |
| 15 |
- "github.com/docker/docker/reference" |
|
| 16 | 15 |
"github.com/docker/engine-api/types" |
| 17 | 16 |
) |
| 18 | 17 |
|
| ... | ... |
@@ -31,26 +30,20 @@ func (cli *DockerCli) CmdImport(args ...string) error {
|
| 31 | 31 |
cmd.ParseFlags(args, true) |
| 32 | 32 |
|
| 33 | 33 |
var ( |
| 34 |
- in io.Reader |
|
| 35 |
- tag string |
|
| 36 |
- src = cmd.Arg(0) |
|
| 37 |
- srcName = src |
|
| 38 |
- repository = cmd.Arg(1) |
|
| 39 |
- changes = flChanges.GetAll() |
|
| 34 |
+ in io.Reader |
|
| 35 |
+ tag string |
|
| 36 |
+ src = cmd.Arg(0) |
|
| 37 |
+ srcName = src |
|
| 38 |
+ ref = cmd.Arg(1) |
|
| 39 |
+ changes = flChanges.GetAll() |
|
| 40 | 40 |
) |
| 41 | 41 |
|
| 42 | 42 |
if cmd.NArg() == 3 {
|
| 43 |
+ // FIXME(vdemeester) Which version has this been deprecated ? should we remove it ? |
|
| 43 | 44 |
fmt.Fprintf(cli.err, "[DEPRECATED] The format 'file|URL|- [REPOSITORY [TAG]]' has been deprecated. Please use file|URL|- [REPOSITORY[:TAG]]\n") |
| 44 | 45 |
tag = cmd.Arg(2) |
| 45 | 46 |
} |
| 46 | 47 |
|
| 47 |
- if repository != "" {
|
|
| 48 |
- //Check if the given image name can be resolved |
|
| 49 |
- if _, err := reference.ParseNamed(repository); err != nil {
|
|
| 50 |
- return err |
|
| 51 |
- } |
|
| 52 |
- } |
|
| 53 |
- |
|
| 54 | 48 |
if src == "-" {
|
| 55 | 49 |
in = cli.in |
| 56 | 50 |
} else if !urlutil.IsURL(src) {
|
| ... | ... |
@@ -63,16 +56,18 @@ func (cli *DockerCli) CmdImport(args ...string) error {
|
| 63 | 63 |
in = file |
| 64 | 64 |
} |
| 65 | 65 |
|
| 66 |
+ source := types.ImageImportSource{
|
|
| 67 |
+ Source: in, |
|
| 68 |
+ SourceName: srcName, |
|
| 69 |
+ } |
|
| 70 |
+ |
|
| 66 | 71 |
options := types.ImageImportOptions{
|
| 67 |
- Source: in, |
|
| 68 |
- SourceName: srcName, |
|
| 69 |
- RepositoryName: repository, |
|
| 70 |
- Message: *message, |
|
| 71 |
- Tag: tag, |
|
| 72 |
- Changes: changes, |
|
| 72 |
+ Message: *message, |
|
| 73 |
+ Tag: tag, |
|
| 74 |
+ Changes: changes, |
|
| 73 | 75 |
} |
| 74 | 76 |
|
| 75 |
- responseBody, err := cli.client.ImageImport(context.Background(), options) |
|
| 77 |
+ responseBody, err := cli.client.ImageImport(context.Background(), source, ref, options) |
|
| 76 | 78 |
if err != nil {
|
| 77 | 79 |
return err |
| 78 | 80 |
} |
| ... | ... |
@@ -42,15 +42,14 @@ func (cli *DockerCli) CmdLogs(args ...string) error {
|
| 42 | 42 |
} |
| 43 | 43 |
|
| 44 | 44 |
options := types.ContainerLogsOptions{
|
| 45 |
- ContainerID: name, |
|
| 46 |
- ShowStdout: true, |
|
| 47 |
- ShowStderr: true, |
|
| 48 |
- Since: *since, |
|
| 49 |
- Timestamps: *times, |
|
| 50 |
- Follow: *follow, |
|
| 51 |
- Tail: *tail, |
|
| 45 |
+ ShowStdout: true, |
|
| 46 |
+ ShowStderr: true, |
|
| 47 |
+ Since: *since, |
|
| 48 |
+ Timestamps: *times, |
|
| 49 |
+ Follow: *follow, |
|
| 50 |
+ Tail: *tail, |
|
| 52 | 51 |
} |
| 53 |
- responseBody, err := cli.client.ContainerLogs(context.Background(), options) |
|
| 52 |
+ responseBody, err := cli.client.ContainerLogs(context.Background(), name, options) |
|
| 54 | 53 |
if err != nil {
|
| 55 | 54 |
return err |
| 56 | 55 |
} |
| ... | ... |
@@ -77,7 +77,6 @@ func (cli *DockerCli) CmdNetworkCreate(args ...string) error {
|
| 77 | 77 |
|
| 78 | 78 |
// Construct network create request body |
| 79 | 79 |
nc := types.NetworkCreate{
|
| 80 |
- Name: cmd.Arg(0), |
|
| 81 | 80 |
Driver: driver, |
| 82 | 81 |
IPAM: network.IPAM{Driver: *flIpamDriver, Config: ipamCfg, Options: flIpamOpt.GetAll()},
|
| 83 | 82 |
Options: flOpts.GetAll(), |
| ... | ... |
@@ -87,7 +86,7 @@ func (cli *DockerCli) CmdNetworkCreate(args ...string) error {
|
| 87 | 87 |
Labels: runconfigopts.ConvertKVStringsToMap(flLabels.GetAll()), |
| 88 | 88 |
} |
| 89 | 89 |
|
| 90 |
- resp, err := cli.client.NetworkCreate(context.Background(), nc) |
|
| 90 |
+ resp, err := cli.client.NetworkCreate(context.Background(), cmd.Arg(0), nc) |
|
| 91 | 91 |
if err != nil {
|
| 92 | 92 |
return err |
| 93 | 93 |
} |
| ... | ... |
@@ -11,7 +11,6 @@ import ( |
| 11 | 11 |
flag "github.com/docker/docker/pkg/mflag" |
| 12 | 12 |
"github.com/docker/docker/reference" |
| 13 | 13 |
"github.com/docker/docker/registry" |
| 14 |
- "github.com/docker/engine-api/client" |
|
| 15 | 14 |
"github.com/docker/engine-api/types" |
| 16 | 15 |
) |
| 17 | 16 |
|
| ... | ... |
@@ -48,7 +47,7 @@ func (cli *DockerCli) CmdPull(args ...string) error {
|
| 48 | 48 |
tag = x.Tag() |
| 49 | 49 |
} |
| 50 | 50 |
|
| 51 |
- ref := registry.ParseReference(tag) |
|
| 51 |
+ registryRef := registry.ParseReference(tag) |
|
| 52 | 52 |
|
| 53 | 53 |
// Resolve the Repository name from fqn to RepositoryInfo |
| 54 | 54 |
repoInfo, err := registry.ParseRepositoryInfo(distributionRef) |
| ... | ... |
@@ -59,27 +58,26 @@ func (cli *DockerCli) CmdPull(args ...string) error {
|
| 59 | 59 |
authConfig := cli.resolveAuthConfig(repoInfo.Index) |
| 60 | 60 |
requestPrivilege := cli.registryAuthenticationPrivilegedFunc(repoInfo.Index, "pull") |
| 61 | 61 |
|
| 62 |
- if isTrusted() && !ref.HasDigest() {
|
|
| 62 |
+ if isTrusted() && !registryRef.HasDigest() {
|
|
| 63 | 63 |
// Check if tag is digest |
| 64 |
- return cli.trustedPull(repoInfo, ref, authConfig, requestPrivilege) |
|
| 64 |
+ return cli.trustedPull(repoInfo, registryRef, authConfig, requestPrivilege) |
|
| 65 | 65 |
} |
| 66 | 66 |
|
| 67 |
- return cli.imagePullPrivileged(authConfig, distributionRef.String(), "", requestPrivilege) |
|
| 67 |
+ return cli.imagePullPrivileged(authConfig, distributionRef.String(), requestPrivilege) |
|
| 68 | 68 |
} |
| 69 | 69 |
|
| 70 |
-func (cli *DockerCli) imagePullPrivileged(authConfig types.AuthConfig, imageID, tag string, requestPrivilege client.RequestPrivilegeFunc) error {
|
|
| 70 |
+func (cli *DockerCli) imagePullPrivileged(authConfig types.AuthConfig, ref string, requestPrivilege types.RequestPrivilegeFunc) error {
|
|
| 71 | 71 |
|
| 72 | 72 |
encodedAuth, err := encodeAuthToBase64(authConfig) |
| 73 | 73 |
if err != nil {
|
| 74 | 74 |
return err |
| 75 | 75 |
} |
| 76 | 76 |
options := types.ImagePullOptions{
|
| 77 |
- ImageID: imageID, |
|
| 78 |
- Tag: tag, |
|
| 79 |
- RegistryAuth: encodedAuth, |
|
| 77 |
+ RegistryAuth: encodedAuth, |
|
| 78 |
+ PrivilegeFunc: requestPrivilege, |
|
| 80 | 79 |
} |
| 81 | 80 |
|
| 82 |
- responseBody, err := cli.client.ImagePull(context.Background(), options, requestPrivilege) |
|
| 81 |
+ responseBody, err := cli.client.ImagePull(context.Background(), ref, options) |
|
| 83 | 82 |
if err != nil {
|
| 84 | 83 |
return err |
| 85 | 84 |
} |
| ... | ... |
@@ -1,7 +1,6 @@ |
| 1 | 1 |
package client |
| 2 | 2 |
|
| 3 | 3 |
import ( |
| 4 |
- "errors" |
|
| 5 | 4 |
"io" |
| 6 | 5 |
|
| 7 | 6 |
"golang.org/x/net/context" |
| ... | ... |
@@ -11,7 +10,6 @@ import ( |
| 11 | 11 |
flag "github.com/docker/docker/pkg/mflag" |
| 12 | 12 |
"github.com/docker/docker/reference" |
| 13 | 13 |
"github.com/docker/docker/registry" |
| 14 |
- "github.com/docker/engine-api/client" |
|
| 15 | 14 |
"github.com/docker/engine-api/types" |
| 16 | 15 |
) |
| 17 | 16 |
|
| ... | ... |
@@ -30,14 +28,6 @@ func (cli *DockerCli) CmdPush(args ...string) error {
|
| 30 | 30 |
return err |
| 31 | 31 |
} |
| 32 | 32 |
|
| 33 |
- var tag string |
|
| 34 |
- switch x := ref.(type) {
|
|
| 35 |
- case reference.Canonical: |
|
| 36 |
- return errors.New("cannot push a digest reference")
|
|
| 37 |
- case reference.NamedTagged: |
|
| 38 |
- tag = x.Tag() |
|
| 39 |
- } |
|
| 40 |
- |
|
| 41 | 33 |
// Resolve the Repository name from fqn to RepositoryInfo |
| 42 | 34 |
repoInfo, err := registry.ParseRepositoryInfo(ref) |
| 43 | 35 |
if err != nil {
|
| ... | ... |
@@ -48,10 +38,10 @@ func (cli *DockerCli) CmdPush(args ...string) error {
|
| 48 | 48 |
|
| 49 | 49 |
requestPrivilege := cli.registryAuthenticationPrivilegedFunc(repoInfo.Index, "push") |
| 50 | 50 |
if isTrusted() {
|
| 51 |
- return cli.trustedPush(repoInfo, tag, authConfig, requestPrivilege) |
|
| 51 |
+ return cli.trustedPush(repoInfo, ref, authConfig, requestPrivilege) |
|
| 52 | 52 |
} |
| 53 | 53 |
|
| 54 |
- responseBody, err := cli.imagePushPrivileged(authConfig, ref.Name(), tag, requestPrivilege) |
|
| 54 |
+ responseBody, err := cli.imagePushPrivileged(authConfig, ref.String(), requestPrivilege) |
|
| 55 | 55 |
if err != nil {
|
| 56 | 56 |
return err |
| 57 | 57 |
} |
| ... | ... |
@@ -61,16 +51,15 @@ func (cli *DockerCli) CmdPush(args ...string) error {
|
| 61 | 61 |
return jsonmessage.DisplayJSONMessagesStream(responseBody, cli.out, cli.outFd, cli.isTerminalOut, nil) |
| 62 | 62 |
} |
| 63 | 63 |
|
| 64 |
-func (cli *DockerCli) imagePushPrivileged(authConfig types.AuthConfig, imageID, tag string, requestPrivilege client.RequestPrivilegeFunc) (io.ReadCloser, error) {
|
|
| 64 |
+func (cli *DockerCli) imagePushPrivileged(authConfig types.AuthConfig, ref string, requestPrivilege types.RequestPrivilegeFunc) (io.ReadCloser, error) {
|
|
| 65 | 65 |
encodedAuth, err := encodeAuthToBase64(authConfig) |
| 66 | 66 |
if err != nil {
|
| 67 | 67 |
return nil, err |
| 68 | 68 |
} |
| 69 | 69 |
options := types.ImagePushOptions{
|
| 70 |
- ImageID: imageID, |
|
| 71 |
- Tag: tag, |
|
| 72 |
- RegistryAuth: encodedAuth, |
|
| 70 |
+ RegistryAuth: encodedAuth, |
|
| 71 |
+ PrivilegeFunc: requestPrivilege, |
|
| 73 | 72 |
} |
| 74 | 73 |
|
| 75 |
- return cli.client.ImagePush(context.Background(), options, requestPrivilege) |
|
| 74 |
+ return cli.client.ImagePush(context.Background(), ref, options) |
|
| 76 | 75 |
} |
| ... | ... |
@@ -42,14 +42,13 @@ func (cli *DockerCli) CmdRm(args ...string) error {
|
| 42 | 42 |
return nil |
| 43 | 43 |
} |
| 44 | 44 |
|
| 45 |
-func (cli *DockerCli) removeContainer(containerID string, removeVolumes, removeLinks, force bool) error {
|
|
| 45 |
+func (cli *DockerCli) removeContainer(container string, removeVolumes, removeLinks, force bool) error {
|
|
| 46 | 46 |
options := types.ContainerRemoveOptions{
|
| 47 |
- ContainerID: containerID, |
|
| 48 | 47 |
RemoveVolumes: removeVolumes, |
| 49 | 48 |
RemoveLinks: removeLinks, |
| 50 | 49 |
Force: force, |
| 51 | 50 |
} |
| 52 |
- if err := cli.client.ContainerRemove(context.Background(), options); err != nil {
|
|
| 51 |
+ if err := cli.client.ContainerRemove(context.Background(), container, options); err != nil {
|
|
| 53 | 52 |
return err |
| 54 | 53 |
} |
| 55 | 54 |
return nil |
| ... | ... |
@@ -32,14 +32,13 @@ func (cli *DockerCli) CmdRmi(args ...string) error {
|
| 32 | 32 |
} |
| 33 | 33 |
|
| 34 | 34 |
var errs []string |
| 35 |
- for _, name := range cmd.Args() {
|
|
| 35 |
+ for _, image := range cmd.Args() {
|
|
| 36 | 36 |
options := types.ImageRemoveOptions{
|
| 37 |
- ImageID: name, |
|
| 38 | 37 |
Force: *force, |
| 39 | 38 |
PruneChildren: !*noprune, |
| 40 | 39 |
} |
| 41 | 40 |
|
| 42 |
- dels, err := cli.client.ImageRemove(context.Background(), options) |
|
| 41 |
+ dels, err := cli.client.ImageRemove(context.Background(), image, options) |
|
| 43 | 42 |
if err != nil {
|
| 44 | 43 |
errs = append(errs, err.Error()) |
| 45 | 44 |
} else {
|
| ... | ... |
@@ -198,15 +198,14 @@ func (cli *DockerCli) CmdRun(args ...string) error {
|
| 198 | 198 |
} |
| 199 | 199 |
|
| 200 | 200 |
options := types.ContainerAttachOptions{
|
| 201 |
- ContainerID: createResponse.ID, |
|
| 202 |
- Stream: true, |
|
| 203 |
- Stdin: config.AttachStdin, |
|
| 204 |
- Stdout: config.AttachStdout, |
|
| 205 |
- Stderr: config.AttachStderr, |
|
| 206 |
- DetachKeys: cli.configFile.DetachKeys, |
|
| 201 |
+ Stream: true, |
|
| 202 |
+ Stdin: config.AttachStdin, |
|
| 203 |
+ Stdout: config.AttachStdout, |
|
| 204 |
+ Stderr: config.AttachStderr, |
|
| 205 |
+ DetachKeys: cli.configFile.DetachKeys, |
|
| 207 | 206 |
} |
| 208 | 207 |
|
| 209 |
- resp, errAttach := cli.client.ContainerAttach(context.Background(), options) |
|
| 208 |
+ resp, errAttach := cli.client.ContainerAttach(context.Background(), createResponse.ID, options) |
|
| 210 | 209 |
if errAttach != nil && errAttach != httputil.ErrPersistEOF {
|
| 211 | 210 |
// ContainerAttach returns an ErrPersistEOF (connection closed) |
| 212 | 211 |
// means server met an error and put it in Hijacked connection |
| ... | ... |
@@ -47,11 +47,11 @@ func (cli *DockerCli) CmdSearch(args ...string) error {
|
| 47 | 47 |
} |
| 48 | 48 |
|
| 49 | 49 |
options := types.ImageSearchOptions{
|
| 50 |
- Term: name, |
|
| 51 |
- RegistryAuth: encodedAuth, |
|
| 50 |
+ RegistryAuth: encodedAuth, |
|
| 51 |
+ PrivilegeFunc: requestPrivilege, |
|
| 52 | 52 |
} |
| 53 | 53 |
|
| 54 |
- unorderedResults, err := cli.client.ImageSearch(context.Background(), options, requestPrivilege) |
|
| 54 |
+ unorderedResults, err := cli.client.ImageSearch(context.Background(), name, options) |
|
| 55 | 55 |
if err != nil {
|
| 56 | 56 |
return err |
| 57 | 57 |
} |
| ... | ... |
@@ -65,14 +65,14 @@ func (cli *DockerCli) CmdStart(args ...string) error {
|
| 65 | 65 |
} |
| 66 | 66 |
|
| 67 | 67 |
// 2. Attach to the container. |
| 68 |
- containerID := cmd.Arg(0) |
|
| 69 |
- c, err := cli.client.ContainerInspect(context.Background(), containerID) |
|
| 68 |
+ container := cmd.Arg(0) |
|
| 69 |
+ c, err := cli.client.ContainerInspect(context.Background(), container) |
|
| 70 | 70 |
if err != nil {
|
| 71 | 71 |
return err |
| 72 | 72 |
} |
| 73 | 73 |
|
| 74 | 74 |
if !c.Config.Tty {
|
| 75 |
- sigc := cli.forwardAllSignals(containerID) |
|
| 75 |
+ sigc := cli.forwardAllSignals(container) |
|
| 76 | 76 |
defer signal.StopCatch(sigc) |
| 77 | 77 |
} |
| 78 | 78 |
|
| ... | ... |
@@ -81,12 +81,11 @@ func (cli *DockerCli) CmdStart(args ...string) error {
|
| 81 | 81 |
} |
| 82 | 82 |
|
| 83 | 83 |
options := types.ContainerAttachOptions{
|
| 84 |
- ContainerID: containerID, |
|
| 85 |
- Stream: true, |
|
| 86 |
- Stdin: *openStdin && c.Config.OpenStdin, |
|
| 87 |
- Stdout: true, |
|
| 88 |
- Stderr: true, |
|
| 89 |
- DetachKeys: cli.configFile.DetachKeys, |
|
| 84 |
+ Stream: true, |
|
| 85 |
+ Stdin: *openStdin && c.Config.OpenStdin, |
|
| 86 |
+ Stdout: true, |
|
| 87 |
+ Stderr: true, |
|
| 88 |
+ DetachKeys: cli.configFile.DetachKeys, |
|
| 90 | 89 |
} |
| 91 | 90 |
|
| 92 | 91 |
var in io.ReadCloser |
| ... | ... |
@@ -95,7 +94,7 @@ func (cli *DockerCli) CmdStart(args ...string) error {
|
| 95 | 95 |
in = cli.in |
| 96 | 96 |
} |
| 97 | 97 |
|
| 98 |
- resp, errAttach := cli.client.ContainerAttach(context.Background(), options) |
|
| 98 |
+ resp, errAttach := cli.client.ContainerAttach(context.Background(), container, options) |
|
| 99 | 99 |
if errAttach != nil && errAttach != httputil.ErrPersistEOF {
|
| 100 | 100 |
// ContainerAttach return an ErrPersistEOF (connection closed) |
| 101 | 101 |
// means server met an error and put it in Hijacked connection |
| ... | ... |
@@ -113,7 +112,7 @@ func (cli *DockerCli) CmdStart(args ...string) error {
|
| 113 | 113 |
}) |
| 114 | 114 |
|
| 115 | 115 |
// 3. Start the container. |
| 116 |
- if err := cli.client.ContainerStart(context.Background(), containerID); err != nil {
|
|
| 116 |
+ if err := cli.client.ContainerStart(context.Background(), container); err != nil {
|
|
| 117 | 117 |
cancelFun() |
| 118 | 118 |
<-cErr |
| 119 | 119 |
return err |
| ... | ... |
@@ -121,14 +120,14 @@ func (cli *DockerCli) CmdStart(args ...string) error {
|
| 121 | 121 |
|
| 122 | 122 |
// 4. Wait for attachment to break. |
| 123 | 123 |
if c.Config.Tty && cli.isTerminalOut {
|
| 124 |
- if err := cli.monitorTtySize(containerID, false); err != nil {
|
|
| 124 |
+ if err := cli.monitorTtySize(container, false); err != nil {
|
|
| 125 | 125 |
fmt.Fprintf(cli.err, "Error monitoring TTY size: %s\n", err) |
| 126 | 126 |
} |
| 127 | 127 |
} |
| 128 | 128 |
if attchErr := <-cErr; attchErr != nil {
|
| 129 | 129 |
return attchErr |
| 130 | 130 |
} |
| 131 |
- _, status, err := getExitCode(cli, containerID) |
|
| 131 |
+ _, status, err := getExitCode(cli, container) |
|
| 132 | 132 |
if err != nil {
|
| 133 | 133 |
return err |
| 134 | 134 |
} |
| ... | ... |
@@ -144,14 +143,14 @@ func (cli *DockerCli) CmdStart(args ...string) error {
|
| 144 | 144 |
return nil |
| 145 | 145 |
} |
| 146 | 146 |
|
| 147 |
-func (cli *DockerCli) startContainersWithoutAttachments(containerIDs []string) error {
|
|
| 147 |
+func (cli *DockerCli) startContainersWithoutAttachments(containers []string) error {
|
|
| 148 | 148 |
var failedContainers []string |
| 149 |
- for _, containerID := range containerIDs {
|
|
| 150 |
- if err := cli.client.ContainerStart(context.Background(), containerID); err != nil {
|
|
| 149 |
+ for _, container := range containers {
|
|
| 150 |
+ if err := cli.client.ContainerStart(context.Background(), container); err != nil {
|
|
| 151 | 151 |
fmt.Fprintf(cli.err, "%s\n", err) |
| 152 |
- failedContainers = append(failedContainers, containerID) |
|
| 152 |
+ failedContainers = append(failedContainers, container) |
|
| 153 | 153 |
} else {
|
| 154 |
- fmt.Fprintf(cli.out, "%s\n", containerID) |
|
| 154 |
+ fmt.Fprintf(cli.out, "%s\n", container) |
|
| 155 | 155 |
} |
| 156 | 156 |
} |
| 157 | 157 |
|
| ... | ... |
@@ -1,13 +1,10 @@ |
| 1 | 1 |
package client |
| 2 | 2 |
|
| 3 | 3 |
import ( |
| 4 |
- "errors" |
|
| 5 |
- |
|
| 6 | 4 |
"golang.org/x/net/context" |
| 7 | 5 |
|
| 8 | 6 |
Cli "github.com/docker/docker/cli" |
| 9 | 7 |
flag "github.com/docker/docker/pkg/mflag" |
| 10 |
- "github.com/docker/docker/reference" |
|
| 11 | 8 |
"github.com/docker/engine-api/types" |
| 12 | 9 |
) |
| 13 | 10 |
|
| ... | ... |
@@ -21,26 +18,9 @@ func (cli *DockerCli) CmdTag(args ...string) error {
|
| 21 | 21 |
|
| 22 | 22 |
cmd.ParseFlags(args, true) |
| 23 | 23 |
|
| 24 |
- ref, err := reference.ParseNamed(cmd.Arg(1)) |
|
| 25 |
- if err != nil {
|
|
| 26 |
- return err |
|
| 27 |
- } |
|
| 28 |
- |
|
| 29 |
- if _, isCanonical := ref.(reference.Canonical); isCanonical {
|
|
| 30 |
- return errors.New("refusing to create a tag with a digest reference")
|
|
| 31 |
- } |
|
| 32 |
- |
|
| 33 |
- var tag string |
|
| 34 |
- if tagged, isTagged := ref.(reference.NamedTagged); isTagged {
|
|
| 35 |
- tag = tagged.Tag() |
|
| 36 |
- } |
|
| 37 |
- |
|
| 38 | 24 |
options := types.ImageTagOptions{
|
| 39 |
- ImageID: cmd.Arg(0), |
|
| 40 |
- RepositoryName: ref.Name(), |
|
| 41 |
- Tag: tag, |
|
| 42 |
- Force: *force, |
|
| 25 |
+ Force: *force, |
|
| 43 | 26 |
} |
| 44 | 27 |
|
| 45 |
- return cli.client.ImageTag(context.Background(), options) |
|
| 28 |
+ return cli.client.ImageTag(context.Background(), cmd.Arg(0), cmd.Arg(1), options) |
|
| 46 | 29 |
} |
| ... | ... |
@@ -27,7 +27,6 @@ import ( |
| 27 | 27 |
flag "github.com/docker/docker/pkg/mflag" |
| 28 | 28 |
"github.com/docker/docker/reference" |
| 29 | 29 |
"github.com/docker/docker/registry" |
| 30 |
- apiclient "github.com/docker/engine-api/client" |
|
| 31 | 30 |
"github.com/docker/engine-api/types" |
| 32 | 31 |
registrytypes "github.com/docker/engine-api/types/registry" |
| 33 | 32 |
"github.com/docker/go-connections/tlsconfig" |
| ... | ... |
@@ -280,13 +279,10 @@ func (cli *DockerCli) tagTrusted(trustedRef reference.Canonical, ref reference.N |
| 280 | 280 |
fmt.Fprintf(cli.out, "Tagging %s as %s\n", trustedRef.String(), ref.String()) |
| 281 | 281 |
|
| 282 | 282 |
options := types.ImageTagOptions{
|
| 283 |
- ImageID: trustedRef.String(), |
|
| 284 |
- RepositoryName: trustedRef.Name(), |
|
| 285 |
- Tag: ref.Tag(), |
|
| 286 |
- Force: true, |
|
| 283 |
+ Force: true, |
|
| 287 | 284 |
} |
| 288 | 285 |
|
| 289 |
- return cli.client.ImageTag(context.Background(), options) |
|
| 286 |
+ return cli.client.ImageTag(context.Background(), trustedRef.String(), ref.String(), options) |
|
| 290 | 287 |
} |
| 291 | 288 |
|
| 292 | 289 |
func notaryError(repoName string, err error) error {
|
| ... | ... |
@@ -319,7 +315,7 @@ func notaryError(repoName string, err error) error {
|
| 319 | 319 |
return err |
| 320 | 320 |
} |
| 321 | 321 |
|
| 322 |
-func (cli *DockerCli) trustedPull(repoInfo *registry.RepositoryInfo, ref registry.Reference, authConfig types.AuthConfig, requestPrivilege apiclient.RequestPrivilegeFunc) error {
|
|
| 322 |
+func (cli *DockerCli) trustedPull(repoInfo *registry.RepositoryInfo, ref registry.Reference, authConfig types.AuthConfig, requestPrivilege types.RequestPrivilegeFunc) error {
|
|
| 323 | 323 |
var refs []target |
| 324 | 324 |
|
| 325 | 325 |
notaryRepo, err := cli.getNotaryRepository(repoInfo, authConfig, "pull") |
| ... | ... |
@@ -377,7 +373,11 @@ func (cli *DockerCli) trustedPull(repoInfo *registry.RepositoryInfo, ref registr |
| 377 | 377 |
} |
| 378 | 378 |
fmt.Fprintf(cli.out, "Pull (%d of %d): %s%s@%s\n", i+1, len(refs), repoInfo.Name(), displayTag, r.digest) |
| 379 | 379 |
|
| 380 |
- if err := cli.imagePullPrivileged(authConfig, repoInfo.Name(), r.digest.String(), requestPrivilege); err != nil {
|
|
| 380 |
+ ref, err := reference.WithDigest(repoInfo, r.digest) |
|
| 381 |
+ if err != nil {
|
|
| 382 |
+ return err |
|
| 383 |
+ } |
|
| 384 |
+ if err := cli.imagePullPrivileged(authConfig, ref.String(), requestPrivilege); err != nil {
|
|
| 381 | 385 |
return err |
| 382 | 386 |
} |
| 383 | 387 |
|
| ... | ... |
@@ -399,8 +399,8 @@ func (cli *DockerCli) trustedPull(repoInfo *registry.RepositoryInfo, ref registr |
| 399 | 399 |
return nil |
| 400 | 400 |
} |
| 401 | 401 |
|
| 402 |
-func (cli *DockerCli) trustedPush(repoInfo *registry.RepositoryInfo, tag string, authConfig types.AuthConfig, requestPrivilege apiclient.RequestPrivilegeFunc) error {
|
|
| 403 |
- responseBody, err := cli.imagePushPrivileged(authConfig, repoInfo.Name(), tag, requestPrivilege) |
|
| 402 |
+func (cli *DockerCli) trustedPush(repoInfo *registry.RepositoryInfo, ref reference.Named, authConfig types.AuthConfig, requestPrivilege types.RequestPrivilegeFunc) error {
|
|
| 403 |
+ responseBody, err := cli.imagePushPrivileged(authConfig, ref.String(), requestPrivilege) |
|
| 404 | 404 |
if err != nil {
|
| 405 | 405 |
return err |
| 406 | 406 |
} |
| ... | ... |
@@ -434,6 +434,14 @@ func (cli *DockerCli) trustedPush(repoInfo *registry.RepositoryInfo, tag string, |
| 434 | 434 |
} |
| 435 | 435 |
} |
| 436 | 436 |
|
| 437 |
+ var tag string |
|
| 438 |
+ switch x := ref.(type) {
|
|
| 439 |
+ case reference.Canonical: |
|
| 440 |
+ return errors.New("cannot push a digest reference")
|
|
| 441 |
+ case reference.NamedTagged: |
|
| 442 |
+ tag = x.Tag() |
|
| 443 |
+ } |
|
| 444 |
+ |
|
| 437 | 445 |
// We want trust signatures to always take an explicit tag, |
| 438 | 446 |
// otherwise it will act as an untrusted push. |
| 439 | 447 |
if tag == "" {
|
| ... | ... |
@@ -46,7 +46,7 @@ func encodeAuthToBase64(authConfig types.AuthConfig) (string, error) {
|
| 46 | 46 |
return base64.URLEncoding.EncodeToString(buf), nil |
| 47 | 47 |
} |
| 48 | 48 |
|
| 49 |
-func (cli *DockerCli) registryAuthenticationPrivilegedFunc(index *registrytypes.IndexInfo, cmdName string) client.RequestPrivilegeFunc {
|
|
| 49 |
+func (cli *DockerCli) registryAuthenticationPrivilegedFunc(index *registrytypes.IndexInfo, cmdName string) types.RequestPrivilegeFunc {
|
|
| 50 | 50 |
return func() (string, error) {
|
| 51 | 51 |
fmt.Fprintf(cli.out, "\nPlease login prior to %s:\n", cmdName) |
| 52 | 52 |
indexServer := registry.GetAuthConfigKey(index) |
| ... | ... |
@@ -69,16 +69,15 @@ func (cli *DockerCli) resizeTtyTo(id string, height, width int, isExec bool) {
|
| 69 | 69 |
} |
| 70 | 70 |
|
| 71 | 71 |
options := types.ResizeOptions{
|
| 72 |
- ID: id, |
|
| 73 | 72 |
Height: height, |
| 74 | 73 |
Width: width, |
| 75 | 74 |
} |
| 76 | 75 |
|
| 77 | 76 |
var err error |
| 78 | 77 |
if isExec {
|
| 79 |
- err = cli.client.ContainerExecResize(context.Background(), options) |
|
| 78 |
+ err = cli.client.ContainerExecResize(context.Background(), id, options) |
|
| 80 | 79 |
} else {
|
| 81 |
- err = cli.client.ContainerResize(context.Background(), options) |
|
| 80 |
+ err = cli.client.ContainerResize(context.Background(), id, options) |
|
| 82 | 81 |
} |
| 83 | 82 |
|
| 84 | 83 |
if err != nil {
|
| ... | ... |
@@ -15,7 +15,7 @@ import ( |
| 15 | 15 |
|
| 16 | 16 |
// execBackend includes functions to implement to provide exec functionality. |
| 17 | 17 |
type execBackend interface {
|
| 18 |
- ContainerExecCreate(config *types.ExecConfig) (string, error) |
|
| 18 |
+ ContainerExecCreate(name string, config *types.ExecConfig) (string, error) |
|
| 19 | 19 |
ContainerExecInspect(id string) (*backend.ExecInspect, error) |
| 20 | 20 |
ContainerExecResize(name string, height, width int) error |
| 21 | 21 |
ContainerExecStart(name string, stdin io.ReadCloser, stdout io.Writer, stderr io.Writer) error |
| ... | ... |
@@ -36,14 +36,13 @@ func (s *containerRouter) postContainerExecCreate(ctx context.Context, w http.Re |
| 36 | 36 |
if err := json.NewDecoder(r.Body).Decode(execConfig); err != nil {
|
| 37 | 37 |
return err |
| 38 | 38 |
} |
| 39 |
- execConfig.Container = name |
|
| 40 | 39 |
|
| 41 | 40 |
if len(execConfig.Cmd) == 0 {
|
| 42 | 41 |
return fmt.Errorf("No exec command specified")
|
| 43 | 42 |
} |
| 44 | 43 |
|
| 45 | 44 |
// Register an instance of Exec in container. |
| 46 |
- id, err := s.backend.ContainerExecCreate(execConfig) |
|
| 45 |
+ id, err := s.backend.ContainerExecCreate(name, execConfig) |
|
| 47 | 46 |
if err != nil {
|
| 48 | 47 |
logrus.Errorf("Error setting up exec command in container %s: %v", name, err)
|
| 49 | 48 |
return err |
| ... | ... |
@@ -14,7 +14,7 @@ type Backend interface {
|
| 14 | 14 |
GetNetworkByName(idName string) (libnetwork.Network, error) |
| 15 | 15 |
GetNetworksByID(partialID string) []libnetwork.Network |
| 16 | 16 |
FilterNetworks(netFilters filters.Args) ([]libnetwork.Network, error) |
| 17 |
- CreateNetwork(types.NetworkCreate) (*types.NetworkCreateResponse, error) |
|
| 17 |
+ CreateNetwork(nc types.NetworkCreateRequest) (*types.NetworkCreateResponse, error) |
|
| 18 | 18 |
ConnectContainerToNetwork(containerName, networkName string, endpointConfig *network.EndpointSettings) error |
| 19 | 19 |
DisconnectContainerFromNetwork(containerName string, network libnetwork.Network, force bool) error |
| 20 | 20 |
DeleteNetwork(name string) error |
| ... | ... |
@@ -51,7 +51,7 @@ func (n *networkRouter) getNetwork(ctx context.Context, w http.ResponseWriter, r |
| 51 | 51 |
} |
| 52 | 52 |
|
| 53 | 53 |
func (n *networkRouter) postNetworkCreate(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
| 54 |
- var create types.NetworkCreate |
|
| 54 |
+ var create types.NetworkCreateRequest |
|
| 55 | 55 |
|
| 56 | 56 |
if err := httputils.ParseForm(r); err != nil {
|
| 57 | 57 |
return err |
| ... | ... |
@@ -88,8 +88,8 @@ func (d *Daemon) getActiveContainer(name string) (*container.Container, error) {
|
| 88 | 88 |
} |
| 89 | 89 |
|
| 90 | 90 |
// ContainerExecCreate sets up an exec in a running container. |
| 91 |
-func (d *Daemon) ContainerExecCreate(config *types.ExecConfig) (string, error) {
|
|
| 92 |
- container, err := d.getActiveContainer(config.Container) |
|
| 91 |
+func (d *Daemon) ContainerExecCreate(name string, config *types.ExecConfig) (string, error) {
|
|
| 92 |
+ container, err := d.getActiveContainer(name) |
|
| 93 | 93 |
if err != nil {
|
| 94 | 94 |
return "", err |
| 95 | 95 |
} |
| ... | ... |
@@ -94,7 +94,7 @@ func (daemon *Daemon) getAllNetworks() []libnetwork.Network {
|
| 94 | 94 |
} |
| 95 | 95 |
|
| 96 | 96 |
// CreateNetwork creates a network with the given name, driver and other optional parameters |
| 97 |
-func (daemon *Daemon) CreateNetwork(create types.NetworkCreate) (*types.NetworkCreateResponse, error) {
|
|
| 97 |
+func (daemon *Daemon) CreateNetwork(create types.NetworkCreateRequest) (*types.NetworkCreateResponse, error) {
|
|
| 98 | 98 |
if runconfig.IsPreDefinedNetwork(create.Name) {
|
| 99 | 99 |
err := fmt.Errorf("%s is a pre-defined network and cannot be created", create.Name)
|
| 100 | 100 |
return nil, errors.NewErrorWithStatusCode(err, http.StatusForbidden) |
| ... | ... |
@@ -28,9 +28,11 @@ func (s *DockerSuite) TestApiNetworkCreateDelete(c *check.C) {
|
| 28 | 28 |
testRequires(c, DaemonIsLinux) |
| 29 | 29 |
// Create a network |
| 30 | 30 |
name := "testnetwork" |
| 31 |
- config := types.NetworkCreate{
|
|
| 32 |
- Name: name, |
|
| 33 |
- CheckDuplicate: true, |
|
| 31 |
+ config := types.NetworkCreateRequest{
|
|
| 32 |
+ Name: name, |
|
| 33 |
+ NetworkCreate: types.NetworkCreate{
|
|
| 34 |
+ CheckDuplicate: true, |
|
| 35 |
+ }, |
|
| 34 | 36 |
} |
| 35 | 37 |
id := createNetwork(c, config, true) |
| 36 | 38 |
c.Assert(isNetworkAvailable(c, name), checker.Equals, true) |
| ... | ... |
@@ -43,13 +45,17 @@ func (s *DockerSuite) TestApiNetworkCreateDelete(c *check.C) {
|
| 43 | 43 |
func (s *DockerSuite) TestApiNetworkCreateCheckDuplicate(c *check.C) {
|
| 44 | 44 |
testRequires(c, DaemonIsLinux) |
| 45 | 45 |
name := "testcheckduplicate" |
| 46 |
- configOnCheck := types.NetworkCreate{
|
|
| 47 |
- Name: name, |
|
| 48 |
- CheckDuplicate: true, |
|
| 46 |
+ configOnCheck := types.NetworkCreateRequest{
|
|
| 47 |
+ Name: name, |
|
| 48 |
+ NetworkCreate: types.NetworkCreate{
|
|
| 49 |
+ CheckDuplicate: true, |
|
| 50 |
+ }, |
|
| 49 | 51 |
} |
| 50 |
- configNotCheck := types.NetworkCreate{
|
|
| 51 |
- Name: name, |
|
| 52 |
- CheckDuplicate: false, |
|
| 52 |
+ configNotCheck := types.NetworkCreateRequest{
|
|
| 53 |
+ Name: name, |
|
| 54 |
+ NetworkCreate: types.NetworkCreate{
|
|
| 55 |
+ CheckDuplicate: false, |
|
| 56 |
+ }, |
|
| 53 | 57 |
} |
| 54 | 58 |
|
| 55 | 59 |
// Creating a new network first |
| ... | ... |
@@ -99,11 +105,13 @@ func (s *DockerSuite) TestApiNetworkInspect(c *check.C) {
|
| 99 | 99 |
Driver: "default", |
| 100 | 100 |
Config: []network.IPAMConfig{{Subnet: "172.28.0.0/16", IPRange: "172.28.5.0/24", Gateway: "172.28.5.254"}},
|
| 101 | 101 |
} |
| 102 |
- config := types.NetworkCreate{
|
|
| 103 |
- Name: "br0", |
|
| 104 |
- Driver: "bridge", |
|
| 105 |
- IPAM: ipam, |
|
| 106 |
- Options: map[string]string{"foo": "bar", "opts": "dopts"},
|
|
| 102 |
+ config := types.NetworkCreateRequest{
|
|
| 103 |
+ Name: "br0", |
|
| 104 |
+ NetworkCreate: types.NetworkCreate{
|
|
| 105 |
+ Driver: "bridge", |
|
| 106 |
+ IPAM: ipam, |
|
| 107 |
+ Options: map[string]string{"foo": "bar", "opts": "dopts"},
|
|
| 108 |
+ }, |
|
| 107 | 109 |
} |
| 108 | 110 |
id0 := createNetwork(c, config, true) |
| 109 | 111 |
c.Assert(isNetworkAvailable(c, "br0"), checker.Equals, true) |
| ... | ... |
@@ -125,7 +133,7 @@ func (s *DockerSuite) TestApiNetworkConnectDisconnect(c *check.C) {
|
| 125 | 125 |
testRequires(c, DaemonIsLinux) |
| 126 | 126 |
// Create test network |
| 127 | 127 |
name := "testnetwork" |
| 128 |
- config := types.NetworkCreate{
|
|
| 128 |
+ config := types.NetworkCreateRequest{
|
|
| 129 | 129 |
Name: name, |
| 130 | 130 |
} |
| 131 | 131 |
id := createNetwork(c, config, true) |
| ... | ... |
@@ -169,10 +177,12 @@ func (s *DockerSuite) TestApiNetworkIpamMultipleBridgeNetworks(c *check.C) {
|
| 169 | 169 |
Driver: "default", |
| 170 | 170 |
Config: []network.IPAMConfig{{Subnet: "192.178.0.0/16", IPRange: "192.178.128.0/17", Gateway: "192.178.138.100"}},
|
| 171 | 171 |
} |
| 172 |
- config0 := types.NetworkCreate{
|
|
| 173 |
- Name: "test0", |
|
| 174 |
- Driver: "bridge", |
|
| 175 |
- IPAM: ipam0, |
|
| 172 |
+ config0 := types.NetworkCreateRequest{
|
|
| 173 |
+ Name: "test0", |
|
| 174 |
+ NetworkCreate: types.NetworkCreate{
|
|
| 175 |
+ Driver: "bridge", |
|
| 176 |
+ IPAM: ipam0, |
|
| 177 |
+ }, |
|
| 176 | 178 |
} |
| 177 | 179 |
id0 := createNetwork(c, config0, true) |
| 178 | 180 |
c.Assert(isNetworkAvailable(c, "test0"), checker.Equals, true) |
| ... | ... |
@@ -182,10 +192,12 @@ func (s *DockerSuite) TestApiNetworkIpamMultipleBridgeNetworks(c *check.C) {
|
| 182 | 182 |
Config: []network.IPAMConfig{{Subnet: "192.178.128.0/17", Gateway: "192.178.128.1"}},
|
| 183 | 183 |
} |
| 184 | 184 |
// test1 bridge network overlaps with test0 |
| 185 |
- config1 := types.NetworkCreate{
|
|
| 186 |
- Name: "test1", |
|
| 187 |
- Driver: "bridge", |
|
| 188 |
- IPAM: ipam1, |
|
| 185 |
+ config1 := types.NetworkCreateRequest{
|
|
| 186 |
+ Name: "test1", |
|
| 187 |
+ NetworkCreate: types.NetworkCreate{
|
|
| 188 |
+ Driver: "bridge", |
|
| 189 |
+ IPAM: ipam1, |
|
| 190 |
+ }, |
|
| 189 | 191 |
} |
| 190 | 192 |
createNetwork(c, config1, false) |
| 191 | 193 |
c.Assert(isNetworkAvailable(c, "test1"), checker.Equals, false) |
| ... | ... |
@@ -195,10 +207,12 @@ func (s *DockerSuite) TestApiNetworkIpamMultipleBridgeNetworks(c *check.C) {
|
| 195 | 195 |
Config: []network.IPAMConfig{{Subnet: "192.169.0.0/16", Gateway: "192.169.100.100"}},
|
| 196 | 196 |
} |
| 197 | 197 |
// test2 bridge network does not overlap |
| 198 |
- config2 := types.NetworkCreate{
|
|
| 199 |
- Name: "test2", |
|
| 200 |
- Driver: "bridge", |
|
| 201 |
- IPAM: ipam2, |
|
| 198 |
+ config2 := types.NetworkCreateRequest{
|
|
| 199 |
+ Name: "test2", |
|
| 200 |
+ NetworkCreate: types.NetworkCreate{
|
|
| 201 |
+ Driver: "bridge", |
|
| 202 |
+ IPAM: ipam2, |
|
| 203 |
+ }, |
|
| 202 | 204 |
} |
| 203 | 205 |
createNetwork(c, config2, true) |
| 204 | 206 |
c.Assert(isNetworkAvailable(c, "test2"), checker.Equals, true) |
| ... | ... |
@@ -209,11 +223,11 @@ func (s *DockerSuite) TestApiNetworkIpamMultipleBridgeNetworks(c *check.C) {
|
| 209 | 209 |
c.Assert(isNetworkAvailable(c, "test1"), checker.Equals, true) |
| 210 | 210 |
|
| 211 | 211 |
// for networks w/o ipam specified, docker will choose proper non-overlapping subnets |
| 212 |
- createNetwork(c, types.NetworkCreate{Name: "test3"}, true)
|
|
| 212 |
+ createNetwork(c, types.NetworkCreateRequest{Name: "test3"}, true)
|
|
| 213 | 213 |
c.Assert(isNetworkAvailable(c, "test3"), checker.Equals, true) |
| 214 |
- createNetwork(c, types.NetworkCreate{Name: "test4"}, true)
|
|
| 214 |
+ createNetwork(c, types.NetworkCreateRequest{Name: "test4"}, true)
|
|
| 215 | 215 |
c.Assert(isNetworkAvailable(c, "test4"), checker.Equals, true) |
| 216 |
- createNetwork(c, types.NetworkCreate{Name: "test5"}, true)
|
|
| 216 |
+ createNetwork(c, types.NetworkCreateRequest{Name: "test5"}, true)
|
|
| 217 | 217 |
c.Assert(isNetworkAvailable(c, "test5"), checker.Equals, true) |
| 218 | 218 |
|
| 219 | 219 |
for i := 1; i < 6; i++ {
|
| ... | ... |
@@ -230,9 +244,11 @@ func (s *DockerSuite) TestApiCreateDeletePredefinedNetworks(c *check.C) {
|
| 230 | 230 |
|
| 231 | 231 |
func createDeletePredefinedNetwork(c *check.C, name string) {
|
| 232 | 232 |
// Create pre-defined network |
| 233 |
- config := types.NetworkCreate{
|
|
| 234 |
- Name: name, |
|
| 235 |
- CheckDuplicate: true, |
|
| 233 |
+ config := types.NetworkCreateRequest{
|
|
| 234 |
+ Name: name, |
|
| 235 |
+ NetworkCreate: types.NetworkCreate{
|
|
| 236 |
+ CheckDuplicate: true, |
|
| 237 |
+ }, |
|
| 236 | 238 |
} |
| 237 | 239 |
shouldSucceed := false |
| 238 | 240 |
createNetwork(c, config, shouldSucceed) |
| ... | ... |
@@ -289,7 +305,7 @@ func getNetworkResource(c *check.C, id string) *types.NetworkResource {
|
| 289 | 289 |
return &nr |
| 290 | 290 |
} |
| 291 | 291 |
|
| 292 |
-func createNetwork(c *check.C, config types.NetworkCreate, shouldSucceed bool) string {
|
|
| 292 |
+func createNetwork(c *check.C, config types.NetworkCreateRequest, shouldSucceed bool) string {
|
|
| 293 | 293 |
status, resp, err := sockRequest("POST", "/networks/create", config)
|
| 294 | 294 |
if !shouldSucceed {
|
| 295 | 295 |
c.Assert(status, checker.Not(checker.Equals), http.StatusCreated) |