
This removes references to "vm", "vino", and "vbmh" in the API and replaces them with "bmh" since at least the existing functionality of SIP is applicable to any BMH, not just those backed by vino/VMs. If/when we add functionality specific to VM nodes, the API for those features should be named/documented accordingly. This also updates BMH scheduling to support arbitrary label selectors [0]. [0]: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#resources-that-support-set-based-requirements Closes: #8 Closes: #9 Change-Id: I105fe3dc854c032c755997c47c24997a03cd65e6
293 lines
13 KiB
YAML
293 lines
13 KiB
YAML
|
|
---
|
|
apiVersion: apiextensions.k8s.io/v1beta1
|
|
kind: CustomResourceDefinition
|
|
metadata:
|
|
annotations:
|
|
controller-gen.kubebuilder.io/version: v0.3.0
|
|
creationTimestamp: null
|
|
name: sipclusters.airship.airshipit.org
|
|
spec:
|
|
group: airship.airshipit.org
|
|
names:
|
|
kind: SIPCluster
|
|
listKind: SIPClusterList
|
|
plural: sipclusters
|
|
singular: sipcluster
|
|
scope: Namespaced
|
|
subresources:
|
|
status: {}
|
|
validation:
|
|
openAPIV3Schema:
|
|
description: SIPCluster is the Schema for the sipclusters 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: SIPClusterSpec defines the desired state of a SIPCluster
|
|
properties:
|
|
nodes:
|
|
additionalProperties:
|
|
description: 'NodeSet are the the list of Nodes objects workers, or
|
|
ControlPlane that define expectations for the Tenant Clusters Includes
|
|
artifacts to associate with each defined namespace Such as : - Roles
|
|
for the Nodes - Flavor for theh Nodes image - Scheduling expectations
|
|
- Scale of the group of Nodes'
|
|
properties:
|
|
count:
|
|
description: Count defines the scale expectations for the Nodes
|
|
properties:
|
|
active:
|
|
description: 'INSERT ADDITIONAL STATUS FIELD - define observed
|
|
state of cluster Important: Run "make" to regenerate code
|
|
after modifying this file'
|
|
type: integer
|
|
standby:
|
|
type: integer
|
|
type: object
|
|
labelSelector:
|
|
description: LabelSelector is the BMH label selector to use.
|
|
properties:
|
|
matchExpressions:
|
|
description: matchExpressions is a list of label selector
|
|
requirements. The requirements are ANDed.
|
|
items:
|
|
description: A label selector requirement is a selector
|
|
that contains values, a key, and an operator that relates
|
|
the key and values.
|
|
properties:
|
|
key:
|
|
description: key is the label key that the selector
|
|
applies to.
|
|
type: string
|
|
operator:
|
|
description: operator represents a key's relationship
|
|
to a set of values. Valid operators are In, NotIn,
|
|
Exists and DoesNotExist.
|
|
type: string
|
|
values:
|
|
description: values is an array of string values. If
|
|
the operator is In or NotIn, the values array must
|
|
be non-empty. If the operator is Exists or DoesNotExist,
|
|
the values array must be empty. This array is replaced
|
|
during a strategic merge patch.
|
|
items:
|
|
type: string
|
|
type: array
|
|
required:
|
|
- key
|
|
- operator
|
|
type: object
|
|
type: array
|
|
matchLabels:
|
|
additionalProperties:
|
|
type: string
|
|
description: matchLabels is a map of {key,value} pairs. A
|
|
single {key,value} in the matchLabels map is equivalent
|
|
to an element of matchExpressions, whose key field is "key",
|
|
the operator is "In", and the values array contains only
|
|
"value". The requirements are ANDed.
|
|
type: object
|
|
type: object
|
|
spreadTopology:
|
|
description: PlaceHolder until we define the real expected Implementation
|
|
Scheduling define constraints that allow the SIP Scheduler to
|
|
identify the required BMH's to allow CAPI to build a cluster
|
|
enum:
|
|
- PerRack
|
|
- PerHost
|
|
type: string
|
|
type: object
|
|
description: Nodes defines the set of nodes to schedule for each BMH
|
|
role.
|
|
type: object
|
|
services:
|
|
description: Services defines the services that are deployed when a
|
|
SIPCluster is provisioned.
|
|
properties:
|
|
auth:
|
|
description: Auth defines the sub-cluster authentication services.
|
|
items:
|
|
properties:
|
|
clusterIP:
|
|
type: string
|
|
image:
|
|
type: string
|
|
nodeInterfaceId:
|
|
type: string
|
|
nodeLabels:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
nodePort:
|
|
type: integer
|
|
required:
|
|
- image
|
|
- nodePort
|
|
type: object
|
|
type: array
|
|
jumpHost:
|
|
description: JumpHost defines the sub-cluster jump host services.
|
|
items:
|
|
description: JumpHostService is an infrastructure service type
|
|
that represents the sub-cluster jump-host service.
|
|
properties:
|
|
bmc:
|
|
description: BMCOpts contains options for BMC communication.
|
|
properties:
|
|
proxy:
|
|
type: boolean
|
|
type: object
|
|
clusterIP:
|
|
type: string
|
|
image:
|
|
type: string
|
|
nodeInterfaceId:
|
|
type: string
|
|
nodeLabels:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
nodePort:
|
|
type: integer
|
|
nodeSSHPrivateKeys:
|
|
description: NodeSSHPrivateKeys holds the name of a Secret
|
|
in the same namespace as the SIPCluster CR, whose key values
|
|
each represent an ssh private key that can be used to access
|
|
the cluster nodes. They are mounted into the jumphost with
|
|
the secret keys serving as file names relative to a common
|
|
directory, and then configured as identity files in the
|
|
SSH config file of the default user.
|
|
type: string
|
|
sshAuthorizedKeys:
|
|
items:
|
|
type: string
|
|
type: array
|
|
required:
|
|
- image
|
|
- nodePort
|
|
- nodeSSHPrivateKeys
|
|
type: object
|
|
type: array
|
|
loadBalancer:
|
|
description: LoadBalancer defines the sub-cluster load balancer
|
|
services.
|
|
items:
|
|
properties:
|
|
clusterIP:
|
|
type: string
|
|
image:
|
|
type: string
|
|
nodeInterfaceId:
|
|
type: string
|
|
nodeLabels:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
nodePort:
|
|
type: integer
|
|
required:
|
|
- image
|
|
- nodePort
|
|
type: object
|
|
type: array
|
|
type: object
|
|
required:
|
|
- services
|
|
type: object
|
|
status:
|
|
description: SIPClusterStatus defines the observed state of SIPCluster
|
|
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
|
|
type: object
|
|
type: object
|
|
version: v1
|
|
versions:
|
|
- name: v1
|
|
served: true
|
|
storage: true
|
|
status:
|
|
acceptedNames:
|
|
kind: ""
|
|
plural: ""
|
|
conditions: []
|
|
storedVersions: []
|