--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.3.0 creationTimestamp: null name: vinoes.airship.airshipit.org spec: group: airship.airshipit.org names: kind: Vino listKind: VinoList plural: vinoes singular: vino scope: Namespaced versions: - name: v1 schema: openAPIV3Schema: description: Vino is the Schema for the vinoes 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: VinoSpec defines the desired state of Vino properties: bmcCredentials: description: BMCCredentials contain credentials that will be used to create BMH nodes sushy tools will use these credentials as well, to set up authentication properties: password: type: string username: type: string required: - password - username type: object configuration: description: Define CPU configuration properties: cpuExclude: description: Exclude CPU example 0-4,54-60 type: string type: object daemonSetOptions: description: DaemonSetOptions defines how vino will spawn daemonset on nodes properties: libvirtImage: type: string namespacedName: description: NamespacedName to be used to spawn VMs properties: name: type: string namespace: type: string type: object nodeAnnotatorImage: type: string sushyImage: type: string vinoBuilderImage: type: string type: object networks: description: Define network parameters items: description: Network defines libvirt networks properties: allocationStart: type: string allocationStop: type: string dns_servers: items: type: string type: array instanceSubnet: type: string libvirtTemplate: description: LibvirtTemplate identifies which libvirt template to be used to create a network type: string macPrefix: description: MACPrefix defines the zero-padded MAC prefix to use for VM mac addresses, and is the first address that will be allocated sequentially to VMs in this network. If omitted, a default private MAC prefix will be used. The prefix should be specified in full MAC notation, e.g. 06:42:42:00:00:00 type: string name: description: Network Parameter defined type: string physicalInterface: description: PhysicalInterface identifies interface into which to plug in libvirt network type: string routes: items: description: VMRoutes defined properties: gateway: type: string netmask: type: string network: type: string type: object type: array subnet: type: string type: type: string type: object type: array nodeLabelKeysToCopy: description: NodeLabelKeysToCopy vino controller will get these labels from k8s nodes and place them on BMHs that correspond to this node items: type: string type: array nodeSelector: description: Define nodelabel parameters properties: matchLabels: additionalProperties: type: string description: Node type needs to specified type: object required: - matchLabels type: object nodes: description: Define node details items: description: NodeSet node definitions properties: bmhLabels: additionalProperties: type: string description: BMHLabels labels will be copied directly to BMHs that will be created These labels will override keys from k8s node, that are specified in vino.NodeLabelKeysToCopy type: object bootInterfaceName: description: BootInterfaceName interface name to use to boot virtual machines type: string count: type: integer diskDrives: items: description: DiskDrivesTemplate defines disks on the VM properties: name: type: string options: description: DiskOptions disk options properties: sizeGb: type: integer sparse: type: boolean type: object path: type: string type: type: string type: object type: array libvirtTemplate: description: NamespacedName to be used to spawn VMs properties: name: type: string namespace: type: string type: object name: description: Parameter for Node control-plane or worker type: string networkDataTemplate: description: NetworkDataTemplate must have a template key properties: name: type: string namespace: type: string type: object networkInterfaces: items: description: NetworkInterface define interface on the VM properties: mtu: type: integer name: description: Define parameter for network interfaces type: string network: type: string options: additionalProperties: type: string type: object type: type: string type: object type: array rootDeviceName: description: RootDeviceName is the root device for underlying VM, /dev/vda for example default is /dev/vda type: string type: object type: array pxeBootImageHost: description: PXEBootImageHost will be used to download the PXE boot image type: string pxeBootImageHostPort: description: PXEBootImageHostPort will be used to download the PXE boot image type: integer vmBridge: description: VMBridge defines the single interface name to be used as a bridge for VMs type: string required: - bmcCredentials - vmBridge type: object status: description: VinoStatus defines the observed state of Vino properties: conditions: items: description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type \ // +patchStrategy=merge // +listType=map // +listMapKey=type \ Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" 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 configMapRef: description: 'ObjectReference contains enough information to let you inspect or modify the referred object. --- New uses of this type are discouraged because of difficulty describing its usage when embedded in APIs. 1. Ignored fields. It includes many fields which are not generally honored. For instance, ResourceVersion and FieldPath are both very rarely valid in actual usage. 2. Invalid usage help. It is impossible to add specific help for individual usage. In most embedded usages, there are particular restrictions like, "must refer only to types A and B" or "UID not honored" or "name must be restricted". Those cannot be well described when embedded. 3. Inconsistent validation. Because the usages are different, the validation rules are different by usage, which makes it hard for users to predict what will happen. 4. The fields are both imprecise and overly precise. Kind is not a precise mapping to a URL. This can produce ambiguity during interpretation and require a REST mapping. In most cases, the dependency is on the group,resource tuple and the version of the actual struct is irrelevant. 5. We cannot easily change it. Because this type is embedded in many locations, updates to this type will affect numerous schemas. Don''t make new APIs embed an underspecified API type they do not control. Instead of using this type, create a locally provided and used type that is well-focused on your reference. For example, ServiceReferences for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 .' properties: apiVersion: description: API version of the referent. type: string fieldPath: description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' type: string kind: description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string name: description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' type: string namespace: description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' type: string resourceVersion: description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' type: string uid: description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' type: string type: object type: object type: object served: true storage: true subresources: status: {} status: acceptedNames: kind: "" plural: "" conditions: [] storedVersions: []