Skip to content

Commit c4b596b

Browse files
committed
Add --template-driver option for secrets/configs
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
1 parent a160ad8 commit c4b596b

File tree

5 files changed

+85
-13
lines changed

5 files changed

+85
-13
lines changed

cli/command/config/create.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ import (
1616
)
1717

1818
type createOptions struct {
19-
name string
20-
file string
21-
labels opts.ListOpts
19+
name string
20+
templateDriver string
21+
file string
22+
labels opts.ListOpts
2223
}
2324

2425
func newConfigCreateCommand(dockerCli command.Cli) *cobra.Command {
@@ -38,6 +39,8 @@ func newConfigCreateCommand(dockerCli command.Cli) *cobra.Command {
3839
}
3940
flags := cmd.Flags()
4041
flags.VarP(&createOpts.labels, "label", "l", "Config labels")
42+
flags.StringVar(&createOpts.templateDriver, "template-driver", "", "Template driver")
43+
flags.SetAnnotation("driver", "version", []string{"1.37"})
4144

4245
return cmd
4346
}
@@ -68,7 +71,11 @@ func runConfigCreate(dockerCli command.Cli, options createOptions) error {
6871
},
6972
Data: configData,
7073
}
71-
74+
if options.templateDriver != "" {
75+
spec.Templating = &swarm.Driver{
76+
Name: options.templateDriver,
77+
}
78+
}
7279
r, err := client.ConfigCreate(ctx, spec)
7380
if err != nil {
7481
return err

cli/command/config/create_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,32 @@ func TestConfigCreateWithLabels(t *testing.T) {
105105
assert.NoError(t, cmd.Execute())
106106
assert.Equal(t, "ID-"+name, strings.TrimSpace(cli.OutBuffer().String()))
107107
}
108+
109+
func TestConfigCreateWithTemplatingDriver(t *testing.T) {
110+
expectedDriver := &swarm.Driver{
111+
Name: "template-driver",
112+
}
113+
name := "foo"
114+
115+
cli := test.NewFakeCli(&fakeClient{
116+
configCreateFunc: func(spec swarm.ConfigSpec) (types.ConfigCreateResponse, error) {
117+
if spec.Name != name {
118+
return types.ConfigCreateResponse{}, errors.Errorf("expected name %q, got %q", name, spec.Name)
119+
}
120+
121+
if spec.Templating.Name != expectedDriver.Name {
122+
return types.ConfigCreateResponse{}, errors.Errorf("expected driver %v, got %v", expectedDriver, spec.Labels)
123+
}
124+
125+
return types.ConfigCreateResponse{
126+
ID: "ID-" + spec.Name,
127+
}, nil
128+
},
129+
})
130+
131+
cmd := newConfigCreateCommand(cli)
132+
cmd.SetArgs([]string{name, filepath.Join("testdata", configDataFile)})
133+
cmd.Flags().Set("template-driver", expectedDriver.Name)
134+
assert.NoError(t, cmd.Execute())
135+
assert.Equal(t, "ID-"+name, strings.TrimSpace(cli.OutBuffer().String()))
136+
}

cli/command/secret/create.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ import (
1616
)
1717

1818
type createOptions struct {
19-
name string
20-
driver string
21-
file string
22-
labels opts.ListOpts
19+
name string
20+
driver string
21+
templateDriver string
22+
file string
23+
labels opts.ListOpts
2324
}
2425

2526
func newSecretCreateCommand(dockerCli command.Cli) *cobra.Command {
@@ -43,6 +44,8 @@ func newSecretCreateCommand(dockerCli command.Cli) *cobra.Command {
4344
flags.VarP(&options.labels, "label", "l", "Secret labels")
4445
flags.StringVarP(&options.driver, "driver", "d", "", "Secret driver")
4546
flags.SetAnnotation("driver", "version", []string{"1.31"})
47+
flags.StringVar(&options.templateDriver, "template-driver", "", "Template driver")
48+
flags.SetAnnotation("driver", "version", []string{"1.37"})
4649

4750
return cmd
4851
}
@@ -71,7 +74,11 @@ func runSecretCreate(dockerCli command.Cli, options createOptions) error {
7174
Name: options.driver,
7275
}
7376
}
74-
77+
if options.templateDriver != "" {
78+
spec.Templating = &swarm.Driver{
79+
Name: options.templateDriver,
80+
}
81+
}
7582
r, err := client.SecretCreate(ctx, spec)
7683
if err != nil {
7784
return err

cli/command/secret/create_test.go

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ func TestSecretCreateWithDriver(t *testing.T) {
8686
return types.SecretCreateResponse{}, errors.Errorf("expected name %q, got %q", name, spec.Name)
8787
}
8888

89-
if !reflect.DeepEqual(spec.Driver.Name, expectedDriver.Name) {
89+
if spec.Driver.Name != expectedDriver.Name {
9090
return types.SecretCreateResponse{}, errors.Errorf("expected driver %v, got %v", expectedDriver, spec.Labels)
9191
}
9292

@@ -103,6 +103,35 @@ func TestSecretCreateWithDriver(t *testing.T) {
103103
assert.Equal(t, "ID-"+name, strings.TrimSpace(cli.OutBuffer().String()))
104104
}
105105

106+
func TestSecretCreateWithTemplatingDriver(t *testing.T) {
107+
expectedDriver := &swarm.Driver{
108+
Name: "template-driver",
109+
}
110+
name := "foo"
111+
112+
cli := test.NewFakeCli(&fakeClient{
113+
secretCreateFunc: func(spec swarm.SecretSpec) (types.SecretCreateResponse, error) {
114+
if spec.Name != name {
115+
return types.SecretCreateResponse{}, errors.Errorf("expected name %q, got %q", name, spec.Name)
116+
}
117+
118+
if spec.Templating.Name != expectedDriver.Name {
119+
return types.SecretCreateResponse{}, errors.Errorf("expected driver %v, got %v", expectedDriver, spec.Labels)
120+
}
121+
122+
return types.SecretCreateResponse{
123+
ID: "ID-" + spec.Name,
124+
}, nil
125+
},
126+
})
127+
128+
cmd := newSecretCreateCommand(cli)
129+
cmd.SetArgs([]string{name})
130+
cmd.Flags().Set("template-driver", expectedDriver.Name)
131+
assert.NoError(t, cmd.Execute())
132+
assert.Equal(t, "ID-"+name, strings.TrimSpace(cli.OutBuffer().String()))
133+
}
134+
106135
func TestSecretCreateWithLabels(t *testing.T) {
107136
expectedLabels := map[string]string{
108137
"lbl1": "Label-foo",

docs/reference/commandline/secret_create.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ keywords: ["secret, create"]
1616
# secret create
1717

1818
```Markdown
19-
Usage: docker secret create [OPTIONS] SECRET file|-
19+
Usage: docker secret create [OPTIONS] SECRET [file|-]
2020

2121
Create a secret from a file or STDIN as content
2222

2323
Options:
24-
--help Print usage
25-
-l, --label list Secret labels (default [])
24+
-l, --label list Secret labels
25+
--template-driver string Template driver
2626
```
2727

2828
## Description

0 commit comments

Comments
 (0)