
Each infrastructure service in the SIPCluster custom resource should be a descendant of a key that is a valid service type; however, errors in the name of an infrastructure service type are only logged as info; processing of the SIP CR continues even when an infrastructure service type is invalid. This change introduces up-front validation by adding a new field to the infrastructure service config, serviceType. When a serviceType is invalid, SIP will not begin processing the CR because the Kubernetes API server will reject the SIPCluster resource. The key under which an infrastructure service resides is now treated as an arbitrary value. Signed-off-by: Drew Walters <andrew.walters@att.com> Change-Id: I082dac7eae6893decfca12227caf0ea50bc1fa30
198 lines
8.8 KiB
YAML
198 lines
8.8 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:
|
|
cluster-name:
|
|
description: ClusterName is the name of the cluster to associate machines
|
|
with
|
|
type: string
|
|
infra:
|
|
description: InfraServices is a list of services that are deployed when
|
|
a SIPCluster is provisioned.
|
|
items:
|
|
properties:
|
|
image:
|
|
type: string
|
|
nodeInterfaceId:
|
|
type: string
|
|
nodePort:
|
|
type: integer
|
|
nodelabels:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
optional:
|
|
properties:
|
|
clusterIP:
|
|
type: string
|
|
sshkey:
|
|
type: string
|
|
type: object
|
|
serviceType:
|
|
description: InfraService describes the type of infrastructure
|
|
service that should be deployed when a sub-cluster is provisioned.
|
|
enum:
|
|
- auth
|
|
- jumphost
|
|
- loadbalancer
|
|
type: string
|
|
required:
|
|
- serviceType
|
|
type: object
|
|
type: array
|
|
nodes:
|
|
additionalProperties:
|
|
description: 'NodeSet are the the list of Nodes objects workers, or
|
|
master that definee eexpectations 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
|
|
spreadTopology:
|
|
description: PlaceHolder until we define the real expected Implementation
|
|
Scheduling define constraints the allows the SIP Scheduler to
|
|
identify the required BMH's to allow CAPI to build a cluster
|
|
type: string
|
|
vm-flavor:
|
|
description: VMFlavor is essentially a Flavor label identifying
|
|
the type of Node that meets the construction reqirements
|
|
type: string
|
|
type: object
|
|
description: Nodes are the list of Nodes objects workers, or master
|
|
that definee eexpectations of the Tenant cluster VMRole is either
|
|
Control or Workers VMRole VMRoles `json:"vm-role,omitempty"`
|
|
type: object
|
|
required:
|
|
- infra
|
|
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: []
|