From 4f7f3d2f615d8d83885ae822b36beabd6b361266 Mon Sep 17 00:00:00 2001 From: Ilya Sotkov Date: Wed, 22 Nov 2017 13:18:05 +0200 Subject: [PATCH 1/3] Add secret.name and config.name in compose. Signed-off-by: Ilya Sotkov --- cli/compose/convert/compose.go | 14 +++++++- cli/compose/convert/service.go | 12 +++---- cli/compose/loader/loader.go | 33 +++++++++++++++---- cli/compose/schema/bindata.go | 31 +++++++++++++---- .../schema/data/config_schema_v3.5.json | 2 ++ cli/compose/types/types.go | 1 + 6 files changed, 73 insertions(+), 20 deletions(-) diff --git a/cli/compose/convert/compose.go b/cli/compose/convert/compose.go index 699c7b852b..b9c1f4f760 100644 --- a/cli/compose/convert/compose.go +++ b/cli/compose/convert/compose.go @@ -101,6 +101,12 @@ func Secrets(namespace Namespace, secrets map[string]composetypes.SecretConfig) continue } + if secret.Name != "" { + name = secret.Name + } else { + name = namespace.Scope(name) + } + obj, err := fileObjectConfig(namespace, name, composetypes.FileObjectConfig(secret)) if err != nil { return nil, err @@ -118,6 +124,12 @@ func Configs(namespace Namespace, configs map[string]composetypes.ConfigObjConfi continue } + if config.Name != "" { + name = config.Name + } else { + name = namespace.Scope(name) + } + obj, err := fileObjectConfig(namespace, name, composetypes.FileObjectConfig(config)) if err != nil { return nil, err @@ -140,7 +152,7 @@ func fileObjectConfig(namespace Namespace, name string, obj composetypes.FileObj return swarmFileObject{ Annotations: swarm.Annotations{ - Name: namespace.Scope(name), + Name: name, Labels: AddStackLabel(namespace, obj.Labels), }, Data: data, diff --git a/cli/compose/convert/service.go b/cli/compose/convert/service.go index e180307047..3c9a6a661a 100644 --- a/cli/compose/convert/service.go +++ b/cli/compose/convert/service.go @@ -258,14 +258,14 @@ func convertServiceSecrets( refs := []*swarm.SecretReference{} lookup := func(key string) (composetypes.FileObjectConfig, error) { - configSpec, exists := secretSpecs[key] + secretSpec, exists := secretSpecs[key] if !exists { return composetypes.FileObjectConfig{}, errors.Errorf("undefined secret %q", key) } - return composetypes.FileObjectConfig(configSpec), nil + return composetypes.FileObjectConfig(secretSpec), nil } - for _, config := range secrets { - obj, err := convertFileObject(namespace, composetypes.FileReferenceConfig(config), lookup) + for _, secret := range secrets { + obj, err := convertFileObject(namespace, composetypes.FileReferenceConfig(secret), lookup) if err != nil { return nil, err } @@ -353,8 +353,8 @@ func convertFileObject( } source := namespace.Scope(config.Source) - if obj.External.External { - source = obj.External.Name + if obj.Name != "" { + source = obj.Name } uid := config.UID diff --git a/cli/compose/loader/loader.go b/cli/compose/loader/loader.go index 378e8d0ed5..92dde7f535 100644 --- a/cli/compose/loader/loader.go +++ b/cli/compose/loader/loader.go @@ -490,7 +490,7 @@ func LoadSecrets(source map[string]interface{}, details types.ConfigDetails) (ma return secrets, err } for name, secret := range secrets { - obj, err := loadFileObjectConfig(name, types.FileObjectConfig(secret), details) + obj, err := loadFileObjectConfig(name, "secret", types.FileObjectConfig(secret), details) if err != nil { return nil, err } @@ -507,7 +507,7 @@ func LoadConfigObjs(source map[string]interface{}, details types.ConfigDetails) return configs, err } for name, config := range configs { - obj, err := loadFileObjectConfig(name, types.FileObjectConfig(config), details) + obj, err := loadFileObjectConfig(name, "config", types.FileObjectConfig(config), details) if err != nil { return nil, err } @@ -516,13 +516,32 @@ func LoadConfigObjs(source map[string]interface{}, details types.ConfigDetails) return configs, nil } -func loadFileObjectConfig(name string, obj types.FileObjectConfig, details types.ConfigDetails) (types.FileObjectConfig, error) { - if obj.External.External && obj.External.Name == "" { - obj.External.Name = name - } - if obj.File != "" { +func loadFileObjectConfig(name string, objType string, obj types.FileObjectConfig, details types.ConfigDetails) (types.FileObjectConfig, error) { + // if "external: true" + if obj.External.External { + // handle deprecated external.name + if obj.External.Name != "" { + if obj.Name != "" { + return obj, errors.Errorf("%[1]s %[2]s: %[1]s.external.name and %[1]s.name conflict; only use %[1]s.name", objType, name) + } + if versions.GreaterThanOrEqualTo(details.Version, "3.5") { + logrus.Warnf("%[1]s %[2]s: %[1]s.external.name is deprecated in favor of %[1]s.name", objType, name) + } + obj.Name = obj.External.Name + obj.External.Name = "" + } else { + if obj.Name == "" { + obj.Name = name + } + } + // if not "external: true" + } else { + if obj.File == "" { + return obj, errors.Errorf("%[1]s %[2]s: specify a file or \"external: true\"", objType, name) + } obj.File = absPath(details.WorkingDir, obj.File) } + return obj, nil } diff --git a/cli/compose/schema/bindata.go b/cli/compose/schema/bindata.go index 5f150e13e7..616f7cb7ab 100644 --- a/cli/compose/schema/bindata.go +++ b/cli/compose/schema/bindata.go @@ -88,7 +88,7 @@ func dataConfig_schema_v30Json() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "data/config_schema_v3.0.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + info := bindataFileInfo{name: "data/config_schema_v3.0.json", size: 11063, mode: os.FileMode(420), modTime: time.Unix(1509949700, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -108,7 +108,7 @@ func dataConfig_schema_v31Json() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "data/config_schema_v3.1.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + info := bindataFileInfo{name: "data/config_schema_v3.1.json", size: 12209, mode: os.FileMode(420), modTime: time.Unix(1509949700, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -128,7 +128,7 @@ func dataConfig_schema_v32Json() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "data/config_schema_v3.2.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + info := bindataFileInfo{name: "data/config_schema_v3.2.json", size: 13708, mode: os.FileMode(420), modTime: time.Unix(1509949700, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -148,7 +148,7 @@ func dataConfig_schema_v33Json() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "data/config_schema_v3.3.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + info := bindataFileInfo{name: "data/config_schema_v3.3.json", size: 15367, mode: os.FileMode(420), modTime: time.Unix(1509949700, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -168,7 +168,27 @@ func dataConfig_schema_v34Json() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "data/config_schema_v3.4.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + info := bindataFileInfo{name: "data/config_schema_v3.4.json", size: 15750, mode: os.FileMode(420), modTime: time.Unix(1509979293, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _dataConfig_schema_v35Json = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\xcf\x72\xdb\xbc\x11\xbf\xeb\x29\x38\xfc\xbe\x5b\x24\x3b\x33\x4d\x3b\xd3\xdc\x7a\xec\xa9\x3d\xd7\xa3\x70\x20\x70\x25\x21\x06\x01\x64\x01\xca\x56\x32\x7e\xf7\x0e\xff\x8a\x04\x41\x02\x94\xe8\xd8\x69\x73\xb2\x45\xee\x2e\xb0\x8b\xdd\xdf\xee\x02\xe0\x8f\x55\x14\xc5\x7f\x6a\x7a\x84\x8c\xc4\x9f\xa3\xf8\x68\x8c\xfa\x7c\x7f\xff\x55\x4b\xb1\xa9\x9e\xde\x49\x3c\xdc\xa7\x48\xf6\x66\xf3\xf1\xd3\x7d\xf5\xec\x8f\x78\x5d\xf0\xb1\xb4\x60\xa1\x52\xec\xd9\x21\xa9\xde\x24\xa7\xbf\xdc\xfd\xf5\xae\x60\xaf\x48\xcc\x59\x41\x41\x24\x77\x5f\x81\x9a\xea\x19\xc2\xb7\x9c\x21\x14\xcc\x0f\xf1\x09\x50\x33\x29\xe2\xed\x7a\x55\xbc\x53\x28\x15\xa0\x61\xa0\xe3\xcf\x51\x31\xb9\x28\x6a\x49\x9a\x07\x1d\xb1\xda\x20\x13\x87\xb8\x7c\xfc\x52\x4a\x88\xa2\x58\x03\x9e\x18\xed\x48\x68\xa7\xfa\xc7\xfd\x45\xfe\x7d\x4b\xb6\xb6\xa5\x76\x26\x5b\x3e\x57\xc4\x18\x40\xf1\xef\xe1\xdc\xca\xd7\x5f\x1e\xc8\xe6\xfb\x3f\x36\xff\xf9\xb8\xf9\xfb\x5d\xb2\xd9\x7e\xf8\xb3\xf7\xba\xb0\x2f\xc2\xbe\x1a\x3e\x85\x3d\x13\xcc\x30\x29\xda\xf1\xe3\x96\xf2\xa5\xfe\xef\xa5\x1d\x98\xa4\x69\x49\x4c\x78\x6f\xec\x3d\xe1\x1a\xfa\x3a\x0b\x30\x4f\x12\x1f\x7d\x3a\xb7\x64\x6f\xa4\x73\x3d\xbe\x43\xe7\xbe\x3a\x27\xc9\xf3\xcc\xbb\x82\x0d\xd5\x1b\x29\x53\x0d\xbf\xcc\xfa\x69\xa0\x08\xc6\xef\xb2\x15\xd5\x9b\x79\x6c\x31\xfc\x32\x0a\x57\xa8\xe1\x53\xb8\xa1\x7a\x23\x85\xab\xe1\x6f\x53\x78\xd5\x28\xed\x9e\x63\xfc\xe5\x79\x53\xfc\x7d\x29\x65\x4e\xca\xab\xa4\x74\xe6\x57\x2a\xd1\xc3\x3c\x97\x39\x5d\x98\x33\x6e\xcf\xd6\xa0\x23\x96\x4c\x41\x71\x79\x2e\x67\xee\xb6\x59\x45\x90\x81\x30\x71\x6b\xa6\x28\x8a\x77\x39\xe3\xa9\x6d\x75\x29\xe0\x5f\x85\x88\x87\xce\xc3\x28\xfa\x61\xc3\x7b\x47\x4e\xf9\xbe\xf7\x6b\xdc\x29\xda\xf7\x23\xba\xb4\xef\xa9\x14\x06\x9e\x4d\xa9\xd4\xf4\xd0\x95\x09\x24\x7d\x04\xdc\x33\x0e\xa1\x1c\x04\x2b\x4f\x1f\x31\x19\x67\xda\x24\x12\x93\x94\x51\xe3\xe4\xe7\x64\x07\xfc\x26\x09\x94\xd0\x23\x24\x7b\x94\x99\x57\xca\x3e\xa9\x34\xd1\x4e\x41\x0d\x82\x07\x6a\x6e\x08\x1e\xc0\x6d\x59\x8b\x78\xc0\xed\x8f\xad\x96\xb5\xf3\x6b\xbb\x72\x08\x8c\x29\x51\x09\x49\xd3\xde\x3c\x08\x22\x39\xc7\xeb\x28\x66\x06\x32\xed\x56\x28\x8a\x73\xc1\xbe\xe5\xf0\xcf\x9a\xc4\x60\x0e\xb6\xdc\x14\xa5\x5a\x5e\xf0\x01\x65\xae\x12\x45\xb0\x08\xa4\x69\x63\xc7\x54\x66\x19\x11\x4b\x45\xd7\x1c\x3d\x02\x2c\x3f\xc0\xf9\xa8\x1b\xb2\xf5\x18\xdd\x57\xed\x68\xbd\x69\x8d\x68\xe3\xd7\x67\x88\x17\x7e\xc4\xf0\x63\x46\x01\xb9\x32\x47\x1a\x0a\x01\xd3\xa1\xe0\xa4\xcf\x59\x1a\x4e\x7c\x98\x43\x9c\xc9\xb4\x3f\x6f\x91\x67\x3b\xc0\x41\x48\xf6\x23\x6b\xf8\x7b\xbb\x72\xbd\xb1\x56\xdf\x10\x26\x00\x13\x41\x32\x9f\xad\x62\x8a\x90\x82\x30\x8c\xf0\x44\x2b\xa0\x3d\xf2\x66\xa5\x26\x56\x26\x0e\x82\xe4\x18\xe1\xc0\xb4\xc1\xf3\x34\x28\xbd\x74\x27\x96\x82\x02\x91\xea\xa4\x6a\x42\xe6\xa3\x67\x9c\x42\xdb\x91\x2c\x0a\x13\xa9\x98\xca\x0a\x95\x98\x22\x2f\x14\x73\x8b\x2d\xc6\x44\x03\x41\x7a\xbc\x92\x5f\x66\x84\x89\x90\x45\x05\x61\xf0\xac\x24\xab\x60\xec\xdd\xe1\x13\x88\x53\xd2\xfa\xcd\x6c\x33\x80\x38\x31\x94\x22\x6b\x40\x3a\x2c\x3b\x77\xf8\x9f\x95\xd4\x70\x3b\x38\xd6\x1c\x0f\x8d\xe2\xeb\x36\xa6\xb7\x7d\xeb\xc5\x7b\x89\x19\x29\x26\xdb\x8c\xdd\x8d\xe1\xde\x50\x43\xcf\xeb\x1a\xb0\xab\x43\x51\xd5\x12\x9e\x70\x26\x1e\x97\x77\x71\x78\x36\x48\x92\xa3\xd4\xe6\x9a\x02\x28\x3e\x02\xe1\xe6\x48\x8f\x40\x1f\x27\xd8\xbb\x54\x3d\x6e\xa9\x4d\x88\x93\xb3\x8c\x1c\xfc\x44\x8a\xfa\x48\xae\x2e\xf4\xe2\x45\x8d\xdf\x11\x2b\x0f\x87\x82\x74\xcc\xe3\x06\x8d\x43\xfd\xda\x57\x72\xa7\xc8\x4e\x80\xa1\x55\xa4\x54\x97\x7e\xc7\x7e\x19\x92\xcd\xbd\x0d\x62\x8f\xf4\xcb\x5d\xd5\x1f\x4e\x44\x55\xf9\x1f\xe7\xf1\x76\x98\x32\x87\x49\xd3\x7e\x62\x69\x18\x56\xe7\xf6\x56\x25\x23\xb4\x28\x67\x11\xf4\xc8\xba\x5e\x48\xeb\x7a\x3d\x19\xe4\xfc\x0b\xed\x80\x78\x90\x58\xc7\x90\xfa\xaa\x36\x62\x7e\xfb\x16\xb4\x74\xde\x1e\xdf\xa3\xcd\xd8\xf4\x42\xa7\x79\x99\xae\xdf\xc5\x4a\x3a\xc2\x19\xd1\xe0\x0f\xf6\xc9\x7e\xac\x95\xc6\xd4\xe9\x53\xa0\x4f\xb8\x78\xff\x36\xc9\x3b\xc2\x3a\x2a\x33\xbc\x75\xf3\x88\xea\x96\xa8\x9c\x3b\x27\xb2\xf5\x17\xad\xaf\xd9\x59\xaa\x7e\xe1\xdd\xc7\x8a\x12\x21\xba\x01\xa6\x24\x9a\x9f\xd2\x0b\x5d\x70\xea\x92\xf0\xab\xc1\x87\xed\x91\xbd\xdc\x41\x4c\xaf\xd3\x53\x4d\xa0\x94\x83\xda\xd1\x51\x31\x61\xe0\x50\xb4\x32\xee\x24\x90\xef\x38\xd3\x47\x48\xe7\xf0\xa0\x34\x92\x4a\x1e\x16\x18\xce\xdd\x9f\xf0\x60\x98\xe8\xaf\xae\xaa\xcd\x14\xb2\x13\xe3\x70\xb0\x34\xde\x49\xc9\x81\x88\x5e\xa2\x40\x20\x69\x22\x05\x3f\x07\x50\x6a\x43\xd0\xbb\x2b\xa1\x81\xe6\xc8\xcc\x39\x91\xca\x2c\x5e\x15\xea\x63\x96\x68\xf6\x1d\xfa\xb1\x77\xf1\xfa\x5a\xd0\xd6\x9a\x90\xb5\xc7\x1e\xfd\xde\x8a\xf8\xbf\xd9\x8a\xd0\x67\x4d\xcd\x75\xb5\xb5\x36\x29\x13\x89\x54\x20\xbc\xb1\xa1\x8d\x54\xc9\x01\x09\x85\x44\x01\x32\xe9\x34\x45\x0f\x60\xd3\x1c\x49\x31\xfe\x50\x8c\x66\x07\x41\xdc\xb8\xd3\x21\x35\x99\xda\x5f\xb9\x09\x60\x8c\x3f\xd8\x73\xce\x32\x36\x1e\x34\x0e\xaf\x0d\xa8\xd7\xaa\x5a\xcd\x5d\xa2\x4d\x94\x67\x41\x90\x3d\xd1\x21\x4c\x37\x08\x01\x9d\xc1\x91\xe0\x8c\xd4\x51\x06\xe6\x7e\x24\x3f\xb9\xfa\x06\xe7\xbc\x7a\xa7\xe5\xa5\xbc\x75\x3d\x91\xad\x93\x7e\x56\xe9\x65\x4f\x63\x3b\x5a\xfd\xb8\x83\x2a\xd7\xde\x26\xae\xa4\x11\x7a\xaa\x01\x69\x49\x87\xc7\xbe\xd1\x2f\x81\xd0\xbd\x35\x2a\xc9\x1d\x6b\x13\x80\xe3\xf5\x48\x81\xd8\xf9\xda\xa8\x1f\x5c\x11\x74\x78\xa8\x14\x9a\x69\x03\x82\xba\xf7\x57\x9d\x4c\x3b\x36\x38\xbc\x18\x1a\x65\xba\xef\x0a\xeb\xba\x4a\x2a\x72\xa8\xf0\x36\xb8\xd1\x09\x8f\xd5\xfa\x46\xc0\x4f\x51\x45\x48\x2a\xd5\xc8\xd2\x84\xab\x31\x37\xcd\x5a\x5b\x17\x13\x75\xe8\x18\x64\x3c\x49\x7c\x2c\x12\x52\xca\xdc\xc8\xb1\xb2\x58\x66\xdc\x29\xb0\xf6\xfa\x1a\x01\xae\x83\xf0\x2e\xa9\xf7\x72\xc1\xf4\xa1\x7c\x4d\x34\x7a\x60\xce\x34\xd9\x59\xe7\x12\xae\x44\x5b\x64\x06\x3c\xb9\xf3\xbd\xbf\x60\x40\x30\xc8\xac\x03\x86\xa6\x94\xea\x66\x7c\xd0\xef\x73\x1b\xde\xb0\x0c\x64\xee\x04\xa7\x90\x6a\x89\xa0\x99\x5f\x6f\xad\xba\x6e\x5a\xcb\x8b\x3b\xd7\x17\x3c\x2e\xd4\xa1\xb4\x3d\xe8\xa1\x73\x5c\x55\xed\x02\x78\xdd\x24\x24\x3d\x82\x48\xcb\x83\x94\xa0\x5c\x8a\xa0\x38\xa3\x44\xfb\xea\x95\x1b\xf6\x9c\x73\x95\x12\x03\x49\x7d\x4b\x66\x4e\x85\x38\x51\x1a\x2a\x82\x84\x73\xe0\x4c\x67\x21\xa5\x56\x9c\x02\x27\xce\x5c\xe3\xf5\x9b\x92\x7d\x4f\x18\xcf\x11\x12\x42\x47\x93\x82\xc5\x91\x49\xc1\x8c\x74\x82\x57\xd8\x90\x19\x79\x4e\x9a\x61\x4b\x12\x4f\xd4\x96\x4c\x12\x53\x77\xa9\xb5\x2e\xfc\x22\xcf\x1c\xc5\x4e\x15\x17\x9b\x3d\x43\x6d\xaa\x9e\x58\xaa\xfa\x57\x1f\xd4\x5f\x46\xf7\x19\x42\xb7\xa6\x3b\x5e\x57\x55\x25\xf3\x1a\x86\x09\x77\xb8\xb4\x1f\x23\xde\xd9\x8c\x38\xb0\x18\x82\x2e\x00\xb5\x3d\x39\xf0\xf2\x2f\x6a\x85\x0a\x92\x24\x67\x55\x21\xb4\x84\x29\xa8\x14\xd5\x3c\x42\xbc\xf4\xc6\xb0\x28\x7c\xb4\x68\xe3\x32\x65\xbc\x08\x52\x32\x3c\x31\x91\xca\xa7\xf9\xe8\xbb\x80\xb5\x15\x27\x14\x2c\xc4\xbe\xd5\xd0\xda\x20\x61\xc2\xcc\x3e\x51\xb3\xcd\xa2\x10\xf6\x80\x20\x86\x11\x11\x4d\x77\x36\xd1\x78\x77\xe3\xd3\xcd\xaf\x61\x4d\xa1\x55\x51\xe2\xbf\xc1\xc6\xe6\xad\x8b\x7f\x43\x8d\xd8\x86\xbb\x27\xbb\xb7\x74\xde\xea\x70\x2c\xa3\x53\x95\x7b\x4f\xe7\x32\xc8\xe4\xf4\x4d\x94\x1b\x2e\x83\xfb\x54\x6c\xc8\x16\xa8\x5e\x82\x8e\x73\x6b\xaa\x44\xaa\xe5\xf7\x93\xfc\x47\xb6\x5b\xff\x6e\x06\x53\x24\x5b\x0a\x43\x82\x0f\xb8\x63\x67\xf9\x14\xbd\x03\x74\xc8\x77\x22\xec\xea\xe6\x3b\x43\x87\xfe\xe5\x91\xf2\x6e\xca\xc8\xaa\x3e\xb4\x9d\xd8\xba\xb5\xd5\x36\x78\x89\x47\x2f\x86\x2c\x37\xff\xb2\x29\xb4\x37\x81\x5d\xdd\x23\x31\x86\xd0\x63\x50\xa3\x39\xb3\xde\xbf\x01\x87\x06\xdb\x21\x4e\x18\xaa\xa9\x16\x40\xa1\x90\x9b\x3a\xff\x1b\x48\xf5\xab\xfb\xf5\xcf\xf3\xc1\xfa\x9b\x15\xef\x77\x11\x25\xd5\xd5\xb9\x3e\xc4\xf3\x02\x6e\xa7\xbe\x83\x75\x7d\xe3\xe5\x1a\x24\x43\xe7\x72\xd5\x54\xbf\x97\xeb\xad\x97\xcb\x3a\x5c\xec\x2c\xdb\x70\x57\x71\xca\x92\xc1\x37\xa0\x6a\x8e\x6d\x7f\x1a\x36\x99\xe3\x4b\xd1\x7e\x0d\x35\x75\xf5\xa0\x21\x19\xd9\xdb\xb6\x06\xad\x8d\x38\xad\xf9\x82\xf9\xe3\xee\xc3\x44\xa5\x38\x75\x53\xf1\x95\x4a\xac\x05\xae\x75\xb8\xd7\xd4\x6a\xc2\x1b\xeb\x0e\x3f\x74\x1b\xc7\x88\x86\x7f\xf0\xd9\x5b\xa1\xa7\x38\x0f\x76\xbd\x7f\xf4\x0f\xf2\xaa\x4f\xd6\xb6\x3d\xfb\x58\x24\xd5\xbd\xdf\x4e\xc2\xde\x76\xf7\x25\x46\x3f\x54\x70\x7d\x0c\x67\x1f\x23\x36\x1f\xa5\x8d\xdc\x6c\x58\x75\xff\x96\x1f\x19\xae\x5e\x56\xff\x0d\x00\x00\xff\xff\x19\x6c\xac\x27\xce\x3d\x00\x00") + +func dataConfig_schema_v35JsonBytes() ([]byte, error) { + return bindataRead( + _dataConfig_schema_v35Json, + "data/config_schema_v3.5.json", + ) +} + +func dataConfig_schema_v35Json() (*asset, error) { + bytes, err := dataConfig_schema_v35JsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "data/config_schema_v3.5.json", size: 15822, mode: os.FileMode(420), modTime: time.Unix(1510079013, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -349,4 +369,3 @@ func _filePath(dir, name string) string { cannonicalName := strings.Replace(name, "\\", "/", -1) return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) } - diff --git a/cli/compose/schema/data/config_schema_v3.5.json b/cli/compose/schema/data/config_schema_v3.5.json index 1151bb0642..bcd3b11091 100644 --- a/cli/compose/schema/data/config_schema_v3.5.json +++ b/cli/compose/schema/data/config_schema_v3.5.json @@ -470,6 +470,7 @@ "id": "#/definitions/secret", "type": "object", "properties": { + "name": {"type": "string"}, "file": {"type": "string"}, "external": { "type": ["boolean", "object"], @@ -486,6 +487,7 @@ "id": "#/definitions/config", "type": "object", "properties": { + "name": {"type": "string"}, "file": {"type": "string"}, "external": { "type": ["boolean", "object"], diff --git a/cli/compose/types/types.go b/cli/compose/types/types.go index 296e259575..8b8ea2317e 100644 --- a/cli/compose/types/types.go +++ b/cli/compose/types/types.go @@ -348,6 +348,7 @@ type CredentialSpecConfig struct { // FileObjectConfig is a config type for a file used by a service type FileObjectConfig struct { + Name string File string External External Labels Labels From 1f10b310174935450d358c0b2300463792ab6b13 Mon Sep 17 00:00:00 2001 From: Ilya Sotkov Date: Fri, 10 Nov 2017 15:35:29 +0200 Subject: [PATCH 2/3] Add tests for secret.name in compose files. Signed-off-by: Ilya Sotkov --- cli/compose/loader/loader_test.go | 65 ++++++++++++++++++++++++++++++- cli/compose/schema/schema_test.go | 19 +++++++++ 2 files changed, 82 insertions(+), 2 deletions(-) diff --git a/cli/compose/loader/loader_test.go b/cli/compose/loader/loader_test.go index bc6f6f4758..0aab9f05ff 100644 --- a/cli/compose/loader/loader_test.go +++ b/cli/compose/loader/loader_test.go @@ -214,6 +214,26 @@ configs: require.Len(t, actual.Configs, 1) } +func TestLoadV35(t *testing.T) { + actual, err := loadYAML(` +version: "3.5" +services: + foo: + image: busybox + secrets: [foo, bar, baz] +secrets: + foo: + name: fooqux + external: true + bar: + name: barqux + file: ./full-example.yml +`) + require.NoError(t, err) + assert.Len(t, actual.Services, 1) + assert.Len(t, actual.Secrets, 2) +} + func TestParseAndLoad(t *testing.T) { actual, err := loadYAML(sampleYAML) require.NoError(t, err) @@ -626,10 +646,10 @@ networks: }, }, Configs: map[string]types.ConfigObjConfig{ - "appconfig": {External: types.External{External: true, Name: "appconfig"}}, + "appconfig": {External: types.External{External: true}, Name: "appconfig"}, }, Secrets: map[string]types.SecretConfig{ - "super": {External: types.External{External: true, Name: "super"}}, + "super": {External: types.External{External: true}, Name: "super"}, }, Volumes: map[string]types.VolumeConfig{ "data": {External: types.External{External: true}, Name: "data"}, @@ -1488,3 +1508,44 @@ configs: require.Len(t, actual.Services, 1) assert.Equal(t, "invalid", actual.Services[0].Isolation) } + +func TestInvalidSecretExternalNameAndNameCombination(t *testing.T) { + _, err := loadYAML(` +version: "3.5" +secrets: + external_secret: + name: user_specified_name + external: + name: external_name +`) + + require.Error(t, err) + assert.Contains(t, err.Error(), "secret.external.name and secret.name conflict; only use secret.name") + assert.Contains(t, err.Error(), "external_secret") +} + +func TestLoadSecretsWarnOnDeprecatedExternalNameVersion35(t *testing.T) { + buf, cleanup := patchLogrus() + defer cleanup() + + source := map[string]interface{}{ + "foo": map[string]interface{}{ + "external": map[string]interface{}{ + "name": "oops", + }, + }, + } + details := types.ConfigDetails{ + Version: "3.5", + } + secrets, err := LoadSecrets(source, details) + require.NoError(t, err) + expected := map[string]types.SecretConfig{ + "foo": { + Name: "oops", + External: types.External{External: true}, + }, + } + assert.Equal(t, expected, secrets) + assert.Contains(t, buf.String(), "secret.external.name is deprecated") +} diff --git a/cli/compose/schema/schema_test.go b/cli/compose/schema/schema_test.go index 3461b5949b..27850e63ec 100644 --- a/cli/compose/schema/schema_test.go +++ b/cli/compose/schema/schema_test.go @@ -46,6 +46,25 @@ func TestValidateAllowsXTopLevelFields(t *testing.T) { assert.NoError(t, err) } +func TestValidateSecretConfigNames(t *testing.T) { + config := dict{ + "version": "3.5", + "configs": dict{ + "bar": dict{ + "name": "foobar", + }, + }, + "secrets": dict{ + "baz": dict{ + "name": "foobaz", + }, + }, + } + + err := Validate(config, "3.5") + assert.NoError(t, err) +} + func TestValidateInvalidVersion(t *testing.T) { config := dict{ "version": "2.1", From ec47003ecb3258ff857e12b90bc36615adc50906 Mon Sep 17 00:00:00 2001 From: Ilya Sotkov Date: Sat, 11 Nov 2017 07:11:29 +0200 Subject: [PATCH 3/3] Remove duplication for secrets / configs, combine 3.5 loader tests, remove extraneous error call, regenerate schema correctly Signed-off-by: Ilya Sotkov --- cli/compose/convert/compose.go | 18 +++++--------- cli/compose/loader/loader.go | 3 --- cli/compose/loader/loader_test.go | 41 +++++++++++++------------------ cli/compose/schema/bindata.go | 33 ++++++------------------- cli/compose/schema/schema_test.go | 20 +++++++-------- cli/compose/types/types.go | 2 +- 6 files changed, 41 insertions(+), 76 deletions(-) diff --git a/cli/compose/convert/compose.go b/cli/compose/convert/compose.go index b9c1f4f760..03b8e382cc 100644 --- a/cli/compose/convert/compose.go +++ b/cli/compose/convert/compose.go @@ -101,12 +101,6 @@ func Secrets(namespace Namespace, secrets map[string]composetypes.SecretConfig) continue } - if secret.Name != "" { - name = secret.Name - } else { - name = namespace.Scope(name) - } - obj, err := fileObjectConfig(namespace, name, composetypes.FileObjectConfig(secret)) if err != nil { return nil, err @@ -124,12 +118,6 @@ func Configs(namespace Namespace, configs map[string]composetypes.ConfigObjConfi continue } - if config.Name != "" { - name = config.Name - } else { - name = namespace.Scope(name) - } - obj, err := fileObjectConfig(namespace, name, composetypes.FileObjectConfig(config)) if err != nil { return nil, err @@ -150,6 +138,12 @@ func fileObjectConfig(namespace Namespace, name string, obj composetypes.FileObj return swarmFileObject{}, err } + if obj.Name != "" { + name = obj.Name + } else { + name = namespace.Scope(name) + } + return swarmFileObject{ Annotations: swarm.Annotations{ Name: name, diff --git a/cli/compose/loader/loader.go b/cli/compose/loader/loader.go index 92dde7f535..a1e13c5050 100644 --- a/cli/compose/loader/loader.go +++ b/cli/compose/loader/loader.go @@ -536,9 +536,6 @@ func loadFileObjectConfig(name string, objType string, obj types.FileObjectConfi } // if not "external: true" } else { - if obj.File == "" { - return obj, errors.Errorf("%[1]s %[2]s: specify a file or \"external: true\"", objType, name) - } obj.File = absPath(details.WorkingDir, obj.File) } diff --git a/cli/compose/loader/loader_test.go b/cli/compose/loader/loader_test.go index 0aab9f05ff..e56202d86c 100644 --- a/cli/compose/loader/loader_test.go +++ b/cli/compose/loader/loader_test.go @@ -214,26 +214,6 @@ configs: require.Len(t, actual.Configs, 1) } -func TestLoadV35(t *testing.T) { - actual, err := loadYAML(` -version: "3.5" -services: - foo: - image: busybox - secrets: [foo, bar, baz] -secrets: - foo: - name: fooqux - external: true - bar: - name: barqux - file: ./full-example.yml -`) - require.NoError(t, err) - assert.Len(t, actual.Services, 1) - assert.Len(t, actual.Secrets, 2) -} - func TestParseAndLoad(t *testing.T) { actual, err := loadYAML(sampleYAML) require.NoError(t, err) @@ -1484,11 +1464,24 @@ services: image: busybox isolation: process configs: - super: + foo: + name: fooqux external: true + bar: + name: barqux + file: ./example1.env +secrets: + foo: + name: fooqux + external: true + bar: + name: barqux + file: ./full-example.yml `) require.NoError(t, err) - require.Len(t, actual.Services, 1) + assert.Len(t, actual.Services, 1) + assert.Len(t, actual.Secrets, 2) + assert.Len(t, actual.Configs, 2) assert.Equal(t, "process", actual.Services[0].Isolation) } @@ -1535,8 +1528,8 @@ func TestLoadSecretsWarnOnDeprecatedExternalNameVersion35(t *testing.T) { }, }, } - details := types.ConfigDetails{ - Version: "3.5", + details := types.ConfigDetails{ + Version: "3.5", } secrets, err := LoadSecrets(source, details) require.NoError(t, err) diff --git a/cli/compose/schema/bindata.go b/cli/compose/schema/bindata.go index 616f7cb7ab..da71abb1a7 100644 --- a/cli/compose/schema/bindata.go +++ b/cli/compose/schema/bindata.go @@ -88,7 +88,7 @@ func dataConfig_schema_v30Json() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "data/config_schema_v3.0.json", size: 11063, mode: os.FileMode(420), modTime: time.Unix(1509949700, 0)} + info := bindataFileInfo{name: "data/config_schema_v3.0.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -108,7 +108,7 @@ func dataConfig_schema_v31Json() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "data/config_schema_v3.1.json", size: 12209, mode: os.FileMode(420), modTime: time.Unix(1509949700, 0)} + info := bindataFileInfo{name: "data/config_schema_v3.1.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -128,7 +128,7 @@ func dataConfig_schema_v32Json() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "data/config_schema_v3.2.json", size: 13708, mode: os.FileMode(420), modTime: time.Unix(1509949700, 0)} + info := bindataFileInfo{name: "data/config_schema_v3.2.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -148,7 +148,7 @@ func dataConfig_schema_v33Json() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "data/config_schema_v3.3.json", size: 15367, mode: os.FileMode(420), modTime: time.Unix(1509949700, 0)} + info := bindataFileInfo{name: "data/config_schema_v3.3.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -168,32 +168,12 @@ func dataConfig_schema_v34Json() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "data/config_schema_v3.4.json", size: 15750, mode: os.FileMode(420), modTime: time.Unix(1509979293, 0)} + info := bindataFileInfo{name: "data/config_schema_v3.4.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _dataConfig_schema_v35Json = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\xcf\x72\xdb\xbc\x11\xbf\xeb\x29\x38\xfc\xbe\x5b\x24\x3b\x33\x4d\x3b\xd3\xdc\x7a\xec\xa9\x3d\xd7\xa3\x70\x20\x70\x25\x21\x06\x01\x64\x01\xca\x56\x32\x7e\xf7\x0e\xff\x8a\x04\x41\x02\x94\xe8\xd8\x69\x73\xb2\x45\xee\x2e\xb0\x8b\xdd\xdf\xee\x02\xe0\x8f\x55\x14\xc5\x7f\x6a\x7a\x84\x8c\xc4\x9f\xa3\xf8\x68\x8c\xfa\x7c\x7f\xff\x55\x4b\xb1\xa9\x9e\xde\x49\x3c\xdc\xa7\x48\xf6\x66\xf3\xf1\xd3\x7d\xf5\xec\x8f\x78\x5d\xf0\xb1\xb4\x60\xa1\x52\xec\xd9\x21\xa9\xde\x24\xa7\xbf\xdc\xfd\xf5\xae\x60\xaf\x48\xcc\x59\x41\x41\x24\x77\x5f\x81\x9a\xea\x19\xc2\xb7\x9c\x21\x14\xcc\x0f\xf1\x09\x50\x33\x29\xe2\xed\x7a\x55\xbc\x53\x28\x15\xa0\x61\xa0\xe3\xcf\x51\x31\xb9\x28\x6a\x49\x9a\x07\x1d\xb1\xda\x20\x13\x87\xb8\x7c\xfc\x52\x4a\x88\xa2\x58\x03\x9e\x18\xed\x48\x68\xa7\xfa\xc7\xfd\x45\xfe\x7d\x4b\xb6\xb6\xa5\x76\x26\x5b\x3e\x57\xc4\x18\x40\xf1\xef\xe1\xdc\xca\xd7\x5f\x1e\xc8\xe6\xfb\x3f\x36\xff\xf9\xb8\xf9\xfb\x5d\xb2\xd9\x7e\xf8\xb3\xf7\xba\xb0\x2f\xc2\xbe\x1a\x3e\x85\x3d\x13\xcc\x30\x29\xda\xf1\xe3\x96\xf2\xa5\xfe\xef\xa5\x1d\x98\xa4\x69\x49\x4c\x78\x6f\xec\x3d\xe1\x1a\xfa\x3a\x0b\x30\x4f\x12\x1f\x7d\x3a\xb7\x64\x6f\xa4\x73\x3d\xbe\x43\xe7\xbe\x3a\x27\xc9\xf3\xcc\xbb\x82\x0d\xd5\x1b\x29\x53\x0d\xbf\xcc\xfa\x69\xa0\x08\xc6\xef\xb2\x15\xd5\x9b\x79\x6c\x31\xfc\x32\x0a\x57\xa8\xe1\x53\xb8\xa1\x7a\x23\x85\xab\xe1\x6f\x53\x78\xd5\x28\xed\x9e\x63\xfc\xe5\x79\x53\xfc\x7d\x29\x65\x4e\xca\xab\xa4\x74\xe6\x57\x2a\xd1\xc3\x3c\x97\x39\x5d\x98\x33\x6e\xcf\xd6\xa0\x23\x96\x4c\x41\x71\x79\x2e\x67\xee\xb6\x59\x45\x90\x81\x30\x71\x6b\xa6\x28\x8a\x77\x39\xe3\xa9\x6d\x75\x29\xe0\x5f\x85\x88\x87\xce\xc3\x28\xfa\x61\xc3\x7b\x47\x4e\xf9\xbe\xf7\x6b\xdc\x29\xda\xf7\x23\xba\xb4\xef\xa9\x14\x06\x9e\x4d\xa9\xd4\xf4\xd0\x95\x09\x24\x7d\x04\xdc\x33\x0e\xa1\x1c\x04\x2b\x4f\x1f\x31\x19\x67\xda\x24\x12\x93\x94\x51\xe3\xe4\xe7\x64\x07\xfc\x26\x09\x94\xd0\x23\x24\x7b\x94\x99\x57\xca\x3e\xa9\x34\xd1\x4e\x41\x0d\x82\x07\x6a\x6e\x08\x1e\xc0\x6d\x59\x8b\x78\xc0\xed\x8f\xad\x96\xb5\xf3\x6b\xbb\x72\x08\x8c\x29\x51\x09\x49\xd3\xde\x3c\x08\x22\x39\xc7\xeb\x28\x66\x06\x32\xed\x56\x28\x8a\x73\xc1\xbe\xe5\xf0\xcf\x9a\xc4\x60\x0e\xb6\xdc\x14\xa5\x5a\x5e\xf0\x01\x65\xae\x12\x45\xb0\x08\xa4\x69\x63\xc7\x54\x66\x19\x11\x4b\x45\xd7\x1c\x3d\x02\x2c\x3f\xc0\xf9\xa8\x1b\xb2\xf5\x18\xdd\x57\xed\x68\xbd\x69\x8d\x68\xe3\xd7\x67\x88\x17\x7e\xc4\xf0\x63\x46\x01\xb9\x32\x47\x1a\x0a\x01\xd3\xa1\xe0\xa4\xcf\x59\x1a\x4e\x7c\x98\x43\x9c\xc9\xb4\x3f\x6f\x91\x67\x3b\xc0\x41\x48\xf6\x23\x6b\xf8\x7b\xbb\x72\xbd\xb1\x56\xdf\x10\x26\x00\x13\x41\x32\x9f\xad\x62\x8a\x90\x82\x30\x8c\xf0\x44\x2b\xa0\x3d\xf2\x66\xa5\x26\x56\x26\x0e\x82\xe4\x18\xe1\xc0\xb4\xc1\xf3\x34\x28\xbd\x74\x27\x96\x82\x02\x91\xea\xa4\x6a\x42\xe6\xa3\x67\x9c\x42\xdb\x91\x2c\x0a\x13\xa9\x98\xca\x0a\x95\x98\x22\x2f\x14\x73\x8b\x2d\xc6\x44\x03\x41\x7a\xbc\x92\x5f\x66\x84\x89\x90\x45\x05\x61\xf0\xac\x24\xab\x60\xec\xdd\xe1\x13\x88\x53\xd2\xfa\xcd\x6c\x33\x80\x38\x31\x94\x22\x6b\x40\x3a\x2c\x3b\x77\xf8\x9f\x95\xd4\x70\x3b\x38\xd6\x1c\x0f\x8d\xe2\xeb\x36\xa6\xb7\x7d\xeb\xc5\x7b\x89\x19\x29\x26\xdb\x8c\xdd\x8d\xe1\xde\x50\x43\xcf\xeb\x1a\xb0\xab\x43\x51\xd5\x12\x9e\x70\x26\x1e\x97\x77\x71\x78\x36\x48\x92\xa3\xd4\xe6\x9a\x02\x28\x3e\x02\xe1\xe6\x48\x8f\x40\x1f\x27\xd8\xbb\x54\x3d\x6e\xa9\x4d\x88\x93\xb3\x8c\x1c\xfc\x44\x8a\xfa\x48\xae\x2e\xf4\xe2\x45\x8d\xdf\x11\x2b\x0f\x87\x82\x74\xcc\xe3\x06\x8d\x43\xfd\xda\x57\x72\xa7\xc8\x4e\x80\xa1\x55\xa4\x54\x97\x7e\xc7\x7e\x19\x92\xcd\xbd\x0d\x62\x8f\xf4\xcb\x5d\xd5\x1f\x4e\x44\x55\xf9\x1f\xe7\xf1\x76\x98\x32\x87\x49\xd3\x7e\x62\x69\x18\x56\xe7\xf6\x56\x25\x23\xb4\x28\x67\x11\xf4\xc8\xba\x5e\x48\xeb\x7a\x3d\x19\xe4\xfc\x0b\xed\x80\x78\x90\x58\xc7\x90\xfa\xaa\x36\x62\x7e\xfb\x16\xb4\x74\xde\x1e\xdf\xa3\xcd\xd8\xf4\x42\xa7\x79\x99\xae\xdf\xc5\x4a\x3a\xc2\x19\xd1\xe0\x0f\xf6\xc9\x7e\xac\x95\xc6\xd4\xe9\x53\xa0\x4f\xb8\x78\xff\x36\xc9\x3b\xc2\x3a\x2a\x33\xbc\x75\xf3\x88\xea\x96\xa8\x9c\x3b\x27\xb2\xf5\x17\xad\xaf\xd9\x59\xaa\x7e\xe1\xdd\xc7\x8a\x12\x21\xba\x01\xa6\x24\x9a\x9f\xd2\x0b\x5d\x70\xea\x92\xf0\xab\xc1\x87\xed\x91\xbd\xdc\x41\x4c\xaf\xd3\x53\x4d\xa0\x94\x83\xda\xd1\x51\x31\x61\xe0\x50\xb4\x32\xee\x24\x90\xef\x38\xd3\x47\x48\xe7\xf0\xa0\x34\x92\x4a\x1e\x16\x18\xce\xdd\x9f\xf0\x60\x98\xe8\xaf\xae\xaa\xcd\x14\xb2\x13\xe3\x70\xb0\x34\xde\x49\xc9\x81\x88\x5e\xa2\x40\x20\x69\x22\x05\x3f\x07\x50\x6a\x43\xd0\xbb\x2b\xa1\x81\xe6\xc8\xcc\x39\x91\xca\x2c\x5e\x15\xea\x63\x96\x68\xf6\x1d\xfa\xb1\x77\xf1\xfa\x5a\xd0\xd6\x9a\x90\xb5\xc7\x1e\xfd\xde\x8a\xf8\xbf\xd9\x8a\xd0\x67\x4d\xcd\x75\xb5\xb5\x36\x29\x13\x89\x54\x20\xbc\xb1\xa1\x8d\x54\xc9\x01\x09\x85\x44\x01\x32\xe9\x34\x45\x0f\x60\xd3\x1c\x49\x31\xfe\x50\x8c\x66\x07\x41\xdc\xb8\xd3\x21\x35\x99\xda\x5f\xb9\x09\x60\x8c\x3f\xd8\x73\xce\x32\x36\x1e\x34\x0e\xaf\x0d\xa8\xd7\xaa\x5a\xcd\x5d\xa2\x4d\x94\x67\x41\x90\x3d\xd1\x21\x4c\x37\x08\x01\x9d\xc1\x91\xe0\x8c\xd4\x51\x06\xe6\x7e\x24\x3f\xb9\xfa\x06\xe7\xbc\x7a\xa7\xe5\xa5\xbc\x75\x3d\x91\xad\x93\x7e\x56\xe9\x65\x4f\x63\x3b\x5a\xfd\xb8\x83\x2a\xd7\xde\x26\xae\xa4\x11\x7a\xaa\x01\x69\x49\x87\xc7\xbe\xd1\x2f\x81\xd0\xbd\x35\x2a\xc9\x1d\x6b\x13\x80\xe3\xf5\x48\x81\xd8\xf9\xda\xa8\x1f\x5c\x11\x74\x78\xa8\x14\x9a\x69\x03\x82\xba\xf7\x57\x9d\x4c\x3b\x36\x38\xbc\x18\x1a\x65\xba\xef\x0a\xeb\xba\x4a\x2a\x72\xa8\xf0\x36\xb8\xd1\x09\x8f\xd5\xfa\x46\xc0\x4f\x51\x45\x48\x2a\xd5\xc8\xd2\x84\xab\x31\x37\xcd\x5a\x5b\x17\x13\x75\xe8\x18\x64\x3c\x49\x7c\x2c\x12\x52\xca\xdc\xc8\xb1\xb2\x58\x66\xdc\x29\xb0\xf6\xfa\x1a\x01\xae\x83\xf0\x2e\xa9\xf7\x72\xc1\xf4\xa1\x7c\x4d\x34\x7a\x60\xce\x34\xd9\x59\xe7\x12\xae\x44\x5b\x64\x06\x3c\xb9\xf3\xbd\xbf\x60\x40\x30\xc8\xac\x03\x86\xa6\x94\xea\x66\x7c\xd0\xef\x73\x1b\xde\xb0\x0c\x64\xee\x04\xa7\x90\x6a\x89\xa0\x99\x5f\x6f\xad\xba\x6e\x5a\xcb\x8b\x3b\xd7\x17\x3c\x2e\xd4\xa1\xb4\x3d\xe8\xa1\x73\x5c\x55\xed\x02\x78\xdd\x24\x24\x3d\x82\x48\xcb\x83\x94\xa0\x5c\x8a\xa0\x38\xa3\x44\xfb\xea\x95\x1b\xf6\x9c\x73\x95\x12\x03\x49\x7d\x4b\x66\x4e\x85\x38\x51\x1a\x2a\x82\x84\x73\xe0\x4c\x67\x21\xa5\x56\x9c\x02\x27\xce\x5c\xe3\xf5\x9b\x92\x7d\x4f\x18\xcf\x11\x12\x42\x47\x93\x82\xc5\x91\x49\xc1\x8c\x74\x82\x57\xd8\x90\x19\x79\x4e\x9a\x61\x4b\x12\x4f\xd4\x96\x4c\x12\x53\x77\xa9\xb5\x2e\xfc\x22\xcf\x1c\xc5\x4e\x15\x17\x9b\x3d\x43\x6d\xaa\x9e\x58\xaa\xfa\x57\x1f\xd4\x5f\x46\xf7\x19\x42\xb7\xa6\x3b\x5e\x57\x55\x25\xf3\x1a\x86\x09\x77\xb8\xb4\x1f\x23\xde\xd9\x8c\x38\xb0\x18\x82\x2e\x00\xb5\x3d\x39\xf0\xf2\x2f\x6a\x85\x0a\x92\x24\x67\x55\x21\xb4\x84\x29\xa8\x14\xd5\x3c\x42\xbc\xf4\xc6\xb0\x28\x7c\xb4\x68\xe3\x32\x65\xbc\x08\x52\x32\x3c\x31\x91\xca\xa7\xf9\xe8\xbb\x80\xb5\x15\x27\x14\x2c\xc4\xbe\xd5\xd0\xda\x20\x61\xc2\xcc\x3e\x51\xb3\xcd\xa2\x10\xf6\x80\x20\x86\x11\x11\x4d\x77\x36\xd1\x78\x77\xe3\xd3\xcd\xaf\x61\x4d\xa1\x55\x51\xe2\xbf\xc1\xc6\xe6\xad\x8b\x7f\x43\x8d\xd8\x86\xbb\x27\xbb\xb7\x74\xde\xea\x70\x2c\xa3\x53\x95\x7b\x4f\xe7\x32\xc8\xe4\xf4\x4d\x94\x1b\x2e\x83\xfb\x54\x6c\xc8\x16\xa8\x5e\x82\x8e\x73\x6b\xaa\x44\xaa\xe5\xf7\x93\xfc\x47\xb6\x5b\xff\x6e\x06\x53\x24\x5b\x0a\x43\x82\x0f\xb8\x63\x67\xf9\x14\xbd\x03\x74\xc8\x77\x22\xec\xea\xe6\x3b\x43\x87\xfe\xe5\x91\xf2\x6e\xca\xc8\xaa\x3e\xb4\x9d\xd8\xba\xb5\xd5\x36\x78\x89\x47\x2f\x86\x2c\x37\xff\xb2\x29\xb4\x37\x81\x5d\xdd\x23\x31\x86\xd0\x63\x50\xa3\x39\xb3\xde\xbf\x01\x87\x06\xdb\x21\x4e\x18\xaa\xa9\x16\x40\xa1\x90\x9b\x3a\xff\x1b\x48\xf5\xab\xfb\xf5\xcf\xf3\xc1\xfa\x9b\x15\xef\x77\x11\x25\xd5\xd5\xb9\x3e\xc4\xf3\x02\x6e\xa7\xbe\x83\x75\x7d\xe3\xe5\x1a\x24\x43\xe7\x72\xd5\x54\xbf\x97\xeb\xad\x97\xcb\x3a\x5c\xec\x2c\xdb\x70\x57\x71\xca\x92\xc1\x37\xa0\x6a\x8e\x6d\x7f\x1a\x36\x99\xe3\x4b\xd1\x7e\x0d\x35\x75\xf5\xa0\x21\x19\xd9\xdb\xb6\x06\xad\x8d\x38\xad\xf9\x82\xf9\xe3\xee\xc3\x44\xa5\x38\x75\x53\xf1\x95\x4a\xac\x05\xae\x75\xb8\xd7\xd4\x6a\xc2\x1b\xeb\x0e\x3f\x74\x1b\xc7\x88\x86\x7f\xf0\xd9\x5b\xa1\xa7\x38\x0f\x76\xbd\x7f\xf4\x0f\xf2\xaa\x4f\xd6\xb6\x3d\xfb\x58\x24\xd5\xbd\xdf\x4e\xc2\xde\x76\xf7\x25\x46\x3f\x54\x70\x7d\x0c\x67\x1f\x23\x36\x1f\xa5\x8d\xdc\x6c\x58\x75\xff\x96\x1f\x19\xae\x5e\x56\xff\x0d\x00\x00\xff\xff\x19\x6c\xac\x27\xce\x3d\x00\x00") - -func dataConfig_schema_v35JsonBytes() ([]byte, error) { - return bindataRead( - _dataConfig_schema_v35Json, - "data/config_schema_v3.5.json", - ) -} - -func dataConfig_schema_v35Json() (*asset, error) { - bytes, err := dataConfig_schema_v35JsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "data/config_schema_v3.5.json", size: 15822, mode: os.FileMode(420), modTime: time.Unix(1510079013, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _dataConfig_schema_v35Json = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\xcf\x72\xdb\xbc\x11\xbf\xeb\x29\x38\xfc\xbe\x5b\x24\x3b\x33\x4d\x3b\xd3\xdc\x7a\xec\xa9\x3d\xd7\xa3\x70\x20\x70\x25\x21\x06\x01\x64\x01\xca\x56\x32\x7e\xf7\x0e\xff\x0a\x24\x41\x02\x94\xe8\xd8\x69\x73\xb2\x45\xee\x2e\xb0\x8b\xdd\x1f\x76\x17\xe0\x8f\x55\x14\xc5\x7f\x6a\x7a\x84\x8c\xc4\x9f\xa3\xf8\x68\x8c\xfa\x7c\x7f\xff\x55\x4b\xb1\xa9\x9e\xde\x49\x3c\xdc\xa7\x48\xf6\x66\xf3\xf1\xd3\x7d\xf5\xec\x8f\x78\x5d\xf0\xb1\xb4\x60\xa1\x52\xec\xd9\x21\xa9\xde\x24\xa7\xbf\xdc\xfd\xf5\xae\x60\xaf\x48\xcc\x59\x41\x41\x24\x77\x5f\x81\x9a\xea\x19\xc2\xb7\x9c\x21\x14\xcc\x0f\xf1\x09\x50\x33\x29\xe2\xed\x7a\x55\xbc\x53\x28\x15\xa0\x61\xa0\xe3\xcf\x51\x31\xb9\x28\x6a\x49\x9a\x07\x96\x58\x6d\x90\x89\x43\x5c\x3e\x7e\x29\x25\x44\x51\xac\x01\x4f\x8c\x5a\x12\xda\xa9\xfe\x71\x7f\x91\x7f\xdf\x92\xad\xfb\x52\xad\xc9\x96\xcf\x15\x31\x06\x50\xfc\x7b\x38\xb7\xf2\xf5\x97\x07\xb2\xf9\xfe\x8f\xcd\x7f\x3e\x6e\xfe\x7e\x97\x6c\xb6\x1f\xfe\xec\xbc\x2e\xec\x8b\xb0\xaf\x86\x4f\x61\xcf\x04\x33\x4c\x8a\x76\xfc\xb8\xa5\x7c\xa9\xff\x7b\x69\x07\x26\x69\x5a\x12\x13\xde\x19\x7b\x4f\xb8\x86\xae\xce\x02\xcc\x93\xc4\x47\x9f\xce\x2d\xd9\x1b\xe9\x5c\x8f\xef\xd0\xb9\xab\xce\x49\xf2\x3c\xf3\xae\x60\x43\xf5\x46\xca\x54\xc3\x2f\xb3\x7e\x1a\x28\x82\xf1\xbb\x6c\x45\xf5\x66\x1e\x5b\x0c\xbf\x8c\xc2\x15\x6a\xf8\x14\x6e\xa8\xde\x48\xe1\x6a\xf8\xdb\x14\x5e\x35\x4a\xbb\xe7\x18\x7f\x79\xde\x14\x7f\x5f\x4a\x99\x93\xf2\x2a\x29\xd6\xfc\x4a\x25\x3a\x98\xe7\x32\xa7\x0b\x73\xc6\xed\xd9\x1a\x74\xc4\x92\x29\x28\x2e\xcf\xe5\xcc\xdd\x36\xab\x08\x32\x10\x26\x6e\xcd\x14\x45\xf1\x2e\x67\x3c\xed\x5b\x5d\x0a\xf8\x57\x21\xe2\xc1\x7a\x18\x45\x3f\xfa\xf0\x6e\xc9\x29\xdf\x77\x7e\x8d\x3b\x45\xfb\x7e\x44\x97\xf6\x3d\x95\xc2\xc0\xb3\x29\x95\x9a\x1e\xba\x32\x81\xa4\x8f\x80\x7b\xc6\x21\x94\x83\x60\xe5\xe9\x23\x26\xe3\x4c\x9b\x44\x62\x92\x32\x6a\x9c\xfc\x9c\xec\x80\xdf\x24\x81\x12\x7a\x84\x64\x8f\x32\xf3\x4a\xd9\x27\x95\x26\xda\x29\xa8\x41\xf0\x40\xcd\x0d\xc1\x03\xb8\x2d\xdb\x23\x1e\x70\xfb\x63\xab\x65\xb5\x7e\x6d\x57\x0e\x81\x31\x25\x2a\x21\x69\xda\x99\x07\x41\x24\xe7\x78\x1d\xc5\xcc\x40\xa6\xdd\x0a\x45\x71\x2e\xd8\xb7\x1c\xfe\x59\x93\x18\xcc\xa1\x2f\x37\x45\xa9\x96\x17\x7c\x40\x99\xab\x44\x11\x2c\x02\x69\xda\xd8\x31\x95\x59\x46\xc4\x52\xd1\x35\x47\x8f\x00\xcb\x0f\x70\x3e\xb2\x43\xb6\x1e\xc3\x7e\xd5\x8e\xd6\x99\xd6\x88\x36\x7e\x7d\x86\x78\xe1\x47\x0c\x3f\x66\x14\x90\x2b\x73\xa4\xa1\x10\x30\x1d\x0a\x4e\xfa\x9c\xa5\xe1\xc4\x87\x39\xc4\x99\x4c\xbb\xf3\x16\x79\xb6\x03\x1c\x84\x64\x37\xb2\x86\xbf\xb7\x2b\xd7\x9b\xde\xea\x1b\xc2\x04\x60\x22\x48\xe6\xb3\x55\x4c\x11\x52\x10\x86\x11\x9e\x68\x05\xb4\x43\xde\xac\xd4\xc4\xca\xc4\x41\x90\x1c\x23\x1c\x98\x36\x78\x9e\x06\xa5\x17\x7b\x62\x29\x28\x10\xa9\x4e\xaa\x22\x64\x3e\x7a\xc6\x29\xb4\x15\xc9\xa2\x30\x91\x8a\xa9\x5d\xa1\x12\x53\xec\x0b\xc5\xdc\xe2\x1e\x63\xa2\x81\x20\x3d\x5e\xc9\x2f\x33\xc2\x44\xc8\xa2\x82\x30\x78\x56\x92\x55\x30\xf6\xee\xf0\x09\xc4\x29\x69\xfd\x66\xb6\x19\x40\x9c\x18\x4a\x91\x35\x20\x1d\xb6\x3b\x5b\xfc\xcf\x4a\x6a\xb8\x1d\x1c\x6b\x8e\x87\x46\xf1\x75\x1b\xd3\xdb\xae\xf5\xe2\xbd\xc4\x8c\x14\x93\x6d\xc6\xb6\x63\xb8\x33\xd4\xd0\xf3\x6c\x03\xda\x3a\x14\x59\x2d\xe1\x09\x67\xe2\x71\x79\x17\x87\x67\x83\x24\x39\x4a\x6d\xae\x49\x80\xe2\x23\x10\x6e\x8e\xf4\x08\xf4\x71\x82\xdd\xa6\xea\x70\x4b\x6d\x42\x9c\x9c\x65\xe4\xe0\x27\x52\xd4\x4b\xa2\x25\x27\xa6\x6e\x76\x4c\x11\x5e\x9d\x11\xc6\x8b\xae\x92\x25\x56\x1e\x0e\x05\xe9\x98\x6b\x0e\x2a\x8c\xfa\xb5\x2f\x37\x4f\x91\x9d\x00\x43\xd3\x4d\xa9\x2e\x85\x51\xff\x65\xc8\xb6\xef\xad\x24\x3b\xa4\x5f\xee\xaa\x42\x72\x22\xfc\xca\xff\x38\x8f\xb7\xc3\xbd\x75\xb8\xbb\xf6\x9f\xf4\x34\x0c\x4b\x88\x3b\xab\x92\x11\x5a\xe4\xbd\x08\x7a\x64\x5d\x2f\xa4\x75\x62\x9f\x0c\x92\x83\x0b\xed\x80\x78\xb0\x03\x8f\x41\xfa\x55\xf5\xc6\xfc\x3a\x2f\x68\xe9\xbc\xcd\x00\x8f\x36\x63\xd3\x0b\x9d\xe6\x65\xba\x7e\x17\x2b\xe9\x08\x67\x44\x83\x3f\xd8\x27\x0b\xb7\x56\x1a\x53\xa7\x4f\x81\x3e\xe1\xe2\xfd\xdb\x24\xef\x08\xeb\xa8\xcc\xf0\x1a\xcf\x23\xca\xce\x65\x39\x77\x4e\x64\xeb\xcf\x6e\x5f\xb3\x04\x55\xdd\x0c\xbd\x8b\x15\x25\x42\xd8\x01\xa6\x24\x9a\x9f\x52\x34\x5d\x70\xea\x92\x19\x54\x83\x0f\xeb\xa8\xfe\x72\x07\x31\xbd\x4e\xf1\x35\x81\x52\x0e\x6a\x47\xe9\xc5\x84\x81\x43\x51\xf3\xb8\x37\x81\x7c\xc7\x99\x3e\x42\x3a\x87\x07\xa5\x91\x54\xf2\xb0\xc0\x70\xb6\x89\xc2\x83\x61\xa2\x10\xbb\x2a\x89\x53\xc8\x4e\x8c\xc3\xa1\xa7\xf1\x4e\x4a\x0e\x44\x74\x36\x0a\x04\x92\x26\x52\xf0\x73\x00\xa5\x36\x04\xbd\xed\x0b\x0d\x34\x47\x66\xce\x89\x54\x66\xf1\xf4\x51\x1f\xb3\x44\xb3\xef\xd0\x8d\xbd\x8b\xd7\xd7\x82\xb6\xbd\x09\xf5\x9a\xf1\xd1\xef\x9e\xc5\xff\x4d\xcf\x42\x9f\x35\x35\xd7\xe5\xd6\xda\xa4\x4c\x24\x52\x81\xf0\xc6\x86\x36\x52\x25\x07\x24\x14\x12\x05\xc8\xa4\xd3\x14\x1d\x80\x4d\x73\xac\x4a\x83\x81\x18\xcd\x0e\x82\xb8\x71\xc7\x22\x35\x99\xda\x5f\xd9\x2d\x30\xc6\x1f\xec\x39\x67\x19\x1b\x0f\x1a\x87\xd7\x06\xe4\x6b\x55\xae\xe6\x4e\xd1\x26\xd2\xb3\x20\xc8\x9e\xa8\x10\xa6\x0b\x84\x80\xca\xe0\x48\x70\xc6\xd6\x51\x06\xe6\x7e\x64\x7f\x72\xd5\x0d\xce\x79\x75\x8e\xd5\x4b\x79\xeb\x7a\x22\x5b\x27\xfd\xac\xd4\xab\x3f\x8d\xed\x68\xf6\xe3\x0e\xaa\x5c\x7b\x8b\xb8\x92\x46\xe8\xa9\x02\xa4\x25\x1d\x9e\x0f\x47\xbf\x04\x42\x77\xd6\xa8\x24\x77\xac\x4d\x00\x8e\xd7\x23\x05\x62\xe7\x6b\xa3\x7e\x70\x46\x60\xf1\x50\x29\x34\xd3\x06\x04\x75\x37\x62\x9d\x4c\x3b\x36\x38\xe5\x18\x1a\x65\xba\xee\x0a\xab\xba\x4a\x2a\x72\x18\x6f\xc5\xb8\x6b\x93\xe0\x58\xad\xaf\x0e\xfc\x14\x55\x84\xa4\x52\x8d\x2c\x4d\xb8\x1a\x73\xb7\xd9\x5e\xeb\x62\x22\x0f\x1d\x83\x8c\x27\x89\x8f\xc5\x86\x94\x32\x37\x72\xac\x7a\x2c\x33\x2e\x1f\xf4\x9a\x82\x8d\x00\xd7\x89\xb9\x4d\xea\xbd\x85\x30\x7d\x7a\x5f\x13\x8d\x9e\xac\x33\x4d\x76\xbd\x03\x0c\xd7\x46\x5b\xec\x0c\x78\x72\xef\xf7\xfe\x84\x01\xc1\x20\xeb\x9d\x44\x34\xa9\x94\xbd\xe3\x83\x7e\x9f\xfd\x7a\xc3\x32\x90\xb9\x13\x9c\x42\xb2\x25\x82\x66\x7e\xbe\xb5\xb2\xdd\xb4\x96\x17\x5b\xf7\x1c\x3c\x2e\x64\x51\xf6\x3d\xe8\xc1\x3a\xd7\xaa\xba\x00\x5e\x37\x09\xd9\x1e\x41\xa4\xe5\x89\x4b\xd0\x5e\x8a\xa0\x38\xa3\x44\xfb\xf2\x95\x1b\x7a\xce\xb9\x4a\x89\x81\xa4\xbe\x4e\x33\x27\x43\x9c\x48\x0d\x15\x41\xc2\x39\x70\xa6\xb3\x90\x54\x2b\x4e\x81\x13\xe7\x5e\xe3\xf5\x9b\x92\x7d\x4f\x18\xcf\x11\x12\x42\x03\xfa\xf3\xf5\x4a\x09\x66\xa4\x13\xbc\xc2\x86\xcc\xc8\x73\xd2\x0c\x5b\x92\x78\xa2\xb6\x64\x92\x98\xba\x53\xad\x75\xe1\x17\x79\xe6\x48\x76\xaa\xb8\xd8\xec\x19\x6a\x53\xd5\xc4\x52\xd5\xbf\xba\xa0\xfe\x32\xda\x67\x08\x6d\x4d\x5b\x5e\x57\x65\x25\xf3\x0a\x86\x09\x77\xb8\x94\x1f\x23\xde\xd9\x8c\x38\xb0\x18\x82\x2e\x00\xb5\x3d\x39\xf0\xf2\x2f\x6a\x85\x0a\x92\x24\x67\x55\x22\xb4\x84\x29\xa8\x14\xd5\x3c\x42\xbc\xf4\xc6\xb0\x28\x7c\xb4\x28\xe3\x32\x65\xbc\x08\x52\x32\x3c\x31\x91\xca\xa7\xf9\xe8\xbb\x80\xb5\x15\x27\x14\x7a\x88\x7d\xab\xa1\xb5\x41\xc2\x84\x99\x7d\xa2\xd6\x37\x8b\x42\xd8\x03\x82\x18\x46\x44\x34\x5d\xd9\x44\xe3\xd5\x8d\x4f\x37\xbf\x86\x35\x85\x56\x45\x8a\xff\x06\x8d\xcd\x5b\x17\xff\x86\x1c\xb1\x0d\x77\xcf\xee\xde\xd2\x79\xb3\xc3\xb1\x1d\x9d\xaa\xdc\x7b\x3a\x97\x41\x26\xa7\xaf\xac\xdc\x70\x6b\xdc\xa7\x62\x43\xb6\x40\xf6\x12\x74\x9c\x5b\x53\x25\x52\x2d\xdf\x4f\xf2\x1f\xd9\x6e\xfd\xdd\x0c\xa6\x48\xb6\x14\x86\x04\x1f\x70\xc7\xce\xf4\x29\x7a\x07\xe8\x90\xef\x44\xd8\x1d\xcf\x77\x86\x0e\x76\xc6\x5c\x5f\x62\x19\x59\xd5\x87\xb6\x12\x5b\xb7\xb6\xda\x06\x2f\xf1\xe8\x0d\x92\xe5\xe6\x5f\x16\x85\xfd\x26\xb0\xab\x7a\x24\xc6\x10\x7a\x0c\x2a\x34\x67\xe6\xfb\x37\xe0\xd0\xa0\x1d\xe2\x84\xa1\x9a\x6a\x01\x14\x0a\xb9\xd2\xf3\xbf\x81\x54\xbf\xba\x5f\xff\x3c\x1f\xac\x3f\x6e\xf1\x7e\x40\x51\x52\x5d\xbd\xd7\x07\x5c\x51\x7d\x07\x6b\xf6\xc6\x4b\x31\xd8\xe8\x9c\x4b\x51\x53\xfd\x5e\x8a\x57\x8d\x8a\xee\xa1\xa0\xb5\x24\xc3\x6e\xe0\x94\x25\x83\x6f\x2e\xd5\x1c\xdb\xee\x34\xfa\x64\x8e\x4f\x41\xbb\xb9\xcf\xd4\x95\x81\x86\x64\xa4\x27\xdd\x1b\xb4\x36\xe2\xb4\xe6\x0b\xe2\xfe\xdd\x87\x89\x0c\x6f\xea\x86\xe1\x2b\xa5\x46\x0b\x5c\xc7\x70\xaf\x69\xaf\x78\x6e\xac\x3b\xfc\x92\x6d\x3c\xfe\x1b\xfe\xc1\x77\x6d\x85\x9e\xe2\x3c\xe8\x56\xff\xe8\x1e\xc0\x55\xdf\xa4\x6d\x3b\xf6\xe9\x91\x54\x17\x7b\xad\x8d\x76\x6b\xf7\x13\x46\xbf\x44\x70\x7d\xed\xd6\x3f\xfe\x6b\xbe\x3a\x1b\xb9\x91\xb0\xb2\xff\x96\x5f\x11\xae\x5e\x56\xff\x0d\x00\x00\xff\xff\xaa\xc2\x0c\x76\xaf\x3d\x00\x00") +var _dataConfig_schema_v35Json = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x1b\x4b\x73\xdb\xbc\xf1\xae\x5f\xc1\xe1\xf7\xdd\x22\xd9\x99\x69\xda\x99\xe6\xd6\x63\x4f\xed\xb9\x1e\x85\x03\x81\x2b\x09\x31\x08\x20\x0b\x50\xb6\x92\xf1\x7f\xef\xf0\x29\x90\x04\x09\x50\xa2\x63\xa7\xcd\xc9\x16\xb9\xbb\xc0\xbe\x1f\x00\x7f\xac\xa2\x28\xfe\x53\xd3\x23\x64\x24\xfe\x1c\xc5\x47\x63\xd4\xe7\xfb\xfb\xaf\x5a\x8a\x4d\xf5\xf4\x4e\xe2\xe1\x3e\x45\xb2\x37\x9b\x8f\x9f\xee\xab\x67\x7f\xc4\xeb\x02\x8f\xa5\x05\x0a\x95\x62\xcf\x0e\x49\xf5\x26\x39\xfd\xe5\xee\xaf\x77\x05\x7a\x05\x62\xce\x0a\x0a\x20\xb9\xfb\x0a\xd4\x54\xcf\x10\xbe\xe5\x0c\xa1\x40\x7e\x88\x4f\x80\x9a\x49\x11\x6f\xd7\xab\xe2\x9d\x42\xa9\x00\x0d\x03\x1d\x7f\x8e\x8a\xcd\x45\x51\x0b\xd2\x3c\xb0\xc8\x6a\x83\x4c\x1c\xe2\xf2\xf1\x4b\x49\x21\x8a\x62\x0d\x78\x62\xd4\xa2\xd0\x6e\xf5\x8f\xfb\x0b\xfd\xfb\x16\x6c\xdd\xa7\x6a\x6d\xb6\x7c\xae\x88\x31\x80\xe2\xdf\xc3\xbd\x95\xaf\xbf\x3c\x90\xcd\xf7\x7f\x6c\xfe\xf3\x71\xf3\xf7\xbb\x64\xb3\xfd\xf0\x67\xe7\x75\x21\x5f\x84\x7d\xb5\x7c\x0a\x7b\x26\x98\x61\x52\xb4\xeb\xc7\x2d\xe4\x4b\xfd\xdf\x4b\xbb\x30\x49\xd3\x12\x98\xf0\xce\xda\x7b\xc2\x35\x74\x79\x16\x60\x9e\x24\x3e\xfa\x78\x6e\xc1\xde\x88\xe7\x7a\x7d\x07\xcf\x5d\x76\x4e\x92\xe7\x99\x57\x83\x0d\xd4\x1b\x31\x53\x2d\xbf\x8c\xfe\x34\x50\x04\xe3\x37\xd9\x0a\xea\xcd\x2c\xb6\x58\x7e\x19\x86\xab\xa8\xe1\x63\xb8\x81\x7a\x23\x86\xab\xe5\x6f\x63\x78\xd5\x30\xed\xde\x63\xfc\xe5\x79\x53\xfc\x7d\x29\x69\x4e\xd2\xab\xa8\x58\xfb\x2b\x99\xe8\xc4\x3c\x97\x38\x5d\x31\x67\x5c\x9e\xad\x40\x47\x24\x99\x82\xe2\xf2\x5c\xee\xdc\x2d\xb3\x0a\x20\x03\x61\xe2\x56\x4c\x51\x14\xef\x72\xc6\xd3\xbe\xd4\xa5\x80\x7f\x15\x24\x1e\xac\x87\x51\xf4\xa3\x1f\xde\x2d\x3a\xe5\xfb\xce\xaf\x71\xa3\x68\xdf\x8f\xf0\xd2\xbe\xa7\x52\x18\x78\x36\x25\x53\xd3\x4b\x57\x22\x90\xf4\x11\x70\xcf\x38\x84\x62\x10\xac\x2c\x7d\x44\x64\x9c\x69\x93\x48\x4c\x52\x46\x8d\x13\x9f\x93\x1d\xf0\x9b\x28\x50\x42\x8f\x90\xec\x51\x66\x5e\x2a\xfb\xa4\xe2\x44\x3b\x09\x35\x11\x3c\x90\x73\x43\xf0\x00\x6e\xc9\xf6\x80\x07\xd8\x7e\xdf\x6a\x51\xad\x5f\xdb\x95\x83\x60\x4c\x89\x4a\x48\x9a\x76\xf6\x41\x10\xc9\x39\x5e\x47\x31\x33\x90\x69\x37\x43\x51\x9c\x0b\xf6\x2d\x87\x7f\xd6\x20\x06\x73\xe8\xd3\x4d\x51\xaa\xe5\x09\x1f\x50\xe6\x2a\x51\x04\x0b\x47\x9a\x16\x76\x4c\x65\x96\x11\xb1\x94\x77\xcd\xe1\x23\x40\xf2\x83\x38\x1f\xd9\x2e\x5b\xaf\x61\xbf\x6a\x57\xeb\x6c\x6b\x84\x1b\x3f\x3f\xc3\x78\xe1\x8f\x18\xfe\x98\x51\x84\x5c\x99\x23\x0d\x0d\x01\xd3\xae\xe0\x84\xcf\x59\x1a\x0e\x7c\x98\x03\x9c\xc9\xb4\xbb\x6f\x91\x67\x3b\xc0\x81\x4b\x76\x3d\x6b\xf8\x7b\xbb\x72\xbd\xe9\x69\xdf\x10\x26\x00\x13\x41\x32\x9f\xac\x62\x8a\x90\x82\x30\x8c\xf0\x44\x2b\xa0\x1d\xf0\x46\x53\x13\x9a\x89\x83\x42\x72\x8c\x70\x60\xda\xe0\x79\x3a\x28\xbd\xd8\x1b\x4b\x41\x81\x48\x75\x52\x35\x21\xf3\xa3\x67\x9c\x42\xdb\x91\x2c\x1a\x26\x52\x31\x95\x15\x2a\x32\x45\x5e\x28\xf6\x16\xf7\x10\x13\x0d\x04\xe9\xf1\x4a\x7c\x99\x11\x26\x42\x94\x0a\xc2\xe0\x59\x49\x56\x85\xb1\x77\x17\x9f\x40\x9c\x92\xd6\x6e\x66\x8b\x01\xc4\x89\xa1\x14\x59\x13\xa4\xc3\xb2\xb3\x85\xff\xac\xa4\x86\xdb\x83\x63\x8d\xf1\xd0\x30\xbe\x6e\x7d\x7a\xdb\x95\x5e\xbc\x97\x98\x91\x62\xb3\xcd\xda\xb6\x0f\x77\x96\x1a\x5a\x9e\x2d\x40\x9b\x87\xa2\xaa\x25\x3c\xe1\x4c\x3c\x2e\x6f\xe2\xf0\x6c\x90\x24\x47\xa9\xcd\x35\x05\x50\x7c\x04\xc2\xcd\x91\x1e\x81\x3e\x4e\xa0\xdb\x50\x1d\x6c\xa9\x4d\x88\x91\xb3\x8c\x1c\xfc\x40\x8a\x7a\x41\xb4\xe4\xc4\xd4\xc3\x8e\x29\xc0\xab\x2b\xc2\x78\x51\x2d\x59\x64\xe5\xe1\x50\x80\x8e\x99\xe6\xa0\xc3\xa8\x5f\xfb\x6a\xf3\x14\xd9\x09\x30\xb4\xdc\x94\xea\xd2\x18\xf5\x5f\x86\xa4\x7d\x6f\x27\xd9\x01\xfd\x72\x57\x35\x92\x13\xee\x57\xfe\xc7\x79\xbc\x1d\xe6\xd6\x61\x76\xed\x3f\xe9\x71\x18\x56\x10\x77\xb4\x92\x11\x5a\xd4\xbd\x08\x7a\x44\xaf\x17\xd0\xba\xb0\x4f\x06\xc5\xc1\x05\x76\x00\x3c\xc8\xc0\x63\x21\xfd\xaa\x7e\x63\x7e\x9f\x17\xa4\x3a\xef\x30\xc0\xc3\xcd\xd8\xf6\x42\xb7\x79\xd9\xae\xdf\xc4\x4a\x38\xc2\x19\xd1\xe0\x77\xf6\xc9\xc6\xad\xa5\xc6\xd4\xe9\x53\xa0\x4d\xb8\x70\xff\x36\x89\x3b\x82\x3a\x4a\x33\xbc\xc7\xf3\x90\xb2\x6b\x59\xce\x9d\x1b\xd9\xfa\xab\xdb\xd7\x6c\x41\x55\xb7\x42\xef\xc6\x8a\x32\x42\xd8\x0e\xa6\x24\x9a\x9f\xd2\x34\x5d\xe2\xd4\xa5\x32\xa8\x16\x1f\xf6\x51\x7d\x75\x07\x21\xbd\x4e\xf3\x35\x11\xa5\x1c\xd0\x8e\xd6\x8b\x09\x03\x87\xa2\xe7\x71\x27\x81\x7c\xc7\x99\x3e\x42\x3a\x07\x07\xa5\x91\x54\xf2\x30\xc7\x70\x8e\x89\xc2\x9d\x61\xa2\x11\xbb\xaa\x88\x53\xc8\x4e\x8c\xc3\xa1\xc7\xf1\x4e\x4a\x0e\x44\x74\x12\x05\x02\x49\x13\x29\xf8\x39\x00\x52\x1b\x82\xde\xf1\x85\x06\x9a\x23\x33\xe7\x44\x2a\xb3\x78\xf9\xa8\x8f\x59\xa2\xd9\x77\xe8\xfa\xde\xc5\xea\x6b\x42\xdb\xde\x86\x7a\xc3\xf8\xe8\xf7\xcc\xe2\xff\x66\x66\xa1\xcf\x9a\x9a\xeb\x6a\x6b\x6d\x52\x26\x12\xa9\x40\x78\x7d\x43\x1b\xa9\x92\x03\x12\x0a\x89\x02\x64\xd2\x29\x8a\x4e\x80\x4d\x73\xac\x5a\x83\x01\x19\xcd\x0e\x82\xb8\xe3\x8e\x05\x6a\x32\xb5\xbf\x72\x5a\x60\x8c\xdf\xd9\x73\xce\x32\x36\xee\x34\x0e\xab\x0d\xa8\xd7\xaa\x5a\xcd\x5d\xa2\x4d\x94\x67\x41\x21\x7b\xa2\x43\x98\x6e\x10\x02\x3a\x83\x23\xc1\x19\xa9\xa3\x74\xcc\xfd\x48\x7e\x72\xf5\x0d\xce\x7d\x75\x8e\xd5\x4b\x7a\xeb\x7a\x23\x5b\x27\xfc\xac\xd2\xab\xbf\x8d\xed\x68\xf5\xe3\x76\xaa\x5c\x7b\x9b\xb8\x12\x46\xe8\xa9\x06\xa4\x05\x1d\x9e\x0f\x47\xbf\x44\x84\xee\xe8\xa8\x04\x77\xe8\x26\x20\x8e\xd7\x2b\x05\xc6\xce\xd7\x8e\xfa\xc1\x15\x81\x85\x43\xa5\xd0\x4c\x1b\x10\xd4\x3d\x88\x75\x22\xed\xd8\xe0\x94\x63\x28\x94\xe9\xbe\x2b\xac\xeb\x2a\xa1\xc8\x61\x7c\x14\xe3\xee\x4d\x82\x7d\xb5\xbe\x3a\xf0\x53\x58\x11\x92\x4a\x35\xa2\x9a\x70\x36\xe6\xa6\xd9\xde\xe8\x62\xa2\x0e\x1d\x0b\x19\x4f\x12\x1f\x8b\x84\x94\x32\x77\xe4\x58\xf5\x50\x66\x5c\x3e\xe8\x0d\x05\x1b\x02\xae\x13\x73\x1b\xd4\x7b\x0b\x61\xfa\xf4\xbe\x06\x1a\x3d\x59\x67\x9a\xec\x7a\x07\x18\xae\x44\x5b\x64\x06\x3c\xb9\xf3\xbd\xbf\x60\x40\x30\xc8\x7a\x27\x11\x4d\x29\x65\x67\x7c\xd0\xef\x73\x5e\x6f\x58\x06\x32\x77\x06\xa7\x90\x6a\x89\xa0\x99\x5f\x6f\xad\x6c\x33\xad\xe9\xc5\xd6\x3d\x07\x8f\x09\x59\x90\x7d\x0b\x7a\xb0\xce\xb5\xaa\x29\x80\xd7\x4c\x42\xd2\x23\x88\xb4\x3c\x71\x09\xca\xa5\x08\x8a\x33\x4a\xb4\xaf\x5e\xb9\x61\xe6\x9c\xab\x94\x18\x48\xea\xeb\x34\x73\x2a\xc4\x89\xd2\x50\x11\x24\x9c\x03\x67\x3a\x0b\x29\xb5\xe2\x14\x38\x71\xe6\x1a\xaf\xdd\x94\xe8\x7b\xc2\x78\x8e\x90\x10\x1a\x30\x9f\xaf\x35\x25\x98\x91\xce\xe0\x15\xb6\x64\x46\x9e\x93\x66\xd9\x12\xc4\xe3\xb5\x25\x92\xc4\xd4\x5d\x6a\xad\x0b\xbb\xc8\x33\x47\xb1\x53\xf9\xc5\x66\xcf\x50\x9b\xaa\x27\x96\xaa\xfe\xd5\x0d\xea\x2f\xa3\x73\x86\xd0\xd1\xb4\x65\x75\x55\x55\x32\xaf\x61\x98\x30\x87\x4b\xfb\x31\x62\x9d\xcd\x8a\x03\x89\x21\xe8\x22\xa0\xb6\x27\x07\x5e\xfc\x45\xa5\x50\x85\x24\xc9\x59\x55\x08\x2d\x21\x0a\x2a\x45\xb5\x8f\x10\x2b\xbd\xd1\x2d\x0a\x1b\x2d\xda\xb8\x4c\x19\x6f\x04\x29\x11\x9e\x98\x48\xe5\xd3\xfc\xe8\xbb\x80\xb4\x15\x27\x14\x7a\x11\xfb\x56\x41\x6b\x83\x84\x09\x33\xfb\x44\xad\x2f\x16\x85\xb0\x07\x04\x31\xf4\x88\x68\xba\xb3\x89\xc6\xbb\x1b\x1f\x6f\x7e\x0e\x6b\x08\xad\x8a\x12\xff\x0d\x06\x9b\xb7\x2a\xff\x86\x1a\xb1\x75\x77\x4f\x76\x6f\xe1\xbc\xd5\xe1\x58\x46\xa7\x2a\xf7\x9e\xce\x65\x90\xc9\xe9\x2b\x2b\x37\xdc\x1a\xf7\xb1\xd8\x80\x2d\x50\xbd\x04\x1d\xe7\xd6\x50\x89\x54\xcb\xcf\x93\xfc\x47\xb6\x5b\xff\x34\x83\x29\x92\x2d\x15\x43\x82\x0f\xb8\x63\x67\xf9\x14\xbd\x83\xe8\x90\xef\x44\xd8\x1d\xcf\x77\x16\x1d\xec\x8a\xb9\xbe\xc4\x32\xa2\xd5\x87\xb6\x13\x5b\xb7\xb2\xda\x06\xab\x78\xf4\x06\xc9\x72\xfb\x2f\x9b\xc2\xfe\x10\xd8\xd5\x3d\x12\x63\x08\x3d\x06\x35\x9a\x33\xeb\xfd\x1b\xe2\xd0\x60\x1c\xe2\x0c\x43\x35\xd4\x02\x51\x28\xe4\x4a\xcf\xff\x46\xa4\xfa\xd5\xed\xfa\xe7\xd9\x60\xfd\x71\x8b\xf7\x03\x8a\x12\xea\xea\x5c\x1f\x62\x79\x01\xd7\x58\xdf\x81\x5e\xdf\x58\x5d\x83\x64\xe8\x54\x57\x0d\xf5\x5b\x5d\x6f\xad\xae\xde\xe1\xa2\xa5\xb6\xe1\x54\x71\x4a\x92\xc1\x37\xa0\x6a\x8c\x6d\x77\x1b\x7d\x30\xc7\x27\xa5\xdd\x1a\x6a\xea\xea\x41\x03\x32\x32\xdb\xee\x2d\x5a\x0b\x71\x9a\xf3\x05\xf3\xc7\xdd\x87\x89\x4a\x71\xea\xa6\xe2\x2b\x95\x58\x0b\x5c\xeb\x70\xeb\xb4\xd7\x84\x37\xd2\x1d\x7e\x11\x37\x1e\x23\x1a\xfc\xc1\xf7\x71\x05\x9f\xe2\x3c\x98\x7a\xff\xe8\x1e\xe4\x55\xdf\xb6\x6d\x3b\xf2\xe9\x81\x54\x17\x84\xad\x84\xbd\xb5\xe7\x12\xa3\x5f\x34\xb8\xbe\x9a\xeb\x1f\x23\x36\x5f\xaf\x8d\xdc\x6c\x58\xd9\x7f\xcb\xaf\x11\x57\x2f\xab\xff\x06\x00\x00\xff\xff\x9b\x23\x27\xbe\xf7\x3d\x00\x00") func dataConfig_schema_v35JsonBytes() ([]byte, error) { return bindataRead( @@ -369,3 +349,4 @@ func _filePath(dir, name string) string { cannonicalName := strings.Replace(name, "\\", "/", -1) return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) } + diff --git a/cli/compose/schema/schema_test.go b/cli/compose/schema/schema_test.go index 27850e63ec..bce6276dce 100644 --- a/cli/compose/schema/schema_test.go +++ b/cli/compose/schema/schema_test.go @@ -48,17 +48,17 @@ func TestValidateAllowsXTopLevelFields(t *testing.T) { func TestValidateSecretConfigNames(t *testing.T) { config := dict{ - "version": "3.5", + "version": "3.5", "configs": dict{ - "bar": dict{ - "name": "foobar", - }, - }, - "secrets": dict{ - "baz": dict{ - "name": "foobaz", - }, - }, + "bar": dict{ + "name": "foobar", + }, + }, + "secrets": dict{ + "baz": dict{ + "name": "foobaz", + }, + }, } err := Validate(config, "3.5") diff --git a/cli/compose/types/types.go b/cli/compose/types/types.go index 8b8ea2317e..27177718e2 100644 --- a/cli/compose/types/types.go +++ b/cli/compose/types/types.go @@ -348,7 +348,7 @@ type CredentialSpecConfig struct { // FileObjectConfig is a config type for a file used by a service type FileObjectConfig struct { - Name string + Name string File string External External Labels Labels