From 0e81cac32888ba74aa67334b8ad3ba3dbdf83760 Mon Sep 17 00:00:00 2001 From: Richard Gonzalez Date: Wed, 27 Sep 2017 10:37:28 -0400 Subject: [PATCH] Metadata order search tests --- .../providers/openstack/metadata.go | 1 + .../providers/openstack/openstack.go | 15 +++--- .../providers/openstack/openstack_test.go | 51 ++++++++++++++++++- 3 files changed, 60 insertions(+), 7 deletions(-) diff --git a/pkg/cloudprovider/providers/openstack/metadata.go b/pkg/cloudprovider/providers/openstack/metadata.go index 5cc8fc04f6..18fb4a5b0f 100644 --- a/pkg/cloudprovider/providers/openstack/metadata.go +++ b/pkg/cloudprovider/providers/openstack/metadata.go @@ -156,6 +156,7 @@ func getMetadata(order string) (*Metadata, error) { elements := strings.Split(order, ",") for _, id := range elements { + id = strings.TrimSpace(id) switch id { case configDriveID: md, err = getMetadataFromConfigDrive() diff --git a/pkg/cloudprovider/providers/openstack/openstack.go b/pkg/cloudprovider/providers/openstack/openstack.go index c48b373c6b..a80e7741fc 100644 --- a/pkg/cloudprovider/providers/openstack/openstack.go +++ b/pkg/cloudprovider/providers/openstack/openstack.go @@ -253,6 +253,10 @@ func checkOpenStackOpts(openstackOpts *OpenStack) error { } } + if err := checkMetadataSearchOrder(openstackOpts.metadataOpts.SearchOrder); err != nil { + return err + } + return nil } @@ -282,8 +286,6 @@ func newOpenStack(cfg Config) (*OpenStack, error) { err = openstack.Authenticate(provider, cfg.toAuthOptions()) } - err = validateMetadataSearchOrder(cfg.Metadata.SearchOrder) - if err != nil { return nil, err } @@ -753,7 +755,7 @@ func (os *OpenStack) volumeService(forceVersion string) (volumeService, error) { } } -func validateMetadataSearchOrder(order string) error { +func checkMetadataSearchOrder(order string) error { if order == "" { return errors.New("Invalid value in section [Metadata] with key `search-order`. Value cannot be empty") } @@ -763,14 +765,15 @@ func validateMetadataSearchOrder(order string) error { return errors.New("Invalid value in section [Metadata] with key `search-order`. Value cannot contain more than 2 elements") } - for _, o := range elements { - switch o { + for _, id := range elements { + id = strings.TrimSpace(id) + switch id { case configDriveID: case metadataID: default: errTxt := "Invalid element '%s' found in section [Metadata] with key `search-order`." + "Supported elements include '%s' and '%s'" - return fmt.Errorf(errTxt, o, configDriveID, metadataID) + return fmt.Errorf(errTxt, id, configDriveID, metadataID) } } diff --git a/pkg/cloudprovider/providers/openstack/openstack_test.go b/pkg/cloudprovider/providers/openstack/openstack_test.go index 3306d69584..2d9d7f9ac1 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_test.go +++ b/pkg/cloudprovider/providers/openstack/openstack_test.go @@ -101,7 +101,8 @@ func TestReadConfig(t *testing.T) { [BlockStorage] bs-version = auto trust-device-path = yes - + [Metadata] + search-order = configDrive, metadataService `)) if err != nil { t.Fatalf("Should succeed when a valid config is provided: %s", err) @@ -128,6 +129,9 @@ func TestReadConfig(t *testing.T) { if cfg.BlockStorage.BSVersion != "auto" { t.Errorf("incorrect bs.bs-version: %v", cfg.BlockStorage.BSVersion) } + if cfg.Metadata.SearchOrder != "configDrive, metadataService" { + t.Errorf("incorrect md.search-order: %v", cfg.Metadata.SearchOrder) + } } func TestToAuthOptions(t *testing.T) { @@ -169,6 +173,9 @@ func TestCheckOpenStackOpts(t *testing.T) { ManageSecurityGroups: true, NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144", }, + metadataOpts: MetadataOpts{ + SearchOrder: configDriveID, + }, }, expectedError: nil, }, @@ -187,6 +194,9 @@ func TestCheckOpenStackOpts(t *testing.T) { ManageSecurityGroups: true, NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144", }, + metadataOpts: MetadataOpts{ + SearchOrder: configDriveID, + }, }, expectedError: nil, }, @@ -203,6 +213,9 @@ func TestCheckOpenStackOpts(t *testing.T) { ManageSecurityGroups: true, NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144", }, + metadataOpts: MetadataOpts{ + SearchOrder: configDriveID, + }, }, expectedError: fmt.Errorf("monitor-delay not set in cloud provider config"), }, @@ -221,9 +234,43 @@ func TestCheckOpenStackOpts(t *testing.T) { MonitorMaxRetries: uint(3), ManageSecurityGroups: true, }, + metadataOpts: MetadataOpts{ + SearchOrder: configDriveID, + }, }, expectedError: fmt.Errorf("node-security-group not set in cloud provider config"), }, + { + name: "test5", + openstackOpts: &OpenStack{ + provider: nil, + metadataOpts: MetadataOpts{ + SearchOrder: "", + }, + }, + expectedError: fmt.Errorf("Invalid value in section [Metadata] with key `search-order`. Value cannot be empty"), + }, + { + name: "test6", + openstackOpts: &OpenStack{ + provider: nil, + metadataOpts: MetadataOpts{ + SearchOrder: "value1,value2,value3", + }, + }, + expectedError: fmt.Errorf("Invalid value in section [Metadata] with key `search-order`. Value cannot contain more than 2 elements"), + }, + { + name: "test7", + openstackOpts: &OpenStack{ + provider: nil, + metadataOpts: MetadataOpts{ + SearchOrder: "value1", + }, + }, + expectedError: fmt.Errorf("Invalid element '%s' found in section [Metadata] with key `search-order`."+ + "Supported elements include '%s' and '%s'", "value1", configDriveID, metadataID), + }, } for _, testcase := range tests { @@ -374,6 +421,8 @@ func configFromEnv() (cfg Config, ok bool) { (cfg.Global.TenantId != "" || cfg.Global.TenantName != "" || cfg.Global.DomainId != "" || cfg.Global.DomainName != "")) + cfg.Metadata.SearchOrder = fmt.Sprintf("%s,%s", configDriveID, metadataID) + return }