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

Supervisor Namespace #749

Closed
wants to merge 20 commits into from
7 changes: 7 additions & 0 deletions .changes/v3.0.0/749-features.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
* New types package `ccitypes` for CCI related types [GH-749]
* New method to get `CciClient` - `VCDClient.GetCciClient` [GH-749]
* `CciClient` low level API interaction methods `IsSupported`, `GetCciUrl`, `PostItemAsync`, `PostItemSync`, `GetItem`, `DeleteItem` [GH-749]
* `CciClient.GetKubeConfig` method for retrieving KubeConfig [GH-749]
* Types `SupervisorNamespace` and `ccitypes.SupervisorNamespace` with methods
`CciClient.CreateSupervisorNamespace`, `CciClient.GetSupervisorNamespaceByName` and
`SupervisorNamespace.Delete` [GH-749]
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ testnsxv:
testtm:
cd govcd && go test -tags "tm" -timeout 0 -check.vv

testcci:
cd govcd && GOVCD_API_VERSION=40.0 go test -vcd-test-org-user -tags cci -check.vv -timeout=0
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not needed once #748 is merged

Suggested change
cd govcd && GOVCD_API_VERSION=40.0 go test -vcd-test-org-user -tags cci -check.vv -timeout=0
cd govcd && go test -vcd-test-org-user -tags cci -check.vv -timeout=0


testtm-coverage:
cd govcd && go test --coverprofile tm.cover -tags "tm" -timeout 0 -check.vv
# vet runs the Go source code static analysis tool `vet` to find
Expand Down
14 changes: 14 additions & 0 deletions ccitypes/constants.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ccitypes

const (
SupervisorNamespaceKind = "SupervisorNamespace"
ProjectKind = "Project"
InfrastructureCciAPI = "infrastructure.cci.vmware.com"
ProjectCciAPI = "project.cci.vmware.com"
ApiVersion = "v1alpha1"

SupervisorNamespacesURL = "/apis/infrastructure.cci.vmware.com/v1alpha1/namespaces/%s/supervisornamespaces"
SupervisorProjectsURL = "/apis/project.cci.vmware.com/v1alpha1/projects"

CciKubernetesSubpath = "%s://%s/cci/kubernetes"
)
124 changes: 124 additions & 0 deletions ccitypes/types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
package ccitypes

