Skip to content

Commit

Permalink
Add HostUpdatePolicy API
Browse files Browse the repository at this point in the history
Signed-off-by: Jacob Anders <janders@redhat.com>
  • Loading branch information
rhjanders committed Sep 17, 2024
1 parent 8ce35ed commit 706ed94
Show file tree
Hide file tree
Showing 8 changed files with 328 additions and 1 deletion.
8 changes: 8 additions & 0 deletions PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,12 @@ resources:
kind: DataImage
path: github.com/metal3-io/baremetal-operator/apis/metal3.io/v1alpha1
version: v1alpha1
- api:
crdVersion: v1
namespaced: true
domain: metal3.io
group: metal3.io
kind: HostUpdatePolicy
path: github.com/metal3-io/baremetal-operator/apis/metal3.io/v1alpha1
version: v1alpha1
version: "3"
67 changes: 67 additions & 0 deletions apis/metal3.io/v1alpha1/hostupdatepolicy_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/*
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"
)

// HostUpdatePolicy enumerates the allowed host update policies.
type UpdatePolicy string

const (
HostUpdatePolicyOnPreparing UpdatePolicy = "onPreparing"
HostUpdatePolicyOnReboot UpdatePolicy = "onReboot"
)

// HostUpdatePolicySpec defines the desired state of HostUpdatePolicy.
type HostUpdatePolicySpec struct {
// Defines policy for changing firmware settings
// +optional
// +kubebuilder:validation:Enum="onPreparing";"onReboot"
FirmwareSettings UpdatePolicy `json:"firmwareSettings,omitempty"`

// Defines policy for updating firmware
// +optional
// +kubebuilder:validation:Enum="onPreparing";"onReboot"
FirmwareUpdates UpdatePolicy `json:"firmwareUpdates,omitempty"`
}

// HostUpdatePolicyStatus defines the observed state of HostUpdatePolicy.
type HostUpdatePolicyStatus struct{}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

// HostUpdatePolicy is the Schema for the hostupdatepolicy API.
type HostUpdatePolicy struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec HostUpdatePolicySpec `json:"spec,omitempty"`
Status HostUpdatePolicyStatus `json:"status,omitempty"`
}

// +kubebuilder:object:root=true

// HostUpdatePolicyList contains a list of HostUpdatePolicy.
type HostUpdatePolicyList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []HostUpdatePolicy `json:"items"`
}

func init() {
SchemeBuilder.Register(&HostUpdatePolicy{}, &HostUpdatePolicyList{})
}
89 changes: 89 additions & 0 deletions apis/metal3.io/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

55 changes: 55 additions & 0 deletions config/base/crds/bases/metal3.io_hostupdatepolicies.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.12.1
name: hostupdatepolicies.metal3.io
spec:
group: metal3.io
names:
kind: HostUpdatePolicy
listKind: HostUpdatePolicyList
plural: hostupdatepolicies
singular: hostupdatepolicy
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: HostUpdatePolicy is the Schema for the hostupdatepolicy 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: HostUpdatePolicySpec defines the desired state of HostUpdatePolicy.
properties:
firmwareSettings:
description: Defines policy for changing firmware settings
enum:
- onPreparing
- onReboot
type: string
firmwareUpdates:
description: Defines policy for updating firmware
enum:
- onPreparing
- onReboot
type: string
type: object
status:
description: HostUpdatePolicyStatus defines the observed state of HostUpdatePolicy.
type: object
type: object
served: true
storage: true
1 change: 1 addition & 0 deletions config/base/crds/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ resources:
- bases/metal3.io_bmceventsubscriptions.yaml
- bases/metal3.io_hardwaredata.yaml
- bases/metal3.io_dataimages.yaml
- bases/metal3.io_hostupdatepolicies.yaml
#+kubebuilder:scaffold:crdkustomizeresource

patches:
Expand Down
8 changes: 8 additions & 0 deletions config/base/rbac/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,14 @@ rules:
- get
- patch
- update
- apiGroups:
- metal3.io
resources:
- hostupdatepolicies
verbs:
- get
- list
- watch
- apiGroups:
- metal3.io
resources:
Expand Down
63 changes: 63 additions & 0 deletions config/render/capm3.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1967,6 +1967,61 @@ spec:
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.12.1
name: hostupdatepolicies.metal3.io
spec:
group: metal3.io
names:
kind: HostUpdatePolicy
listKind: HostUpdatePolicyList
plural: hostupdatepolicies
singular: hostupdatepolicy
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: HostUpdatePolicy is the Schema for the hostupdatepolicy 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: HostUpdatePolicySpec defines the desired state of HostUpdatePolicy.
properties:
firmwareSettings:
description: Defines policy for changing firmware settings
enum:
- onPreparing
- onReboot
type: string
firmwareUpdates:
description: Defines policy for updating firmware
enum:
- onPreparing
- onReboot
type: string
type: object
status:
description: HostUpdatePolicyStatus defines the observed state of HostUpdatePolicy.
type: object
type: object
served: true
storage: true
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.12.1
Expand Down Expand Up @@ -2379,6 +2434,14 @@ rules:
- get
- patch
- update
- apiGroups:
- metal3.io
resources:
- hostupdatepolicies
verbs:
- get
- list
- watch
- apiGroups:
- metal3.io
resources:
Expand Down
Loading

0 comments on commit 706ed94

Please sign in to comment.