Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update ALB service engine group and ALB settings to support SupportedFeatureSet in VCD 10.4 #485

Merged
merged 13 commits into from
Jul 28, 2022
Merged
2 changes: 2 additions & 0 deletions .changes/v2.16.0/485-improvements.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
* Add `SupportedFeatureSet` attribute to `NsxtAlbServiceEngineGroup` and `NsxtAlbConfig` to support v37.0 license management for AVI Load Balancer
and replace `LicenseType` from `NsxtAlbController` [GH-485]
6 changes: 4 additions & 2 deletions govcd/api_vcd_versions.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ var apiVersionToVcdVersion = map[string]string{
"33.0": "10.0",
"34.0": "10.1",
"35.0": "10.2",
"36.0": "10.3", // Provisional version for non-GA release. It may change later
"36.0": "10.3",
"37.0": "10.4", // Provisional version for non-GA release. It may change later
}

// vcdVersionToApiVersion gets the max supported API version from vCD version
Expand All @@ -58,7 +59,8 @@ var vcdVersionToApiVersion = map[string]string{
"10.0": "33.0",
"10.1": "34.0",
"10.2": "35.0",
"10.3": "36.0", // Provisional version for non-GA release. It may change later
"10.3": "36.0",
"10.4": "37.0", // Provisional version for non-GA release. It may change later
}

// to make vcdVersionToApiVersion used
Expand Down
16 changes: 8 additions & 8 deletions govcd/nsxt_alb_controllers.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func (vcdClient *VCDClient) GetAllAlbControllers(queryParameters url.Values) ([]
}

endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbController
apiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint)
apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -90,7 +90,7 @@ func (vcdClient *VCDClient) GetAlbControllerById(id string) (*NsxtAlbController,
}

endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbController
apiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint)
apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -151,7 +151,7 @@ func (vcdClient *VCDClient) CreateNsxtAlbController(albControllerConfig *types.N
}

endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbController
minimumApiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint)
apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint)
if err != nil {
return nil, err
}
Expand All @@ -166,7 +166,7 @@ func (vcdClient *VCDClient) CreateNsxtAlbController(albControllerConfig *types.N
vcdClient: vcdClient,
}

err = client.OpenApiPostItem(minimumApiVersion, urlRef, nil, albControllerConfig, returnObject.NsxtAlbController, nil)
err = client.OpenApiPostItem(apiVersion, urlRef, nil, albControllerConfig, returnObject.NsxtAlbController, nil)
if err != nil {
return nil, fmt.Errorf("error creating NSX-T ALB Controller: %s", err)
}
Expand All @@ -178,7 +178,7 @@ func (vcdClient *VCDClient) CreateNsxtAlbController(albControllerConfig *types.N
func (nsxtAlbController *NsxtAlbController) Update(albControllerConfig *types.NsxtAlbController) (*NsxtAlbController, error) {
client := nsxtAlbController.vcdClient.Client
endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbController
minimumApiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint)
apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint)
if err != nil {
return nil, err
}
Expand All @@ -197,7 +197,7 @@ func (nsxtAlbController *NsxtAlbController) Update(albControllerConfig *types.Ns
vcdClient: nsxtAlbController.vcdClient,
}

err = client.OpenApiPutItem(minimumApiVersion, urlRef, nil, albControllerConfig, responseAlbController.NsxtAlbController, nil)
err = client.OpenApiPutItem(apiVersion, urlRef, nil, albControllerConfig, responseAlbController.NsxtAlbController, nil)
if err != nil {
return nil, fmt.Errorf("error updating NSX-T ALB Controller: %s", err)
}
Expand All @@ -209,7 +209,7 @@ func (nsxtAlbController *NsxtAlbController) Update(albControllerConfig *types.Ns
func (nsxtAlbController *NsxtAlbController) Delete() error {
client := nsxtAlbController.vcdClient.Client
endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbController
minimumApiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint)
apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint)
if err != nil {
return err
}
Expand All @@ -223,7 +223,7 @@ func (nsxtAlbController *NsxtAlbController) Delete() error {
return err
}

