Add support for `template_driver` in composefiles

This maps the `--template-driver` flag on secret and config creation.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Vincent Demeester 2018-06-27 14:05:51 +02:00 committed by Sebastiaan van Stijn
parent 8c3a619d13
commit 7764101a54
No known key found for this signature in database
GPG Key ID: 76698F39D527CE8C
5 changed files with 122 additions and 46 deletions

View File

@ -110,7 +110,13 @@ func Secrets(namespace Namespace, secrets map[string]composetypes.SecretConfig)
if err != nil { if err != nil {
return nil, err return nil, err
} }
result = append(result, swarm.SecretSpec{Annotations: obj.Annotations, Data: obj.Data}) spec := swarm.SecretSpec{Annotations: obj.Annotations, Data: obj.Data}
if secret.TemplateDriver != "" {
spec.Templating = &swarm.Driver{
Name: secret.TemplateDriver,
}
}
result = append(result, spec)
} }
return result, nil return result, nil
} }
@ -127,7 +133,13 @@ func Configs(namespace Namespace, configs map[string]composetypes.ConfigObjConfi
if err != nil { if err != nil {
return nil, err return nil, err
} }
result = append(result, swarm.ConfigSpec{Annotations: obj.Annotations, Data: obj.Data}) spec := swarm.ConfigSpec{Annotations: obj.Annotations, Data: obj.Data}
if config.TemplateDriver != "" {
spec.Templating = &swarm.Driver{
Name: config.TemplateDriver,
}
}
result = append(result, spec)
} }
return result, nil return result, nil
} }

View File

@ -1484,3 +1484,64 @@ func TestTransform(t *testing.T) {
assert.Check(t, is.DeepEqual(samplePortsConfig, ports)) assert.Check(t, is.DeepEqual(samplePortsConfig, ports))
} }
func TestLoadTemplateDriver(t *testing.T) {
config, err := loadYAML(`
version: '3.8'
services:
hello-world:
image: redis:alpine
secrets:
- secret
configs:
- config
configs:
config:
name: config
external: true
template_driver: config-driver
secrets:
secret:
name: secret
external: true
template_driver: secret-driver
`)
assert.NilError(t, err)
expected := &types.Config{
Filename: "filename.yml",
Version: "3.8",
Services: types.Services{
{
Name: "hello-world",
Image: "redis:alpine",
Configs: []types.ServiceConfigObjConfig{
{
Source: "config",
},
},
Secrets: []types.ServiceSecretConfig{
{
Source: "secret",
},
},
},
},
Configs: map[string]types.ConfigObjConfig{
"config": {
Name: "config",
External: types.External{External: true},
TemplateDriver: "config-driver",
},
},
Secrets: map[string]types.SecretConfig{
"secret": {
Name: "secret",
External: types.External{External: true},
TemplateDriver: "secret-driver",
},
},
}
assert.DeepEqual(t, config, expected, cmpopts.EquateEmpty())
}

View File

@ -510,45 +510,45 @@ bnBpPlHfjORjkTRf1wyAwiYqMXd9/G6313QfoXs6/sbZ66r6e179PwAA//8ZL3SpvkUAAA==
"/data/config_schema_v3.8.json": { "/data/config_schema_v3.8.json": {
local: "data/config_schema_v3.8.json", local: "data/config_schema_v3.8.json",
size: 17912, size: 18006,
modtime: 1518458244, modtime: 1518458244,
compressed: ` compressed: `
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
yYJltPhFAAA= jmPjVfX3tPpvAAAA//+mJNa5VkYAAA==
`, `,
}, },

View File

@ -537,7 +537,8 @@
"name": {"type": "string"} "name": {"type": "string"}
} }
}, },
"labels": {"$ref": "#/definitions/list_or_dict"} "labels": {"$ref": "#/definitions/list_or_dict"},
"template_driver": {"type": "string"}
}, },
"patternProperties": {"^x-": {}}, "patternProperties": {"^x-": {}},
"additionalProperties": false "additionalProperties": false
@ -555,7 +556,8 @@
"name": {"type": "string"} "name": {"type": "string"}
} }
}, },
"labels": {"$ref": "#/definitions/list_or_dict"} "labels": {"$ref": "#/definitions/list_or_dict"},
"template_driver": {"type": "string"}
}, },
"patternProperties": {"^x-": {}}, "patternProperties": {"^x-": {}},
"additionalProperties": false "additionalProperties": false

View File

@ -503,11 +503,12 @@ type CredentialSpecConfig struct {
// FileObjectConfig is a config type for a file used by a service // FileObjectConfig is a config type for a file used by a service
type FileObjectConfig struct { type FileObjectConfig struct {
Name string `yaml:",omitempty" json:"name,omitempty"` Name string `yaml:",omitempty" json:"name,omitempty"`
File string `yaml:",omitempty" json:"file,omitempty"` File string `yaml:",omitempty" json:"file,omitempty"`
External External `yaml:",omitempty" json:"external,omitempty"` External External `yaml:",omitempty" json:"external,omitempty"`
Labels Labels `yaml:",omitempty" json:"labels,omitempty"` Labels Labels `yaml:",omitempty" json:"labels,omitempty"`
Extras map[string]interface{} `yaml:",inline" json:"-"` Extras map[string]interface{} `yaml:",inline" json:"-"`
TemplateDriver string `mapstructure:"template_driver" yaml:"template_driver,omitempty" json:"template_driver,omitempty"`
} }
// SecretConfig for a secret // SecretConfig for a secret