From 7764101a54bd903f802b1d643efff5395f7993ad Mon Sep 17 00:00:00 2001 From: Vincent Demeester Date: Wed, 27 Jun 2018 14:05:51 +0200 Subject: [PATCH] Add support for `template_driver` in composefiles This maps the `--template-driver` flag on secret and config creation. Signed-off-by: Vincent Demeester Signed-off-by: Sebastiaan van Stijn --- cli/compose/convert/compose.go | 16 +++- cli/compose/loader/loader_test.go | 61 +++++++++++++++ cli/compose/schema/bindata.go | 74 +++++++++---------- .../schema/data/config_schema_v3.8.json | 6 +- cli/compose/types/types.go | 11 +-- 5 files changed, 122 insertions(+), 46 deletions(-) diff --git a/cli/compose/convert/compose.go b/cli/compose/convert/compose.go index 7b369596f969..0d19ae1fdfbf 100644 --- a/cli/compose/convert/compose.go +++ b/cli/compose/convert/compose.go @@ -110,7 +110,13 @@ func Secrets(namespace Namespace, secrets map[string]composetypes.SecretConfig) if err != nil { 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 } @@ -127,7 +133,13 @@ func Configs(namespace Namespace, configs map[string]composetypes.ConfigObjConfi if err != nil { 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 } diff --git a/cli/compose/loader/loader_test.go b/cli/compose/loader/loader_test.go index d80e0c863911..651b04655a1c 100644 --- a/cli/compose/loader/loader_test.go +++ b/cli/compose/loader/loader_test.go @@ -1484,3 +1484,64 @@ func TestTransform(t *testing.T) { 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()) +} diff --git a/cli/compose/schema/bindata.go b/cli/compose/schema/bindata.go index 47ba45e9f427..a1447aa245e4 100644 --- a/cli/compose/schema/bindata.go +++ b/cli/compose/schema/bindata.go @@ -510,45 +510,45 @@ bnBpPlHfjORjkTRf1wyAwiYqMXd9/G6313QfoXs6/sbZ66r6e179PwAA//8ZL3SpvkUAAA== "/data/config_schema_v3.8.json": { local: "data/config_schema_v3.8.json", - size: 17912, + size: 18006, modtime: 1518458244, compressed: ` -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 -yYJltPhFAAA= +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 +jmPjVfX3tPpvAAAA//+mJNa5VkYAAA== `, }, diff --git a/cli/compose/schema/data/config_schema_v3.8.json b/cli/compose/schema/data/config_schema_v3.8.json index d56da8248097..469544cc030c 100644 --- a/cli/compose/schema/data/config_schema_v3.8.json +++ b/cli/compose/schema/data/config_schema_v3.8.json @@ -537,7 +537,8 @@ "name": {"type": "string"} } }, - "labels": {"$ref": "#/definitions/list_or_dict"} + "labels": {"$ref": "#/definitions/list_or_dict"}, + "template_driver": {"type": "string"} }, "patternProperties": {"^x-": {}}, "additionalProperties": false @@ -555,7 +556,8 @@ "name": {"type": "string"} } }, - "labels": {"$ref": "#/definitions/list_or_dict"} + "labels": {"$ref": "#/definitions/list_or_dict"}, + "template_driver": {"type": "string"} }, "patternProperties": {"^x-": {}}, "additionalProperties": false diff --git a/cli/compose/types/types.go b/cli/compose/types/types.go index 79d91a13ed2a..6ca27579ce1c 100644 --- a/cli/compose/types/types.go +++ b/cli/compose/types/types.go @@ -503,11 +503,12 @@ type CredentialSpecConfig struct { // FileObjectConfig is a config type for a file used by a service type FileObjectConfig struct { - Name string `yaml:",omitempty" json:"name,omitempty"` - File string `yaml:",omitempty" json:"file,omitempty"` - External External `yaml:",omitempty" json:"external,omitempty"` - Labels Labels `yaml:",omitempty" json:"labels,omitempty"` - Extras map[string]interface{} `yaml:",inline" json:"-"` + Name string `yaml:",omitempty" json:"name,omitempty"` + File string `yaml:",omitempty" json:"file,omitempty"` + External External `yaml:",omitempty" json:"external,omitempty"` + Labels Labels `yaml:",omitempty" json:"labels,omitempty"` + Extras map[string]interface{} `yaml:",inline" json:"-"` + TemplateDriver string `mapstructure:"template_driver" yaml:"template_driver,omitempty" json:"template_driver,omitempty"` } // SecretConfig for a secret