import (
"fmt"

v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// CciEntityStatus is a container with empty interface to track status of entity
type CciEntityStatus struct {
v1.TypeMeta `json:",inline"`
v1.ObjectMeta `json:"metadata,omitempty"`

Spec any `json:"spec,omitempty"`
Status CciStatus `json:"status,omitempty"`
}

type CciStatus struct {
Phase string `json:"phase,omitempty"`
Conditions []CciStatusConditions `json:"conditions,omitempty"`
}

type CciStatusConditions struct {
Message string `json:"message,omitempty"`
Reason string `json:"reason,omitempty"`
Severity string `json:"severity,omitempty"`
Status string `json:"status,omitempty"`
Type string `json:"type,omitempty"`
}

// CciApiError is a structure that matches error interface and is able to const
type CciApiError struct {
APIVersion string `json:"apiVersion"`
Code int `json:"code"`
Kind string `json:"kind"`
Message string `json:"message"`
v1.ObjectMeta `json:"metadata,omitempty"`
Reason string `json:"reason"`
Status string `json:"status"`
}

// Error unwraps the CciApiError to human readable error message
func (cciApiError CciApiError) Error() string {
return fmt.Sprintf("error %d: reason: %s, message: %s, status: %s",
cciApiError.Code, cciApiError.Reason, cciApiError.Message, cciApiError.Status)
}

// SupervisorNamespace definition
type SupervisorNamespace struct {
v1.TypeMeta `json:",inline"`
v1.ObjectMeta `json:"metadata,omitempty"`
Spec SupervisorNamespaceSpec `json:"spec,omitempty"`
Status *SupervisorNamespaceStatus `json:"status,omitempty"`
}

type SupervisorNamespaceSpec struct {
ClassName string `json:"className,omitempty"`
Description string `json:"description,omitempty"`
InitialClassConfigOverrides SupervisorNamespaceSpecInitialClassConfigOverrides `json:"initialClassConfigOverrides,omitempty"`
RegionName string `json:"regionName,omitempty"`
VpcName string `json:"vpcName,omitempty"`
}

type SupervisorNamespaceSpecInitialClassConfigOverrides struct {
StorageClasses []SupervisorNamespaceSpecInitialClassConfigOverridesStorageClass `json:"storageClasses,omitempty"`
Zones []SupervisorNamespaceSpecInitialClassConfigOverridesZone `json:"zones,omitempty"`
}
type SupervisorNamespaceSpecInitialClassConfigOverridesStorageClass struct {
LimitMiB int64 `json:"limitMiB"`
Name string `json:"name"`
}

type SupervisorNamespaceSpecInitialClassConfigOverridesZone struct {
CpuLimitMHz int64 `json:"cpuLimitMHz"`
CpuReservationMHz int64 `json:"cpuReservationMHz"`
MemoryLimitMiB int64 `json:"memoryLimitMiB"`
MemoryReservationMiB int64 `json:"memoryReservationMiB"`
Name string `json:"name"`
}

type SupervisorNamespaceStatus struct {
Conditions []SupervisorNamespaceStatusConditions `json:"conditions,omitempty"`
NamespaceEndpointURL string `json:"namespaceEndpointURL,omitempty"`
Phase string `json:"phase,omitempty"`
StorageClasses []SupervisorNamespaceStatusStorageClasses `json:"storageClasses,omitempty"`
VMClasses []SupervisorNamespaceStatusVMClasses `json:"vmClasses,omitempty"`
Zones []SupervisorNamespaceStatusZones `json:"zones,omitempty"`
}

type SupervisorNamespaceStatusConditions struct {
Message string `json:"message,omitempty"`
Reason string `json:"reason,omitempty"`
Severity string `json:"severity,omitempty"`
Status string `json:"status,omitempty"`
Type string `json:"type,omitempty"`
}

type SupervisorNamespaceStatusStorageClasses struct {
LimitMiB int64 `json:"limitMiB,omitempty"`
Name string `json:"name,omitempty"`
}

type SupervisorNamespaceStatusVMClasses struct {
Name string `json:"name,omitempty"`
}

type SupervisorNamespaceStatusZones struct {
CpuLimitMHz int64 `json:"cpuLimitMHz,omitempty"`
CpuReservationMHz int64 `json:"cpuReservationMHz,omitempty"`
MemoryLimitMiB int64 `json:"memoryLimitMiB,omitempty"`
MemoryReservationMiB int64 `json:"memoryReservationMiB,omitempty"`
Name string `json:"name,omitempty"`
}

type Project struct {
v1.TypeMeta `json:",inline"`
v1.ObjectMeta `json:"metadata,omitempty"`
Spec ProjectSpec `json:"spec,omitempty"`
Status *CciStatus `json:"status,omitempty"`
}

type ProjectSpec struct {
Description string `json:"description,omitempty"`
}
34 changes: 27 additions & 7 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,22 +1,42 @@
module github.com/vmware/go-vcloud-director/v3

go 1.22
go 1.23.0

toolchain go1.23.4

require (
github.com/araddon/dateparse v0.0.0-20190622164848-0fb0a474d195
github.com/hashicorp/go-version v1.2.0
github.com/kr/pretty v0.2.1
github.com/golang-jwt/jwt/v5 v5.2.1
github.com/hashicorp/go-version v1.7.0
github.com/kr/pretty v0.3.1
github.com/peterhellberg/link v1.1.0
golang.org/x/exp v0.0.0-20240119083558-1b970713d09a
golang.org/x/text v0.14.0
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127
golang.org/x/text v0.21.0
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
gopkg.in/yaml.v2 v2.4.0
k8s.io/apimachinery v0.32.1
k8s.io/client-go v0.32.1
sigs.k8s.io/yaml v1.4.0
)

require (
github.com/kr/text v0.1.0 // indirect
github.com/stretchr/testify v1.9.0 // indirect
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/rogpeppe/go-internal v1.12.0 // indirect
github.com/x448/float16 v0.8.4 // indirect
golang.org/x/net v0.34.0 // indirect
google.golang.org/protobuf v1.36.3 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
)

replace (
Expand Down
Loading
Loading