err = client.OpenApiDeleteItem(minimumApiVersion, urlRef, nil, nil)
err = client.OpenApiDeleteItem(apiVersion, urlRef, nil, nil)
if err != nil {
return fmt.Errorf("error deleting NSX-T ALB Controller: %s", err)
}
Expand Down
8 changes: 5 additions & 3 deletions govcd/nsxt_alb_controllers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,17 @@ func (vcd *TestVCD) Test_NsxtAlbController(check *C) {
Url: vcd.config.VCD.Nsxt.NsxtAlbControllerUrl,
Username: vcd.config.VCD.Nsxt.NsxtAlbControllerUser,
Password: vcd.config.VCD.Nsxt.NsxtAlbControllerPassword,
LicenseType: "BASIC",
LicenseType: "BASIC", // Not used since v37.0
}
updatedController, err := controllerByUrl.Update(updateControllerDef)
check.Assert(err, IsNil)
check.Assert(updatedController.NsxtAlbController.Name, Equals, updateControllerDef.Name)
check.Assert(updatedController.NsxtAlbController.Description, Equals, updateControllerDef.Description)
check.Assert(updatedController.NsxtAlbController.Url, Equals, updateControllerDef.Url)
check.Assert(updatedController.NsxtAlbController.Username, Equals, updateControllerDef.Username)
check.Assert(updatedController.NsxtAlbController.LicenseType, Equals, updateControllerDef.LicenseType)
if vcd.client.Client.APIVCDMaxVersionIs("< 37.0") {
check.Assert(updatedController.NsxtAlbController.LicenseType, Equals, updateControllerDef.LicenseType)
}

// Revert settings to original ones
_, err = controllerByUrl.Update(controllerByUrl.NsxtAlbController)
Expand All @@ -95,7 +97,7 @@ func spawnAlbController(vcd *TestVCD, check *C) *NsxtAlbController {
Url: vcd.config.VCD.Nsxt.NsxtAlbControllerUrl,
Username: vcd.config.VCD.Nsxt.NsxtAlbControllerUser,
Password: vcd.config.VCD.Nsxt.NsxtAlbControllerPassword,
LicenseType: "ENTERPRISE",
LicenseType: "ENTERPRISE", // Not used since v37.0
}

