Skip to content

Commit

Permalink
Port back other PR
Browse files Browse the repository at this point in the history
Signed-off-by: Dainius Serplis <dserplis@vmware.com>
  • Loading branch information
Didainius committed May 8, 2024
1 parent aa6a71f commit 057f818
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 160 deletions.
47 changes: 8 additions & 39 deletions govcd/landing_zone.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
package govcd

import (
"encoding/json"
"fmt"
"net/url"

Expand Down Expand Up @@ -38,7 +37,7 @@ func (vcdClient *VCDClient) CreateSolutionLandingZone(slzCfg *types.SolutionLand
}

// 2. Convert more precise structure to fit DefinedEntity.DefinedEntity.Entity
unmarshalledRdeEntityJson, err := convertSlzToRde(slzCfg)
unmarshalledRdeEntityJson, err := convertAnyToRdeEntity(slzCfg)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -70,7 +69,7 @@ func (vcdClient *VCDClient) CreateSolutionLandingZone(slzCfg *types.SolutionLand
return nil, fmt.Errorf("error refreshing RDE after resolving: %s", err)
}

result, err := convertRdeToSlz(createdRdeEntity.DefinedEntity.Entity)
result, err := convertRdeEntityToAny[types.SolutionLandingZoneType](createdRdeEntity.DefinedEntity.Entity)
if err != nil {
return nil, err
}
Expand All @@ -84,7 +83,7 @@ func (vcdClient *VCDClient) CreateSolutionLandingZone(slzCfg *types.SolutionLand
return &returnType, nil
}

// GetAllSolutionLandingZones retrieves all solution landing zones
// GetAllSolutionLandingZones retrieves all Solution Landing Zones
//
// Note: Up to VCD 10.5.1.1 there can be only a single RDE entry (one SLZ per VCD)
func (vcdClient *VCDClient) GetAllSolutionLandingZones(queryParameters url.Values) ([]*SolutionLandingZone, error) {
Expand All @@ -96,7 +95,7 @@ func (vcdClient *VCDClient) GetAllSolutionLandingZones(queryParameters url.Value
results := make([]*SolutionLandingZone, len(allSlzs))
for slzRdeIndex, slzRde := range allSlzs {

slz, err := convertRdeToSlz(slzRde.DefinedEntity.Entity)
slz, err := convertRdeEntityToAny[types.SolutionLandingZoneType](slzRde.DefinedEntity.Entity)
if err != nil {
return nil, fmt.Errorf("error converting RDE to SLZ: %s", err)
}
Expand Down Expand Up @@ -136,7 +135,7 @@ func (vcdClient *VCDClient) GetSolutionLandingZoneById(id string) (*SolutionLand
return nil, fmt.Errorf("error retrieving RDE by ID: %s", err)
}

result, err := convertRdeToSlz(rde.DefinedEntity.Entity)
result, err := convertRdeEntityToAny[types.SolutionLandingZoneType](rde.DefinedEntity.Entity)
if err != nil {
return nil, err
}
Expand All @@ -157,7 +156,7 @@ func (slz *SolutionLandingZone) Refresh() error {
}

// 5. Repackage created RDE "Entity" to more exact type
result, err := convertRdeToSlz(slz.DefinedEntity.DefinedEntity.Entity)
result, err := convertRdeEntityToAny[types.SolutionLandingZoneType](slz.DefinedEntity.DefinedEntity.Entity)
if err != nil {
return err
}
Expand All @@ -176,7 +175,7 @@ func (slz *SolutionLandingZone) Id() string {
}

func (slz *SolutionLandingZone) Update(slzCfg *types.SolutionLandingZoneType) (*SolutionLandingZone, error) {
unmarshalledRdeEntityJson, err := convertSlzToRde(slzCfg)
unmarshalledRdeEntityJson, err := convertAnyToRdeEntity(slzCfg)
if err != nil {
return nil, err
}
Expand All @@ -188,7 +187,7 @@ func (slz *SolutionLandingZone) Update(slzCfg *types.SolutionLandingZoneType) (*
return nil, err
}

result, err := convertRdeToSlz(slz.DefinedEntity.DefinedEntity.Entity)
result, err := convertRdeEntityToAny[types.SolutionLandingZoneType](slz.DefinedEntity.DefinedEntity.Entity)
if err != nil {
return nil, err
}
Expand All @@ -206,33 +205,3 @@ func (slz *SolutionLandingZone) Update(slzCfg *types.SolutionLandingZoneType) (*
func (slz *SolutionLandingZone) Delete() error {
return slz.DefinedEntity.Delete()
}

func convertSlzToRde(slzCfg *types.SolutionLandingZoneType) (map[string]interface{}, error) {
jsonText, err := json.Marshal(slzCfg)
if err != nil {
return nil, fmt.Errorf("error marshalling SLZ configuration :%s", err)
}

var unmarshalledRdeEntityJson map[string]interface{}
err = json.Unmarshal(jsonText, &unmarshalledRdeEntityJson)
if err != nil {
return nil, fmt.Errorf("error unmarshalling SLZ configuration :%s", err)
}

return unmarshalledRdeEntityJson, nil
}

func convertRdeToSlz(content map[string]interface{}) (*types.SolutionLandingZoneType, error) {
jsonText2, err := json.Marshal(content)
if err != nil {
return nil, fmt.Errorf("error converting entity to SolutionLandingZone text: %s", err)
}

result := &types.SolutionLandingZoneType{}
err = json.Unmarshal(jsonText2, result)
if err != nil {
return nil, fmt.Errorf("error converting entity text to SolutionLandingZone: %s", err)
}

return result, nil
}
168 changes: 47 additions & 121 deletions govcd/landing_zone_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,127 +12,10 @@ import (
)

func (vcd *TestVCD) Test_CreateLandingZone(check *C) {
// adminOrg, err := vcd.client.GetAdminOrgByName(vcd.org.Org.Name)
// check.Assert(err, IsNil)

// adminVdc, err := adminOrg.GetAdminVDCById(vcd.nsxtVdc.Vdc.ID, false)
// check.Assert(err, IsNil)

// orgNetwork, err := vcd.nsxtVdc.GetOpenApiOrgVdcNetworkByName(vcd.config.VCD.Nsxt.RoutedNetwork)
// check.Assert(err, IsNil)
// check.Assert(orgNetwork, NotNil)

// computePolicy, err := adminVdc.GetAllAssignedVdcComputePoliciesV2(nil)
// check.Assert(err, IsNil)
// check.Assert(computePolicy, NotNil)

// storageProfileRef, err := adminVdc.GetDefaultStorageProfileReference()
// check.Assert(err, IsNil)
// check.Assert(storageProfileRef, NotNil)

// catalog, err := adminOrg.GetCatalogByName(vcd.config.VCD.Catalog.NsxtBackedCatalogName, false)
// check.Assert(err, IsNil)
// check.Assert(catalog, NotNil)

// slzCfg := &types.SolutionLandingZoneType{
// Name: adminOrg.AdminOrg.Name,
// ID: adminOrg.AdminOrg.ID,
// Vdcs: []types.SolutionLandingZoneVdc{
// {
// ID: adminVdc.AdminVdc.ID,
// Name: adminVdc.AdminVdc.Name,
// Capabilities: []string{},
// Networks: []types.SolutionLandingZoneVdcChild{
// {
// ID: orgNetwork.OpenApiOrgVdcNetwork.ID,
// Name: orgNetwork.OpenApiOrgVdcNetwork.Name,
// IsDefault: true,
// Capabilities: []string{},
// },
// },
// ComputePolicies: []types.SolutionLandingZoneVdcChild{
// {
// ID: computePolicy[0].VdcComputePolicyV2.ID,
// Name: computePolicy[0].VdcComputePolicyV2.Name,
// IsDefault: true,
// Capabilities: []string{},
// },
// },
// StoragePolicies: []types.SolutionLandingZoneVdcChild{
// {
// ID: storageProfileRef.ID,
// Name: storageProfileRef.Name,
// IsDefault: true,
// Capabilities: []string{},
// },
// },
// },
// },
// Catalogs: []types.SolutionLandingZoneCatalog{
// {
// ID: catalog.Catalog.ID,
// Name: catalog.Catalog.Name,
// Capabilities: []string{},
// },
// },
// }

// slz, err := vcd.client.CreateSolutionLandingZone(slzCfg)
// check.Assert(err, IsNil)
// check.Assert(slz, NotNil)

// AddToCleanupListOpenApi(slz.DefinedEntity.DefinedEntity.ID, check.TestName(), types.OpenApiPathVersion1_0_0+types.OpenApiEndpointRdeEntities+slz.DefinedEntity.DefinedEntity.ID)

slz := createSlz(vcd, check)
err := slz.Refresh()
check.Assert(err, IsNil)

slzCfg := slz.SolutionLandingZoneType

// Get all
allEntries, err := vcd.client.GetAllSolutionLandingZones(nil)
check.Assert(err, IsNil)

check.Assert(len(allEntries), Equals, 1)
check.Assert(allEntries[0].Id(), Equals, slz.Id())

// Get by ID
slzById, err := vcd.client.GetSolutionLandingZoneById(slz.Id())
check.Assert(err, IsNil)
check.Assert(slzById.Id(), Equals, slz.Id())

// Get exactly one
slzSingle, err := vcd.client.GetExactlyOneSolutionLandingZone()
check.Assert(err, IsNil)
check.Assert(slzSingle.Id(), Equals, slz.Id())

// Update
// Lookup one more Org network and add it
orgNetwork2, err := vcd.nsxtVdc.GetOpenApiOrgVdcNetworkByName(vcd.config.VCD.Nsxt.IsolatedNetwork)
check.Assert(err, IsNil)
check.Assert(orgNetwork2, NotNil)

slzCfg.Vdcs[0].Networks = append(slzCfg.Vdcs[0].Networks, types.SolutionLandingZoneVdcChild{
ID: orgNetwork2.OpenApiOrgVdcNetwork.ID,
Name: orgNetwork2.OpenApiOrgVdcNetwork.Name,
IsDefault: false,
Capabilities: []string{},
})

updatedSlz, err := slz.Update(slzCfg)
check.Assert(err, IsNil)
check.Assert(len(updatedSlz.SolutionLandingZoneType.Vdcs[0].Networks), Equals, 2)

err = slz.Delete()
check.Assert(err, IsNil)

// Check that no entry exists
slzByIdErr, err := vcd.client.GetSolutionLandingZoneById(slz.Id())
check.Assert(err, NotNil)
check.Assert(slzByIdErr, IsNil)
}
if vcd.client.Client.APIVCDMaxVersionIs("< 37.1") {
check.Skip("Solution Landing Zones are supported in VCD 10.4.1+")
}

func createSlz(vcd *TestVCD, check *C) *SolutionLandingZone {
adminOrg, err := vcd.client.GetAdminOrgByName(vcd.org.Org.Name)
check.Assert(err, IsNil)

Expand Down Expand Up @@ -204,5 +87,48 @@ func createSlz(vcd *TestVCD, check *C) *SolutionLandingZone {

AddToCleanupListOpenApi(slz.DefinedEntity.DefinedEntity.ID, check.TestName(), types.OpenApiPathVersion1_0_0+types.OpenApiEndpointRdeEntities+slz.DefinedEntity.DefinedEntity.ID)

return slz
err = slz.Refresh()
check.Assert(err, IsNil)

// Get all
allEntries, err := vcd.client.GetAllSolutionLandingZones(nil)
check.Assert(err, IsNil)

check.Assert(len(allEntries), Equals, 1)
check.Assert(allEntries[0].Id(), Equals, slz.Id())

// Get by ID
slzById, err := vcd.client.GetSolutionLandingZoneById(slz.Id())
check.Assert(err, IsNil)
check.Assert(slzById.Id(), Equals, slz.Id())

// Get exactly one
slzSingle, err := vcd.client.GetExactlyOneSolutionLandingZone()
check.Assert(err, IsNil)
check.Assert(slzSingle.Id(), Equals, slz.Id())

// Update
// Lookup one more Org network and add it
orgNetwork2, err := vcd.nsxtVdc.GetOpenApiOrgVdcNetworkByName(vcd.config.VCD.Nsxt.IsolatedNetwork)
check.Assert(err, IsNil)
check.Assert(orgNetwork2, NotNil)

slzCfg.Vdcs[0].Networks = append(slzCfg.Vdcs[0].Networks, types.SolutionLandingZoneVdcChild{
ID: orgNetwork2.OpenApiOrgVdcNetwork.ID,
Name: orgNetwork2.OpenApiOrgVdcNetwork.Name,
IsDefault: false,
Capabilities: []string{},
})

updatedSlz, err := slz.Update(slzCfg)
check.Assert(err, IsNil)
check.Assert(len(updatedSlz.SolutionLandingZoneType.Vdcs[0].Networks), Equals, 2)

err = slz.Delete()
check.Assert(err, IsNil)

// Check that no entry exists
slzByIdErr, err := vcd.client.GetSolutionLandingZoneById(slz.Id())
check.Assert(err, NotNil)
check.Assert(slzByIdErr, IsNil)
}

0 comments on commit 057f818

Please sign in to comment.