diff --git a/api/v1alpha1/metalstackmachinetemplate_types.go b/api/v1alpha1/metalstackmachinetemplate_types.go new file mode 100644 index 0000000..ee86873 --- /dev/null +++ b/api/v1alpha1/metalstackmachinetemplate_types.go @@ -0,0 +1,59 @@ +/* +Copyright 2024. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! +// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. + +// MetalStackMachineTemplateSpec defines the desired state of MetalStackMachineTemplateSpec. +type MetalStackMachineTemplateSpec struct { + Template MetalStackMachine `json:"template"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:resource:path=inframachinetemplates,scope=Namespaced,categories=cluster-api,shortName=imt +// +kubebuilder:storageversion + +// MetalStackMachineTemplate is the Schema for the inframachinetemplates API. +type MetalStackMachineTemplate struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec MetalStackMachineTemplateSpec `json:"spec,omitempty"` +} + +// +kubebuilder:object:root=true + +// MetalStackMachineTemplateList contains a list of MetalStackMachineTemplate. +type MetalStackMachineTemplateList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []MetalStackMachineTemplate `json:"items"` +} + +func init() { + SchemeBuilder.Register(&MetalStackMachineTemplate{}, &MetalStackMachineTemplateList{}) +} + +// MetalStackMachineTemplateResource describes the data needed to create a metal-stack machine from a template. +type MetalStackMachineTemplateResource struct { + Spec MetalStackMachineSpec `json:"spec"` +} diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index 89eaa1a..069485b 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -228,3 +228,93 @@ func (in *MetalStackMachineStatus) DeepCopy() *MetalStackMachineStatus { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetalStackMachineTemplate) DeepCopyInto(out *MetalStackMachineTemplate) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetalStackMachineTemplate. +func (in *MetalStackMachineTemplate) DeepCopy() *MetalStackMachineTemplate { + if in == nil { + return nil + } + out := new(MetalStackMachineTemplate) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MetalStackMachineTemplate) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetalStackMachineTemplateList) DeepCopyInto(out *MetalStackMachineTemplateList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]MetalStackMachineTemplate, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetalStackMachineTemplateList. +func (in *MetalStackMachineTemplateList) DeepCopy() *MetalStackMachineTemplateList { + if in == nil { + return nil + } + out := new(MetalStackMachineTemplateList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MetalStackMachineTemplateList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetalStackMachineTemplateResource) DeepCopyInto(out *MetalStackMachineTemplateResource) { + *out = *in + out.Spec = in.Spec +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetalStackMachineTemplateResource. +func (in *MetalStackMachineTemplateResource) DeepCopy() *MetalStackMachineTemplateResource { + if in == nil { + return nil + } + out := new(MetalStackMachineTemplateResource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetalStackMachineTemplateSpec) DeepCopyInto(out *MetalStackMachineTemplateSpec) { + *out = *in + in.Template.DeepCopyInto(&out.Template) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetalStackMachineTemplateSpec. +func (in *MetalStackMachineTemplateSpec) DeepCopy() *MetalStackMachineTemplateSpec { + if in == nil { + return nil + } + out := new(MetalStackMachineTemplateSpec) + in.DeepCopyInto(out) + return out +} diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_inframachinetemplates.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_inframachinetemplates.yaml new file mode 100644 index 0000000..f985ff2 --- /dev/null +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_inframachinetemplates.yaml @@ -0,0 +1,94 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.16.4 + name: inframachinetemplates.infrastructure.cluster.x-k8s.io +spec: + group: infrastructure.cluster.x-k8s.io + names: + categories: + - cluster-api + kind: MetalStackMachineTemplate + listKind: MetalStackMachineTemplateList + plural: inframachinetemplates + shortNames: + - imt + singular: metalstackmachinetemplate + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: MetalStackMachineTemplate is the Schema for the inframachinetemplates + 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: MetalStackMachineTemplateSpec defines the desired state of + MetalStackMachineTemplateSpec. + properties: + template: + description: MetalStackMachine is the Schema for the metalstackmachines + 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: MetalStackMachineSpec defines the desired state of + MetalStackMachine. + properties: + image: + description: Image is the operating system to deploy on the + machine + type: string + size: + description: Size is the size of the machine + type: string + required: + - image + - size + type: object + status: + description: MetalStackMachineStatus defines the observed state + of MetalStackMachine. + type: object + type: object + required: + - template + type: object + type: object + served: true + storage: true diff --git a/config/rbac/capi.yaml b/config/rbac/capi.yaml index 89148c1..e143a76 100644 --- a/config/rbac/capi.yaml +++ b/config/rbac/capi.yaml @@ -2,7 +2,7 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: - name: capi-metal-stack-clusters + name: capi-metal-stack labels: cluster.x-k8s.io/aggregate-to-manager: "true" rules: @@ -10,6 +10,7 @@ rules: - infrastructure.cluster.x-k8s.io resources: - metalstackclusters + - metalstackmachines verbs: - create - delete