Skip to content

Commit

Permalink
Merge main
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 17, 2024
2 parents 8cf21f7 + 4913d51 commit 102281d
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 16 deletions.
10 changes: 5 additions & 5 deletions .changes/v2.24.0/665-features.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
* Added method `DefinedEntity.Refresh` to reload RDE state [GH-665]
* Added types `SolutionLandingZone` and `types.SolutionLandingZone` for Solution Add-on Landing Zone configuration [GH-665]
* Added methods `VCDClient.CreateSolutionLandingZone`, `VCDClient.GetAllSolutionLandingZones`,
`VCDClient.GetExactlyOneSolutionLandingZone`, `VCDClient.GetSolutionLandingZoneById`,
`SolutionLandingZone.Refresh`, `SolutionLandingZone.Id`, `SolutionLandingZone.Update`,
`SolutionLandingZone.Delete` for handling Solution Landing Zones [GH-665]
* Added method `DefinedEntity.Refresh` to reload RDE state [GH-665]
* Added `VDCClient` methods `CreateSolutionLandingZone`, `GetAllSolutionLandingZones`,
`GetExactlyOneSolutionLandingZone`, `GetSolutionLandingZoneById` for handling Solution Landing Zones [GH-665]
* Added `SolutionLandingZone` methods `Refresh`, `RdeId`, `Update`,
`Delete` to help handling of Solution Landing Zones [GH-665]
19 changes: 13 additions & 6 deletions govcd/landing_zone.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,14 @@ package govcd
import (
"fmt"
"net/url"
"strings"

"github.com/vmware/go-vcloud-director/v2/types/v56"
)

// slzRdeType sets Runtime Defined Entity Type to be used across multiple calls
var slzRdeType = [3]string{"vmware", "solutions_organization", "1.0.0"}

// SolutionLandingZone controls VCD Solution Add-On Landing Zone. It does so by wrapping RDE for
// entity types vmware:solutions_organization:1.0.0.
//
Expand All @@ -31,7 +35,7 @@ type SolutionLandingZone struct {
// 2. Resolves the RDE
func (vcdClient *VCDClient) CreateSolutionLandingZone(slzCfg *types.SolutionLandingZoneType) (*SolutionLandingZone, error) {
// 1. Check that RDE type exists
rdeType, err := vcdClient.GetRdeType("vmware", "solutions_organization", "1.0.0")
rdeType, err := vcdClient.GetRdeType(slzRdeType[0], slzRdeType[1], slzRdeType[2])
if err != nil {
return nil, fmt.Errorf("error retrieving RDE Type for Solution Landing zone: %s", err)
}
Expand All @@ -44,7 +48,7 @@ func (vcdClient *VCDClient) CreateSolutionLandingZone(slzCfg *types.SolutionLand

// 3. Construct payload
entityCfg := &types.DefinedEntity{
EntityType: "urn:vcloud:type:vmware:solutions_organization:1.0.0",
EntityType: "urn:vcloud:type:" + strings.Join(slzRdeType[:], ":"),
Name: "Solutions Organization",
State: addrOf("PRE_CREATED"),
// Processed solution landing zone
Expand Down Expand Up @@ -87,7 +91,7 @@ func (vcdClient *VCDClient) CreateSolutionLandingZone(slzCfg *types.SolutionLand
//
// 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) {
allSlzs, err := vcdClient.GetAllRdes("vmware", "solutions_organization", "1.0.0", queryParameters)
allSlzs, err := vcdClient.GetAllRdes(slzRdeType[0], slzRdeType[1], slzRdeType[2], queryParameters)
if err != nil {
return nil, fmt.Errorf("error retrieving all SLZs: %s", err)
}
Expand Down Expand Up @@ -119,7 +123,7 @@ func (vcdClient *VCDClient) GetExactlyOneSolutionLandingZone() (*SolutionLanding
return nil, fmt.Errorf("error retrieving all Solution Landing Zones: %s", err)
}

return oneOrError("rde", "vmware:solutions_organization:1.0.0", allSlzs)
return oneOrError("rde", strings.Join(slzRdeType[:], ":"), allSlzs)
}

// GetSolutionLandingZoneById retrieves Solution Landing Zone by ID
Expand Down Expand Up @@ -149,13 +153,14 @@ func (vcdClient *VCDClient) GetSolutionLandingZoneById(id string) (*SolutionLand
return packages, nil
}

// Refresh reloads parent RDE data
func (slz *SolutionLandingZone) Refresh() error {
err := slz.DefinedEntity.Refresh()
if err != nil {
return err
}

// 5. Repackage created RDE "Entity" to more exact type
// Repackage created RDE "Entity" to more exact type
result, err := convertRdeEntityToAny[types.SolutionLandingZoneType](slz.DefinedEntity.DefinedEntity.Entity)
if err != nil {
return err
Expand All @@ -166,14 +171,16 @@ func (slz *SolutionLandingZone) Refresh() error {
return nil
}

func (slz *SolutionLandingZone) Id() string {
// RdeId is a shorthand to retrieve ID of parent runtime defined entity
func (slz *SolutionLandingZone) RdeId() string {
if slz == nil || slz.DefinedEntity == nil || slz.DefinedEntity.DefinedEntity == nil {
return ""
}

return slz.DefinedEntity.DefinedEntity.ID
}

// Update Solution Landing Zone
func (slz *SolutionLandingZone) Update(slzCfg *types.SolutionLandingZoneType) (*SolutionLandingZone, error) {
unmarshalledRdeEntityJson, err := convertAnyToRdeEntity(slzCfg)
if err != nil {
Expand Down
10 changes: 5 additions & 5 deletions govcd/landing_zone_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,17 +95,17 @@ func (vcd *TestVCD) Test_CreateLandingZone(check *C) {
check.Assert(err, IsNil)

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

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

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

// Update
// Lookup one more Org network and add it
Expand All @@ -128,7 +128,7 @@ func (vcd *TestVCD) Test_CreateLandingZone(check *C) {
check.Assert(err, IsNil)

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

0 comments on commit 102281d

Please sign in to comment.