diff --git a/Makefile b/Makefile index 2fcbbfc011..0f5dc6381f 100644 --- a/Makefile +++ b/Makefile @@ -789,7 +789,7 @@ set-manifest-image: ##@ vm-operator: .PHONY: release-vm-operator -release-vm-operator: docker-vm-operator-build-all vm-operator-manifest-build docker-vm-operator-push-all vm-operator-manifest-push ## Build and push the vm-operator image and manifest for usage in CI +release-vm-operator: docker-vm-operator-build-all vm-operator-manifest-build docker-vm-operator-push-all ## Build and push the vm-operator image and manifest for usage in CI .PHONY: vm-operator-checkout vm-operator-checkout: @@ -811,13 +811,8 @@ vm-operator-checkout: vm-operator-manifest-build: $(RELEASE_DIR) $(KUSTOMIZE) vm-operator-checkout ## Build the vm-operator manifest yaml file kustomize build --load-restrictor LoadRestrictionsNone "$(VM_OPERATOR_TMP_DIR)/config/local" > "$(VM_OPERATOR_DIR)/vm-operator.yaml" sed -i'' -e 's@image: vmoperator.*@image: '"$(VM_OPERATOR_CONTROLLER_IMG):$(VM_OPERATOR_VERSION)"'@' "$(VM_OPERATOR_DIR)/vm-operator.yaml" - kustomize build "$(VM_OPERATOR_DIR)" > "$(RELEASE_DIR)/vm-operator-$(VM_OPERATOR_VERSION).yaml" + kustomize build "$(VM_OPERATOR_DIR)" > "$(VM_OPERATOR_DIR)/vm-operator-$(VM_OPERATOR_VERSION).yaml" -.PHONY: vm-operator-manifest-push -vm-operator-manifest-push: ## Push the vm-operator manifest yaml file to gcs - gsutil cp \ - "$(RELEASE_DIR)/vm-operator-$(VM_OPERATOR_VERSION).yaml" \ - "gs://artifacts.k8s-staging-capi-vsphere.appspot.com/vm-operator/$(VM_OPERATOR_VERSION).yaml" .PHONY: docker-vm-operator-build-all docker-vm-operator-build-all: $(addprefix docker-vm-operator-build-,$(VM_OPERATOR_ALL_ARCH)) ## Build docker images for all architectures diff --git a/test/e2e/config/vsphere.yaml b/test/e2e/config/vsphere.yaml index 8871995dbe..634b75595d 100644 --- a/test/e2e/config/vsphere.yaml +++ b/test/e2e/config/vsphere.yaml @@ -217,7 +217,7 @@ providers: versions: - name: v1.8.6-0-gde75746a # Use manifest from source files - value: "https://storage.googleapis.com/artifacts.k8s-staging-capi-vsphere.appspot.com/vm-operator/v1.8.6-0-gde75746a.yaml" + value: "file://../../../../cluster-api-provider-vsphere/test/infrastructure/vm-operator/vm-operator-v1.8.6-0-gde75746a.yaml" type: "url" contract: v1beta1 files: diff --git a/test/infrastructure/vm-operator/vm-operator-v1.8.6-0-gde75746a.yaml b/test/infrastructure/vm-operator/vm-operator-v1.8.6-0-gde75746a.yaml new file mode 100644 index 0000000000..0efbe0ee14 --- /dev/null +++ b/test/infrastructure/vm-operator/vm-operator-v1.8.6-0-gde75746a.yaml @@ -0,0 +1,8700 @@ +apiVersion: v1 +kind: Namespace +metadata: + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + control-plane: controller-manager + controller-tools.k8s.io: "1.0" + name: vmware-system-vmop +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.6.1 + creationTimestamp: null + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: availabilityzones.topology.tanzu.vmware.com +spec: + group: topology.tanzu.vmware.com + names: + kind: AvailabilityZone + listKind: AvailabilityZoneList + plural: availabilityzones + shortNames: + - az + singular: availabilityzone + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: AvailabilityZone is the schema for the AvailabilityZone resource + for the vSphere topology 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: AvailabilityZoneSpec defines the desired state of AvailabilityZone. + properties: + clusterComputeResourceMoIDs: + description: ClusterComputeResourceMoIDs are the managed object IDs + of the vSphere ClusterComputeResources represented by this availability + zone. + items: + type: string + type: array + clusterComputeResourceMoId: + description: ClusterComputeResourceMoId is the managed object ID of + the vSphere ClusterComputeResource represented by this availability + zone. + type: string + namespaces: + additionalProperties: + description: NamespaceInfo contains identifying information about + the vSphere resources used to represent a Kubernetes namespace + on individual vSphere Zones. + properties: + folderMoId: + description: FolderMoId is the managed object ID of the vSphere + Folder for a Namespace. Folders are global and not per-vSphere + Cluster, but the FolderMoId is stored here, alongside the + PoolMoId for convenience. + type: string + poolMoIDs: + description: PoolMoIDs are the managed object ID of the vSphere + ResourcePools for a Namespace in an individual vSphere Zone. + A zone may be comprised of multiple ResourcePools. + items: + type: string + type: array + poolMoId: + description: PoolMoId is the managed object ID of the vSphere + ResourcePool for a Namespace on an individual vSphere Cluster. + type: string + type: object + description: Namespaces is a map that enables querying information + about the vSphere objects that make up a Kubernetes Namespace based + on its name. + type: object + type: object + status: + description: AvailabilityZoneStatus defines the observed state of AvailabilityZone. + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: clustercontentlibraryitems.imageregistry.vmware.com +spec: + group: imageregistry.vmware.com + names: + kind: ClusterContentLibraryItem + listKind: ClusterContentLibraryItemList + plural: clustercontentlibraryitems + shortNames: + - cclitem + singular: clustercontentlibraryitem + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.name + name: vSphereName + type: string + - jsonPath: .status.contentLibraryRef.name + name: ClusterContentLibraryRef + type: string + - jsonPath: .status.type + name: Type + type: string + - jsonPath: .status.conditions[?(.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.cached + name: Cached + type: boolean + - jsonPath: .status.sizeInBytes + name: SizeInBytes + type: string + - jsonPath: .status.securityCompliance + name: SecurityCompliant + type: boolean + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + ClusterContentLibraryItem is the schema for the content library item API at the cluster scope. + Currently, ClusterContentLibraryItem is immutable to end users. + 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: ContentLibraryItemSpec defines the desired state of a ContentLibraryItem. + properties: + uuid: + description: UUID is the identifier which uniquely identifies the + library item in vCenter. This field is immutable. + type: string + required: + - uuid + type: object + status: + description: ContentLibraryItemStatus defines the observed state of ContentLibraryItem. + properties: + cached: + default: false + description: Cached indicates if the library item files are on storage + in vCenter. + type: boolean + certificateVerificationInfo: + description: CertificateVerificationInfo shows the certificate verification + status and the signing certificate. + properties: + certChain: + description: CertChain shows the signing certificate chain in + base64 encoding if the library item is signed. + items: + type: string + type: array + status: + description: Status shows the certificate verification status + of the library item. + enum: + - NOT_AVAILABLE + - VERIFIED + - INTERNAL + - VERIFICATION_FAILURE + - VERIFICATION_IN_PROGRESS + - UNTRUSTED + type: string + type: object + conditions: + description: Conditions describes the current condition information + of the ContentLibraryItem. + items: + description: Condition defines an observation of an Image Registry + Operator API resource operational state. + properties: + lastTransitionTime: + description: |- + Last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when + the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + A human readable message indicating details about the transition. + This field may be empty. + type: string + reason: + description: |- + The reason for the condition's last transition in CamelCase. + The specific API may choose whether or not this field is considered a guaranteed API. + This field may not be empty. + type: string + severity: + description: |- + Severity provides an explicit classification of Reason code, so the users or machines can immediately + understand the current situation and act accordingly. + The Severity field MUST be set only when Status=False. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: |- + Type of condition in CamelCase or in foo.example.com/CamelCase. + Many .condition.type values are consistent across resources like Available, but because arbitrary conditions + can be useful (see .node.status.conditions), the ability to deconflict is important. + type: string + required: + - status + - type + type: object + type: array + contentLibraryRef: + description: ContentLibraryRef refers to the ContentLibrary custom + resource that this item belongs to. + properties: + kind: + description: |- + Kind is a string value representing the kind of resource to which this + object refers. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + name: + description: |- + Name refers to a unique resource in the current namespace. + More info: http://kubernetes.io/docs/user-guide/identifiers#names + type: string + required: + - name + type: object + contentVersion: + description: |- + ContentVersion indicates the version of the library item content in vCenter. + This value is incremented when the files comprising the content library item are changed in vCenter. + type: string + creationTime: + description: CreationTime indicates the date and time when this library + item was created in vCenter. + format: date-time + type: string + description: + description: Description is a human-readable description for this + library item. + type: string + fileInfo: + description: FileInfo represents zero, one or more files belonging + to the content library item in vCenter. + items: + description: FileInfo represents the information of a file in a + content library item in vCenter. + properties: + cached: + default: false + description: Cached indicates if the library item file is on + storage in vCenter. + type: boolean + name: + description: Name specifies the name of the file in vCenter. + type: string + sizeInBytes: + anyOf: + - type: integer + - type: string + description: SizeInBytes indicates the library item file size + in bytes on storage in vCenter. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + version: + description: |- + Version indicates the version of the library item file in vCenter. + This value is incremented when a new copy of the file is uploaded to vCenter. + type: string + required: + - cached + - name + - sizeInBytes + - version + type: object + type: array + lastModifiedTime: + description: |- + LastModifiedTime indicates the date and time when this library item was last updated in vCenter. + This field is updated when the library item properties are changed or the file content is changed. + format: date-time + type: string + lastSyncTime: + description: |- + LastSyncTime indicates the date and time when this library item was last synchronized in vCenter. + This field applies only to the library items belonging to the library of Type=Subscribed. + format: date-time + type: string + metadataVersion: + description: |- + MetadataVersion indicates the version of the library item metadata in vCenter. + This value is incremented when the library item properties such as name or description are changed in vCenter. + type: string + name: + description: Name specifies the name of the content library item in + vCenter specified by the user. + type: string + securityCompliance: + description: SecurityCompliance shows the security compliance of the + library item. + type: boolean + sizeInBytes: + anyOf: + - type: integer + - type: string + description: SizeInBytes indicates the library item size in bytes + on storage in vCenter. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: Type indicates the type of the library item in vCenter. + enum: + - OVF + - ISO + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: vmware-system-vmop/vmware-system-vmop-serving-cert + controller-gen.kubebuilder.io/version: v0.14.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: clustervirtualmachineimages.vmoperator.vmware.com +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + caBundle: Cg== + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /convert + conversionReviewVersions: + - v1 + - v1beta1 + group: vmoperator.vmware.com + names: + kind: ClusterVirtualMachineImage + listKind: ClusterVirtualMachineImageList + plural: clustervirtualmachineimages + shortNames: + - cvmi + - cvmimage + - clustervmi + - clustervmimage + singular: clustervirtualmachineimage + preserveUnknownFields: false + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.imageName + name: Display-Name + type: string + - jsonPath: .spec.productInfo.version + name: Version + type: string + - jsonPath: .spec.osInfo.type + name: Os-Type + type: string + - jsonPath: .spec.type + name: Format + type: string + - jsonPath: .status.imageSupported + name: Image-Supported + priority: 1 + type: boolean + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + ClusterVirtualMachineImage is the schema for the clustervirtualmachineimage API + A ClusterVirtualMachineImage represents the desired specification and the observed status of a + ClusterVirtualMachineImage instance. + 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: VirtualMachineImageSpec defines the desired state of VirtualMachineImage. + properties: + hwVersion: + description: HardwareVersion describes the virtual hardware version + of the image + format: int32 + type: integer + imageID: + description: ImageID is a unique identifier exposed by the provider + of this VirtualMachineImage. + type: string + imageSourceType: + description: |- + ImageSourceType describes the type of content source of the VirtualMachineImage. The only Content Source + supported currently is the vSphere Content Library. + type: string + osInfo: + description: |- + OSInfo describes the attributes of the VirtualMachineImage relating to the Operating System contained in the + image. + properties: + type: + description: Type typically describes the type of the guest operating + system. + type: string + version: + description: Version typically describes the version of the guest + operating system. + type: string + type: object + ovfEnv: + additionalProperties: + description: |- + OvfProperty describes information related to a user configurable property element that is supported by + VirtualMachineImage and can be customized during VirtualMachine creation. + properties: + default: + description: Default describes the default value of the ovf + key. + type: string + description: + description: |- + Description contains the value of the OVF property's optional + "Description" element. + type: string + key: + description: Key describes the key of the ovf property. + type: string + label: + description: |- + Label contains the value of the OVF property's optional + "Label" element. + type: string + type: + description: Type describes the type of the ovf property. + type: string + required: + - key + - type + type: object + description: OVFEnv describes the user configurable customization + parameters of the VirtualMachineImage. + type: object + productInfo: + description: |- + ProductInfo describes the attributes of the VirtualMachineImage relating to the product contained in the + image. + properties: + fullVersion: + description: FullVersion typically describes a long-form version + of the image. + type: string + product: + description: Product typically describes the type of product contained + in the image. + type: string + vendor: + description: Vendor typically describes the name of the vendor + that is producing the image. + type: string + version: + description: Version typically describes a short-form version + of the image. + type: string + type: object + providerRef: + description: ProviderRef is a reference to a content provider object + that describes a provider. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: Kind is the type of resource being referenced. + type: string + name: + description: Name is the name of resource being referenced. + type: string + namespace: + description: Namespace of the resource being referenced. If empty, + cluster scoped resource is assumed. + type: string + required: + - kind + - name + type: object + type: + description: Type describes the type of the VirtualMachineImage. Currently, + the only supported image is "OVF" + type: string + required: + - imageID + - providerRef + - type + type: object + status: + description: VirtualMachineImageStatus defines the observed state of VirtualMachineImage. + properties: + conditions: + description: |- + Conditions describes the current condition information of the VirtualMachineImage object. e.g. if the OS type + is supported or image is supported by VMService + items: + description: Condition defines an observation of a VM Operator API + resource operational state. + properties: + lastTransitionTime: + description: |- + Last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when + the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + A human readable message indicating details about the transition. + This field may be empty. + type: string + reason: + description: |- + The reason for the condition's last transition in CamelCase. + The specific API may choose whether or not this field is considered a guaranteed API. + This field may not be empty. + type: string + severity: + description: |- + Severity provides an explicit classification of Reason code, so the users or machines can immediately + understand the current situation and act accordingly. + The Severity field MUST be set only when Status=False. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: |- + Type of condition in CamelCase or in foo.example.com/CamelCase. + Many .condition.type values are consistent across resources like Available, but because arbitrary conditions + can be useful (see .node.status.conditions), the ability to disambiguate is important. + type: string + required: + - status + - type + type: object + type: array + contentLibraryRef: + description: |- + ContentLibraryRef is a reference to the source ContentLibrary/ClusterContentLibrary resource. + + + Deprecated: This field is provider specific but the VirtualMachineImage types are intended to be provider generic. + This field does not exist in later API versions. Instead, the Spec.ProviderRef field should be used to look up the + provider. For images provided by a Content Library, the ProviderRef will point to either a ContentLibraryItem or + ClusterContentLibraryItem that contains a reference to the Content Library. + properties: + apiGroup: + description: |- + APIGroup is the group for the resource being referenced. + If APIGroup is not specified, the specified Kind must be in the core API group. + For any other third-party types, APIGroup is required. + type: string + kind: + description: Kind is the type of resource being referenced + type: string + name: + description: Name is the name of resource being referenced + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + contentVersion: + description: |- + ContentVersion describes the observed content version of this VirtualMachineImage that was last successfully + synced with the vSphere content library item. + type: string + firmware: + description: |- + Firmware describe the firmware type used by this VirtualMachineImage. + eg: bios, efi. + type: string + imageName: + description: ImageName describes the display name of this image. + type: string + imageSupported: + description: |- + ImageSupported indicates whether the VirtualMachineImage is supported by VMService. + A VirtualMachineImage is supported by VMService if the following conditions are true: + - VirtualMachineImageV1Alpha1CompatibleCondition + type: boolean + internalId: + description: Deprecated + type: string + powerState: + description: Deprecated + type: string + uuid: + description: Deprecated + type: string + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - jsonPath: .status.name + name: Display Name + type: string + - jsonPath: .status.productInfo.version + name: Image Version + type: string + - jsonPath: .status.osInfo.type + name: OS Name + type: string + - jsonPath: .status.osInfo.version + name: OS Version + type: string + - jsonPath: .status.hardwareVersion + name: Hardware Version + type: string + name: v1alpha2 + schema: + openAPIV3Schema: + description: |- + ClusterVirtualMachineImage is the schema for the clustervirtualmachineimages + 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: VirtualMachineImageSpec defines the desired state of VirtualMachineImage. + properties: + providerRef: + description: |- + ProviderRef is a reference to the resource that contains the source of + this image's information. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an + object. 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 + name: + description: |- + Name refers to a unique resource in the current namespace. + More info: http://kubernetes.io/docs/user-guide/identifiers#names + type: string + required: + - apiVersion + - kind + - name + type: object + type: object + status: + description: VirtualMachineImageStatus defines the observed state of VirtualMachineImage. + properties: + capabilities: + description: |- + Capabilities describes the image's observed capabilities. + + + The capabilities are discerned when VM Operator reconciles an image. + If the source of an image is an OVF in Content Library, then the + capabilities are parsed from the OVF property + capabilities.image.vmoperator.vmware.com as a comma-separated list of + values. Well-known capabilities include: + + + * cloud-init + * nvidia-gpu + * sriov-net + + + Every capability is also added to the resource's labels as + VirtualMachineImageCapabilityLabel + Value. For example, if the + capability is "cloud-init" then the following label will be added to the + resource: capability.image.vmoperator.vmware.com/cloud-init. + items: + type: string + type: array + x-kubernetes-list-type: set + conditions: + description: Conditions describes the observed conditions for this + image. + items: + description: "Condition contains details for one aspect of the current + state of this API Resource.\n---\nThis struct is intended for + direct use as an array at the field path .status.conditions. For + example,\n\n\n\ttype FooStatus struct{\n\t // Represents the + observations of a foo's current state.\n\t // Known .status.conditions.type + are: \"Available\", \"Progressing\", and \"Degraded\"\n\t // + +patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t + \ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t + \ // other fields\n\t}" + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: |- + type of condition in CamelCase or in foo.example.com/CamelCase. + --- + Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be + useful (see .node.status.conditions), the ability to deconflict is important. + The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + firmware: + description: Firmware describe the firmware type used by this image, + ex. BIOS, EFI. + type: string + hardwareVersion: + description: HardwareVersion describes the observed hardware version + of this image. + format: int32 + type: integer + name: + description: Name describes the display name of this image. + type: string + osInfo: + description: |- + OSInfo describes the observed operating system information for this + image. + + + The OS information is also added to the image resource's labels. Please + refer to VirtualMachineImageOSInfo for more information. + properties: + id: + description: |- + ID describes the operating system ID. + + + This value is also added to the image resource's labels as + VirtualMachineImageOSIDLabel. + type: string + type: + description: |- + Type describes the operating system type. + + + This value is also added to the image resource's labels as + VirtualMachineImageOSTypeLabel. + type: string + version: + description: |- + Version describes the operating system version. + + + This value is also added to the image resource's labels as + VirtualMachineImageOSVersionLabel. + type: string + type: object + ovfProperties: + description: |- + OVFProperties describes the observed user configurable OVF properties defined for this + image. + items: + description: |- + OVFProperty describes an OVF property associated with an image. + OVF properties may be used in conjunction with the vAppConfig bootstrap + provider to customize a VM during its creation. + properties: + default: + description: Default describes the OVF property's default value. + type: string + key: + description: Key describes the OVF property's key. + type: string + type: + description: Type describes the OVF property's type. + type: string + required: + - key + - type + type: object + type: array + productInfo: + description: ProductInfo describes the observed product information + for this image. + properties: + fullVersion: + description: FullVersion describes the long-form version of the + image. + type: string + product: + description: Product is a general descriptor for the image. + type: string + vendor: + description: Vendor describes the organization/user that produced + the image. + type: string + version: + description: Version describes the short-form version of the image. + type: string + type: object + providerContentVersion: + description: |- + ProviderContentVersion describes the content version from the provider item + that this image corresponds to. If the provider of this image is a Content + Library, this will be the version of the corresponding Content Library item. + type: string + providerItemID: + description: |- + ProviderItemID describes the ID of the provider item that this image corresponds to. + If the provider of this image is a Content Library, this ID will be that of the + corresponding Content Library item. + type: string + vmwareSystemProperties: + description: |- + VMwareSystemProperties describes the observed VMware system properties defined for + this image. + items: + description: |- + KeyValuePair is useful when wanting to realize a map as a list of key/value + pairs. + properties: + key: + description: Key is the key part of the key/value pair. + type: string + value: + description: Value is the optional value part of the key/value + pair. + type: string + required: + - key + type: object + type: array + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.6.2 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: cnsnodevmattachments.cns.vmware.com +spec: + conversion: + strategy: None + group: cns.vmware.com + names: + kind: CnsNodeVmAttachment + listKind: CnsNodeVmAttachmentList + plural: cnsnodevmattachments + singular: cnsnodevmattachment + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: CnsNodeVmAttachment is the Schema for the cnsnodevmattachments + 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: CnsNodeVmAttachmentSpec defines the desired state of CnsNodeVmAttachment + properties: + nodeuuid: + description: NodeUUID indicates the UUID of the node where the volume + needs to be attached to. Here NodeUUID is the bios UUID of the node. + type: string + volumename: + description: VolumeName indicates the name of the volume on the supervisor + Cluster. This is guaranteed to be unique in Supervisor cluster. + type: string + required: + - nodeuuid + - volumename + type: object + status: + description: CnsNodeVmAttachmentStatus defines the observed state of CnsNodeVmAttachment + properties: + attached: + description: Indicates the volume is successfully attached. This field + must only be set by the entity completing the attach operation, + i.e. the CNS Operator. + type: boolean + error: + description: The last error encountered during attach/detach operation, + if any. This field must only be set by the entity completing the + attach operation, i.e. the CNS Operator. + type: string + metadata: + additionalProperties: + type: string + description: Before successful attach, this field is populated with + CNS volume ID. Upon successful attach, this field is populated with + any information returned by the attach operation. This field must + only be set by the entity completing the attach operation, i.e. + the CNS Operator + type: object + required: + - attached + type: object + type: object + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: contentlibraryitems.imageregistry.vmware.com +spec: + group: imageregistry.vmware.com + names: + kind: ContentLibraryItem + listKind: ContentLibraryItemList + plural: contentlibraryitems + shortNames: + - clitem + singular: contentlibraryitem + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.name + name: vSphereName + type: string + - jsonPath: .status.contentLibraryRef.name + name: ContentLibraryRef + type: string + - jsonPath: .status.type + name: Type + type: string + - jsonPath: .status.conditions[?(.type=='Ready')].status + name: Ready + type: string + - jsonPath: .status.cached + name: Cached + type: boolean + - jsonPath: .status.sizeInBytes + name: SizeInBytes + type: string + - jsonPath: .status.securityCompliance + name: SecurityCompliant + type: boolean + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + ContentLibraryItem is the schema for the content library item API. + Currently, ContentLibraryItem is immutable to end users. + 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: ContentLibraryItemSpec defines the desired state of a ContentLibraryItem. + properties: + uuid: + description: UUID is the identifier which uniquely identifies the + library item in vCenter. This field is immutable. + type: string + required: + - uuid + type: object + status: + description: ContentLibraryItemStatus defines the observed state of ContentLibraryItem. + properties: + cached: + default: false + description: Cached indicates if the library item files are on storage + in vCenter. + type: boolean + certificateVerificationInfo: + description: CertificateVerificationInfo shows the certificate verification + status and the signing certificate. + properties: + certChain: + description: CertChain shows the signing certificate chain in + base64 encoding if the library item is signed. + items: + type: string + type: array + status: + description: Status shows the certificate verification status + of the library item. + enum: + - NOT_AVAILABLE + - VERIFIED + - INTERNAL + - VERIFICATION_FAILURE + - VERIFICATION_IN_PROGRESS + - UNTRUSTED + type: string + type: object + conditions: + description: Conditions describes the current condition information + of the ContentLibraryItem. + items: + description: Condition defines an observation of an Image Registry + Operator API resource operational state. + properties: + lastTransitionTime: + description: |- + Last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when + the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + A human readable message indicating details about the transition. + This field may be empty. + type: string + reason: + description: |- + The reason for the condition's last transition in CamelCase. + The specific API may choose whether or not this field is considered a guaranteed API. + This field may not be empty. + type: string + severity: + description: |- + Severity provides an explicit classification of Reason code, so the users or machines can immediately + understand the current situation and act accordingly. + The Severity field MUST be set only when Status=False. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: |- + Type of condition in CamelCase or in foo.example.com/CamelCase. + Many .condition.type values are consistent across resources like Available, but because arbitrary conditions + can be useful (see .node.status.conditions), the ability to deconflict is important. + type: string + required: + - status + - type + type: object + type: array + contentLibraryRef: + description: ContentLibraryRef refers to the ContentLibrary custom + resource that this item belongs to. + properties: + kind: + description: |- + Kind is a string value representing the kind of resource to which this + object refers. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + name: + description: |- + Name refers to a unique resource in the current namespace. + More info: http://kubernetes.io/docs/user-guide/identifiers#names + type: string + required: + - name + type: object + contentVersion: + description: |- + ContentVersion indicates the version of the library item content in vCenter. + This value is incremented when the files comprising the content library item are changed in vCenter. + type: string + creationTime: + description: CreationTime indicates the date and time when this library + item was created in vCenter. + format: date-time + type: string + description: + description: Description is a human-readable description for this + library item. + type: string + fileInfo: + description: FileInfo represents zero, one or more files belonging + to the content library item in vCenter. + items: + description: FileInfo represents the information of a file in a + content library item in vCenter. + properties: + cached: + default: false + description: Cached indicates if the library item file is on + storage in vCenter. + type: boolean + name: + description: Name specifies the name of the file in vCenter. + type: string + sizeInBytes: + anyOf: + - type: integer + - type: string + description: SizeInBytes indicates the library item file size + in bytes on storage in vCenter. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + version: + description: |- + Version indicates the version of the library item file in vCenter. + This value is incremented when a new copy of the file is uploaded to vCenter. + type: string + required: + - cached + - name + - sizeInBytes + - version + type: object + type: array + lastModifiedTime: + description: |- + LastModifiedTime indicates the date and time when this library item was last updated in vCenter. + This field is updated when the library item properties are changed or the file content is changed. + format: date-time + type: string + lastSyncTime: + description: |- + LastSyncTime indicates the date and time when this library item was last synchronized in vCenter. + This field applies only to the library items belonging to the library of Type=Subscribed. + format: date-time + type: string + metadataVersion: + description: |- + MetadataVersion indicates the version of the library item metadata in vCenter. + This value is incremented when the library item properties such as name or description are changed in vCenter. + type: string + name: + description: Name specifies the name of the content library item in + vCenter specified by the user. + type: string + securityCompliance: + description: SecurityCompliance shows the security compliance of the + library item. + type: boolean + sizeInBytes: + anyOf: + - type: integer + - type: string + description: SizeInBytes indicates the library item size in bytes + on storage in vCenter. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: + description: Type indicates the type of the library item in vCenter. + enum: + - OVF + - ISO + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: contentlibraryproviders.vmoperator.vmware.com +spec: + group: vmoperator.vmware.com + names: + kind: ContentLibraryProvider + listKind: ContentLibraryProviderList + plural: contentlibraryproviders + singular: contentlibraryprovider + preserveUnknownFields: false + scope: Cluster + versions: + - additionalPrinterColumns: + - description: UUID of the vSphere content library + jsonPath: .spec.uuid + name: Content-Library-UUID + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: ContentLibraryProvider is the Schema for the contentlibraryproviders + 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: ContentLibraryProviderSpec defines the desired state of ContentLibraryProvider. + properties: + uuid: + description: |- + UUID describes the UUID of a vSphere content library. It is the unique identifier for a + vSphere content library. + type: string + type: object + status: + description: |- + ContentLibraryProviderStatus defines the observed state of ContentLibraryProvider + Can include fields indicating when was the last time VM images were updated from a library. + type: object + type: object + served: true + storage: true + subresources: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: contentsourcebindings.vmoperator.vmware.com +spec: + group: vmoperator.vmware.com + names: + kind: ContentSourceBinding + listKind: ContentSourceBindingList + plural: contentsourcebindings + singular: contentsourcebinding + preserveUnknownFields: false + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: ContentSourceBinding is an object that represents a ContentSource + to Namespace mapping. + 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 + contentSourceRef: + description: ContentSourceRef is a reference to a ContentSource object. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: Kind is the type of resource being referenced. + type: string + name: + description: Name is the name of resource being referenced. + type: string + required: + - name + type: object + 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 + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: contentsources.vmoperator.vmware.com +spec: + group: vmoperator.vmware.com + names: + kind: ContentSource + listKind: ContentSourceList + plural: contentsources + singular: contentsource + preserveUnknownFields: false + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + ContentSource is the Schema for the contentsources API. + A ContentSource represents the desired specification and the observed status of a ContentSource instance. + 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: ContentSourceSpec defines the desired state of ContentSource. + properties: + providerRef: + description: ProviderRef is a reference to a content provider object + that describes a provider. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: Kind is the type of resource being referenced. + type: string + name: + description: Name is the name of resource being referenced. + type: string + namespace: + description: Namespace of the resource being referenced. If empty, + cluster scoped resource is assumed. + type: string + required: + - kind + - name + type: object + type: object + status: + description: ContentSourceStatus defines the observed state of ContentSource. + type: object + type: object + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.7.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: networkinterfaces.netoperator.vmware.com +spec: + group: netoperator.vmware.com + names: + kind: NetworkInterface + listKind: NetworkInterfaceList + plural: networkinterfaces + singular: networkinterface + preserveUnknownFields: false + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: NetworkInterface is the Schema for the networkinterfaces API. + A NetworkInterface represents a user's request for network configuration + to use to place a VM/Pod/Container's nic on a specified network. + 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: NetworkInterfaceSpec defines the desired state of NetworkInterface. + properties: + networkName: + description: NetworkName refers to a NetworkObject in the same namespace. + type: string + providerRef: + description: ProviderRef is a reference to a provider specific network + interface object that specifies the network interface configuration. + If unset, default configuration is assumed. + properties: + apiGroup: + description: APIGroup is the group for the resource being referenced. + type: string + apiVersion: + description: API version of the referent. + type: string + kind: + description: Kind is the type of resource being referenced + type: string + name: + description: Name is the name of resource being referenced + type: string + required: + - apiGroup + - kind + - name + type: object + type: + description: Type is the type of NetworkInterface. Supported values + are vmxnet3. + type: string + type: object + status: + description: NetworkInterfaceStatus defines the observed state of NetworkInterface. + Once NetworkInterfaceReady condition is True, it should contain configuration + to use to place a VM/Pod/Container's nic on the specified network. + properties: + conditions: + description: Conditions is an array of current observed network interface + conditions. + items: + description: NetworkInterfaceCondition describes the state of a + NetworkInterface at a certain point. + properties: + lastTransitionTime: + description: LastTransitionTime is the timestamp corresponding + to the last status change of this condition. + format: date-time + type: string + message: + description: Human-readable message indicating details about + last transition. + type: string + reason: + description: Machine understandable string that gives the reason + for condition's last transition. + type: string + status: + description: Status is the status of the condition. Can be True, + False, Unknown. + type: string + type: + description: Type is the type of network interface condition. + type: string + required: + - status + - type + type: object + type: array + externalID: + description: ExternalID is a network provider specific identifier + assigned to the network interface. + type: string + ipConfigs: + description: IPConfigs is an array of IP configurations for the network + interface. + items: + description: IPConfig represents an IP configuration. + properties: + gateway: + description: Gateway setting. + type: string + ip: + description: IP setting. + type: string + ipFamily: + description: IPFamily specifies the IP family (IPv4 vs IPv6) + the IP belongs to. + type: string + subnetMask: + description: SubnetMask setting. + type: string + required: + - gateway + - ip + - ipFamily + - subnetMask + type: object + type: array + macAddress: + description: MacAddress setting for the network interface. + type: string + networkID: + description: NetworkID is an network provider specific identifier + for the network backing the network interface. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: virtualmachineclassbindings.vmoperator.vmware.com +spec: + group: vmoperator.vmware.com + names: + kind: VirtualMachineClassBinding + listKind: VirtualMachineClassBindingList + plural: virtualmachineclassbindings + shortNames: + - vmclassbinding + singular: virtualmachineclassbinding + preserveUnknownFields: false + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + VirtualMachineClassBinding is a binding object responsible for + defining a VirtualMachineClass and a Namespace associated with it. + 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 + classRef: + description: ClassReference is a reference to a VirtualMachineClass object + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: Kind is the type of resource being referenced. + type: string + name: + description: Name is the name of resource being referenced. + type: string + required: + - name + type: object + 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 + type: object + served: true + storage: true + subresources: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: vmware-system-vmop/vmware-system-vmop-serving-cert + controller-gen.kubebuilder.io/version: v0.14.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: virtualmachineclasses.vmoperator.vmware.com +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + caBundle: Cg== + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /convert + conversionReviewVersions: + - v1 + - v1beta1 + group: vmoperator.vmware.com + names: + kind: VirtualMachineClass + listKind: VirtualMachineClassList + plural: virtualmachineclasses + shortNames: + - vmclass + singular: virtualmachineclass + preserveUnknownFields: false + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.hardware.cpus + name: CPU + type: string + - jsonPath: .spec.hardware.memory + name: Memory + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .spec.hardware.devices.vgpuDevices[*].profileName + name: VGPU-Devices-Profile-Names + priority: 1 + type: string + - jsonPath: .spec.hardware.devices.dynamicDirectPathIODevices[*].deviceID + name: Passthrough-DeviceIDs + priority: 1 + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + VirtualMachineClass is the Schema for the virtualmachineclasses API. + A VirtualMachineClass represents the desired specification and the observed status of a VirtualMachineClass + instance. A VirtualMachineClass represents a policy and configuration resource which defines a set of attributes to + be used in the configuration of a VirtualMachine instance. A VirtualMachine resource references a + VirtualMachineClass as a required input. + 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: VirtualMachineClassSpec defines the desired state of VirtualMachineClass. + properties: + configSpec: + description: |- + ConfigSpec describes additional configuration information for a + VirtualMachine. + The contents of this field are the VirtualMachineConfigSpec data object + (https://bit.ly/3HDtiRu) marshaled to JSON using the discriminator + field "_typeName" to preserve type information. + type: object + x-kubernetes-preserve-unknown-fields: true + controllerName: + description: |- + ControllerName describes the name of the controller responsible for + reconciling VirtualMachine resources that are realized from this + VirtualMachineClass. + + + When omitted, controllers reconciling VirtualMachine resources determine + the default controller name from the environment variable + DEFAULT_VM_CLASS_CONTROLLER_NAME. If this environment variable is not + defined or empty, it defaults to vmoperator.vmware.com/vsphere. + + + Once a non-empty value is assigned to this field, attempts to set this + field to an empty value will be silently ignored. + type: string + description: + description: |- + Description describes the configuration of the VirtualMachineClass which is not related to virtual hardware + or infrastructure policy. This field is used to address remaining specs about this VirtualMachineClass. + type: string + hardware: + description: |- + Hardware describes the configuration of the VirtualMachineClass attributes related to virtual hardware. The + configuration specified in this field is used to customize the virtual hardware characteristics of any VirtualMachine + associated with this VirtualMachineClass. + properties: + cpus: + format: int64 + type: integer + devices: + description: VirtualDevices contains information about the virtual + devices associated with a VirtualMachineClass. + properties: + dynamicDirectPathIODevices: + items: + description: DynamicDirectPathIODevice contains the configuration + corresponding to a Dynamic DirectPath I/O device. + properties: + customLabel: + type: string + deviceID: + type: integer + vendorID: + type: integer + required: + - deviceID + - vendorID + type: object + type: array + vgpuDevices: + items: + description: VGPUDevice contains the configuration corresponding + to a vGPU device. + properties: + profileName: + type: string + required: + - profileName + type: object + type: array + type: object + instanceStorage: + description: |- + InstanceStorage provides information used to configure instance + storage volumes for a VirtualMachine. + properties: + storageClass: + description: |- + StorageClass refers to the name of a StorageClass resource used to + provide the storage for the configured instance storage volumes. + The value of this field has no relationship to or bearing on the field + virtualMachine.spec.storageClass. Please note the referred StorageClass + must be available in the same namespace as the VirtualMachineClass that + uses it for configuring instance storage. + type: string + volumes: + description: |- + Volumes describes instance storage volumes created for a VirtualMachine + instance that use this VirtualMachineClass. + items: + description: |- + InstanceStorageVolume contains information required to create an + instance storage volume on a VirtualMachine. + properties: + size: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - size + type: object + type: array + type: object + memory: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + policies: + description: |- + Policies describes the configuration of the VirtualMachineClass attributes related to virtual infrastructure + policy. The configuration specified in this field is used to customize various policies related to + infrastructure resource consumption. + properties: + resources: + description: |- + VirtualMachineClassResources describes the virtual hardware resource reservations and limits configuration to be used + by a VirtualMachineClass. + properties: + limits: + description: VirtualMachineResourceSpec describes a virtual + hardware policy specification. + properties: + cpu: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + memory: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + description: VirtualMachineResourceSpec describes a virtual + hardware policy specification. + properties: + cpu: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + memory: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + type: object + type: object + status: + description: |- + VirtualMachineClassStatus defines the observed state of VirtualMachineClass. VirtualMachineClasses are immutable, + non-dynamic resources, so this status is currently unused. + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - jsonPath: .spec.hardware.cpus + name: CPU + type: string + - jsonPath: .spec.hardware.memory + name: Memory + type: string + - jsonPath: .status.capabilities + name: Capabilities + priority: 1 + type: string + name: v1alpha2 + schema: + openAPIV3Schema: + description: |- + VirtualMachineClass is the schema for the virtualmachineclasses API and + represents the desired state and observed status of a virtualmachineclasses + resource. + 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: VirtualMachineClassSpec defines the desired state of VirtualMachineClass. + properties: + configSpec: + description: |- + ConfigSpec describes additional configuration information for a + VirtualMachine. + The contents of this field are the VirtualMachineConfigSpec data object + (https://bit.ly/3HDtiRu) marshaled to JSON using the discriminator + field "_typeName" to preserve type information. + type: object + x-kubernetes-preserve-unknown-fields: true + controllerName: + description: |- + ControllerName describes the name of the controller responsible for + reconciling VirtualMachine resources that are realized from this + VirtualMachineClass. + + + When omitted, controllers reconciling VirtualMachine resources determine + the default controller name from the environment variable + DEFAULT_VM_CLASS_CONTROLLER_NAME. If this environment variable is not + defined or empty, it defaults to vmoperator.vmware.com/vsphere. + + + Once a non-empty value is assigned to this field, attempts to set this + field to an empty value will be silently ignored. + type: string + description: + description: |- + Description describes the configuration of the VirtualMachineClass which + is not related to virtual hardware or infrastructure policy. This field + is used to address remaining specs about this VirtualMachineClass. + type: string + hardware: + description: |- + Hardware describes the configuration of the VirtualMachineClass + attributes related to virtual hardware. The configuration specified in + this field is used to customize the virtual hardware characteristics of + any VirtualMachine associated with this VirtualMachineClass. + properties: + cpus: + format: int64 + type: integer + devices: + description: |- + VirtualDevices contains information about the virtual devices associated + with a VirtualMachineClass. + properties: + dynamicDirectPathIODevices: + items: + description: |- + DynamicDirectPathIODevice contains the configuration corresponding to a + Dynamic DirectPath I/O device. + properties: + customLabel: + type: string + deviceID: + format: int64 + type: integer + vendorID: + format: int64 + type: integer + required: + - deviceID + - vendorID + type: object + type: array + vgpuDevices: + items: + description: VGPUDevice contains the configuration corresponding + to a vGPU device. + properties: + profileName: + type: string + required: + - profileName + type: object + type: array + x-kubernetes-list-map-keys: + - profileName + x-kubernetes-list-type: map + type: object + instanceStorage: + description: |- + InstanceStorage provides information used to configure instance + storage volumes for a VirtualMachine. + properties: + storageClass: + description: |- + StorageClass refers to the name of a StorageClass resource used to + provide the storage for the configured instance storage volumes. + The value of this field has no relationship to or bearing on the field + virtualMachine.spec.storageClass. Please note the referred StorageClass + must be available in the same namespace as the VirtualMachineClass that + uses it for configuring instance storage. + type: string + volumes: + description: |- + Volumes describes instance storage volumes created for a VirtualMachine + instance that use this VirtualMachineClass. + items: + description: |- + InstanceStorageVolume contains information required to create an + instance storage volume on a VirtualMachine. + properties: + size: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + required: + - size + type: object + type: array + type: object + memory: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + policies: + description: |- + Policies describes the configuration of the VirtualMachineClass + attributes related to virtual infrastructure policy. The configuration + specified in this field is used to customize various policies related to + infrastructure resource consumption. + properties: + resources: + description: |- + VirtualMachineClassResources describes the virtual hardware resource + reservations and limits configuration to be used by a VirtualMachineClass. + properties: + limits: + description: VirtualMachineResourceSpec describes a virtual + hardware policy specification. + properties: + cpu: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + memory: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + description: VirtualMachineResourceSpec describes a virtual + hardware policy specification. + properties: + cpu: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + memory: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + type: object + type: object + status: + description: VirtualMachineClassStatus defines the observed state of VirtualMachineClass. + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: vmware-system-vmop/vmware-system-vmop-serving-cert + controller-gen.kubebuilder.io/version: v0.14.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: virtualmachineimages.vmoperator.vmware.com +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + caBundle: Cg== + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /convert + conversionReviewVersions: + - v1 + - v1beta1 + group: vmoperator.vmware.com + names: + kind: VirtualMachineImage + listKind: VirtualMachineImageList + plural: virtualmachineimages + shortNames: + - vmi + - vmimage + singular: virtualmachineimage + preserveUnknownFields: false + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.imageName + name: Display-Name + type: string + - jsonPath: .spec.productInfo.version + name: Version + type: string + - jsonPath: .spec.osInfo.type + name: Os-Type + type: string + - jsonPath: .spec.type + name: Format + type: string + - jsonPath: .status.imageSupported + name: Image-Supported + priority: 1 + type: boolean + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + VirtualMachineImage is the Schema for the virtualmachineimages API + A VirtualMachineImage represents a VirtualMachine image (e.g. VM template) that can be used as the base image + for creating a VirtualMachine instance. The VirtualMachineImage is a required field of the VirtualMachine + spec. Currently, VirtualMachineImages are immutable to end users. + 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: VirtualMachineImageSpec defines the desired state of VirtualMachineImage. + properties: + hwVersion: + description: HardwareVersion describes the virtual hardware version + of the image + format: int32 + type: integer + imageID: + description: ImageID is a unique identifier exposed by the provider + of this VirtualMachineImage. + type: string + imageSourceType: + description: |- + ImageSourceType describes the type of content source of the VirtualMachineImage. The only Content Source + supported currently is the vSphere Content Library. + type: string + osInfo: + description: |- + OSInfo describes the attributes of the VirtualMachineImage relating to the Operating System contained in the + image. + properties: + type: + description: Type typically describes the type of the guest operating + system. + type: string + version: + description: Version typically describes the version of the guest + operating system. + type: string + type: object + ovfEnv: + additionalProperties: + description: |- + OvfProperty describes information related to a user configurable property element that is supported by + VirtualMachineImage and can be customized during VirtualMachine creation. + properties: + default: + description: Default describes the default value of the ovf + key. + type: string + description: + description: |- + Description contains the value of the OVF property's optional + "Description" element. + type: string + key: + description: Key describes the key of the ovf property. + type: string + label: + description: |- + Label contains the value of the OVF property's optional + "Label" element. + type: string + type: + description: Type describes the type of the ovf property. + type: string + required: + - key + - type + type: object + description: OVFEnv describes the user configurable customization + parameters of the VirtualMachineImage. + type: object + productInfo: + description: |- + ProductInfo describes the attributes of the VirtualMachineImage relating to the product contained in the + image. + properties: + fullVersion: + description: FullVersion typically describes a long-form version + of the image. + type: string + product: + description: Product typically describes the type of product contained + in the image. + type: string + vendor: + description: Vendor typically describes the name of the vendor + that is producing the image. + type: string + version: + description: Version typically describes a short-form version + of the image. + type: string + type: object + providerRef: + description: ProviderRef is a reference to a content provider object + that describes a provider. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: Kind is the type of resource being referenced. + type: string + name: + description: Name is the name of resource being referenced. + type: string + namespace: + description: Namespace of the resource being referenced. If empty, + cluster scoped resource is assumed. + type: string + required: + - kind + - name + type: object + type: + description: Type describes the type of the VirtualMachineImage. Currently, + the only supported image is "OVF" + type: string + required: + - imageID + - providerRef + - type + type: object + status: + description: VirtualMachineImageStatus defines the observed state of VirtualMachineImage. + properties: + conditions: + description: |- + Conditions describes the current condition information of the VirtualMachineImage object. e.g. if the OS type + is supported or image is supported by VMService + items: + description: Condition defines an observation of a VM Operator API + resource operational state. + properties: + lastTransitionTime: + description: |- + Last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when + the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + A human readable message indicating details about the transition. + This field may be empty. + type: string + reason: + description: |- + The reason for the condition's last transition in CamelCase. + The specific API may choose whether or not this field is considered a guaranteed API. + This field may not be empty. + type: string + severity: + description: |- + Severity provides an explicit classification of Reason code, so the users or machines can immediately + understand the current situation and act accordingly. + The Severity field MUST be set only when Status=False. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: |- + Type of condition in CamelCase or in foo.example.com/CamelCase. + Many .condition.type values are consistent across resources like Available, but because arbitrary conditions + can be useful (see .node.status.conditions), the ability to disambiguate is important. + type: string + required: + - status + - type + type: object + type: array + contentLibraryRef: + description: |- + ContentLibraryRef is a reference to the source ContentLibrary/ClusterContentLibrary resource. + + + Deprecated: This field is provider specific but the VirtualMachineImage types are intended to be provider generic. + This field does not exist in later API versions. Instead, the Spec.ProviderRef field should be used to look up the + provider. For images provided by a Content Library, the ProviderRef will point to either a ContentLibraryItem or + ClusterContentLibraryItem that contains a reference to the Content Library. + properties: + apiGroup: + description: |- + APIGroup is the group for the resource being referenced. + If APIGroup is not specified, the specified Kind must be in the core API group. + For any other third-party types, APIGroup is required. + type: string + kind: + description: Kind is the type of resource being referenced + type: string + name: + description: Name is the name of resource being referenced + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + contentVersion: + description: |- + ContentVersion describes the observed content version of this VirtualMachineImage that was last successfully + synced with the vSphere content library item. + type: string + firmware: + description: |- + Firmware describe the firmware type used by this VirtualMachineImage. + eg: bios, efi. + type: string + imageName: + description: ImageName describes the display name of this image. + type: string + imageSupported: + description: |- + ImageSupported indicates whether the VirtualMachineImage is supported by VMService. + A VirtualMachineImage is supported by VMService if the following conditions are true: + - VirtualMachineImageV1Alpha1CompatibleCondition + type: boolean + internalId: + description: Deprecated + type: string + powerState: + description: Deprecated + type: string + uuid: + description: Deprecated + type: string + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - jsonPath: .status.name + name: Display Name + type: string + - jsonPath: .status.productInfo.version + name: Image Version + type: string + - jsonPath: .status.osInfo.type + name: OS Name + type: string + - jsonPath: .status.osInfo.version + name: OS Version + type: string + - jsonPath: .status.hardwareVersion + name: Hardware Version + type: string + - jsonPath: .status.capabilities + name: Capabilities + type: string + name: v1alpha2 + schema: + openAPIV3Schema: + description: VirtualMachineImage is the schema for the virtualmachineimages + 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: VirtualMachineImageSpec defines the desired state of VirtualMachineImage. + properties: + providerRef: + description: |- + ProviderRef is a reference to the resource that contains the source of + this image's information. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an + object. 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 + name: + description: |- + Name refers to a unique resource in the current namespace. + More info: http://kubernetes.io/docs/user-guide/identifiers#names + type: string + required: + - apiVersion + - kind + - name + type: object + type: object + status: + description: VirtualMachineImageStatus defines the observed state of VirtualMachineImage. + properties: + capabilities: + description: |- + Capabilities describes the image's observed capabilities. + + + The capabilities are discerned when VM Operator reconciles an image. + If the source of an image is an OVF in Content Library, then the + capabilities are parsed from the OVF property + capabilities.image.vmoperator.vmware.com as a comma-separated list of + values. Well-known capabilities include: + + + * cloud-init + * nvidia-gpu + * sriov-net + + + Every capability is also added to the resource's labels as + VirtualMachineImageCapabilityLabel + Value. For example, if the + capability is "cloud-init" then the following label will be added to the + resource: capability.image.vmoperator.vmware.com/cloud-init. + items: + type: string + type: array + x-kubernetes-list-type: set + conditions: + description: Conditions describes the observed conditions for this + image. + items: + description: "Condition contains details for one aspect of the current + state of this API Resource.\n---\nThis struct is intended for + direct use as an array at the field path .status.conditions. For + example,\n\n\n\ttype FooStatus struct{\n\t // Represents the + observations of a foo's current state.\n\t // Known .status.conditions.type + are: \"Available\", \"Progressing\", and \"Degraded\"\n\t // + +patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t + \ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t + \ // other fields\n\t}" + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: |- + type of condition in CamelCase or in foo.example.com/CamelCase. + --- + Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be + useful (see .node.status.conditions), the ability to deconflict is important. + The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + firmware: + description: Firmware describe the firmware type used by this image, + ex. BIOS, EFI. + type: string + hardwareVersion: + description: HardwareVersion describes the observed hardware version + of this image. + format: int32 + type: integer + name: + description: Name describes the display name of this image. + type: string + osInfo: + description: |- + OSInfo describes the observed operating system information for this + image. + + + The OS information is also added to the image resource's labels. Please + refer to VirtualMachineImageOSInfo for more information. + properties: + id: + description: |- + ID describes the operating system ID. + + + This value is also added to the image resource's labels as + VirtualMachineImageOSIDLabel. + type: string + type: + description: |- + Type describes the operating system type. + + + This value is also added to the image resource's labels as + VirtualMachineImageOSTypeLabel. + type: string + version: + description: |- + Version describes the operating system version. + + + This value is also added to the image resource's labels as + VirtualMachineImageOSVersionLabel. + type: string + type: object + ovfProperties: + description: |- + OVFProperties describes the observed user configurable OVF properties defined for this + image. + items: + description: |- + OVFProperty describes an OVF property associated with an image. + OVF properties may be used in conjunction with the vAppConfig bootstrap + provider to customize a VM during its creation. + properties: + default: + description: Default describes the OVF property's default value. + type: string + key: + description: Key describes the OVF property's key. + type: string + type: + description: Type describes the OVF property's type. + type: string + required: + - key + - type + type: object + type: array + productInfo: + description: ProductInfo describes the observed product information + for this image. + properties: + fullVersion: + description: FullVersion describes the long-form version of the + image. + type: string + product: + description: Product is a general descriptor for the image. + type: string + vendor: + description: Vendor describes the organization/user that produced + the image. + type: string + version: + description: Version describes the short-form version of the image. + type: string + type: object + providerContentVersion: + description: |- + ProviderContentVersion describes the content version from the provider item + that this image corresponds to. If the provider of this image is a Content + Library, this will be the version of the corresponding Content Library item. + type: string + providerItemID: + description: |- + ProviderItemID describes the ID of the provider item that this image corresponds to. + If the provider of this image is a Content Library, this ID will be that of the + corresponding Content Library item. + type: string + vmwareSystemProperties: + description: |- + VMwareSystemProperties describes the observed VMware system properties defined for + this image. + items: + description: |- + KeyValuePair is useful when wanting to realize a map as a list of key/value + pairs. + properties: + key: + description: Key is the key part of the key/value pair. + type: string + value: + description: Value is the optional value part of the key/value + pair. + type: string + required: + - key + type: object + type: array + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: vmware-system-vmop/vmware-system-vmop-serving-cert + controller-gen.kubebuilder.io/version: v0.14.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: virtualmachinepublishrequests.vmoperator.vmware.com +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + caBundle: Cg== + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /convert + conversionReviewVersions: + - v1 + - v1beta1 + group: vmoperator.vmware.com + names: + kind: VirtualMachinePublishRequest + listKind: VirtualMachinePublishRequestList + plural: virtualmachinepublishrequests + shortNames: + - vmpub + singular: virtualmachinepublishrequest + preserveUnknownFields: false + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + VirtualMachinePublishRequest defines the information necessary to publish a + VirtualMachine as a VirtualMachineImage to an image registry. + 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: |- + VirtualMachinePublishRequestSpec defines the desired state of a + VirtualMachinePublishRequest. + + + All the fields in this spec are optional. This is especially useful when a + DevOps persona wants to publish a VM without doing anything more than + applying a VirtualMachinePublishRequest resource that has the same name + as said VM in the same namespace as said VM. + properties: + source: + description: |- + Source is the source of the publication request, ex. a VirtualMachine + resource. + + + If this value is omitted then the publication controller checks to + see if there is a resource with the same name as this + VirtualMachinePublishRequest resource, an API version equal to + spec.source.apiVersion, and a kind equal to spec.source.kind. If such + a resource exists, then it is the source of the publication. + properties: + apiVersion: + default: vmoperator.vmware.com/v1alpha1 + description: APIVersion is the API version of the referenced object. + type: string + kind: + default: VirtualMachine + description: Kind is the kind of referenced object. + type: string + name: + description: |- + Name is the name of the referenced object. + + + If omitted this value defaults to the name of the + VirtualMachinePublishRequest resource. + type: string + type: object + target: + description: |- + Target is the target of the publication request, ex. item + information and a ContentLibrary resource. + + + If this value is omitted, the controller uses spec.source.name + "-image" + as the name of the published item. Additionally, when omitted the + controller attempts to identify the target location by matching a + resource with an API version equal to spec.target.location.apiVersion, a + kind equal to spec.target.location.kind, w/ the label + "imageregistry.vmware.com/default". + + + Please note that while optional, if a VirtualMachinePublishRequest sans + target information is applied to a namespace without a default + publication target, then the VirtualMachinePublishRequest resource + will be marked in error. + properties: + item: + description: |- + Item contains information about the name of the object to which + the VM is published. + + + Please note this value is optional and if omitted, the controller + will use spec.source.name + "-image" as the name of the published + item. + properties: + description: + description: Description is the description to assign to the + published object. + type: string + name: + description: |- + Name is the display name of the published object. + + + If the spec.target.location.apiVersion equals + imageregistry.vmware.com/v1alpha1 and the spec.target.location.kind + equals ContentLibrary, then this should be the name that will + show up in vCenter Content Library, not the custom resource name + in the namespace. + + + If omitted then the controller will use spec.source.name + "-image". + type: string + type: object + location: + description: |- + Location contains information about the location to which to publish + the VM. + properties: + apiVersion: + default: imageregistry.vmware.com/v1alpha1 + description: APIVersion is the API version of the referenced + object. + type: string + kind: + default: ContentLibrary + description: Kind is the kind of referenced object. + type: string + name: + description: |- + Name is the name of the referenced object. + + + Please note an error will be returned if this field is not + set in a namespace that lacks a default publication target. + + + A default publication target is a resource with an API version + equal to spec.target.location.apiVersion, a kind equal to + spec.target.location.kind, and has the label + "imageregistry.vmware.com/default". + type: string + type: object + type: object + ttlSecondsAfterFinished: + description: |- + TTLSecondsAfterFinished is the time-to-live duration for how long this + resource will be allowed to exist once the publication operation + completes. After the TTL expires, the resource will be automatically + deleted without the user having to take any direct action. + + + If this field is unset then the request resource will not be + automatically deleted. If this field is set to zero then the request + resource is eligible for deletion immediately after it finishes. + format: int64 + minimum: 0 + type: integer + type: object + status: + description: |- + VirtualMachinePublishRequestStatus defines the observed state of a + VirtualMachinePublishRequest. + properties: + attempts: + description: |- + Attempts represents the number of times the request to publish the VM + has been attempted. + format: int64 + type: integer + completionTime: + description: |- + CompletionTime represents time when the request was completed. It is not + guaranteed to be set in happens-before order across separate operations. + It is represented in RFC3339 form and is in UTC. + + + The value of this field should be equal to the value of the + LastTransitionTime for the status condition Type=Complete. + format: date-time + type: string + conditions: + description: |- + Conditions is a list of the latest, available observations of the + request's current state. + items: + description: Condition defines an observation of a VM Operator API + resource operational state. + properties: + lastTransitionTime: + description: |- + Last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when + the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + A human readable message indicating details about the transition. + This field may be empty. + type: string + reason: + description: |- + The reason for the condition's last transition in CamelCase. + The specific API may choose whether or not this field is considered a guaranteed API. + This field may not be empty. + type: string + severity: + description: |- + Severity provides an explicit classification of Reason code, so the users or machines can immediately + understand the current situation and act accordingly. + The Severity field MUST be set only when Status=False. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: |- + Type of condition in CamelCase or in foo.example.com/CamelCase. + Many .condition.type values are consistent across resources like Available, but because arbitrary conditions + can be useful (see .node.status.conditions), the ability to disambiguate is important. + type: string + required: + - status + - type + type: object + type: array + imageName: + description: |- + ImageName is the name of the VirtualMachineImage resource that is + eventually realized in the same namespace as the VM and publication + request after the publication operation completes. + + + This field will not be set until the VirtualMachineImage resource + is realized. + type: string + lastAttemptTime: + description: LastAttemptTime represents the time when the latest request + was sent. + format: date-time + type: string + ready: + description: |- + Ready is set to true only when the VM has been published successfully + and the new VirtualMachineImage resource is ready. + + + Readiness is determined by waiting until there is status condition + Type=Complete and ensuring it and all other status conditions present + have a Status=True. The conditions present will be: + + + * SourceValid + * TargetValid + * Uploaded + * ImageAvailable + * Complete + type: boolean + sourceRef: + description: |- + SourceRef is the reference to the source of the publication request, + ex. a VirtualMachine resource. + properties: + apiVersion: + default: vmoperator.vmware.com/v1alpha1 + description: APIVersion is the API version of the referenced object. + type: string + kind: + default: VirtualMachine + description: Kind is the kind of referenced object. + type: string + name: + description: |- + Name is the name of the referenced object. + + + If omitted this value defaults to the name of the + VirtualMachinePublishRequest resource. + type: string + type: object + startTime: + description: |- + StartTime represents time when the request was acknowledged by the + controller. It is not guaranteed to be set in happens-before order + across separate operations. It is represented in RFC3339 form and is + in UTC. + format: date-time + type: string + targetRef: + description: |- + TargetRef is the reference to the target of the publication request, + ex. item information and a ContentLibrary resource. + properties: + item: + description: |- + Item contains information about the name of the object to which + the VM is published. + + + Please note this value is optional and if omitted, the controller + will use spec.source.name + "-image" as the name of the published + item. + properties: + description: + description: Description is the description to assign to the + published object. + type: string + name: + description: |- + Name is the display name of the published object. + + + If the spec.target.location.apiVersion equals + imageregistry.vmware.com/v1alpha1 and the spec.target.location.kind + equals ContentLibrary, then this should be the name that will + show up in vCenter Content Library, not the custom resource name + in the namespace. + + + If omitted then the controller will use spec.source.name + "-image". + type: string + type: object + location: + description: |- + Location contains information about the location to which to publish + the VM. + properties: + apiVersion: + default: imageregistry.vmware.com/v1alpha1 + description: APIVersion is the API version of the referenced + object. + type: string + kind: + default: ContentLibrary + description: Kind is the kind of referenced object. + type: string + name: + description: |- + Name is the name of the referenced object. + + + Please note an error will be returned if this field is not + set in a namespace that lacks a default publication target. + + + A default publication target is a resource with an API version + equal to spec.target.location.apiVersion, a kind equal to + spec.target.location.kind, and has the label + "imageregistry.vmware.com/default". + type: string + type: object + type: object + type: object + type: object + served: true + storage: false + subresources: + status: {} + - name: v1alpha2 + schema: + openAPIV3Schema: + description: |- + VirtualMachinePublishRequest defines the information necessary to publish a + VirtualMachine as a VirtualMachineImage to an image registry. + 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: |- + VirtualMachinePublishRequestSpec defines the desired state of a + VirtualMachinePublishRequest. + + + All the fields in this spec are optional. This is especially useful when a + DevOps persona wants to publish a VM without doing anything more than + applying a VirtualMachinePublishRequest resource that has the same name + as said VM in the same namespace as said VM. + properties: + source: + description: |- + Source is the source of the publication request, ex. a VirtualMachine + resource. + + + If this value is omitted then the publication controller checks to + see if there is a resource with the same name as this + VirtualMachinePublishRequest resource, an API version equal to + spec.source.apiVersion, and a kind equal to spec.source.kind. If such + a resource exists, then it is the source of the publication. + properties: + apiVersion: + default: vmoperator.vmware.com/v1alpha1 + description: APIVersion is the API version of the referenced object. + type: string + kind: + default: VirtualMachine + description: Kind is the kind of referenced object. + type: string + name: + description: |- + Name is the name of the referenced object. + + + If omitted this value defaults to the name of the + VirtualMachinePublishRequest resource. + type: string + type: object + target: + description: |- + Target is the target of the publication request, ex. item + information and a ContentLibrary resource. + + + If this value is omitted, the controller uses spec.source.name + "-image" + as the name of the published item. Additionally, when omitted the + controller attempts to identify the target location by matching a + resource with an API version equal to spec.target.location.apiVersion, a + kind equal to spec.target.location.kind, w/ the label + "imageregistry.vmware.com/default". + + + Please note that while optional, if a VirtualMachinePublishRequest sans + target information is applied to a namespace without a default + publication target, then the VirtualMachinePublishRequest resource + will be marked in error. + properties: + item: + description: |- + Item contains information about the name of the object to which + the VM is published. + + + Please note this value is optional and if omitted, the controller + will use spec.source.name + "-image" as the name of the published + item. + properties: + description: + description: Description is the description to assign to the + published object. + type: string + name: + description: |- + Name is the name of the published object. + + + If the spec.target.location.apiVersion equals + imageregistry.vmware.com/v1alpha1 and the spec.target.location.kind + equals ContentLibrary, then this should be the name that will + show up in vCenter Content Library, not the custom resource name + in the namespace. + + + If omitted then the controller will use spec.source.name + "-image". + type: string + type: object + location: + description: |- + Location contains information about the location to which to publish + the VM. + properties: + apiVersion: + default: imageregistry.vmware.com/v1alpha1 + description: APIVersion is the API version of the referenced + object. + type: string + kind: + default: ContentLibrary + description: Kind is the kind of referenced object. + type: string + name: + description: |- + Name is the name of the referenced object. + + + Please note an error will be returned if this field is not + set in a namespace that lacks a default publication target. + + + A default publication target is a resource with an API version + equal to spec.target.location.apiVersion, a kind equal to + spec.target.location.kind, and has the label + "imageregistry.vmware.com/default". + type: string + type: object + type: object + ttlSecondsAfterFinished: + description: |- + TTLSecondsAfterFinished is the time-to-live duration for how long this + resource will be allowed to exist once the publication operation + completes. After the TTL expires, the resource will be automatically + deleted without the user having to take any direct action. + + + If this field is unset then the request resource will not be + automatically deleted. If this field is set to zero then the request + resource is eligible for deletion immediately after it finishes. + format: int64 + minimum: 0 + type: integer + type: object + status: + description: |- + VirtualMachinePublishRequestStatus defines the observed state of a + VirtualMachinePublishRequest. + properties: + attempts: + description: |- + Attempts represents the number of times the request to publish the VM + has been attempted. + format: int64 + type: integer + completionTime: + description: |- + CompletionTime represents time when the request was completed. It is not + guaranteed to be set in happens-before order across separate operations. + It is represented in RFC3339 form and is in UTC. + + + The value of this field should be equal to the value of the + LastTransitionTime for the status condition Type=Complete. + format: date-time + type: string + conditions: + description: |- + Conditions is a list of the latest, available observations of the + request's current state. + items: + description: "Condition contains details for one aspect of the current + state of this API Resource.\n---\nThis struct is intended for + direct use as an array at the field path .status.conditions. For + example,\n\n\n\ttype FooStatus struct{\n\t // Represents the + observations of a foo's current state.\n\t // Known .status.conditions.type + are: \"Available\", \"Progressing\", and \"Degraded\"\n\t // + +patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t + \ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t + \ // other fields\n\t}" + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: |- + type of condition in CamelCase or in foo.example.com/CamelCase. + --- + Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be + useful (see .node.status.conditions), the ability to deconflict is important. + The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + imageName: + description: |- + ImageName is the name of the VirtualMachineImage resource that is + eventually realized in the same namespace as the VM and publication + request after the publication operation completes. + + + This field will not be set until the VirtualMachineImage resource + is realized. + type: string + lastAttemptTime: + description: LastAttemptTime represents the time when the latest request + was sent. + format: date-time + type: string + ready: + description: |- + Ready is set to true only when the VM has been published successfully + and the new VirtualMachineImage resource is ready. + + + Readiness is determined by waiting until there is status condition + Type=Complete and ensuring it and all other status conditions present + have a Status=True. The conditions present will be: + + + * SourceValid + * TargetValid + * Uploaded + * ImageAvailable + * Complete + type: boolean + sourceRef: + description: |- + SourceRef is the reference to the source of the publication request, + ex. a VirtualMachine resource. + properties: + apiVersion: + default: vmoperator.vmware.com/v1alpha1 + description: APIVersion is the API version of the referenced object. + type: string + kind: + default: VirtualMachine + description: Kind is the kind of referenced object. + type: string + name: + description: |- + Name is the name of the referenced object. + + + If omitted this value defaults to the name of the + VirtualMachinePublishRequest resource. + type: string + type: object + startTime: + description: |- + StartTime represents time when the request was acknowledged by the + controller. It is not guaranteed to be set in happens-before order + across separate operations. It is represented in RFC3339 form and is + in UTC. + format: date-time + type: string + targetRef: + description: |- + TargetRef is the reference to the target of the publication request, + ex. item information and a ContentLibrary resource. + properties: + item: + description: |- + Item contains information about the name of the object to which + the VM is published. + + + Please note this value is optional and if omitted, the controller + will use spec.source.name + "-image" as the name of the published + item. + properties: + description: + description: Description is the description to assign to the + published object. + type: string + name: + description: |- + Name is the name of the published object. + + + If the spec.target.location.apiVersion equals + imageregistry.vmware.com/v1alpha1 and the spec.target.location.kind + equals ContentLibrary, then this should be the name that will + show up in vCenter Content Library, not the custom resource name + in the namespace. + + + If omitted then the controller will use spec.source.name + "-image". + type: string + type: object + location: + description: |- + Location contains information about the location to which to publish + the VM. + properties: + apiVersion: + default: imageregistry.vmware.com/v1alpha1 + description: APIVersion is the API version of the referenced + object. + type: string + kind: + default: ContentLibrary + description: Kind is the kind of referenced object. + type: string + name: + description: |- + Name is the name of the referenced object. + + + Please note an error will be returned if this field is not + set in a namespace that lacks a default publication target. + + + A default publication target is a resource with an API version + equal to spec.target.location.apiVersion, a kind equal to + spec.target.location.kind, and has the label + "imageregistry.vmware.com/default". + type: string + type: object + type: object + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: vmware-system-vmop/vmware-system-vmop-serving-cert + controller-gen.kubebuilder.io/version: v0.14.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: virtualmachines.vmoperator.vmware.com +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + caBundle: Cg== + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /convert + conversionReviewVersions: + - v1 + - v1beta1 + group: vmoperator.vmware.com + names: + kind: VirtualMachine + listKind: VirtualMachineList + plural: virtualmachines + shortNames: + - vm + singular: virtualmachine + preserveUnknownFields: false + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.powerState + name: Power-State + type: string + - jsonPath: .spec.className + name: Class + priority: 1 + type: string + - jsonPath: .spec.imageName + name: Image + priority: 1 + type: string + - jsonPath: .status.vmIp + name: Primary-IP + priority: 1 + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + VirtualMachine is the Schema for the virtualmachines API. + A VirtualMachine represents the desired specification and the observed status of a VirtualMachine instance. A + VirtualMachine is realized by the VirtualMachine controller on a backing Virtual Infrastructure provider such as + vSphere. + 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: VirtualMachineSpec defines the desired state of a VirtualMachine. + properties: + advancedOptions: + description: AdvancedOptions describes a set of optional, advanced + options for configuring a VirtualMachine + properties: + changeBlockTracking: + description: |- + ChangeBlockTracking specifies the enablement of incremental backup support for this VirtualMachine, which can be utilized + by external backup systems such as VMware Data Recovery. + type: boolean + defaultVolumeProvisioningOptions: + description: |- + DefaultProvisioningOptions specifies the provisioning type to be used by default for VirtualMachine volumes exclusively + owned by this VirtualMachine. This does not apply to PersistentVolumeClaim volumes that are created and managed externally. + properties: + eagerZeroed: + description: |- + EagerZeroed specifies whether to use eager zero provisioning for the VirtualMachineVolume. + An eager zeroed thick disk has all space allocated and wiped clean of any previous contents + on the physical media at creation time. Such disks may take longer time during creation + compared to other disk formats. + EagerZeroed is only applicable if ThinProvisioned is false. This is validated by the webhook. + type: boolean + thinProvisioned: + description: |- + ThinProvisioned specifies whether to use thin provisioning for the VirtualMachineVolume. + This means a sparse (allocate on demand) format with additional space optimizations. + type: boolean + type: object + type: object + className: + description: |- + ClassName describes the name of a VirtualMachineClass that is to be used as the overlaid resource configuration + of VirtualMachine. A VirtualMachineClass is used to further customize the attributes of the VirtualMachine + instance. See VirtualMachineClass for more description. + type: string + imageName: + description: |- + ImageName describes the name of the image resource used to deploy this + VM. + + + This field may be used to specify the name of a VirtualMachineImage + or ClusterVirtualMachineImage resource. The resolver first checks to see + if there is a VirtualMachineImage with the specified name. If no + such resource exists, the resolver then checks to see if there is a + ClusterVirtualMachineImage resource with the specified name in the same + Namespace as the VM being deployed. + + + This field may also be used to specify the display name (vSphere name) of + a VirtualMachineImage or ClusterVirtualMachineImage resource. If the + display name unambiguously resolves to a distinct VM image (among all + existing VirtualMachineImages in the VM's namespace and all existing + ClusterVirtualMachineImages), then a mutation webhook updates this field + with the VM image resource name. If the display name resolves to multiple + or no VM images, then the mutation webhook denies the request and outputs + an error message accordingly. + type: string + minHardwareVersion: + description: |- + MinHardwareVersion specifies the desired minimum hardware version + for this VM. + + + Usually the VM's hardware version is derived from: + 1. the VirtualMachineClass used to deploy the VM provided by the ClassName field + 2. the datacenter/cluster/host default hardware version + Setting this field will ensure that the hardware version of the VM + is at least set to the specified value. To enforce this, it will override + the value from the VirtualMachineClass. + + + This field is never updated to reflect the derived hardware version. + Instead, VirtualMachineStatus.HardwareVersion surfaces + the observed hardware version. + + + Please note, setting this field's value to N ensures a VM's hardware + version is equal to or greater than N. For example, if a VM's observed + hardware version is 10 and this field's value is 13, then the VM will be + upgraded to hardware version 13. However, if the observed hardware + version is 17 and this field's value is 13, no change will occur. + + + Several features are hardware version dependent, for example: + + + * NVMe Controllers >= 14 + * Dynamic Direct Path I/O devices >= 17 + + + Please refer to https://kb.vmware.com/s/article/1003746 for a list of VM + hardware versions. + + + It is important to remember that a VM's hardware version may not be + downgraded and upgrading a VM deployed from an image based on an older + hardware version to a more recent one may result in unpredictable + behavior. In other words, please be careful when choosing to upgrade a + VM to a newer hardware version. + format: int32 + minimum: 13 + type: integer + networkInterfaces: + description: |- + NetworkInterfaces describes a list of VirtualMachineNetworkInterfaces to be configured on the VirtualMachine instance. + Each of these VirtualMachineNetworkInterfaces describes external network integration configurations that are to be + used by the VirtualMachine controller when integrating the VirtualMachine into one or more external networks. + + + The maximum number of network interface allowed is 10 because of the limit built into vSphere. + items: + description: |- + VirtualMachineNetworkInterface defines the properties of a network interface to attach to a VirtualMachine + instance. A VirtualMachineNetworkInterface describes network interface configuration that is used by the + VirtualMachine controller when integrating the VirtualMachine into a VirtualNetwork. Currently, only NSX-T + and vSphere Distributed Switch (VDS) type network integrations are supported using this VirtualMachineNetworkInterface + structure. + properties: + ethernetCardType: + description: |- + EthernetCardType describes an optional ethernet card that should be used by the VirtualNetworkInterface (vNIC) + associated with this network integration. The default is "vmxnet3". + type: string + networkName: + description: |- + NetworkName describes the name of an existing virtual network that this interface should be added to. + For "nsx-t" NetworkType, this is the name of a pre-existing NSX-T VirtualNetwork. If unspecified, + the default network for the namespace will be used. For "vsphere-distributed" NetworkType, the + NetworkName must be specified. + type: string + networkType: + description: |- + NetworkType describes the type of VirtualNetwork that is referenced by the NetworkName. Currently, the supported + NetworkTypes are "nsx-t", "nsx-t-subnet", "nsx-t-subnetset" and "vsphere-distributed". + type: string + providerRef: + description: |- + ProviderRef is reference to a network interface provider object that specifies the network interface configuration. + If unset, default configuration is assumed. + properties: + apiGroup: + description: APIGroup is the group for the resource being + referenced. + type: string + apiVersion: + description: API version of the referent. + type: string + kind: + description: Kind is the type of resource being referenced + type: string + name: + description: Name is the name of resource being referenced + type: string + required: + - apiGroup + - kind + - name + type: object + type: object + maxItems: 10 + type: array + nextRestartTime: + description: |- + NextRestartTime may be used to restart the VM, in accordance with + RestartMode, by setting the value of this field to "now" + (case-insensitive). + + + A mutating webhook changes this value to the current time (UTC), which + the VM controller then uses to determine the VM should be restarted by + comparing the value to the timestamp of the last time the VM was + restarted. + + + Please note it is not possible to schedule future restarts using this + field. The only value that users may set is the string "now" + (case-insensitive). + type: string + ports: + description: Ports is currently unused and can be considered deprecated. + items: + description: VirtualMachinePort is unused and can be considered + deprecated. + properties: + ip: + type: string + name: + type: string + port: + type: integer + protocol: + default: TCP + type: string + required: + - ip + - name + - port + - protocol + type: object + type: array + powerOffMode: + default: hard + description: |- + PowerOffMode describes the desired behavior when powering off a VM. + + + There are three, supported power off modes: hard, soft, and + trySoft. The first mode, hard, is the equivalent of a physical + system's power cord being ripped from the wall. The soft mode + requires the VM's guest to have VM Tools installed and attempts to + gracefully shutdown the VM. Its variant, trySoft, first attempts + a graceful shutdown, and if that fails or the VM is not in a powered off + state after five minutes, the VM is halted. + + + If omitted, the mode defaults to hard. + enum: + - hard + - soft + - trySoft + type: string + powerState: + description: |- + PowerState describes the desired power state of a VirtualMachine. + + + Please note this field may be omitted when creating a new VM and will + default to "poweredOn." However, once the field is set to a non-empty + value, it may no longer be set to an empty value. + + + Additionally, setting this value to "suspended" is not supported when + creating a new VM. The valid values when creating a new VM are + "poweredOn" and "poweredOff." An empty value is also allowed on create + since this value defaults to "poweredOn" for new VMs. + enum: + - poweredOn + - poweredOff + - suspended + type: string + readinessProbe: + description: |- + ReadinessProbe describes a network probe that can be used to determine if the VirtualMachine is available and + responding to the probe. + properties: + guestHeartbeat: + description: GuestHeartbeat specifies an action involving the + guest heartbeat status. + properties: + thresholdStatus: + default: green + description: |- + ThresholdStatus is the value that the guest heartbeat status must be at or above to be + considered successful. + enum: + - yellow + - green + type: string + type: object + periodSeconds: + description: |- + PeriodSeconds specifics how often (in seconds) to perform the probe. + Defaults to 10 seconds. Minimum value is 1. + format: int32 + minimum: 1 + type: integer + tcpSocket: + description: |- + TCPSocket specifies an action involving a TCP port. + + + Deprecated: The TCPSocket action requires network connectivity that is not supported in all environments. + This field will be removed in a later API version. + properties: + host: + description: Host is an optional host name to connect to. Host + defaults to the VirtualMachine IP. + type: string + port: + anyOf: + - type: integer + - type: string + description: |- + Port specifies a number or name of the port to access on the VirtualMachine. + If the format of port is a number, it must be in the range 1 to 65535. + If the format of name is a string, it must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + description: |- + TimeoutSeconds specifies a number of seconds after which the probe times out. + Defaults to 10 seconds. Minimum value is 1. + format: int32 + maximum: 60 + minimum: 1 + type: integer + type: object + resourcePolicyName: + description: |- + ResourcePolicyName describes the name of a VirtualMachineSetResourcePolicy to be used when creating the + VirtualMachine instance. + type: string + restartMode: + default: hard + description: |- + RestartMode describes the desired behavior for restarting a VM when + spec.nextRestartTime is set to "now" (case-insensitive). + + + There are three, supported suspend modes: hard, soft, and + trySoft. The first mode, hard, is where vSphere resets the VM without any + interaction inside of the guest. The soft mode requires the VM's guest to + have VM Tools installed and asks the guest to restart the VM. Its + variant, trySoft, first attempts a soft restart, and if that fails or + does not complete within five minutes, the VM is hard reset. + + + If omitted, the mode defaults to hard. + enum: + - hard + - soft + - trySoft + type: string + storageClass: + description: |- + StorageClass describes the name of a StorageClass that should be used to configure storage-related attributes of the VirtualMachine + instance. + type: string + suspendMode: + default: hard + description: |- + SuspendMode describes the desired behavior when suspending a VM. + + + There are three, supported suspend modes: hard, soft, and + trySoft. The first mode, hard, is where vSphere suspends the VM to + disk without any interaction inside of the guest. The soft mode + requires the VM's guest to have VM Tools installed and attempts to + gracefully suspend the VM. Its variant, trySoft, first attempts + a graceful suspend, and if that fails or the VM is not in a put into + standby by the guest after five minutes, the VM is suspended. + + + If omitted, the mode defaults to hard. + enum: + - hard + - soft + - trySoft + type: string + vmMetadata: + description: VmMetadata describes any optional metadata that should + be passed to the Guest OS. + properties: + configMapName: + description: |- + ConfigMapName describes the name of the ConfigMap, in the same Namespace as the VirtualMachine, that should be + used for VirtualMachine metadata. The contents of the Data field of the ConfigMap is used as the VM Metadata. + The format of the contents of the VM Metadata are not parsed or interpreted by the VirtualMachine controller. + Please note, this field and SecretName are mutually exclusive. + type: string + secretName: + description: |- + SecretName describes the name of the Secret, in the same Namespace as the VirtualMachine, that should be used + for VirtualMachine metadata. The contents of the Data field of the Secret is used as the VM Metadata. + The format of the contents of the VM Metadata are not parsed or interpreted by the VirtualMachine controller. + Please note, this field and ConfigMapName are mutually exclusive. + type: string + transport: + description: |- + Transport describes the name of a supported VirtualMachineMetadata transport protocol. Currently, the only supported + transport protocols are "ExtraConfig", "OvfEnv" and "CloudInit". + enum: + - ExtraConfig + - OvfEnv + - vAppConfig + - CloudInit + - Sysprep + type: string + type: object + volumes: + description: |- + Volumes describes the list of VirtualMachineVolumes that are desired to be attached to the VirtualMachine. Each of + these volumes specifies a volume identity that the VirtualMachine controller will attempt to satisfy, potentially + with an external Volume Management service. + items: + description: |- + VirtualMachineVolume describes a Volume that should be attached to a specific VirtualMachine. + Only one of PersistentVolumeClaim, VsphereVolume should be specified. + properties: + name: + description: |- + Name specifies the name of the VirtualMachineVolume. Each volume within the scope of a VirtualMachine must + have a unique name. + type: string + persistentVolumeClaim: + description: |- + PersistentVolumeClaim represents a reference to a PersistentVolumeClaim + in the same namespace. The PersistentVolumeClaim must match one of the + following: + + + * A volume provisioned (either statically or dynamically) by the + cluster's CSI provider. + + + * An instance volume with a lifecycle coupled to the VM. + properties: + claimName: + description: |- + claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. + More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims + type: string + instanceVolumeClaim: + description: InstanceVolumeClaim is set if the PVC is backed + by instance storage. + properties: + size: + anyOf: + - type: integer + - type: string + description: Size is the size of the requested instance + storage volume. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + storageClass: + description: |- + StorageClass is the name of the Kubernetes StorageClass that provides + the backing storage for this instance storage volume. + type: string + required: + - size + - storageClass + type: object + readOnly: + description: |- + readOnly Will force the ReadOnly setting in VolumeMounts. + Default false. + type: boolean + required: + - claimName + type: object + vSphereVolume: + description: |- + VsphereVolume represents a reference to a VsphereVolumeSource in the same namespace. Only one of PersistentVolumeClaim or + VsphereVolume can be specified. This is enforced via a webhook + properties: + capacity: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: A description of the virtual volume's resources + and capacity + type: object + deviceKey: + description: Device key of vSphere disk. + type: integer + type: object + required: + - name + type: object + type: array + required: + - className + - imageName + type: object + status: + description: VirtualMachineStatus defines the observed state of a VirtualMachine + instance. + properties: + biosUUID: + description: |- + BiosUUID describes a unique identifier provided by the underlying infrastructure provider that is exposed to the + Guest OS BIOS as a unique hardware identifier. + type: string + changeBlockTracking: + description: ChangeBlockTracking describes the CBT enablement status + on the VirtualMachine. + type: boolean + conditions: + description: Conditions describes the current condition information + of the VirtualMachine. + items: + description: Condition defines an observation of a VM Operator API + resource operational state. + properties: + lastTransitionTime: + description: |- + Last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when + the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + A human readable message indicating details about the transition. + This field may be empty. + type: string + reason: + description: |- + The reason for the condition's last transition in CamelCase. + The specific API may choose whether or not this field is considered a guaranteed API. + This field may not be empty. + type: string + severity: + description: |- + Severity provides an explicit classification of Reason code, so the users or machines can immediately + understand the current situation and act accordingly. + The Severity field MUST be set only when Status=False. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: |- + Type of condition in CamelCase or in foo.example.com/CamelCase. + Many .condition.type values are consistent across resources like Available, but because arbitrary conditions + can be useful (see .node.status.conditions), the ability to disambiguate is important. + type: string + required: + - status + - type + type: object + type: array + hardwareVersion: + description: |- + HardwareVersion describes the VirtualMachine resource's observed + hardware version. + + + Please refer to VirtualMachineSpec.MinHardwareVersion for more + information on the topic of a VM's hardware version. + format: int32 + type: integer + host: + description: Host describes the hostname or IP address of the infrastructure + host that the VirtualMachine is executing on. + type: string + instanceUUID: + description: InstanceUUID describes the unique instance UUID provided + by the underlying infrastructure provider, such as vSphere. + type: string + lastRestartTime: + description: LastRestartTime describes the last time the VM was restarted. + format: date-time + type: string + networkInterfaces: + description: |- + NetworkInterfaces describes a list of current status information for each network interface that is desired to + be attached to the VirtualMachine. + items: + description: |- + NetworkInterfaceStatus defines the observed state of network interfaces attached to the VirtualMachine + as seen by the Guest OS and VMware tools. + properties: + connected: + description: Connected represents whether the network interface + is connected or not. + type: boolean + ipAddresses: + description: |- + IpAddresses represents zero, one or more IP addresses assigned to the network interface in CIDR notation. + For eg, "192.0.2.1/16". + items: + type: string + type: array + macAddress: + description: MAC address of the network adapter + type: string + required: + - connected + type: object + type: array + phase: + description: Phase describes the current phase information of the + VirtualMachine. + type: string + powerState: + description: PowerState describes the current power state of the VirtualMachine. + enum: + - poweredOn + - poweredOff + - suspended + type: string + uniqueID: + description: |- + UniqueID describes a unique identifier that is provided by the underlying infrastructure provider, such as + vSphere. + type: string + vmIp: + description: |- + VmIp describes the Primary IP address assigned to the guest operating system, if known. + Multiple IPs can be available for the VirtualMachine. Refer to networkInterfaces in the VirtualMachine + status for additional IPs + type: string + volumes: + description: |- + Volumes describes a list of current status information for each Volume that is desired to be attached to the + VirtualMachine. + items: + description: VirtualMachineVolumeStatus defines the observed state + of a VirtualMachineVolume instance. + properties: + attached: + description: Attached represents whether a volume has been successfully + attached to the VirtualMachine or not. + type: boolean + diskUUID: + description: DiskUuid represents the underlying virtual disk + UUID and is present when attachment succeeds. + type: string + error: + description: Error represents the last error seen when attaching + or detaching a volume. Error will be empty if attachment + succeeds. + type: string + name: + description: Name is the name of the volume in a VirtualMachine. + type: string + required: + - attached + - diskUUID + - error + - name + type: object + type: array + zone: + description: |- + Zone describes the availability zone where the VirtualMachine has been scheduled. + Please note this field may be empty when the cluster is not zone-aware. + type: string + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - jsonPath: .status.powerState + name: Power-State + type: string + - jsonPath: .spec.className + name: Class + priority: 1 + type: string + - jsonPath: .spec.imageName + name: Image + priority: 1 + type: string + - jsonPath: .status.network.primaryIP4 + name: Primary-IP4 + priority: 1 + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha2 + schema: + openAPIV3Schema: + description: |- + VirtualMachine is the schema for the virtualmachines API and represents the + desired state and observed status of a virtualmachines resource. + 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: VirtualMachineSpec defines the desired state of a VirtualMachine. + properties: + advanced: + description: Advanced describes a set of optional, advanced VM configuration + options. + properties: + bootDiskCapacity: + anyOf: + - type: integer + - type: string + description: |- + BootDiskCapacity is the capacity of the VM's boot disk -- the first disk + from the VirtualMachineImage from which the VM was deployed. + + + Please note it is not advised to change this value while the VM is + running. Also, resizing the VM's boot disk may require actions inside of + the guest to take advantage of the additional capacity. Finally, changing + the size of the VM's boot disk, even increasing it, could adversely + affect the VM. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + changeBlockTracking: + description: |- + ChangeBlockTracking is a flag that enables incremental backup support + for this VM, a feature utilized by external backup systems such as + VMware Data Recovery. + type: boolean + defaultVolumeProvisioningMode: + description: |- + DefaultVolumeProvisioningMode specifies the default provisioning mode for + persistent volumes managed by this VM. + enum: + - Thin + - Thick + - ThickEagerZero + type: string + type: object + bootstrap: + description: |- + Bootstrap describes the desired state of the guest's bootstrap + configuration. + + + If omitted, a default bootstrap method may be selected based on the + guest OS identifier. If Linux, then the LinuxPrep method is used. + properties: + cloudInit: + description: |- + CloudInit may be used to bootstrap Linux guests with Cloud-Init or + Windows guests that support Cloudbase-Init. + + + The guest's networking stack is configured by Cloud-Init on Linux guests + and Cloudbase-Init on Windows guests. + + + Please note this bootstrap provider may not be used in conjunction with + the other bootstrap providers. + properties: + cloudConfig: + description: |- + CloudConfig describes a subset of a Cloud-Init CloudConfig, used to + bootstrap the VM. + + + Please note this field and RawCloudConfig are mutually exclusive. + properties: + defaultUserEnabled: + description: |- + DefaultUserEnabled may be set to true to ensure even if the Users field + is not empty, the default user is still created on systems that have one + defined. By default, Cloud-Init ignores the default user if the + CloudConfig provides one or more non-default users via the Users field. + type: boolean + runcmd: + description: |- + RunCmd allows running one or more commands on the guest. + The entries in this list can adhere to two, different formats: + + + Format 1 -- a string that contains the command and its arguments, ex. + + + runcmd: + - "ls -al" + + + Format 2 -- a list of the command and its arguments, ex. + + + runcmd: + - - echo + - "Hello, world." + x-kubernetes-preserve-unknown-fields: true + ssh_pwauth: + description: |- + SSHPwdAuth sets whether or not to accept password authentication. ``true`` will enable password + auth. ``false`` will disable. Default: leave the value unchanged. In order for this + config to be applied, SSH may need to be restarted. On systemd systems, this restart will + only happen if the SSH service has already been started. On non-systemd systems, a + restart will be attempted regardless of the service state. + type: boolean + timezone: + description: Timezone describes the timezone represented + in /usr/share/zoneinfo. + type: string + users: + description: Users allows adding/configuring one or more + users on the guest. + items: + description: User is a CloudConfig user data structure. + properties: + create_groups: + description: |- + CreateGroups is a flag that may be set to false to disable creation of + specified user groups. + + + Defaults to true when Name is not "default". + type: boolean + expiredate: + description: ExpireData is the date on which the + user's account will be disabled. + type: string + gecos: + description: |- + Gecos is an optional comment about the user, usually a comma-separated + string of the user's real name and contact information. + type: string + groups: + description: Groups is an optional list of groups + to add to the user. + items: + type: string + type: array + hashed_passwd: + description: |- + HashedPasswd is a hash of the user's password that will be applied even + if the specified user already exists. + properties: + key: + description: Key is the key in the secret that + specifies the requested data. + type: string + name: + description: Name is the name of the secret. + type: string + required: + - key + - name + type: object + homedir: + description: |- + Homedir is the optional home directory for the user. + + + Defaults to "/home/" when Name is not "default". + type: string + inactive: + description: |- + Inactive optionally represents the number of days until the user is + disabled. + format: int32 + type: integer + lock_passwd: + description: |- + LockPasswd disables password login. + + + Defaults to true when Name is not "default". + type: boolean + name: + description: |- + Name is the user's login name. + + + Please note this field may be set to the special value of "default" when + this User is the first element in the Users list from the CloudConfig. + When set to "default", all other fields from this User must be nil. + type: string + no_create_home: + description: |- + NoCreateHome prevents the creation of the home directory. + + + Defaults to false when Name is not "default". + type: boolean + no_log_init: + description: |- + NoLogInit prevents the initialization of lastlog and faillog for the + user. + + + Defaults to false when Name is not "default". + type: boolean + no_user_group: + description: |- + NoUserGroup prevents the creation of the group named after the user. + + + Defaults to false when Name is not "default". + type: boolean + passwd: + description: |- + Passwd is a hash of the user's password that will be applied only to + a newly created user. To apply a new, hashed password to an existing user + please use HashedPasswd instead. + properties: + key: + description: Key is the key in the secret that + specifies the requested data. + type: string + name: + description: Name is the name of the secret. + type: string + required: + - key + - name + type: object + primary_group: + description: |- + PrimaryGroup is the primary group for the user. + + + Defaults to the value of the Name field when it is not "default". + type: string + selinux_user: + description: SELinuxUser is the SELinux user for + the user's login. + type: string + shell: + description: |- + Shell is the path to the user's login shell. + + + Please note the default is to set no shell, which results in a + system-specific default being used. + type: string + snapuser: + description: |- + SnapUser specifies an e-mail address to create the user as a Snappy user + through "snap create-user". + + + If an Ubuntu SSO account is associated with the address, the username and + SSH keys will be requested from there. + type: string + ssh_authorized_keys: + description: |- + SSHAuthorizedKeys is a list of SSH keys to add to the user's authorized + keys file. + + + Please note this field may not be combined with SSHRedirectUser. + items: + type: string + type: array + ssh_import_id: + description: |- + SSHImportID is a list of SSH IDs to import for the user. + + + Please note this field may not be combined with SSHRedirectUser. + items: + type: string + type: array + ssh_redirect_user: + description: |- + SSHRedirectUser may be set to true to disable SSH logins for this user. + + + Please note that when specified, all SSH keys from cloud meta-data will + be configured in a disabled state for this user. Any SSH login as this + user will timeout with a message to login instead as the default user. + + + This field may not be combined with SSHAuthorizedKeys or SSHImportID. + + + Defaults to false when Name is not "default". + type: boolean + sudo: + description: |- + Sudo is a sudo rule to apply to the user. + + + When omitted, no sudo rules will be applied to the user. + type: string + system: + description: |- + System is an optional flag that indicates the user should be created as + a system user with no home directory. + + + Defaults to false when Name is not "default". + type: boolean + uid: + description: |- + UID is the user's ID. + + + When omitted the guest will default to the next available number. + format: int64 + type: integer + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + write_files: + description: WriteFiles + items: + description: |- + WriteFile is a CloudConfig + write_file data structure. + properties: + append: + description: |- + Append specifies whether or not to append the content to an existing file + if the file specified by Path already exists. + type: boolean + content: + description: |- + Content is the optional content to write to the provided Path. + + + When omitted an empty file will be created or existing file will be + modified. + + + The value for this field can adhere to two, different formats: + + + Format 1 -- a string that contains the command and its arguments, ex. + + + content: Hello, world. + + + Please note that format 1 supports all of the manners of specifying a + YAML string. + + + Format 2 -- a secret reference with the name of the key that contains + the content for the file, ex. + + + content: + name: my-bootstrap-secret + key: my-file-content + x-kubernetes-preserve-unknown-fields: true + defer: + description: |- + Defer indicates to defer writing the file until Cloud-Init's "final" + stage, after users are created and packages are installed. + type: boolean + encoding: + default: text/plain + description: Encoding is an optional encoding type + of the content. + enum: + - b64 + - base64 + - gz + - gzip + - gz+b64 + - gz+base64 + - gzip+b64 + - gzip+base64 + - text/plain + type: string + owner: + default: root:root + description: Owner is an optional "owner:group" + to chown the file. + type: string + path: + description: Path is the path of the file to which + the content is decoded and written. + type: string + permissions: + default: "0644" + description: |- + Permissions an optional set of file permissions to set. + + + Please note the permissions should be specified as an octal string, ex. + "0###". + + + When omitted the guest will default this value to "0644". + type: string + required: + - path + type: object + type: array + x-kubernetes-list-map-keys: + - path + x-kubernetes-list-type: map + type: object + rawCloudConfig: + description: |- + RawCloudConfig describes a key in a Secret resource that contains the + CloudConfig data used to bootstrap the VM. + + + The CloudConfig data specified by the key may be plain-text, + base64-encoded, or gzipped and base64-encoded. + + + Please note this field and CloudConfig are mutually exclusive. + properties: + key: + description: Key is the key in the secret that specifies + the requested data. + type: string + name: + description: Name is the name of the secret. + type: string + required: + - key + - name + type: object + sshAuthorizedKeys: + description: |- + SSHAuthorizedKeys is a list of public keys that CloudInit will apply to + the guest's default user. + items: + type: string + type: array + type: object + linuxPrep: + description: |- + LinuxPrep may be used to bootstrap Linux guests. + + + The guest's networking stack is configured by Guest OS Customization + (GOSC). + + + Please note this bootstrap provider may be used in conjunction with the + VAppConfig bootstrap provider when wanting to configure the guest's + network with GOSC but also send vApp/OVF properties into the guest. + + + This bootstrap provider may not be used in conjunction with the CloudInit + or Sysprep bootstrap providers. + properties: + hardwareClockIsUTC: + description: |- + HardwareClockIsUTC specifies whether the hardware clock is in UTC or + local time. + type: boolean + timeZone: + description: |- + TimeZone is a case-sensitive timezone, such as Europe/Sofia. + + + Valid values are based on the tz (timezone) database used by Linux and + other Unix systems. The values are strings in the form of + "Area/Location," in which Area is a continent or ocean name, and + Location is the city, island, or other regional designation. + + + Please see https://kb.vmware.com/s/article/2145518 for a list of valid + time zones for Linux systems. + type: string + type: object + sysprep: + description: |- + Sysprep may be used to bootstrap Windows guests. + + + The guest's networking stack is configured by Guest OS Customization + (GOSC). + + + Please note this bootstrap provider may be used in conjunction with the + VAppConfig bootstrap provider when wanting to configure the guest's + network with GOSC but also send vApp/OVF properties into the guest. + + + This bootstrap provider may not be used in conjunction with the CloudInit + or LinuxPrep bootstrap providers. + properties: + rawSysprep: + description: |- + RawSysprep describes a key in a Secret resource that contains an XML + string of the Sysprep text used to bootstrap the VM. + + + The data specified by the Secret key may be plain-text, base64-encoded, + or gzipped and base64-encoded. + + + Please note this field and Sysprep are mutually exclusive. + properties: + key: + description: Key is the key in the secret that specifies + the requested data. + type: string + name: + description: Name is the name of the secret. + type: string + required: + - key + - name + type: object + sysprep: + description: |- + Sysprep is an object representation of a Windows sysprep.xml answer file. + + + This field encloses all the individual keys listed in a sysprep.xml file. + + + For more detailed information please see + https://technet.microsoft.com/en-us/library/cc771830(v=ws.10).aspx. + + + Please note this field and RawSysprep are mutually exclusive. + properties: + guiRunOnce: + description: GUIRunOnce is a representation of the Sysprep + GuiRunOnce key. + properties: + commands: + description: |- + Commands is a list of commands to run at first user logon, after guest + customization. + items: + type: string + type: array + type: object + guiUnattended: + description: GUIUnattended is a representation of the + Sysprep GUIUnattended key. + properties: + autoLogon: + description: |- + AutoLogon determine whether the machine automatically logs on as + Administrator. + + + Please note if AutoLogon is true, then Password must be set or guest + customization will fail. + type: boolean + autoLogonCount: + description: |- + AutoLogonCount specifies the number of times the machine should + automatically log on as Administrator. + + + Generally it should be 1, but if your setup requires a number of reboots, + you may want to increase it. This number may be determined by the list of + commands executed by the GuiRunOnce command. + + + Please note this field must be specified with a non-zero positive integer if AutoLogon is true. + format: int32 + type: integer + password: + description: |- + Password is the new administrator password for the machine. + + + To specify that the password should be set to blank (that is, no + password), set the password value to NULL. Because of encryption, "" is + NOT a valid value. + + + Please note if the password is set to blank and AutoLogon is true, the + guest customization will fail. + + + If the XML file is generated by the VirtualCenter Customization Wizard, + then the password is encrypted. Otherwise, the client should set the + plainText attribute to true, so that the customization process does not + attempt to decrypt the string. + + + When not explicitly specified, the Key field for the selector defaults to + `password`. + properties: + key: + default: password + description: Key is the key in the secret that + specifies the requested data. + type: string + name: + description: Name is the name of the secret. + type: string + required: + - key + - name + type: object + timeZone: + description: |- + TimeZone is the time zone index for the virtual machine. + + + Please note that numbers correspond to time zones listed at + https://bit.ly/3Rzv8oL. + format: int32 + type: integer + type: object + identification: + description: Identification is a representation of the + Sysprep Identification key. + properties: + domainAdmin: + description: |- + DomainAdmin is the domain user account used for authentication if the + virtual machine is joining a domain. The user does not need to be a + domain administrator, but the account must have the privileges required + to add computers to the domain. + type: string + domainAdminPassword: + description: |- + DomainAdminPassword is the password for the domain user account used for + authentication if the virtual machine is joining a domain. + + + When not explicitly specified, the Key field for the selector defaults to + `domain_admin_password`. + properties: + key: + default: domain_admin_password + description: Key is the key in the secret that + specifies the requested data. + type: string + name: + description: Name is the name of the secret. + type: string + required: + - key + - name + type: object + joinDomain: + description: |- + JoinDomain is the domain that the virtual machine should join. If this + value is supplied, then DomainAdmin and DomainAdminPassword must also be + supplied, and the JoinWorkgroup name must be empty. + type: string + joinWorkgroup: + description: |- + JoinWorkgroup is the workgroup that the virtual machine should join. If + this value is supplied, then the JoinDomain and the authentication fields + (DomainAdmin and DomainAdminPassword) must be empty. + type: string + type: object + licenseFilePrintData: + description: |- + LicenseFilePrintData is a representation of the Sysprep + LicenseFilePrintData key. + + + Please note this is required only for Windows 2000 Server and Windows + Server 2003. + properties: + autoMode: + description: AutoMode specifies the server licensing + mode. + enum: + - perSeat + - perServer + type: string + autoUsers: + description: |- + AutoUsers indicates the number of client licenses purchased for the + VirtualCenter server being installed. + + + Please note this value is ignored unless AutoMode is PerServer. + format: int32 + type: integer + required: + - autoMode + type: object + userData: + description: UserData is a representation of the Sysprep + UserData key. + properties: + fullName: + description: FullName is the user's full name. + type: string + orgName: + description: OrgName is the name of the user's organization. + type: string + productID: + description: |- + ProductID is a valid serial number. + + + Please note unless the VirtualMachineImage was installed with a volume + license key, ProductID must be set or guest customization will fail. + + + When not explicitly specified, the Key field for the selector defaults to + `domain_admin_password`. + properties: + key: + default: product_id + description: Key is the key in the secret that + specifies the requested data. + type: string + name: + description: Name is the name of the secret. + type: string + required: + - key + - name + type: object + required: + - fullName + - orgName + type: object + required: + - userData + type: object + type: object + vAppConfig: + description: |- + VAppConfig may be used to bootstrap guests that rely on vApp properties + (how VMware surfaces OVF properties on guests) to transport data into the + guest. + + + The guest's networking stack may be configured using either vApp + properties or GOSC. + + + Many OVFs define one or more properties that are used by the guest to + bootstrap its networking stack. If the VirtualMachineImage defines one or + more properties like this, then they can be configured to use the network + data provided for this VM at runtime by setting these properties to Go + template strings. + + + It is also possible to use GOSC to bootstrap this VM's network stack by + configuring either the LinuxPrep or Sysprep bootstrap providers. + + + Please note the VAppConfig bootstrap provider in conjunction with the + LinuxPrep bootstrap provider is the equivalent of setting the v1alpha1 + VM metadata transport to "OvfEnv". + + + This bootstrap provider may not be used in conjunction with the CloudInit + bootstrap provider. + properties: + properties: + description: |- + Properties is a list of vApp/OVF property key/value pairs. + + + Please note this field and RawProperties are mutually exclusive. + items: + description: |- + KeyValueOrSecretKeySelectorPair is useful when wanting to realize a map as a + list of key/value pairs where each value could also reference data stored in + a Secret resource. + properties: + key: + description: Key is the key part of the key/value pair. + type: string + value: + description: Value is the optional value part of the + key/value pair. + properties: + from: + description: |- + From is specified to reference a value from a Secret resource. + + + Please note this field is mutually exclusive with the Value field. + properties: + key: + description: Key is the key in the secret that + specifies the requested data. + type: string + name: + description: Name is the name of the secret. + type: string + required: + - key + - name + type: object + value: + description: |- + Value is used to directly specify a value. + + + Please note this field is mutually exclusive with the From field. + type: string + type: object + required: + - key + type: object + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + rawProperties: + description: |- + RawProperties is the name of a Secret resource in the same Namespace as + this VM where each key/value pair from the Secret is used as a vApp + key/value pair. + + + Please note this field and Properties are mutually exclusive. + type: string + type: object + type: object + className: + description: |- + ClassName describes the name of the VirtualMachineClass resource used to + deploy this VM. + type: string + imageName: + description: |- + ImageName describes the name of the image resource used to deploy this + VM. + + + This field may be used to specify the name of a VirtualMachineImage + or ClusterVirtualMachineImage resource. The resolver first checks to see + if there is a VirtualMachineImage with the specified name. If no + such resource exists, the resolver then checks to see if there is a + ClusterVirtualMachineImage resource with the specified name in the same + Namespace as the VM being deployed. + + + This field may also be used to specify the display name (vSphere name) of + a VirtualMachineImage or ClusterVirtualMachineImage resource. If the + display name unambiguously resolves to a distinct VM image (among all + existing VirtualMachineImages in the VM's namespace and all existing + ClusterVirtualMachineImages), then a mutation webhook updates this field + with the VM image resource name. If the display name resolves to multiple + or no VM images, then the mutation webhook denies the request and outputs + an error message accordingly. + type: string + minHardwareVersion: + description: |- + MinHardwareVersion describes the desired, minimum hardware version. + + + The logic that determines the hardware version is as follows: + + + 1. If this field is set, then its value is used. + 2. Otherwise, if the VirtualMachineClass used to deploy the VM contains a + non-empty hardware version, then it is used. + 3. Finally, if the hardware version is still undetermined, the value is + set to the default hardware version for the Datacenter/Cluster/Host + where the VM is provisioned. + + + This field is never updated to reflect the derived hardware version. + Instead, VirtualMachineStatus.HardwareVersion surfaces + the observed hardware version. + + + Please note, setting this field's value to N ensures a VM's hardware + version is equal to or greater than N. For example, if a VM's observed + hardware version is 10 and this field's value is 13, then the VM will be + upgraded to hardware version 13. However, if the observed hardware + version is 17 and this field's value is 13, no change will occur. + + + Several features are hardware version dependent, for example: + + + * NVMe Controllers >= 14 + * Dynamic Direct Path I/O devices >= 17 + + + Please refer to https://kb.vmware.com/s/article/1003746 for a list of VM + hardware versions. + + + It is important to remember that a VM's hardware version may not be + downgraded and upgrading a VM deployed from an image based on an older + hardware version to a more recent one may result in unpredictable + behavior. In other words, please be careful when choosing to upgrade a + VM to a newer hardware version. + format: int32 + minimum: 13 + type: integer + network: + description: |- + Network describes the desired network configuration for the VM. + + + Please note this value may be omitted entirely and the VM will be + assigned a single, virtual network interface that is connected to the + Namespace's default network. + properties: + disabled: + description: |- + Disabled is a flag that indicates whether or not to disable networking + for this VM. + + + When set to true, the VM is not configured with a default interface nor + any specified from the Interfaces field. + type: boolean + hostName: + description: |- + HostName is the value the guest uses as its host name. + If omitted then the name of the VM will be used. + + + Please note this feature is available only with the following bootstrap + providers: CloudInit, LinuxPrep, and Sysprep (except for RawSysprep). + + + When the bootstrap provider is Sysprep (except for RawSysprep) this is + used as the Computer Name. + type: string + interfaces: + description: |- + Interfaces is the list of network interfaces used by this VM. + + + If the Interfaces field is empty and the Disabled field is false, then + a default interface with the name eth0 will be created. + + + The maximum number of network interface allowed is 10 because of the limit + built into vSphere. + items: + description: |- + VirtualMachineNetworkInterfaceSpec describes the desired state of a VM's + network interface. + properties: + addresses: + description: |- + Addresses is an optional list of IP4 or IP6 addresses to assign to this + interface. + + + Please note this field is only supported if the connected network + supports manual IP allocation. + + + Please note IP4 and IP6 addresses must include the network prefix length, + ex. 192.168.0.10/24 or 2001:db8:101::a/64. + + + Please note this field may not contain IP4 addresses if DHCP4 is set + to true or IP6 addresses if DHCP6 is set to true. + + + Please note if the Interfaces field is non-empty then this field is + ignored and should be specified on the elements in the Interfaces list. + items: + type: string + type: array + dhcp4: + description: |- + DHCP4 indicates whether or not this interface uses DHCP for IP4 + networking. + + + Please note this field is only supported if the network connection + supports DHCP. + + + Please note this field is mutually exclusive with IP4 addresses in the + Addresses field and the Gateway4 field. + type: boolean + dhcp6: + description: |- + DHCP6 indicates whether or not this interface uses DHCP for IP6 + networking. + + + Please note this field is only supported if the network connection + supports DHCP. + + + Please note this field is mutually exclusive with IP6 addresses in the + Addresses field and the Gateway6 field. + type: boolean + gateway4: + description: |- + Gateway4 is the default, IP4 gateway for this interface. + + + Please note this field is only supported if the network connection + supports manual IP allocation. + + + If the network connection supports manual IP allocation and the + Addresses field includes at least one IP4 address, then this field + is required. + + + Please note the IP address must include the network prefix length, ex. + 192.168.0.1/24. + + + Please note this field is mutually exclusive with DHCP4. + type: string + gateway6: + description: |- + Gateway6 is the primary IP6 gateway for this interface. + + + Please note this field is only supported if the network connection + supports manual IP allocation. + + + If the network connection supports manual IP allocation and the + Addresses field includes at least one IP6 address, then this field + is required. + + + Please note the IP address must include the network prefix length, ex. + 2001:db8:101::1/64. + + + Please note this field is mutually exclusive with DHCP6. + type: string + guestDeviceName: + description: |- + GuestDeviceName is used to rename the device inside the guest when the + bootstrap provider is Cloud-Init. Please note it is up to the user to + ensure the provided device name does not conflict with any other devices + inside the guest, ex. dvd, cdrom, sda, etc. + pattern: ^\w\w+$ + type: string + mtu: + description: |- + MTU is the Maximum Transmission Unit size in bytes. + + + Please note this feature is available only with the following bootstrap + providers: CloudInit. + format: int64 + type: integer + name: + description: |- + Name describes the unique name of this network interface, used to + distinguish it from other network interfaces attached to this VM. + + + When the bootstrap provider is Cloud-Init and GuestDeviceName is not + specified, the device inside the guest will be renamed to this value. + Please note it is up to the user to ensure the provided name does not + conflict with any other devices inside the guest, ex. dvd, cdrom, sda, etc. + pattern: ^[a-z0-9]{2,}$ + type: string + nameservers: + description: |- + Nameservers is a list of IP4 and/or IP6 addresses used as DNS + nameservers. + + + Please note this feature is available only with the following bootstrap + providers: CloudInit and Sysprep. + + + Please note that Linux allows only three nameservers + (https://linux.die.net/man/5/resolv.conf). + items: + type: string + type: array + network: + description: |- + Network is the name of the network resource to which this interface is + connected. + + + If no network is provided, then this interface will be connected to the + Namespace's default network. + 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 + name: + description: |- + Name refers to a unique resource in the current namespace. + More info: http://kubernetes.io/docs/user-guide/identifiers#names + type: string + required: + - name + type: object + routes: + description: |- + Routes is a list of optional, static routes. + + + Please note this feature is available only with the following bootstrap + providers: CloudInit. + items: + description: VirtualMachineNetworkRouteSpec defines a + static route for a guest. + properties: + metric: + description: Metric is the weight/priority of the + route. + format: int32 + type: integer + to: + description: To is an IP4 or IP6 address. + type: string + via: + description: Via is an IP4 or IP6 address. + type: string + required: + - metric + - to + - via + type: object + type: array + searchDomains: + description: |- + SearchDomains is a list of search domains used when resolving IP + addresses with DNS. + + + Please note this feature is available only with the following bootstrap + providers: CloudInit. + items: + type: string + type: array + required: + - name + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + nameservers: + description: |- + Nameservers is a list of IP4 and/or IP6 addresses used as DNS + nameservers. These are applied globally. + + + Please note global nameservers are only available with the following + bootstrap providers: LinuxPrep and Sysprep. The Cloud-Init bootstrap + provider supports per-interface nameservers. + + + Please note that Linux allows only three nameservers + (https://linux.die.net/man/5/resolv.conf). + items: + type: string + type: array + searchDomains: + description: |- + SearchDomains is a list of search domains used when resolving IP + addresses with DNS. These are applied globally. + + + Please note global search domains are only available with the following + bootstrap providers: LinuxPrep and Sysprep. The Cloud-Init bootstrap + provider supports per-interface search domains. + items: + type: string + type: array + type: object + nextRestartTime: + description: |- + NextRestartTime may be used to restart the VM, in accordance with + RestartMode, by setting the value of this field to "now" + (case-insensitive). + + + A mutating webhook changes this value to the current time (UTC), which + the VM controller then uses to determine the VM should be restarted by + comparing the value to the timestamp of the last time the VM was + restarted. + + + Please note it is not possible to schedule future restarts using this + field. The only value that users may set is the string "now" + (case-insensitive). + type: string + powerOffMode: + default: TrySoft + description: |- + PowerOffMode describes the desired behavior when powering off a VM. + + + There are three, supported power off modes: Hard, Soft, and + TrySoft. The first mode, Hard, is the equivalent of a physical + system's power cord being ripped from the wall. The Soft mode + requires the VM's guest to have VM Tools installed and attempts to + gracefully shutdown the VM. Its variant, TrySoft, first attempts + a graceful shutdown, and if that fails or the VM is not in a powered off + state after five minutes, the VM is halted. + + + If omitted, the mode defaults to TrySoft. + enum: + - Hard + - Soft + - TrySoft + type: string + powerState: + description: |- + PowerState describes the desired power state of a VirtualMachine. + + + Please note this field may be omitted when creating a new VM and will + default to "PoweredOn." However, once the field is set to a non-empty + value, it may no longer be set to an empty value. + + + Additionally, setting this value to "Suspended" is not supported when + creating a new VM. The valid values when creating a new VM are + "PoweredOn" and "PoweredOff." An empty value is also allowed on create + since this value defaults to "PoweredOn" for new VMs. + enum: + - PoweredOff + - PoweredOn + - Suspended + type: string + readinessProbe: + description: ReadinessProbe describes a probe used to determine the + VM's ready state. + properties: + guestHeartbeat: + description: GuestHeartbeat specifies an action involving the + guest heartbeat status. + properties: + thresholdStatus: + default: green + description: |- + ThresholdStatus is the value that the guest heartbeat status must be at or above to be + considered successful. + enum: + - yellow + - green + type: string + type: object + guestInfo: + description: |- + GuestInfo specifies an action involving key/value pairs from GuestInfo. + + + The elements are evaluated with the logical AND operator, meaning + all expressions must evaluate as true for the probe to succeed. + + + For example, a VM resource's probe definition could be specified as the + following: + + + guestInfo: + - key: ready + value: true + + + With the above configuration in place, the VM would not be considered + ready until the GuestInfo key "ready" was set to the value "true". + + + From within the guest operating system it is possible to set GuestInfo + key/value pairs using the program "vmware-rpctool," which is included + with VM Tools. For example, the following command will set the key + "guestinfo.ready" to the value "true": + + + vmware-rpctool "info-set guestinfo.ready true" + + + Once executed, the VM's readiness probe will be signaled and the + VM resource will be marked as ready. + items: + description: |- + GuestInfoAction describes a key from GuestInfo that must match the associated + value expression. + properties: + key: + description: |- + Key is the name of the GuestInfo key. + + + The key is automatically prefixed with "guestinfo." before being + evaluated. Thus if the key "guestinfo.mykey" is provided, it will be + evaluated as "guestinfo.guestinfo.mykey". + type: string + value: + description: |- + Value is a regular expression that is matched against the value of the + specified key. + + + An empty value is the equivalent of "match any" or ".*". + + + All values must adhere to the RE2 regular expression syntax as documented + at https://golang.org/s/re2syntax. Invalid values may be rejected or + ignored depending on the implementation of this API. Either way, invalid + values will not be considered when evaluating the ready state of a VM. + type: string + required: + - key + type: object + type: array + periodSeconds: + description: |- + PeriodSeconds specifics how often (in seconds) to perform the probe. + Defaults to 10 seconds. Minimum value is 1. + format: int32 + minimum: 1 + type: integer + tcpSocket: + description: |- + TCPSocket specifies an action involving a TCP port. + + + Deprecated: The TCPSocket action requires network connectivity that is not supported in all environments. + This field will be removed in a later API version. + properties: + host: + description: Host is an optional host name to connect to. + Host defaults to the VM IP. + type: string + port: + anyOf: + - type: integer + - type: string + description: |- + Port specifies a number or name of the port to access on the VM. + If the format of port is a number, it must be in the range 1 to 65535. + If the format of name is a string, it must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + timeoutSeconds: + description: |- + TimeoutSeconds specifies a number of seconds after which the probe times out. + Defaults to 10 seconds. Minimum value is 1. + format: int32 + maximum: 60 + minimum: 1 + type: integer + type: object + reserved: + description: |- + Reserved describes a set of VM configuration options reserved for system + use. + + + Please note attempts to modify the value of this field by a DevOps user + will result in a validation error. + properties: + resourcePolicyName: + description: |- + ResourcePolicyName describes the name of a + VirtualMachineSetResourcePolicy resource used to configure the VM's + resource policy. + type: string + type: object + restartMode: + default: TrySoft + description: |- + RestartMode describes the desired behavior for restarting a VM when + spec.nextRestartTime is set to "now" (case-insensitive). + + + There are three, supported suspend modes: Hard, Soft, and + TrySoft. The first mode, Hard, is where vSphere resets the VM without any + interaction inside of the guest. The Soft mode requires the VM's guest to + have VM Tools installed and asks the guest to restart the VM. Its + variant, TrySoft, first attempts a soft restart, and if that fails or + does not complete within five minutes, the VM is hard reset. + + + If omitted, the mode defaults to TrySoft. + enum: + - Hard + - Soft + - TrySoft + type: string + storageClass: + description: |- + StorageClass describes the name of a Kubernetes StorageClass resource + used to configure this VM's storage-related attributes. + + + Please see https://kubernetes.io/docs/concepts/storage/storage-classes/ + for more information on Kubernetes storage classes. + type: string + suspendMode: + default: TrySoft + description: |- + SuspendMode describes the desired behavior when suspending a VM. + + + There are three, supported suspend modes: Hard, Soft, and + TrySoft. The first mode, Hard, is where vSphere suspends the VM to + disk without any interaction inside of the guest. The Soft mode + requires the VM's guest to have VM Tools installed and attempts to + gracefully suspend the VM. Its variant, TrySoft, first attempts + a graceful suspend, and if that fails or the VM is not in a put into + standby by the guest after five minutes, the VM is suspended. + + + If omitted, the mode defaults to TrySoft. + enum: + - Hard + - Soft + - TrySoft + type: string + volumes: + description: Volumes describes a list of volumes that can be mounted + to the VM. + items: + description: VirtualMachineVolume represents a named volume in a + VM. + properties: + name: + description: |- + Name represents the volume's name. Must be a DNS_LABEL and unique within + the VM. + type: string + persistentVolumeClaim: + description: |- + PersistentVolumeClaim represents a reference to a PersistentVolumeClaim + in the same namespace. + + + More information is available at + https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims. + properties: + claimName: + description: |- + claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. + More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims + type: string + instanceVolumeClaim: + description: InstanceVolumeClaim is set if the PVC is backed + by instance storage. + properties: + size: + anyOf: + - type: integer + - type: string + description: Size is the size of the requested instance + storage volume. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + storageClass: + description: |- + StorageClass is the name of the Kubernetes StorageClass that provides + the backing storage for this instance storage volume. + type: string + required: + - size + - storageClass + type: object + readOnly: + description: |- + readOnly Will force the ReadOnly setting in VolumeMounts. + Default false. + type: boolean + required: + - claimName + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: object + status: + description: VirtualMachineStatus defines the observed state of a VirtualMachine + instance. + properties: + biosUUID: + description: |- + BiosUUID describes a unique identifier provided by the underlying + infrastructure provider that is exposed to the Guest OS BIOS as a unique + hardware identifier. + type: string + changeBlockTracking: + description: ChangeBlockTracking describes the CBT enablement status + on the VM. + type: boolean + class: + description: |- + Class is a reference to the VirtualMachineClass resource used to deploy + this VM. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an + object. 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 + name: + description: |- + Name refers to a unique resource in the current namespace. + More info: http://kubernetes.io/docs/user-guide/identifiers#names + type: string + required: + - apiVersion + - kind + - name + type: object + conditions: + description: Conditions describes the observed conditions of the VirtualMachine. + items: + description: "Condition contains details for one aspect of the current + state of this API Resource.\n---\nThis struct is intended for + direct use as an array at the field path .status.conditions. For + example,\n\n\n\ttype FooStatus struct{\n\t // Represents the + observations of a foo's current state.\n\t // Known .status.conditions.type + are: \"Available\", \"Progressing\", and \"Degraded\"\n\t // + +patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t + \ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t + \ // other fields\n\t}" + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: |- + type of condition in CamelCase or in foo.example.com/CamelCase. + --- + Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be + useful (see .node.status.conditions), the ability to deconflict is important. + The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + hardwareVersion: + description: |- + HardwareVersion describes the VirtualMachine resource's observed + hardware version. + + + Please refer to VirtualMachineSpec.MinHardwareVersion for more + information on the topic of a VM's hardware version. + format: int32 + type: integer + host: + description: |- + Host describes the hostname or IP address of the infrastructure host + where the VM is executed. + type: string + image: + description: |- + Image is a reference to the VirtualMachineImage resource used to deploy + this VM. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an + object. 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 + name: + description: |- + Name refers to a unique resource in the current namespace. + More info: http://kubernetes.io/docs/user-guide/identifiers#names + type: string + required: + - apiVersion + - kind + - name + type: object + instanceUUID: + description: |- + InstanceUUID describes the unique instance UUID provided by the + underlying infrastructure provider, such as vSphere. + type: string + lastRestartTime: + description: LastRestartTime describes the last time the VM was restarted. + format: date-time + type: string + network: + description: |- + Network describes the observed state of the VM's network configuration. + Please note much of the network status information is only available if + the guest has VM Tools installed. + properties: + config: + description: |- + Config describes the resolved, configured network settings for the VM, + such as an interface's IP address obtained from IPAM, or global DNS + settings. + + + Please note this information does *not* represent the *observed* network + state of the VM, but is intended for situations where someone boots a VM + with no appropriate bootstrap engine and needs to know the network config + valid for the deployed VM. + properties: + dns: + description: DNS describes the configured state of client-side + DNS. + properties: + hostName: + description: |- + HostName is the host name portion of the DNS name. For example, + the "my-vm" part of "my-vm.domain.local". + type: string + nameservers: + description: |- + Nameservers is a list of the IP addresses for the DNS servers to use. + + + IP4 addresses are specified using dotted decimal notation. For example, + "192.0.2.1". + + + IP6 addresses are 128-bit addresses represented as eight fields of up to + four hexadecimal digits. A colon separates each field (:). For example, + 2001:DB8:101::230:6eff:fe04:d9ff. The address can also consist of the + symbol '::' to represent multiple 16-bit groups of contiguous 0's only + once in an address as described in RFC 2373. + items: + type: string + type: array + searchDomains: + description: |- + SearchDomains is a list of domains in which to search for hosts, in the + order of preference. + items: + type: string + type: array + type: object + interfaces: + description: Interfaces describes the configured state of + the network interfaces. + items: + description: |- + VirtualMachineNetworkConfigInterfaceStatus describes the configured state of + network interface. + properties: + dns: + description: DNS describes the interface's configured + DNS information. + properties: + hostName: + description: |- + HostName is the host name portion of the DNS name. For example, + the "my-vm" part of "my-vm.domain.local". + type: string + nameservers: + description: |- + Nameservers is a list of the IP addresses for the DNS servers to use. + + + IP4 addresses are specified using dotted decimal notation. For example, + "192.0.2.1". + + + IP6 addresses are 128-bit addresses represented as eight fields of up to + four hexadecimal digits. A colon separates each field (:). For example, + 2001:DB8:101::230:6eff:fe04:d9ff. The address can also consist of the + symbol '::' to represent multiple 16-bit groups of contiguous 0's only + once in an address as described in RFC 2373. + items: + type: string + type: array + searchDomains: + description: |- + SearchDomains is a list of domains in which to search for hosts, in the + order of preference. + items: + type: string + type: array + type: object + ip: + description: IP describes the interface's configured + IP information. + properties: + addresses: + description: |- + Addresses describes configured IP addresses for this interface. + Addresses include the network's prefix length, ex. 192.168.0.0/24 or + 2001:DB8:101::230:6eff:fe04:d9ff::/64. + items: + type: string + type: array + dhcp: + description: DHCP describes the interface's configured + DHCP options. + properties: + ip4: + description: IP4 describes the configured state + of the IP4 DHCP settings. + properties: + enabled: + description: Enabled describes whether DHCP + is enabled. + type: boolean + type: object + ip6: + description: IP6 describes the configured state + of the IP6 DHCP settings. + properties: + enabled: + description: Enabled describes whether DHCP + is enabled. + type: boolean + type: object + type: object + gateway4: + description: |- + Gateway4 describes the interface's configured, default, IP4 gateway. + + + Please note the IP address include the network prefix length, ex. + 192.168.0.1/24. + type: string + gateway6: + description: |- + Gateway6 describes the interface's configured, default, IP6 gateway. + + + Please note the IP address includes the network prefix length, ex. + 2001:db8:101::1/64. + type: string + type: object + name: + description: |- + Name describes the corresponding network interface with the same name + in the VM's desired network interface list. + + + Please note this name is not necessarily related to the name of the + device as it is surfaced inside of the guest. + type: string + required: + - name + type: object + type: array + type: object + interfaces: + description: Interfaces describes the status of the VM's network + interfaces. + items: + description: |- + VirtualMachineNetworkInterfaceStatus describes the observed state of a + VM's network interface. + properties: + deviceKey: + description: |- + DeviceKey describes the unique hardware device key of this network + interface. + format: int32 + type: integer + dns: + description: DNS describes the observed state of the interface's + DNS configuration. + properties: + dhcp: + description: |- + DHCP indicates whether or not dynamic host control protocol (DHCP) was + used to configure DNS configuration. + type: boolean + domainName: + description: |- + DomainName is the domain name portion of the DNS name. For example, + the "domain.local" part of "my-vm.domain.local". + type: string + hostName: + description: |- + HostName is the host name portion of the DNS name. For example, + the "my-vm" part of "my-vm.domain.local". + type: string + nameservers: + description: |- + Nameservers is a list of the IP addresses for the DNS servers to use. + + + IP4 addresses are specified using dotted decimal notation. For example, + "192.0.2.1". + + + IP6 addresses are 128-bit addresses represented as eight fields of up to + four hexadecimal digits. A colon separates each field (:). For example, + 2001:DB8:101::230:6eff:fe04:d9ff. The address can also consist of the + symbol '::' to represent multiple 16-bit groups of contiguous 0's only + once in an address as described in RFC 2373. + items: + type: string + type: array + searchDomains: + description: |- + SearchDomains is a list of domains in which to search for hosts, in the + order of preference. + items: + type: string + type: array + type: object + ip: + description: IP describes the observed state of the interface's + IP configuration. + properties: + addresses: + description: Addresses describes observed IP addresses + for this interface. + items: + description: |- + VirtualMachineNetworkInterfaceIPAddrStatus describes information about a + specific IP address. + properties: + address: + description: |- + Address is an IP4 or IP6 address and their network prefix length. + + + An IP4 address is specified using dotted decimal notation. For example, + "192.0.2.1". + + + IP6 addresses are 128-bit addresses represented as eight fields of up to + four hexadecimal digits. A colon separates each field (:). For example, + 2001:DB8:101::230:6eff:fe04:d9ff. The address can also consist of the + symbol '::' to represent multiple 16-bit groups of contiguous 0's only + once in an address as described in RFC 2373. + type: string + lifetime: + description: Lifetime describes when this address + will expire. + format: date-time + type: string + origin: + description: Origin describes how this address + was configured. + enum: + - dhcp + - linklayer + - manual + - other + - random + type: string + state: + description: State describes the state of this + IP address. + enum: + - deprecated + - duplicate + - inaccessible + - invalid + - preferred + - tentative + - unknown + type: string + required: + - address + type: object + type: array + autoConfigurationEnabled: + description: |- + AutoConfigurationEnabled describes whether or not ICMPv6 router + solicitation requests are enabled or disabled from a given interface. + + + These requests acquire an IP6 address and default gateway route from + zero-to-many routers on the connected network. + + + If not set then ICMPv6 is not available on this VM. + type: boolean + dhcp: + description: |- + DHCP describes the VM's observed, client-side, interface-specific DHCP + options. + properties: + ip4: + description: IP4 describes the observed state of + the IP4 DHCP client settings. + properties: + config: + description: |- + Config describes platform-dependent settings for the DHCP client. + + + The key part is a unique number while the value part is the platform + specific configuration command. For example on Linux and BSD systems + using the file dhclient.conf output would be reported at system scope: + key='1', value='timeout 60;' key='2', value='reboot 10;'. The output + reported per interface would be: + key='1', value='prepend domain-name-servers 192.0.2.1;' + key='2', value='require subnet-mask, domain-name-servers;'. + items: + description: |- + KeyValuePair is useful when wanting to realize a map as a list of key/value + pairs. + properties: + key: + description: Key is the key part of the + key/value pair. + type: string + value: + description: Value is the optional value + part of the key/value pair. + type: string + required: + - key + type: object + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + enabled: + description: Enabled reports the status of the + DHCP client services. + type: boolean + type: object + ip6: + description: IP6 describes the observed state of + the IP6 DHCP client settings. + properties: + config: + description: |- + Config describes platform-dependent settings for the DHCP client. + + + The key part is a unique number while the value part is the platform + specific configuration command. For example on Linux and BSD systems + using the file dhclient.conf output would be reported at system scope: + key='1', value='timeout 60;' key='2', value='reboot 10;'. The output + reported per interface would be: + key='1', value='prepend domain-name-servers 192.0.2.1;' + key='2', value='require subnet-mask, domain-name-servers;'. + items: + description: |- + KeyValuePair is useful when wanting to realize a map as a list of key/value + pairs. + properties: + key: + description: Key is the key part of the + key/value pair. + type: string + value: + description: Value is the optional value + part of the key/value pair. + type: string + required: + - key + type: object + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + enabled: + description: Enabled reports the status of the + DHCP client services. + type: boolean + type: object + type: object + macAddr: + description: MACAddr describes the observed MAC address + for this interface. + type: string + type: object + name: + description: |- + Name describes the corresponding network interface with the same name + in the VM's desired network interface list. If unset, then there is no + corresponding entry for this interface. + + + Please note this name is not necessarily related to the name of the + device as it is surfaced inside of the guest. + type: string + type: object + type: array + ipStacks: + description: |- + IPStacks describes information about the guest's configured IP networking + stacks. + items: + description: |- + VirtualMachineNetworkIPStackStatus describes the observed state of a + VM's IP stack. + properties: + dhcp: + description: DHCP describes the VM's observed, client-side, + system-wide DHCP options. + properties: + ip4: + description: IP4 describes the observed state of the + IP4 DHCP client settings. + properties: + config: + description: |- + Config describes platform-dependent settings for the DHCP client. + + + The key part is a unique number while the value part is the platform + specific configuration command. For example on Linux and BSD systems + using the file dhclient.conf output would be reported at system scope: + key='1', value='timeout 60;' key='2', value='reboot 10;'. The output + reported per interface would be: + key='1', value='prepend domain-name-servers 192.0.2.1;' + key='2', value='require subnet-mask, domain-name-servers;'. + items: + description: |- + KeyValuePair is useful when wanting to realize a map as a list of key/value + pairs. + properties: + key: + description: Key is the key part of the key/value + pair. + type: string + value: + description: Value is the optional value part + of the key/value pair. + type: string + required: + - key + type: object + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + enabled: + description: Enabled reports the status of the DHCP + client services. + type: boolean + type: object + ip6: + description: IP6 describes the observed state of the + IP6 DHCP client settings. + properties: + config: + description: |- + Config describes platform-dependent settings for the DHCP client. + + + The key part is a unique number while the value part is the platform + specific configuration command. For example on Linux and BSD systems + using the file dhclient.conf output would be reported at system scope: + key='1', value='timeout 60;' key='2', value='reboot 10;'. The output + reported per interface would be: + key='1', value='prepend domain-name-servers 192.0.2.1;' + key='2', value='require subnet-mask, domain-name-servers;'. + items: + description: |- + KeyValuePair is useful when wanting to realize a map as a list of key/value + pairs. + properties: + key: + description: Key is the key part of the key/value + pair. + type: string + value: + description: Value is the optional value part + of the key/value pair. + type: string + required: + - key + type: object + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + enabled: + description: Enabled reports the status of the DHCP + client services. + type: boolean + type: object + type: object + dns: + description: DNS describes the VM's observed, client-side + DNS configuration. + properties: + dhcp: + description: |- + DHCP indicates whether or not dynamic host control protocol (DHCP) was + used to configure DNS configuration. + type: boolean + domainName: + description: |- + DomainName is the domain name portion of the DNS name. For example, + the "domain.local" part of "my-vm.domain.local". + type: string + hostName: + description: |- + HostName is the host name portion of the DNS name. For example, + the "my-vm" part of "my-vm.domain.local". + type: string + nameservers: + description: |- + Nameservers is a list of the IP addresses for the DNS servers to use. + + + IP4 addresses are specified using dotted decimal notation. For example, + "192.0.2.1". + + + IP6 addresses are 128-bit addresses represented as eight fields of up to + four hexadecimal digits. A colon separates each field (:). For example, + 2001:DB8:101::230:6eff:fe04:d9ff. The address can also consist of the + symbol '::' to represent multiple 16-bit groups of contiguous 0's only + once in an address as described in RFC 2373. + items: + type: string + type: array + searchDomains: + description: |- + SearchDomains is a list of domains in which to search for hosts, in the + order of preference. + items: + type: string + type: array + type: object + ipRoutes: + description: IPRoutes contain the VM's routing tables for + all address families. + items: + description: |- + VirtualMachineNetworkIPRouteStatus describes the observed state of a + guest network's IP routes. + properties: + gateway: + description: Gateway describes where to send the packets + to next. + properties: + address: + description: Address is the IP4 or IP6 address + of the gateway. + type: string + device: + description: |- + Device is the name of the device in the guest for which this gateway + applies. + type: string + type: object + networkAddress: + description: |- + NetworkAddress is the IP4 or IP6 address of the destination network. + + + Addresses include the network's prefix length, ex. 192.168.0.0/24 or + 2001:DB8:101::230:6eff:fe04:d9ff::/64. + + + IP6 addresses are 128-bit addresses represented as eight fields of up to + four hexadecimal digits. A colon separates each field (:). For example, + 2001:DB8:101::230:6eff:fe04:d9ff. The address can also consist of symbol + '::' to represent multiple 16-bit groups of contiguous 0's only once in + an address as described in RFC 2373. + type: string + required: + - gateway + - networkAddress + type: object + type: array + kernelConfig: + description: |- + KernelConfig describes the observed state of the VM's kernel IP + configuration settings. + + + The key part contains a unique number while the value part contains the + 'key=value' as provided by the underlying provider. For example, on + Linux and/or BSD, the systcl -a output would be reported as: + key='5', value='net.ipv4.tcp_keepalive_time = 7200'. + items: + description: |- + KeyValuePair is useful when wanting to realize a map as a list of key/value + pairs. + properties: + key: + description: Key is the key part of the key/value + pair. + type: string + value: + description: Value is the optional value part of the + key/value pair. + type: string + required: + - key + type: object + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + type: object + type: array + primaryIP4: + description: |- + PrimaryIP4 describes the VM's primary IP4 address. + + + If the bootstrap provider is CloudInit then this value is set to the + value of the VM's "guestinfo.local-ipv4" property. Please see + https://bit.ly/3NJB534 for more information on how this value is + calculated. + + + If the bootstrap provider is anything else then this field is set to the + value of the infrastructure VM's "guest.ipAddress" field. Please see + https://bit.ly/3Au0jM4 for more information. + type: string + primaryIP6: + description: |- + PrimaryIP6 describes the VM's primary IP6 address. + + + If the bootstrap provider is CloudInit then this value is set to the + value of the VM's "guestinfo.local-ipv6" property. Please see + https://bit.ly/3NJB534 for more information on how this value is + calculated. + + + If the bootstrap provider is anything else then this field is set to the + value of the infrastructure VM's "guest.ipAddress" field. Please see + https://bit.ly/3Au0jM4 for more information. + type: string + type: object + powerState: + description: PowerState describes the observed power state of the + VirtualMachine. + enum: + - PoweredOff + - PoweredOn + - Suspended + type: string + uniqueID: + description: |- + UniqueID describes a unique identifier that is provided by the underlying + infrastructure provider, such as vSphere. + type: string + volumes: + description: |- + Volumes describes a list of current status information for each Volume + that is desired to be attached to the VM. + items: + description: |- + VirtualMachineVolumeStatus defines the observed state of a + VirtualMachineVolume instance. + properties: + attached: + description: |- + Attached represents whether a volume has been successfully attached to + the VirtualMachine or not. + type: boolean + diskUUID: + description: |- + DiskUUID represents the underlying virtual disk UUID and is present when + attachment succeeds. + type: string + error: + description: |- + Error represents the last error seen when attaching or detaching a + volume. Error will be empty if attachment succeeds. + type: string + name: + description: Name is the name of the attached volume. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + zone: + description: |- + Zone describes the availability zone where the VirtualMachine has been + scheduled. + + + Please note this field may be empty when the cluster is not zone-aware. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: vmware-system-vmop/vmware-system-vmop-serving-cert + controller-gen.kubebuilder.io/version: v0.14.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: virtualmachineservices.vmoperator.vmware.com +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + caBundle: Cg== + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /convert + conversionReviewVersions: + - v1 + - v1beta1 + group: vmoperator.vmware.com + names: + kind: VirtualMachineService + listKind: VirtualMachineServiceList + plural: virtualmachineservices + shortNames: + - vmservice + singular: virtualmachineservice + preserveUnknownFields: false + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.type + name: Type + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + VirtualMachineService is the Schema for the virtualmachineservices API. + A VirtualMachineService represents the desired specification and the observed status of a VirtualMachineService + instance. A VirtualMachineService represents a network service, provided by one or more VirtualMachines, that is + desired to be exposed to other workloads both internal and external to the cluster. + 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: |- + VirtualMachineServiceSpec defines the desired state of VirtualMachineService. Each VirtualMachineService exposes + a set of TargetPorts on a set of VirtualMachine instances as a network endpoint within or outside of the + Kubernetes cluster. The VirtualMachineService is loosely coupled to the VirtualMachines that are backing it through + the use of a Label Selector. In Kubernetes, a Label Selector enables matching of a resource using a set of + key-value pairs, aka Labels. By using a Label Selector, the VirtualMachineService can be generically defined to apply + to any VirtualMachine in the same namespace that has the appropriate set of labels. + properties: + clusterIp: + description: |- + clusterIP is the IP address of the service and is usually assigned + randomly by the master. If an address is specified manually and is not in + use by others, it will be allocated to the service; otherwise, creation + of the service will fail. This field can not be changed through updates. + Valid values are "None", empty string (""), or a valid IP address. "None" + can be specified for headless services when proxying is not required. + Only applies to types ClusterIP and LoadBalancer. + Ignored if type is ExternalName. + More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies + type: string + externalName: + description: |- + externalName is the external reference that kubedns or equivalent will + return as a CNAME record for this service. No proxying will be involved. + Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) + and requires Type to be ExternalName. + type: string + loadBalancerIP: + description: |- + Only applies to VirtualMachineService Type: LoadBalancer + LoadBalancer will get created with the IP specified in this field. + This feature depends on whether the underlying load balancer provider supports specifying + the loadBalancerIP when a load balancer is created. + This field will be ignored if the provider does not support the feature. + Deprecated: This field was under-specified and its meaning varies across implementations. + Using it is non-portable and it may not support dual-stack. + Users are encouraged to use implementation-specific annotations when available. + type: string + loadBalancerSourceRanges: + description: |- + LoadBalancerSourceRanges is an array of IP addresses in the format of + CIDRs, for example: 103.21.244.0/22 and 10.0.0.0/24. + If specified and supported by the load balancer provider, this will restrict + ingress traffic to the specified client IPs. This field will be ignored if the + provider does not support the feature. + items: + type: string + type: array + ports: + description: |- + Ports specifies a list of VirtualMachineServicePort to expose with this VirtualMachineService. Each of these ports + will be an accessible network entry point to access this service by. + items: + description: |- + VirtualMachineServicePort describes the specification of a service port to be exposed by a VirtualMachineService. + This VirtualMachineServicePort specification includes attributes that define the external and internal + representation of the service port. + properties: + name: + description: Name describes the name to be used to identify + this VirtualMachineServicePort + type: string + port: + description: Port describes the external port that will be exposed + by the service. + format: int32 + type: integer + protocol: + description: Protocol describes the Layer 4 transport protocol + for this port. Supports "TCP", "UDP", and "SCTP". + type: string + targetPort: + description: TargetPort describes the internal port open on + a VirtualMachine that should be mapped to the external Port. + format: int32 + type: integer + required: + - name + - port + - protocol + - targetPort + type: object + type: array + selector: + additionalProperties: + type: string + description: |- + Selector specifies a map of key-value pairs, also known as a Label Selector, that is used to match this + VirtualMachineService with the set of VirtualMachines that should back this VirtualMachineService. + type: object + type: + description: |- + Type specifies a desired VirtualMachineServiceType for this VirtualMachineService. Supported types + are ClusterIP, LoadBalancer, ExternalName. + type: string + required: + - type + type: object + status: + description: VirtualMachineServiceStatus defines the observed state of + VirtualMachineService. + properties: + loadBalancer: + description: |- + LoadBalancer contains the current status of the load balancer, + if one is present. + properties: + ingress: + description: |- + Ingress is a list containing ingress addresses for the load balancer. + Traffic intended for the service should be sent to any of these ingress points. + items: + description: |- + LoadBalancerIngress represents the status of a load balancer ingress point: + traffic intended for the service should be sent to an ingress point. + IP or Hostname may both be set in this structure. It is up to the consumer to determine which + field should be used when accessing this LoadBalancer. + properties: + hostname: + description: Hostname is set for load balancer ingress points + that are specified by a DNS address. + type: string + ip: + description: IP is set for load balancer ingress points + that are specified by an IP address. + type: string + type: object + type: array + type: object + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - jsonPath: .spec.type + name: Type + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha2 + schema: + openAPIV3Schema: + description: VirtualMachineService is the Schema for the virtualmachineservices + 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: VirtualMachineServiceSpec defines the desired state of VirtualMachineService. + properties: + clusterIp: + description: |- + clusterIP is the IP address of the service and is usually assigned + randomly by the master. If an address is specified manually and is not in + use by others, it will be allocated to the service; otherwise, creation + of the service will fail. This field can not be changed through updates. + Valid values are "None", empty string (""), or a valid IP address. "None" + can be specified for headless services when proxying is not required. + Only applies to types ClusterIP and LoadBalancer. + Ignored if type is ExternalName. + More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies + type: string + externalName: + description: |- + externalName is the external reference that kubedns or equivalent will + return as a CNAME record for this service. No proxying will be involved. + Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) + and requires Type to be ExternalName. + type: string + loadBalancerIP: + description: |- + Only applies to VirtualMachineService Type: LoadBalancer + LoadBalancer will get created with the IP specified in this field. + This feature depends on whether the underlying load balancer provider + supports specifying the loadBalancerIP when a load balancer is created. + This field will be ignored if the provider does not support the feature. + Deprecated: This field was under-specified and its meaning varies across implementations. + Using it is non-portable and it may not support dual-stack. + Users are encouraged to use implementation-specific annotations when available. + type: string + loadBalancerSourceRanges: + description: |- + LoadBalancerSourceRanges is an array of IP addresses in the format of + CIDRs, for example: 103.21.244.0/22 and 10.0.0.0/24. + If specified and supported by the load balancer provider, this will + restrict ingress traffic to the specified client IPs. This field will be + ignored if the provider does not support the feature. + items: + type: string + type: array + ports: + description: |- + Ports specifies a list of VirtualMachineServicePort to expose with this + VirtualMachineService. Each of these ports will be an accessible network + entry point to access this service by. + items: + description: |- + VirtualMachineServicePort describes the specification of a service port to + be exposed by a VirtualMachineService. This VirtualMachineServicePort + specification includes attributes that define the external and internal + representation of the service port. + properties: + name: + description: |- + Name describes the name to be used to identify this + VirtualMachineServicePort. + type: string + port: + description: Port describes the external port that will be exposed + by the service. + format: int32 + type: integer + protocol: + description: |- + Protocol describes the Layer 4 transport protocol for this port. + Supports "TCP", "UDP", and "SCTP". + type: string + targetPort: + description: |- + TargetPort describes the internal port open on a VirtualMachine that + should be mapped to the external Port. + format: int32 + type: integer + required: + - name + - port + - protocol + - targetPort + type: object + type: array + selector: + additionalProperties: + type: string + description: |- + Selector specifies a map of key-value pairs, also known as a Label + Selector, that is used to match this VirtualMachineService with the set + of VirtualMachines that should back this VirtualMachineService. + type: object + type: + description: |- + Type specifies a desired VirtualMachineServiceType for this + VirtualMachineService. Supported types are ClusterIP, LoadBalancer, + ExternalName. + type: string + required: + - type + type: object + status: + description: |- + VirtualMachineServiceStatus defines the observed state of + VirtualMachineService. + properties: + loadBalancer: + description: |- + LoadBalancer contains the current status of the load balancer, + if one is present. + properties: + ingress: + description: |- + Ingress is a list containing ingress addresses for the load balancer. + Traffic intended for the service should be sent to any of these ingress + points. + items: + description: |- + LoadBalancerIngress represents the status of a load balancer ingress point: + traffic intended for the service should be sent to an ingress point. + IP or Hostname may both be set in this structure. It is up to the consumer to + determine which field should be used when accessing this LoadBalancer. + properties: + hostname: + description: |- + Hostname is set for load balancer ingress points that are specified by a + DNS address. + type: string + ip: + description: |- + IP is set for load balancer ingress points that are specified by an IP + address. + type: string + type: object + type: array + type: object + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: vmware-system-vmop/vmware-system-vmop-serving-cert + controller-gen.kubebuilder.io/version: v0.14.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: virtualmachinesetresourcepolicies.vmoperator.vmware.com +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + caBundle: Cg== + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /convert + conversionReviewVersions: + - v1 + - v1beta1 + group: vmoperator.vmware.com + names: + kind: VirtualMachineSetResourcePolicy + listKind: VirtualMachineSetResourcePolicyList + plural: virtualmachinesetresourcepolicies + singular: virtualmachinesetresourcepolicy + preserveUnknownFields: false + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: VirtualMachineSetResourcePolicy is the Schema for the virtualmachinesetresourcepolicies + 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: VirtualMachineSetResourcePolicySpec defines the desired state + of VirtualMachineSetResourcePolicy. + properties: + clustermodules: + items: + description: |- + ClusterModuleSpec defines a grouping of VirtualMachines that are to be grouped together as a logical unit by + the infrastructure provider. Within vSphere, the ClusterModuleSpec maps directly to a vSphere ClusterModule. + properties: + groupname: + description: GroupName describes the name of the ClusterModule + Group. + type: string + required: + - groupname + type: object + type: array + folder: + description: FolderSpec defines a Folder. + properties: + name: + description: Name describes the name of the Folder + type: string + type: object + resourcepool: + description: ResourcePoolSpec defines a Logical Grouping of workloads + that share resource policies. + properties: + limits: + description: Limits describes the limit to resources available + to the ResourcePool. + properties: + cpu: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + memory: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + name: + description: Name describes the name of the ResourcePool grouping. + type: string + reservations: + description: Reservations describes the guaranteed resources reserved + for the ResourcePool. + properties: + cpu: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + memory: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + type: object + status: + description: VirtualMachineSetResourcePolicyStatus defines the observed + state of VirtualMachineSetResourcePolicy. + properties: + clustermodules: + items: + properties: + clusterMoID: + type: string + groupname: + type: string + moduleUUID: + type: string + required: + - clusterMoID + - groupname + - moduleUUID + type: object + type: array + type: object + type: object + served: true + storage: false + subresources: + status: {} + - name: v1alpha2 + schema: + openAPIV3Schema: + description: VirtualMachineSetResourcePolicy is the Schema for the virtualmachinesetresourcepolicies + 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: |- + VirtualMachineSetResourcePolicySpec defines the desired state of + VirtualMachineSetResourcePolicy. + properties: + clusterModuleGroups: + items: + type: string + type: array + folder: + type: string + resourcePool: + description: |- + ResourcePoolSpec defines a Logical Grouping of workloads that share resource + policies. + properties: + limits: + description: Limits describes the limit to resources available + to the ResourcePool. + properties: + cpu: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + memory: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + name: + description: Name describes the name of the ResourcePool grouping. + type: string + reservations: + description: |- + Reservations describes the guaranteed resources reserved for the + ResourcePool. + properties: + cpu: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + memory: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + type: object + status: + description: |- + VirtualMachineSetResourcePolicyStatus defines the observed state of + VirtualMachineSetResourcePolicy. + properties: + clustermodules: + items: + description: |- + VSphereClusterModuleStatus describes the observed state of a vSphere + cluster module. + properties: + clusterMoID: + type: string + groupName: + type: string + moduleUUID: + type: string + required: + - clusterMoID + - groupName + - moduleUUID + type: object + type: array + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: virtualmachinewebconsolerequests.vmoperator.vmware.com +spec: + group: vmoperator.vmware.com + names: + kind: VirtualMachineWebConsoleRequest + listKind: VirtualMachineWebConsoleRequestList + plural: virtualmachinewebconsolerequests + singular: virtualmachinewebconsolerequest + preserveUnknownFields: false + scope: Namespaced + versions: + - name: v1alpha2 + schema: + openAPIV3Schema: + description: |- + VirtualMachineWebConsoleRequest allows the creation of a one-time, web + console connection to a VM. + 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: |- + VirtualMachineWebConsoleRequestSpec describes the desired state for a web + console request to a VM. + properties: + name: + description: |- + Name is the name of a VM in the same Namespace as this web console + request. + type: string + publicKey: + description: PublicKey is used to encrypt the status.response. This + is expected to be a RSA OAEP public key in X.509 PEM format. + type: string + required: + - name + - publicKey + type: object + status: + description: |- + VirtualMachineWebConsoleRequestStatus describes the observed state of the + request. + properties: + expiryTime: + description: ExpiryTime is the time at which access via this request + will expire. + format: date-time + type: string + proxyAddr: + description: |- + ProxyAddr describes the host address and optional port used to access + the VM's web console. + + + The value could be a DNS entry, IPv4, or IPv6 address, followed by an + optional port. For example, valid values include: + + + DNS + * host.com + * host.com:6443 + + + IPv4 + * 1.2.3.4 + * 1.2.3.4:6443 + + + IPv6 + * 1234:1234:1234:1234:1234:1234:1234:1234 + * [1234:1234:1234:1234:1234:1234:1234:1234]:6443 + * 1234:1234:1234:0000:0000:0000:1234:1234 + * 1234:1234:1234::::1234:1234 + * [1234:1234:1234::::1234:1234]:6443 + + + In other words, the field may be set to any value that is parsable + by Go's https://pkg.go.dev/net#ResolveIPAddr and + https://pkg.go.dev/net#ParseIP functions. + type: string + response: + description: Response will be the authenticated ticket corresponding + to this web console request. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.7.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: vmxnet3networkinterfaces.netoperator.vmware.com +spec: + group: netoperator.vmware.com + names: + kind: VMXNET3NetworkInterface + listKind: VMXNET3NetworkInterfaceList + plural: vmxnet3networkinterfaces + singular: vmxnet3networkinterface + preserveUnknownFields: false + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: VMXNET3NetworkInterface is the Schema for the vmxnet3networkinterfaces + API. It represents configuration of a vSphere VMXNET3 type network interface + card. + 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: VMXNET3NetworkInterfaceSpec defines the desired state of + VMXNET3NetworkInterface. + properties: + uptCompatibilityEnabled: + description: UPTCompatibilityEnabled indicates whether UPT(Universal + Pass-through) compatibility is enabled on this network interface. + type: boolean + wakeOnLanEnabled: + description: WakeOnLanEnabled indicates whether wake-on-LAN is enabled + on this network interface. Clients can set this property to selectively + enable or disable wake-on-LAN. + type: boolean + type: object + status: + description: VMXNET3NetworkInterfaceStatus is unused. VMXNET3NetworkInterface + is a configuration only resource. + type: object + type: object + served: true + storage: true +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.6.1 + creationTimestamp: null + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: vspherezones.topology.tanzu.vmware.com +spec: + group: topology.tanzu.vmware.com + names: + kind: VSphereZone + listKind: VSphereZoneList + plural: vspherezones + singular: vspherezone + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: VSphereZone is the schema for the VSphereZone resource for the + vSphere Zone. + 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: VSphereZoneSpec defines the desired state of VSphereZone. + properties: + description: + description: Description is the description of the vSphere Zone. + type: string + type: object + status: + description: VSphereZoneStatus defines the observed state of VSphereZone. + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: webconsolerequests.vmoperator.vmware.com +spec: + group: vmoperator.vmware.com + names: + kind: WebConsoleRequest + listKind: WebConsoleRequestList + plural: webconsolerequests + singular: webconsolerequest + preserveUnknownFields: false + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: WebConsoleRequest allows the creation of a one-time web console + ticket that can be used to interact with the VM. + 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: WebConsoleRequestSpec describes the specification for used + to request a web console request. + properties: + publicKey: + description: PublicKey is used to encrypt the status.response. This + is expected to be a RSA OAEP public key in X.509 PEM format. + type: string + virtualMachineName: + description: VirtualMachineName is the VM in the same namespace, for + which the web console is requested. + type: string + required: + - publicKey + - virtualMachineName + type: object + status: + description: WebConsoleRequestStatus defines the observed state, which + includes the web console request itself. + properties: + expiryTime: + description: ExpiryTime is when the ticket referenced in Response + will expire. + format: date-time + type: string + proxyAddr: + description: |- + ProxyAddr describes the host address and optional port used to access + the VM's web console. + The value could be a DNS entry, IPv4, or IPv6 address, followed by an + optional port. For example, valid values include: + + + DNS + * host.com + * host.com:6443 + + + IPv4 + * 1.2.3.4 + * 1.2.3.4:6443 + + + IPv6 + * 1234:1234:1234:1234:1234:1234:1234:1234 + * [1234:1234:1234:1234:1234:1234:1234:1234]:6443 + * 1234:1234:1234:0000:0000:0000:1234:1234 + * 1234:1234:1234::::1234:1234 + * [1234:1234:1234::::1234:1234]:6443 + + + In other words, the field may be set to any value that is parsable + by Go's https://pkg.go.dev/net#ResolveIPAddr and + https://pkg.go.dev/net#ParseIP functions. + type: string + response: + description: Response will be the authenticated ticket corresponding + to this web console request. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: vmware-system-vmop-leader-election-role + namespace: vmware-system-vmop +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - configmaps/status + verbs: + - get + - update + - patch +- apiGroups: + - "" + resources: + - events + verbs: + - create +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: vmware-system-vmop-certman-role +rules: +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: vmware-system-vmop-manager-role +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - configmaps + - events + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - endpoints + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - namespaces + - resourcequotas + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - nodes + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - services + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - services/status + verbs: + - get + - patch + - update +- apiGroups: + - cns.vmware.com + resources: + - cnsnodevmattachments + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - cns.vmware.com + resources: + - cnsnodevmattachments/status + verbs: + - get + - list +- apiGroups: + - cns.vmware.com + resources: + - storagepolicyquotas + verbs: + - get + - list + - watch +- apiGroups: + - imageregistry.vmware.com + resources: + - clustercontentlibraryitems + verbs: + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - imageregistry.vmware.com + resources: + - clustercontentlibraryitems/status + verbs: + - get +- apiGroups: + - imageregistry.vmware.com + resources: + - contentlibraries + verbs: + - get + - list + - watch +- apiGroups: + - imageregistry.vmware.com + resources: + - contentlibraries/status + verbs: + - get +- apiGroups: + - imageregistry.vmware.com + resources: + - contentlibraryitems + verbs: + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - imageregistry.vmware.com + resources: + - contentlibraryitems/status + verbs: + - get +- apiGroups: + - netoperator.vmware.com + resources: + - networkinterfaces + - vmxnet3networkinterfaces + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - nsx.vmware.com + resources: + - subnetports + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - nsx.vmware.com + resources: + - subnetports/status + verbs: + - get + - patch + - update +- apiGroups: + - storage.k8s.io + resources: + - storageclasses + verbs: + - get + - list + - watch +- apiGroups: + - topology.tanzu.vmware.com + resources: + - availabilityzones + verbs: + - get + - list + - watch +- apiGroups: + - topology.tanzu.vmware.com + resources: + - availabilityzones/status + verbs: + - get + - list + - watch +- apiGroups: + - vmoperator.vmware.com + resources: + - clustervirtualmachineimages + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - vmoperator.vmware.com + resources: + - clustervirtualmachineimages/status + verbs: + - get + - list + - patch + - update + - watch +- apiGroups: + - vmoperator.vmware.com + resources: + - virtualmachineclasses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - vmoperator.vmware.com + resources: + - virtualmachineclasses/status + verbs: + - get + - patch + - update +- apiGroups: + - vmoperator.vmware.com + resources: + - virtualmachineimages + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - vmoperator.vmware.com + resources: + - virtualmachineimages/status + verbs: + - get + - list + - patch + - update + - watch +- apiGroups: + - vmoperator.vmware.com + resources: + - virtualmachinepublishrequests + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - vmoperator.vmware.com + resources: + - virtualmachinepublishrequests/status + verbs: + - get + - patch + - update +- apiGroups: + - vmoperator.vmware.com + resources: + - virtualmachines + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - vmoperator.vmware.com + resources: + - virtualmachines/status + verbs: + - get + - patch + - update +- apiGroups: + - vmoperator.vmware.com + resources: + - virtualmachineservices + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - vmoperator.vmware.com + resources: + - virtualmachineservices/status + verbs: + - get + - patch + - update +- apiGroups: + - vmoperator.vmware.com + resources: + - virtualmachinesetresourcepolicies + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - vmoperator.vmware.com + resources: + - virtualmachinesetresourcepolicies/status + verbs: + - get + - patch + - update +- apiGroups: + - vmoperator.vmware.com + resources: + - virtualmachinewebconsolerequests + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - vmoperator.vmware.com + resources: + - virtualmachinewebconsolerequests/status + verbs: + - get + - patch + - update +- apiGroups: + - vmoperator.vmware.com + resources: + - webconsolerequests + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - vmoperator.vmware.com + resources: + - webconsolerequests/status + verbs: + - get + - patch + - update +- apiGroups: + - vmware.com + resources: + - virtualnetworkinterfaces + - virtualnetworkinterfaces/status + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: vmware-system-vmop-proxy-role +rules: +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: vmware-system-vmop-leader-election-rolebinding + namespace: vmware-system-vmop +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: vmware-system-vmop-leader-election-role +subjects: +- kind: ServiceAccount + name: default + namespace: vmware-system-vmop +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: vmware-system-vmop-certman-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: vmware-system-vmop-certman-role +subjects: +- kind: ServiceAccount + name: default + namespace: vmware-system-vmop +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: vmware-system-vmop-manager-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: vmware-system-vmop-manager-role +subjects: +- kind: ServiceAccount + name: default + namespace: vmware-system-vmop +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: vmware-system-vmop-proxy-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: vmware-system-vmop-proxy-role +subjects: +- kind: ServiceAccount + name: default + namespace: vmware-system-vmop +--- +apiVersion: v1 +kind: Service +metadata: + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + control-plane: controller-manager + name: vmware-system-vmop-controller-manager-metrics-service + namespace: vmware-system-vmop +spec: + ports: + - name: https + port: 8443 + targetPort: https + selector: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + control-plane: controller-manager +--- +apiVersion: v1 +kind: Service +metadata: + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop +spec: + ports: + - name: https + port: 443 + targetPort: 9878 + selector: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + control-plane: controller-manager +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kubectl.kubernetes.io/default-container: manager + webhooks.vmoperator.vmware.com/secret-volume-mount-path: /tmp/k8s-webhook-server/serving-certs + webhooks.vmoperator.vmware.com/secret-volume-name: cert + webhooks.vmoperator.vmware.com/service-container-port: "9878" + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + control-plane: controller-manager + controller-tools.k8s.io: "1.0" + name: vmware-system-vmop-controller-manager + namespace: vmware-system-vmop +spec: + replicas: 1 + revisionHistoryLimit: 1 + selector: + matchLabels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + control-plane: controller-manager + controller-tools.k8s.io: "1.0" + strategy: + rollingUpdate: + maxSurge: 0 + maxUnavailable: 1 + type: RollingUpdate + template: + metadata: + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + control-plane: controller-manager + controller-tools.k8s.io: "1.0" + name: vmoperator-controller-manager + spec: + containers: + - args: + - --metrics-addr=127.0.0.1:8080 + command: + - /manager + env: + - name: VSPHERE_NETWORKING + value: "true" + - name: NETWORK_PROVIDER + value: VSPHERE_NETWORK + - name: FSS_WCP_INSTANCE_STORAGE + value: "true" + - name: FSS_WCP_VMSERVICE_BACKUPRESTORE + value: "false" + - name: FSS_PODVMONSTRETCHEDSUPERVISOR + value: "false" + - name: FSS_WCP_TKG_Multiple_CL + value: "false" + - name: FSS_WCP_Unified_TKG + value: "true" + - name: FSS_WCP_VMSERVICE_V1ALPHA2 + value: "true" + - name: FSS_WCP_VM_CLASS_AS_CONFIG + value: "true" + - name: FSS_WCP_VM_CLASS_AS_CONFIG_DAYNDATE + value: "true" + - name: FSS_WCP_VM_IMAGE_REGISTRY + value: "true" + - name: FSS_WCP_NAMESPACED_VM_CLASS + value: "true" + - name: FSS_WCP_WINDOWS_SYSPREP + value: "true" + - name: MAX_CONCURRENT_RECONCILES + value: "20" + - name: LEADER_ELECTION_ID + value: vmware-system-vmop-controller-manager-runtime + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_SERVICE_ACCOUNT_NAME + valueFrom: + fieldRef: + fieldPath: spec.serviceAccountName + - name: WEBHOOK_SERVICE_NAMESPACE + value: vmware-system-vmop + - name: WEBHOOK_SERVICE_NAME + value: vmware-system-vmop-webhook-service + - name: WEBHOOK_SECRET_NAMESPACE + value: vmware-system-vmop + - name: WEBHOOK_SECRET_NAME + value: webhook-server-cert + - name: WEBHOOK_SECRET_VOLUME_MOUNT_PATH + value: /tmp/k8s-webhook-server/serving-certs + - name: WEBHOOK_SERVICE_CONTAINER_PORT + value: "9878" + image: gcr.io/k8s-staging-capi-vsphere/extra/vm-operator:v1.8.6-0-gde75746a + imagePullPolicy: Always + name: manager + ports: + - containerPort: 9878 + name: webhook-server + protocol: TCP + - containerPort: 9445 + name: health-probe + protocol: TCP + readinessProbe: + httpGet: + path: /readyz + port: health-probe + resources: + limits: + cpu: 2000m + memory: 300Mi + requests: + cpu: 100m + memory: 75Mi + volumeMounts: + - mountPath: /tmp/k8s-webhook-server/serving-certs + name: cert + readOnly: true + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 + - --logtostderr=true + - --v=10 + image: gcr.io/kubebuilder/kube-rbac-proxy:v0.4.0 + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + nodeSelector: + node-role.kubernetes.io/control-plane: "" + terminationGracePeriodSeconds: 10 + tolerations: + - effect: NoSchedule + key: node-role.kubernetes.io/master + operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/control-plane + operator: Exists + - effect: NoSchedule + key: kubeadmNode + operator: Equal + value: master + volumes: + - name: cert + secret: + defaultMode: 420 + secretName: webhook-server-cert +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: vmware-system-vmop-serving-cert + namespace: vmware-system-vmop +spec: + dnsNames: + - vmware-system-vmop-webhook-service.vmware-system-vmop.svc + - vmware-system-vmop-webhook-service.vmware-system-vmop.svc.cluster.local + issuerRef: + kind: Issuer + name: vmware-system-vmop-selfsigned-issuer + secretName: webhook-server-cert +--- +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + name: vmware-system-vmop-selfsigned-issuer + namespace: vmware-system-vmop +spec: + selfSigned: {} +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from: vmware-system-vmop/vmware-system-vmop-serving-cert + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + webhooks.vmoperator.vmware.com: "true" + name: vmware-system-vmop-mutating-webhook-configuration +webhooks: +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /default-mutate-vmoperator-vmware-com-v1alpha2-virtualmachine + failurePolicy: Fail + name: default.mutating.virtualmachine.v1alpha2.vmoperator.vmware.com + rules: + - apiGroups: + - vmoperator.vmware.com + apiVersions: + - v1alpha2 + operations: + - CREATE + - UPDATE + resources: + - virtualmachines + sideEffects: None +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from: vmware-system-vmop/vmware-system-vmop-serving-cert + labels: + cluster.x-k8s.io/provider: runtime-extension-vm-operator + webhooks.vmoperator.vmware.com: "true" + name: vmware-system-vmop-validating-webhook-configuration +webhooks: +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /default-validate--v1-persistentvolumeclaim + failurePolicy: Fail + name: default.validating.persistentvolumeclaim.vmoperator.vmware.com + rules: + - apiGroups: + - "" + apiVersions: + - v1 + operations: + - CREATE + - UPDATE + - DELETE + resources: + - persistentvolumeclaims + sideEffects: None +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /default-validate-vmoperator-vmware-com-v1alpha2-virtualmachine + failurePolicy: Fail + name: default.validating.virtualmachine.v1alpha2.vmoperator.vmware.com + rules: + - apiGroups: + - vmoperator.vmware.com + apiVersions: + - v1alpha2 + operations: + - CREATE + - UPDATE + resources: + - virtualmachines + sideEffects: None +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /default-validate-vmoperator-vmware-com-v1alpha2-virtualmachineclass + failurePolicy: Fail + name: default.validating.virtualmachineclass.v1alpha2.vmoperator.vmware.com + rules: + - apiGroups: + - vmoperator.vmware.com + apiVersions: + - v1alpha2 + operations: + - CREATE + - UPDATE + resources: + - virtualmachineclasses + sideEffects: None +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /default-validate-vmoperator-vmware-com-v1alpha2-virtualmachinepublishrequest + failurePolicy: Fail + name: default.validating.virtualmachinepublishrequest.v1alpha2.vmoperator.vmware.com + rules: + - apiGroups: + - vmoperator.vmware.com + apiVersions: + - v1alpha2 + operations: + - CREATE + - UPDATE + resources: + - virtualmachinepublishrequests + sideEffects: None +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /default-validate-vmoperator-vmware-com-v1alpha2-virtualmachineservice + failurePolicy: Fail + name: default.validating.virtualmachineservice.v1alpha2.vmoperator.vmware.com + rules: + - apiGroups: + - vmoperator.vmware.com + apiVersions: + - v1alpha2 + operations: + - CREATE + - UPDATE + resources: + - virtualmachineservices + sideEffects: None +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /default-validate-vmoperator-vmware-com-v1alpha2-virtualmachinesetresourcepolicy + failurePolicy: Fail + name: default.validating.virtualmachinesetresourcepolicy.v1alpha2.vmoperator.vmware.com + rules: + - apiGroups: + - vmoperator.vmware.com + apiVersions: + - v1alpha2 + operations: + - CREATE + - UPDATE + resources: + - virtualmachinesetresourcepolicies + sideEffects: None +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /default-validate-vmoperator-vmware-com-v1alpha1-webconsolerequest + failurePolicy: Fail + name: default.validating.webconsolerequest.v1alpha1.vmoperator.vmware.com + rules: + - apiGroups: + - vmoperator.vmware.com + apiVersions: + - v1alpha1 + operations: + - CREATE + - UPDATE + resources: + - webconsolerequests + sideEffects: None +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + name: vmware-system-vmop-webhook-service + namespace: vmware-system-vmop + path: /default-validate-vmoperator-vmware-com-v1alpha2-virtualmachinewebconsolerequest + failurePolicy: Fail + name: default.validating.virtualmachinewebconsolerequest.v1alpha2.vmoperator.vmware.com + rules: + - apiGroups: + - vmoperator.vmware.com + apiVersions: + - v1alpha2 + operations: + - CREATE + - UPDATE + resources: + - virtualmachinewebconsolerequests + sideEffects: None