Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add cluster class support
Browse files Browse the repository at this point in the history
- create a VCDClusterTemplate object
- update controllers with required changes
- update infrastructure templates
viveksyngh committed Jan 23, 2023

Verified

This commit was signed with the committer’s verified signature.
julian-risch Julian Risch
1 parent fc216d5 commit c470a8e
Showing 15 changed files with 970 additions and 10 deletions.
9 changes: 9 additions & 0 deletions PROJECT
Original file line number Diff line number Diff line change
@@ -63,4 +63,13 @@ resources:
webhooks:
conversion: true
webhookVersion: v1
- api:
crdVersion: v1
namespaced: true
controller: true
domain: cluster.x-k8s.io
group: infrastructure
kind: VCDClusterTemplate
path: github.com/vmware/cluster-api-provider-cloud-director/api/v1beta1
version: v1beta1
version: "3"
57 changes: 57 additions & 0 deletions api/v1beta1/vcdclustertemplate_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
Copyright 2021.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1beta1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.

// VCDClusterTemplateSpec defines the desired state of VCDClusterTemplate
type VCDClusterTemplateSpec struct {
Template VCDClusterTemplateResource `json:"template"`
}

type VCDClusterTemplateResource struct {
Spec VCDClusterSpec `json:"spec"`
}

//+kubebuilder:object:root=true
//+kubebuilder:subresource:status

// VCDClusterTemplate is the Schema for the vcdclustertemplates API
type VCDClusterTemplate struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec VCDClusterTemplateSpec `json:"spec,omitempty"`
}

//+kubebuilder:object:root=true

// VCDClusterTemplateList contains a list of VCDClusterTemplate
type VCDClusterTemplateList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []VCDClusterTemplate `json:"items"`
}

func init() {
SchemeBuilder.Register(&VCDClusterTemplate{}, &VCDClusterTemplateList{})
}
90 changes: 90 additions & 0 deletions api/v1beta1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.4.1
creationTimestamp: null
name: vcdclustertemplates.infrastructure.cluster.x-k8s.io
spec:
group: infrastructure.cluster.x-k8s.io
names:
kind: VCDClusterTemplate
listKind: VCDClusterTemplateList
plural: vcdclustertemplates
singular: vcdclustertemplate
scope: Namespaced
versions:
- name: v1beta1
schema:
openAPIV3Schema:
description: VCDClusterTemplate is the Schema for the vcdclustertemplates
API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: VCDClusterTemplateSpec defines the desired state of VCDClusterTemplate
properties:
template:
properties:
spec:
description: VCDClusterSpec defines the desired state of VCDCluster
properties:
controlPlaneEndpoint:
description: APIEndpoint represents a reachable Kubernetes
API endpoint.
properties:
host:
description: Host is the hostname on which the API server
is serving.
type: string
port:
description: Port is the port on which the API server
is serving.
type: integer
required:
- host
- port
type: object
loadBalancerConfigSpec:
description: LoadBalancerConfig defines load-balancer configuration
for the Cluster both for the control plane nodes and for
the CPI
properties:
useOneArm:
description: UseOneArm defines the intent to une OneArm
when upgrading CAPVCD from 0.5.x to 1.0.0
type: boolean
vipSubnet:
type: string
type: object
org:
type: string
ovdc:
type: string
ovdcNetwork:
type: string
parentUid:
type: string
proxyConfigSpec:
description: ProxyConfig defines HTTP proxy environment variables
for containerd
properties:
httpProxy:
type: string
httpsProxy:
type: string
noProxy:
type: string
type: object
rdeId:
type: string
site:
type: string
useAsManagementCluster:
default: false
type: boolean
userContext:
properties:
password:
type: string
refreshToken:
type: string
secretRef:
description: SecretReference represents a Secret Reference.
It has enough information to retrieve secret in any
namespace
properties:
name:
description: name is unique within a namespace to
reference a secret resource.
type: string
namespace:
description: namespace defines the space within which
the secret name must be unique.
type: string
type: object
username:
type: string
type: object
required:
- org
- ovdc
- ovdcNetwork
- site
- userContext
type: object
required:
- spec
type: object
required:
- template
type: object
type: object
served: true
storage: true
subresources:
status: {}
status:
acceptedNames:
kind: ""
plural: ""
conditions: []
storedVersions: []
3 changes: 3 additions & 0 deletions config/crd/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -11,6 +11,7 @@ resources:
- bases/infrastructure.cluster.x-k8s.io_vcdmachines.yaml
- bases/infrastructure.cluster.x-k8s.io_vcdclusters.yaml
- bases/infrastructure.cluster.x-k8s.io_vcdmachinetemplates.yaml
- bases/infrastructure.cluster.x-k8s.io_vcdclustertemplates.yaml
#+kubebuilder:scaffold:crdkustomizeresource

patchesStrategicMerge:
@@ -22,6 +23,7 @@ patchesStrategicMerge:
#- patches/webhook_in_vcdmachines.yaml
#- patches/webhook_in_vcdclusters.yaml
#- patches/webhook_in_vcdmachinetemplates.yaml
#- patches/webhook_in_vcdclustertemplates.yaml
#+kubebuilder:scaffold:crdkustomizewebhookpatch

# [CERTMANAGER] To enable webhook, uncomment all the sections with [CERTMANAGER] prefix.
@@ -32,6 +34,7 @@ patchesStrategicMerge:
#- patches/cainjection_in_vcdmachines.yaml
#- patches/cainjection_in_vcdclusters.yaml
#- patches/cainjection_in_vcdmachinetemplates.yaml
#- patches/cainjection_in_vcdclustertemplates.yaml
#+kubebuilder:scaffold:crdkustomizecainjectionpatch

# the following config is for teaching kustomize how to do kustomization for CRDs.
7 changes: 7 additions & 0 deletions config/crd/patches/cainjection_in_vcdclustertemplates.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# The following patch adds a directive for certmanager to inject CA into the CRD
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
cert-manager.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME)
name: vcdclustertemplates.infrastructure.cluster.x-k8s.io
16 changes: 16 additions & 0 deletions config/crd/patches/webhook_in_vcdclustertemplates.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# The following patch enables a conversion webhook for the CRD
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: vcdclustertemplates.infrastructure.cluster.x-k8s.io
spec:
conversion:
strategy: Webhook
webhook:
clientConfig:
service:
namespace: system
name: webhook-service
path: /convert
conversionReviewVersions:
- v1
31 changes: 31 additions & 0 deletions config/rbac/vcdclustertemplate_editor_role.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# permissions for end users to edit vcdclustertemplates.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
app.kubernetes.io/name: clusterrole
app.kubernetes.io/instance: vcdclustertemplate-editor-role
app.kubernetes.io/component: rbac
app.kubernetes.io/created-by: cluster-api-provider-cloud-director
app.kubernetes.io/part-of: cluster-api-provider-cloud-director
app.kubernetes.io/managed-by: kustomize
name: vcdclustertemplate-editor-role
rules:
- apiGroups:
- infrastructure.cluster.x-k8s.io
resources:
- vcdclustertemplates
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- infrastructure.cluster.x-k8s.io
resources:
- vcdclustertemplates/status
verbs:
- get
Loading

0 comments on commit c470a8e

Please sign in to comment.