newController, err := vcd.client.CreateNsxtAlbController(newControllerDef)
Expand Down
16 changes: 11 additions & 5 deletions govcd/nsxt_alb_pool_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,17 +67,17 @@ func testAdvancedPoolConfig(check *C, edge *NsxtEdgeGateway, vcd *TestVCD, clien
PassiveMonitoringEnabled: takeBoolPointer(true),
HealthMonitors: nil,
Members: []types.NsxtAlbPoolMember{
types.NsxtAlbPoolMember{
{
Enabled: true,
IpAddress: "1.1.1.1",
Port: 8400,
Ratio: takeIntAddress(2),
},
types.NsxtAlbPoolMember{
{
Enabled: false,
IpAddress: "1.1.1.2",
},
types.NsxtAlbPoolMember{
{
Enabled: true,
IpAddress: "1.1.1.3",
},
Expand All @@ -98,13 +98,13 @@ func testAdvancedPoolConfig(check *C, edge *NsxtEdgeGateway, vcd *TestVCD, clien
PassiveMonitoringEnabled: takeBoolPointer(false),
HealthMonitors: nil,
Members: []types.NsxtAlbPoolMember{
types.NsxtAlbPoolMember{
{
Enabled: true,
IpAddress: "1.1.1.1",
Port: 8300,
Ratio: takeIntAddress(3),
},
types.NsxtAlbPoolMember{
{
Enabled: true,
IpAddress: "1.1.1.2",
},
Expand Down Expand Up @@ -250,6 +250,12 @@ func setupAlbPoolPrerequisites(check *C, vcd *TestVCD) (*NsxtAlbController, *Nsx
albSettingsConfig := &types.NsxtAlbConfig{
Enabled: true,
}

// Field is only available when using API version v37.0 onwards
if vcd.client.Client.APIVCDMaxVersionIs(">= 37.0") {
albSettingsConfig.SupportedFeatureSet = "PREMIUM"
}

enabledSettings, err := edge.UpdateAlbSettings(albSettingsConfig)
if err != nil {
fmt.Printf("# error occured while enabling ALB on Edge Gateway. Cleaning up Service Engine Group, ALB Cloud and ALB Controller: %s", err)
Expand Down
20 changes: 10 additions & 10 deletions govcd/nsxt_alb_service_engine_groups.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func (vcdClient *VCDClient) GetAllAlbServiceEngineGroups(context string, queryPa
}

endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbServiceEngineGroups
apiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint)
apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -110,7 +110,7 @@ func (vcdClient *VCDClient) GetAlbServiceEngineGroupById(id string) (*NsxtAlbSer
}

endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbServiceEngineGroups
apiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint)
apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -142,7 +142,7 @@ func (vcdClient *VCDClient) CreateNsxtAlbServiceEngineGroup(albServiceEngineGrou
}

endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbServiceEngineGroups
minimumApiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint)
apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint)
if err != nil {
return nil, err
}
Expand All @@ -157,7 +157,7 @@ func (vcdClient *VCDClient) CreateNsxtAlbServiceEngineGroup(albServiceEngineGrou
vcdClient: vcdClient,
}

err = client.OpenApiPostItem(minimumApiVersion, urlRef, nil, albServiceEngineGroup, returnObject.NsxtAlbServiceEngineGroup, nil)
err = client.OpenApiPostItem(apiVersion, urlRef, nil, albServiceEngineGroup, returnObject.NsxtAlbServiceEngineGroup, nil)
if err != nil {
return nil, fmt.Errorf("error creating NSX-T ALB Service Engine Group: %s", err)
}
Expand All @@ -169,7 +169,7 @@ func (vcdClient *VCDClient) CreateNsxtAlbServiceEngineGroup(albServiceEngineGrou
func (nsxtAlbServiceEngineGroup *NsxtAlbServiceEngineGroup) Update(albSEGroupConfig *types.NsxtAlbServiceEngineGroup) (*NsxtAlbServiceEngineGroup, error) {
client := nsxtAlbServiceEngineGroup.vcdClient.Client
endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbServiceEngineGroups
minimumApiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint)
apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint)
if err != nil {
return nil, err
}
Expand All @@ -188,7 +188,7 @@ func (nsxtAlbServiceEngineGroup *NsxtAlbServiceEngineGroup) Update(albSEGroupCon
vcdClient: nsxtAlbServiceEngineGroup.vcdClient,
}

err = client.OpenApiPutItem(minimumApiVersion, urlRef, nil, albSEGroupConfig, responseAlbController.NsxtAlbServiceEngineGroup, nil)
err = client.OpenApiPutItem(apiVersion, urlRef, nil, albSEGroupConfig, responseAlbController.NsxtAlbServiceEngineGroup, nil)
if err != nil {
return nil, fmt.Errorf("error updating NSX-T ALB Service Engine Group: %s", err)
}
Expand All @@ -200,7 +200,7 @@ func (nsxtAlbServiceEngineGroup *NsxtAlbServiceEngineGroup) Update(albSEGroupCon
func (nsxtAlbServiceEngineGroup *NsxtAlbServiceEngineGroup) Delete() error {
client := nsxtAlbServiceEngineGroup.vcdClient.Client
endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbServiceEngineGroups
minimumApiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint)
apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint)
if err != nil {
return err
}
Expand All @@ -214,7 +214,7 @@ func (nsxtAlbServiceEngineGroup *NsxtAlbServiceEngineGroup) Delete() error {
return err
}

err = client.OpenApiDeleteItem(minimumApiVersion, urlRef, nil, nil)
err = client.OpenApiDeleteItem(apiVersion, urlRef, nil, nil)
if err != nil {
return fmt.Errorf("error deleting NSX-T ALB Service Engine Group: %s", err)
}
Expand All @@ -228,7 +228,7 @@ func (nsxtAlbServiceEngineGroup *NsxtAlbServiceEngineGroup) Delete() error {
func (nsxtAlbServiceEngineGroup *NsxtAlbServiceEngineGroup) Sync() error {
client := nsxtAlbServiceEngineGroup.vcdClient.Client
endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbServiceEngineGroups
minimumApiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint)
apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint)
if err != nil {
return err
}
Expand All @@ -242,7 +242,7 @@ func (nsxtAlbServiceEngineGroup *NsxtAlbServiceEngineGroup) Sync() error {
return err
}

task, err := client.OpenApiPostItemAsync(minimumApiVersion, urlRef, nil, nil)
task, err := client.OpenApiPostItemAsync(apiVersion, urlRef, nil, nil)
if err != nil {
return fmt.Errorf("error syncing NSX-T ALB Service Engine Group: %s", err)
}
Expand Down
22 changes: 22 additions & 0 deletions govcd/nsxt_alb_service_engine_groups_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,22 @@ func (vcd *TestVCD) Test_GetAllAlbServiceEngineGroups(check *C) {
},
}

// Field is only available when using API version v37.0 onwards
if vcd.client.Client.APIVCDMaxVersionIs(">= 37.0") {
albSeGroup.SupportedFeatureSet = "PREMIUM"
}

createdSeGroup, err := vcd.client.CreateNsxtAlbServiceEngineGroup(albSeGroup)
check.Assert(err, IsNil)

check.Assert(createdSeGroup.NsxtAlbServiceEngineGroup.ID != "", Equals, true)
check.Assert(createdSeGroup.NsxtAlbServiceEngineGroup.Name, Equals, albSeGroup.Name)
check.Assert(createdSeGroup.NsxtAlbServiceEngineGroup.Description, Equals, albSeGroup.Description)
check.Assert(createdSeGroup.NsxtAlbServiceEngineGroup.ReservationType, Equals, albSeGroup.ReservationType)
// Field is only populated in responses when using API version v37.0 onwards
if vcd.client.Client.APIVCDMaxVersionIs(">= 37.0") {
check.Assert(createdSeGroup.NsxtAlbServiceEngineGroup.SupportedFeatureSet, Equals, albSeGroup.SupportedFeatureSet)
}

openApiEndpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbServiceEngineGroups + createdSeGroup.NsxtAlbServiceEngineGroup.ID
AddToCleanupListOpenApi(createdSeGroup.NsxtAlbServiceEngineGroup.Name, check.TestName(), openApiEndpoint)
Expand All @@ -63,9 +72,17 @@ func (vcd *TestVCD) Test_GetAllAlbServiceEngineGroups(check *C) {

// Test update
createdSeGroup.NsxtAlbServiceEngineGroup.Name = createdSeGroup.NsxtAlbServiceEngineGroup.Name + "updated"
// Field is only available when using API version v37.0 onwards
if vcd.client.Client.APIVCDMaxVersionIs(">= 37.0") {
albSeGroup.SupportedFeatureSet = "STANDARD"
}
updatedSeGroup, err := createdSeGroup.Update(createdSeGroup.NsxtAlbServiceEngineGroup)
check.Assert(err, IsNil)

// SupportedFeatureSet is a field only available since v37.0, in that case we ignore it in the following DeepEquals
if vcd.client.Client.APIVCDMaxVersionIs("< 37.0") {
updatedSeGroup.NsxtAlbServiceEngineGroup.SupportedFeatureSet = createdSeGroup.NsxtAlbServiceEngineGroup.SupportedFeatureSet
}
check.Assert(updatedSeGroup.NsxtAlbServiceEngineGroup, DeepEquals, createdSeGroup.NsxtAlbServiceEngineGroup)

// Cleanup
Expand Down Expand Up @@ -101,6 +118,11 @@ func spawnAlbControllerCloudServiceEngineGroup(vcd *TestVCD, check *C, seGroupRe
},
}

// Field is only available when using API version v37.0 onwards
if vcd.client.Client.APIVCDMaxVersionIs(">= 37.0") {
albSeGroup.SupportedFeatureSet = "PREMIUM"
}

createdSeGroup, err := vcd.client.CreateNsxtAlbServiceEngineGroup(albSeGroup)
check.Assert(err, IsNil)

Expand Down
10 changes: 10 additions & 0 deletions govcd/nsxt_alb_settings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,20 @@ func (vcd *TestVCD) Test_UpdateAlbSettings(check *C) {
albSettingsConfig := &types.NsxtAlbConfig{
Enabled: true,
}

// Field is only available when using API version v37.0 onwards
if vcd.client.Client.APIVCDMaxVersionIs(">= 37.0") {
albSettingsConfig.SupportedFeatureSet = "STANDARD"
}

enabledSettings, err := edge.UpdateAlbSettings(albSettingsConfig)
check.Assert(err, IsNil)
check.Assert(enabledSettings.Enabled, Equals, true)
check.Assert(enabledSettings.ServiceNetworkDefinition, Equals, "192.168.255.1/25")
// Field is only available when using API version v37.0 onwards
if vcd.client.Client.APIVCDMaxVersionIs(">= 37.0") {
check.Assert(enabledSettings.SupportedFeatureSet, Equals, "STANDARD")
}
PrependToCleanupList("", "OpenApiEntityAlbSettingsDisable", edge.EdgeGateway.Name, check.TestName())

// Disable ALB on Edge Gateway
Expand Down
5 changes: 3 additions & 2 deletions govcd/nsxt_distributed_firewall_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ func createDistributedFirewallDefinitions(check *C, vcd *TestVCD, vdcGroupId str
networkContextProfile := make([]types.OpenApiReference, 0)
for _, netCtxProf := range netCtxProfile {
if netCtxProf.ID != "" {
networkContextProfile = append(networkContextProfile, types.OpenApiReference{ID: netCtxProf.ID})
networkContextProfile = append(networkContextProfile, types.OpenApiReference{ID: netCtxProf.ID, Name: netCtxProf.Name})
}
}

Expand Down Expand Up @@ -265,7 +265,8 @@ func getRandomListOfNetworkContextProfiles(check *C, vcd *TestVCD, vdcClient *VC
check.Assert(err, IsNil)
openApiRefs := make([]types.OpenApiReference, 1)
for _, networkContextProfile := range networkContextProfiles {
if strings.Contains(networkContextProfile.Description, "ALG") {
// Skipping network context profile which has hardcoded destinations and throws error when used in firewall rules with specified destinations
if strings.Contains(networkContextProfile.Description, "ALG") || strings.Contains(networkContextProfile.Description, "includes the URL categories") {
continue
}
openApiRef := types.OpenApiReference{
Expand Down
12 changes: 12 additions & 0 deletions govcd/openapi_endpoints.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,18 @@ var endpointElevatedApiVersions = map[string][]string{
//"34.0", // Basic minimum required version
"36.0", // Adds support for Dynamic Security Groups by deprecating `Type` field in favor of `TypeValue`
},
types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbController: {
//"35.0", // Basic minimum required version
"37.0", // Deprecates LicenseType in favor of SupportedFeatureSet
},
types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbServiceEngineGroups: {
//"35.0", // Basic minimum required version
"37.0", // Adds SupportedFeatureSet
},
types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbEdgeGateway: {
//"35.0", // Basic minimum required version
"37.0", // Deprecates LicenseType in favor of SupportedFeatureSet
},
}

// checkOpenApiEndpointCompatibility checks if VCD version (to which the client is connected) is sufficient to work with
Expand Down
Loading