Visitar URL original
Merge pull request #1783 from sirlatrom/stack_compose_secret_driver · docker/cli@8b9cdab · GitHub
Skip to content

Commit 8b9cdab

Browse files
authored
Merge pull request #1783 from sirlatrom/stack_compose_secret_driver
Add driver field to top-level secret object
2 parents 409c590 + ed838bf commit 8b9cdab

6 files changed

Lines changed: 145 additions & 39 deletions

File tree

‎cli/compose/convert/compose.go‎

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,23 @@ func Secrets(namespace Namespace, secrets map[string]composetypes.SecretConfig)
106106
continue
107107
}
108108

109-
obj, err := fileObjectConfig(namespace, name, composetypes.FileObjectConfig(secret))
109+
var obj swarmFileObject
110+
var err error
111+
if secret.Driver != "" {
112+
obj, err = driverObjectConfig(namespace, name, composetypes.FileObjectConfig(secret))
113+
} else {
114+
obj, err = fileObjectConfig(namespace, name, composetypes.FileObjectConfig(secret))
115+
}
110116
if err != nil {
111117
return nil, err
112118
}
113119
spec := swarm.SecretSpec{Annotations: obj.Annotations, Data: obj.Data}
120+
if secret.Driver != "" {
121+
spec.Driver = &swarm.Driver{
122+
Name: secret.Driver,
123+
Options: secret.DriverOpts,
124+
}
125+
}
114126
if secret.TemplateDriver != "" {
115127
spec.Templating = &swarm.Driver{
116128
Name: secret.TemplateDriver,
@@ -149,6 +161,22 @@ type swarmFileObject struct {
149161
Data []byte
150162
}
151163

164+
func driverObjectConfig(namespace Namespace, name string, obj composetypes.FileObjectConfig) (swarmFileObject, error) {
165+
if obj.Name != "" {
166+
name = obj.Name
167+
} else {
168+
name = namespace.Scope(name)
169+
}
170+
171+
return swarmFileObject{
172+
Annotations: swarm.Annotations{
173+
Name: name,
174+
Labels: AddStackLabel(namespace, obj.Labels),
175+
},
176+
Data: []byte{},
177+
}, nil
178+
}
179+
152180
func fileObjectConfig(namespace Namespace, name string, obj composetypes.FileObjectConfig) (swarmFileObject, error) {
153181
data, err := ioutil.ReadFile(obj.File)
154182
if err != nil {

‎cli/compose/loader/loader.go‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,8 @@ func LoadConfigObjs(source map[string]interface{}, details types.ConfigDetails)
634634

635635
func loadFileObjectConfig(name string, objType string, obj types.FileObjectConfig, details types.ConfigDetails) (types.FileObjectConfig, error) {
636636
// if "external: true"
637-
if obj.External.External {
637+
switch {
638+
case obj.External.External:
638639
// handle deprecated external.name
639640
if obj.External.Name != "" {
640641
if obj.Name != "" {
@@ -651,7 +652,11 @@ func loadFileObjectConfig(name string, objType string, obj types.FileObjectConfi
651652
}
652653
}
653654
// if not "external: true"
654-
} else {
655+
case obj.Driver != "":
656+
if obj.File != "" {
657+
return obj, errors.Errorf("%[1]s %[2]s: %[1]s.driver and %[1]s.file conflict; only use %[1]s.driver", objType, name)
658+
}
659+
default:
655660
obj.File = absPath(details.WorkingDir, obj.File)
656661
}
657662

‎cli/compose/loader/loader_test.go‎

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1586,3 +1586,67 @@ secrets:
15861586
}
15871587
assert.DeepEqual(t, config, expected, cmpopts.EquateEmpty())
15881588
}
1589+
1590+
func TestLoadSecretDriver(t *testing.T) {
1591+
config, err := loadYAML(`
1592+
version: '3.8'
1593+
services:
1594+
hello-world:
1595+
image: redis:alpine
1596+
secrets:
1597+
- secret
1598+
configs:
1599+
- config
1600+
1601+
configs:
1602+
config:
1603+
name: config
1604+
external: true
1605+
1606+
secrets:
1607+
secret:
1608+
name: secret
1609+
driver: secret-bucket
1610+
driver_opts:
1611+
OptionA: value for driver option A
1612+
OptionB: value for driver option B
1613+
`)
1614+
assert.NilError(t, err)
1615+
expected := &types.Config{
1616+
Filename: "filename.yml",
1617+
Version: "3.8",
1618+
Services: types.Services{
1619+
{
1620+
Name: "hello-world",
1621+
Image: "redis:alpine",
1622+
Configs: []types.ServiceConfigObjConfig{
1623+
{
1624+
Source: "config",
1625+
},
1626+
},
1627+
Secrets: []types.ServiceSecretConfig{
1628+
{
1629+
Source: "secret",
1630+
},
1631+
},
1632+
},
1633+
},
1634+
Configs: map[string]types.ConfigObjConfig{
1635+
"config": {
1636+
Name: "config",
1637+
External: types.External{External: true},
1638+
},
1639+
},
1640+
Secrets: map[string]types.SecretConfig{
1641+
"secret": {
1642+
Name: "secret",
1643+
Driver: "secret-bucket",
1644+
DriverOpts: map[string]string{
1645+
"OptionA": "value for driver option A",
1646+
"OptionB": "value for driver option B",
1647+
},
1648+
},
1649+
},
1650+
}
1651+
assert.DeepEqual(t, config, expected, cmpopts.EquateEmpty())
1652+
}

‎cli/compose/schema/bindata.go‎

Lines changed: 36 additions & 36 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎cli/compose/schema/data/config_schema_v3.8.json‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,13 @@
538538
}
539539
},
540540
"labels": {"$ref": "#/definitions/list_or_dict"},
541+
"driver": {"type": "string"},
542+
"driver_opts": {
543+
"type": "object",
544+
"patternProperties": {
545+
"^.+$": {"type": ["string", "number"]}
546+
}
547+
},
541548
"template_driver": {"type": "string"}
542549
},
543550
"patternProperties": {"^x-": {}},

‎cli/compose/types/types.go‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,8 @@ type FileObjectConfig struct {
513513
External External `yaml:",omitempty" json:"external,omitempty"`
514514
Labels Labels `yaml:",omitempty" json:"labels,omitempty"`
515515
Extras map[string]interface{} `yaml:",inline" json:"-"`
516+
Driver string `yaml:",omitempty" json:"driver,omitempty"`
517+
DriverOpts map[string]string `mapstructure:"driver_opts" yaml:"driver_opts,omitempty" json:"driver_opts,omitempty"`
516518
TemplateDriver string `mapstructure:"template_driver" yaml:"template_driver,omitempty" json:"template_driver,omitempty"`
517519
}
518520

0 commit comments

Comments
 (0)