From 32b18550cb4f01c1b2254e8b0ec67c179ea186bc Mon Sep 17 00:00:00 2001 From: Kristian-ZH Date: Thu, 14 Dec 2023 11:31:42 +0200 Subject: [PATCH] Extract Baremetal Operator CRDs into dedicated package --- assets/metal3/metal3-0.3.0.tgz | Bin 30984 -> 32437 bytes .../charts/baremetal-operator/Chart.yaml | 4 + .../baremetal-operator-crds/.helmignore | 23 + .../charts/baremetal-operator-crds/Chart.yaml | 6 + .../customresource-baremetalhosts.yaml | 0 .../customresource-bmceventsubscriptions.yaml | 0 .../customresource-firmwareschemas.yaml | 0 .../customresource-hardwaredata.yaml | 0 .../customresource-hostfirmwaresettings.yaml | 0 .../customresource-preprovisioningimages.yaml | 0 index.yaml | 4 +- .../charts/.helmignore | 23 + .../baremetal-operator-crds/charts/Chart.yaml | 6 + .../customresource-baremetalhosts.yaml | 0 .../customresource-bmceventsubscriptions.yaml | 0 .../customresource-firmwareschemas.yaml | 0 .../customresource-hardwaredata.yaml | 0 .../customresource-hostfirmwaresettings.yaml | 0 .../customresource-preprovisioningimages.yaml | 0 packages/baremetal-operator-crds/package.yaml | 2 + packages/baremetal-operator/charts/Chart.yaml | 4 + .../baremetal-operator-crds/.helmignore | 23 + .../charts/baremetal-operator-crds/Chart.yaml | 6 + .../customresource-baremetalhosts.yaml | 1132 +++++++++++++++++ .../customresource-bmceventsubscriptions.yaml | 85 ++ .../customresource-firmwareschemas.yaml | 90 ++ .../customresource-hardwaredata.yaml | 203 +++ .../customresource-hostfirmwaresettings.yaml | 164 +++ .../customresource-preprovisioningimages.yaml | 183 +++ .../baremetal-operator-crds/dependency.yaml | 1 + 30 files changed, 1957 insertions(+), 2 deletions(-) create mode 100644 charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/.helmignore create mode 100644 charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/Chart.yaml rename charts/metal3/0.3.0/charts/baremetal-operator/{crds => charts/baremetal-operator-crds/templates}/customresource-baremetalhosts.yaml (100%) rename charts/metal3/0.3.0/charts/baremetal-operator/{crds => charts/baremetal-operator-crds/templates}/customresource-bmceventsubscriptions.yaml (100%) rename charts/metal3/0.3.0/charts/baremetal-operator/{crds => charts/baremetal-operator-crds/templates}/customresource-firmwareschemas.yaml (100%) rename charts/metal3/0.3.0/charts/baremetal-operator/{crds => charts/baremetal-operator-crds/templates}/customresource-hardwaredata.yaml (100%) rename charts/metal3/0.3.0/charts/baremetal-operator/{crds => charts/baremetal-operator-crds/templates}/customresource-hostfirmwaresettings.yaml (100%) rename charts/metal3/0.3.0/charts/baremetal-operator/{crds => charts/baremetal-operator-crds/templates}/customresource-preprovisioningimages.yaml (100%) create mode 100644 packages/baremetal-operator-crds/charts/.helmignore create mode 100644 packages/baremetal-operator-crds/charts/Chart.yaml rename packages/{baremetal-operator/charts/crds => baremetal-operator-crds/charts/templates}/customresource-baremetalhosts.yaml (100%) rename packages/{baremetal-operator/charts/crds => baremetal-operator-crds/charts/templates}/customresource-bmceventsubscriptions.yaml (100%) rename packages/{baremetal-operator/charts/crds => baremetal-operator-crds/charts/templates}/customresource-firmwareschemas.yaml (100%) rename packages/{baremetal-operator/charts/crds => baremetal-operator-crds/charts/templates}/customresource-hardwaredata.yaml (100%) rename packages/{baremetal-operator/charts/crds => baremetal-operator-crds/charts/templates}/customresource-hostfirmwaresettings.yaml (100%) rename packages/{baremetal-operator/charts/crds => baremetal-operator-crds/charts/templates}/customresource-preprovisioningimages.yaml (100%) create mode 100644 packages/baremetal-operator-crds/package.yaml create mode 100755 packages/baremetal-operator/charts/charts/baremetal-operator-crds/.helmignore create mode 100755 packages/baremetal-operator/charts/charts/baremetal-operator-crds/Chart.yaml create mode 100755 packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-baremetalhosts.yaml create mode 100755 packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-bmceventsubscriptions.yaml create mode 100755 packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-firmwareschemas.yaml create mode 100755 packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-hardwaredata.yaml create mode 100755 packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-hostfirmwaresettings.yaml create mode 100755 packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-preprovisioningimages.yaml create mode 100644 packages/baremetal-operator/generated-changes/dependencies/baremetal-operator-crds/dependency.yaml diff --git a/assets/metal3/metal3-0.3.0.tgz b/assets/metal3/metal3-0.3.0.tgz index fc5df76ff7526ff7f81a303ff9ada7d520d56dfa..1e0b36d99fa120a492b74018e19d74b5b8bc0299 100644 GIT binary patch literal 32437 zcmV)}KzqL*iwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0POvHcN;hIAPmpn{1jL^du(UaO;R^|IKS+?iex8x$FjAO;_UB9 z@;G2ONMh7%bO1CZ#pC_#&p`p``;8POI~gM9#9}uZC|s&gRjA8?NF3}9j^~(5_YN*n2VDKiuCx{L65(yZ2)MFKGAxu#`$HB<6n^ z-n*~j;Qk;5NAx}6g0gUomb*P1Maj>RJ34fSJ)cA*^hxMZBE~%j;ecW>Mtb8o6U+(x z>9B}!EE(@16ygOLqsmvDL`+c0_}v&yX+Xwh`kn*}1YaOI#}d&{NE`$L;UGY4isYQ2>>fZNAwKcZ zlyP(h5ca62nwm=)iSb}CqjDZkT#qdVUg%8+n9Cc+uLm683>H{O!Uqv&{~{iM2;@gK zFz{Hw_`t5K$3h35xMDf$*+D~h@-8A{grg{+9#+HX6-M~Ek?Idr%mOTN5EJo02S5w` zKiD0EJFpTKo~`slTcRCh2E1aWngknxUMF2J#1U^NffZV zg=$8T46)ODf+n#n_^)yKw_Yiu5PR|hw z(aoHCbLjjO2zmO^4GjV`A&A^YOc1|^%z1EnK1Th158Aky698EwTy#1uenN#B7c`lU?Pg8` zVr%MkHx;20K>u_nStJ9g-ZMh#odZqkCj87C=+?$abyPP2G7#wpG7!zRCs*0P&9olVU-9 z1%9Z;r>4_Pj^Zi+Gp^oTo-;1T=y3G%pl7iZ`#vW^SR%n$ED1+g2 zDJ4ES`TqDEzPBH99M05=m=!xAQyd5K0@_L;E%)Y!!eF!6)_{n2oy@P7Lj}s*i!M~-DGYB7?VzC~e2Nv4SSnaaV>}$HVPnrzP^q=bRy(z=R^cjNu7}S1bIQMI7ziZp=o$1NC5j;Bbtc0eit!c=$#b=h{vHN&_cmBXF{qSZt50y z0>YtR7@Te@^wEGtQZw0z+)^Q3^h2oji8}EtOqUiU^+6o@SVBM0hU!|OrCKS*eHzY! zJJ=@K4>kHfxsE4t~d%Y*UCz%6HP4bgo?+JRhB%D*9 zm_t@d8qP$rF6O|_eTUSP^s=IgK7#|Md2Taj`Wq#A2qfk#4t&740DHtof@zjO&dD9Z zT#p(rF%2}yWZ6?Z!!FoUL`?>C@SX+ng6OGGV?W1=N~ZJQ(*viuLuiGO=Red#e}Z16 zTS!R8@r)b?SO6LH$&`k~@8zUW1)pg`gQ^9UHw^pV;sA#p;c7ESN>~w6opxE;uKxy_ zlkLnxYC)W1PJFb42{B(}>ubzYlW}5D3tg_h5j5siZw38MZ-z=p7kA>f05Ds_$<2POyKcsJamq;mq?`IHfa1N00T9eRO{6 zZt?v~DJA^>Feibc*RG5Ebe;PU$V`JAGu@BB8JT>;Z7coG7LlCp}E#Ah<)n#W>J{BaR{f+wJ{GblXs0svgu3 z1ey>JD?vf91wsEzIB7lDDJ6j~6nl!Sa0iSj73kUIPK$JJFI8P7@hExlx!XIPB2EIL z*ehtnW1++}6h>hN&!|ikQXocSfiM7Xpskx%RV6>Sbec@1eVI(BsZ#sC%X9}KY3C~d zef&-L^-N(*CP6piUg#Op-�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%0AP_dOqa$rI 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 literal 30984 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 diff --git a/charts/metal3/0.3.0/charts/baremetal-operator/Chart.yaml b/charts/metal3/0.3.0/charts/baremetal-operator/Chart.yaml index 09ea3929..f149f141 100644 --- a/charts/metal3/0.3.0/charts/baremetal-operator/Chart.yaml +++ b/charts/metal3/0.3.0/charts/baremetal-operator/Chart.yaml @@ -1,5 +1,9 @@ apiVersion: v2 appVersion: 1.16.0 +dependencies: +- name: baremetal-operator-crds + repository: file://./charts/baremetal-operator-crds + version: 0.1.0 description: A Helm chart for baremetal-operator, used by Metal3 name: baremetal-operator type: application diff --git a/charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/.helmignore b/charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/Chart.yaml b/charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/Chart.yaml new file mode 100644 index 00000000..c101c3f8 --- /dev/null +++ b/charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +appVersion: 0.4.0 +description: Baremetal Operator CRDs +name: baremetal-operator-crds +type: application +version: 0.1.0 diff --git a/charts/metal3/0.3.0/charts/baremetal-operator/crds/customresource-baremetalhosts.yaml b/charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/templates/customresource-baremetalhosts.yaml similarity index 100% rename from charts/metal3/0.3.0/charts/baremetal-operator/crds/customresource-baremetalhosts.yaml rename to charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/templates/customresource-baremetalhosts.yaml diff --git a/charts/metal3/0.3.0/charts/baremetal-operator/crds/customresource-bmceventsubscriptions.yaml b/charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/templates/customresource-bmceventsubscriptions.yaml similarity index 100% rename from charts/metal3/0.3.0/charts/baremetal-operator/crds/customresource-bmceventsubscriptions.yaml rename to charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/templates/customresource-bmceventsubscriptions.yaml diff --git a/charts/metal3/0.3.0/charts/baremetal-operator/crds/customresource-firmwareschemas.yaml b/charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/templates/customresource-firmwareschemas.yaml similarity index 100% rename from charts/metal3/0.3.0/charts/baremetal-operator/crds/customresource-firmwareschemas.yaml rename to charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/templates/customresource-firmwareschemas.yaml diff --git a/charts/metal3/0.3.0/charts/baremetal-operator/crds/customresource-hardwaredata.yaml b/charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/templates/customresource-hardwaredata.yaml similarity index 100% rename from charts/metal3/0.3.0/charts/baremetal-operator/crds/customresource-hardwaredata.yaml rename to charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/templates/customresource-hardwaredata.yaml diff --git a/charts/metal3/0.3.0/charts/baremetal-operator/crds/customresource-hostfirmwaresettings.yaml b/charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/templates/customresource-hostfirmwaresettings.yaml similarity index 100% rename from charts/metal3/0.3.0/charts/baremetal-operator/crds/customresource-hostfirmwaresettings.yaml rename to charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/templates/customresource-hostfirmwaresettings.yaml diff --git a/charts/metal3/0.3.0/charts/baremetal-operator/crds/customresource-preprovisioningimages.yaml b/charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/templates/customresource-preprovisioningimages.yaml similarity index 100% rename from charts/metal3/0.3.0/charts/baremetal-operator/crds/customresource-preprovisioningimages.yaml rename to charts/metal3/0.3.0/charts/baremetal-operator/charts/baremetal-operator-crds/templates/customresource-preprovisioningimages.yaml diff --git a/index.yaml b/index.yaml index 220ec879..184742cc 100755 --- a/index.yaml +++ b/index.yaml @@ -111,7 +111,7 @@ entries: metal3: - apiVersion: v2 appVersion: 1.16.0 - created: "2023-12-11T10:15:22.905621+02:00" + created: "2023-12-15T14:57:10.444671+02:00" dependencies: - alias: metal3-baremetal-operator name: baremetal-operator @@ -131,7 +131,7 @@ entries: repository: file://./charts/media version: 0.3.0 description: A Helm chart that installs all of the dependencies needed for Metal3 - digest: 2a99c77777c5400a07d6b0bf9f5a0588f03817e867cabf1a14f0e9f9d2ad9a86 + digest: 11832762fcae85347ac4496e4a04eefe1ac7cfe18de1d35c7c56fea46694c2c2 icon: https://github.com/cncf/artwork/raw/master/projects/metal3/icon/color/metal3-icon-color.svg name: metal3 type: application diff --git a/packages/baremetal-operator-crds/charts/.helmignore b/packages/baremetal-operator-crds/charts/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/packages/baremetal-operator-crds/charts/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/packages/baremetal-operator-crds/charts/Chart.yaml b/packages/baremetal-operator-crds/charts/Chart.yaml new file mode 100644 index 00000000..c101c3f8 --- /dev/null +++ b/packages/baremetal-operator-crds/charts/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +appVersion: 0.4.0 +description: Baremetal Operator CRDs +name: baremetal-operator-crds +type: application +version: 0.1.0 diff --git a/packages/baremetal-operator/charts/crds/customresource-baremetalhosts.yaml b/packages/baremetal-operator-crds/charts/templates/customresource-baremetalhosts.yaml similarity index 100% rename from packages/baremetal-operator/charts/crds/customresource-baremetalhosts.yaml rename to packages/baremetal-operator-crds/charts/templates/customresource-baremetalhosts.yaml diff --git a/packages/baremetal-operator/charts/crds/customresource-bmceventsubscriptions.yaml b/packages/baremetal-operator-crds/charts/templates/customresource-bmceventsubscriptions.yaml similarity index 100% rename from packages/baremetal-operator/charts/crds/customresource-bmceventsubscriptions.yaml rename to packages/baremetal-operator-crds/charts/templates/customresource-bmceventsubscriptions.yaml diff --git a/packages/baremetal-operator/charts/crds/customresource-firmwareschemas.yaml b/packages/baremetal-operator-crds/charts/templates/customresource-firmwareschemas.yaml similarity index 100% rename from packages/baremetal-operator/charts/crds/customresource-firmwareschemas.yaml rename to packages/baremetal-operator-crds/charts/templates/customresource-firmwareschemas.yaml diff --git a/packages/baremetal-operator/charts/crds/customresource-hardwaredata.yaml b/packages/baremetal-operator-crds/charts/templates/customresource-hardwaredata.yaml similarity index 100% rename from packages/baremetal-operator/charts/crds/customresource-hardwaredata.yaml rename to packages/baremetal-operator-crds/charts/templates/customresource-hardwaredata.yaml diff --git a/packages/baremetal-operator/charts/crds/customresource-hostfirmwaresettings.yaml b/packages/baremetal-operator-crds/charts/templates/customresource-hostfirmwaresettings.yaml similarity index 100% rename from packages/baremetal-operator/charts/crds/customresource-hostfirmwaresettings.yaml rename to packages/baremetal-operator-crds/charts/templates/customresource-hostfirmwaresettings.yaml diff --git a/packages/baremetal-operator/charts/crds/customresource-preprovisioningimages.yaml b/packages/baremetal-operator-crds/charts/templates/customresource-preprovisioningimages.yaml similarity index 100% rename from packages/baremetal-operator/charts/crds/customresource-preprovisioningimages.yaml rename to packages/baremetal-operator-crds/charts/templates/customresource-preprovisioningimages.yaml diff --git a/packages/baremetal-operator-crds/package.yaml b/packages/baremetal-operator-crds/package.yaml new file mode 100644 index 00000000..23845fcd --- /dev/null +++ b/packages/baremetal-operator-crds/package.yaml @@ -0,0 +1,2 @@ +url: local +doNotRelease: true diff --git a/packages/baremetal-operator/charts/Chart.yaml b/packages/baremetal-operator/charts/Chart.yaml index 09ea3929..f149f141 100644 --- a/packages/baremetal-operator/charts/Chart.yaml +++ b/packages/baremetal-operator/charts/Chart.yaml @@ -1,5 +1,9 @@ apiVersion: v2 appVersion: 1.16.0 +dependencies: +- name: baremetal-operator-crds + repository: file://./charts/baremetal-operator-crds + version: 0.1.0 description: A Helm chart for baremetal-operator, used by Metal3 name: baremetal-operator type: application diff --git a/packages/baremetal-operator/charts/charts/baremetal-operator-crds/.helmignore b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/.helmignore new file mode 100755 index 00000000..0e8a0eb3 --- /dev/null +++ b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/packages/baremetal-operator/charts/charts/baremetal-operator-crds/Chart.yaml b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/Chart.yaml new file mode 100755 index 00000000..c101c3f8 --- /dev/null +++ b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +appVersion: 0.4.0 +description: Baremetal Operator CRDs +name: baremetal-operator-crds +type: application +version: 0.1.0 diff --git a/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-baremetalhosts.yaml b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-baremetalhosts.yaml new file mode 100755 index 00000000..c70e82a3 --- /dev/null +++ b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-baremetalhosts.yaml @@ -0,0 +1,1132 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: baremetal-operator-system/baremetal-operator-serving-cert + controller-gen.kubebuilder.io/version: v0.12.1 + labels: + clusterctl.cluster.x-k8s.io: "" + name: baremetalhosts.metal3.io +spec: + group: metal3.io + names: + kind: BareMetalHost + listKind: BareMetalHostList + plural: baremetalhosts + shortNames: + - bmh + - bmhost + singular: baremetalhost + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Operational status + jsonPath: .status.operationalStatus + name: Status + priority: 1 + type: string + - description: Provisioning status + jsonPath: .status.provisioning.state + name: State + type: string + - description: Consumer using this host + jsonPath: .spec.consumerRef.name + name: Consumer + type: string + - description: Address of management controller + jsonPath: .spec.bmc.address + name: BMC + priority: 1 + type: string + - description: The type of hardware detected + jsonPath: .status.hardwareProfile + name: Hardware_Profile + priority: 1 + type: string + - description: Whether the host is online or not + jsonPath: .spec.online + name: Online + type: string + - description: Type of the most recent error + jsonPath: .status.errorType + name: Error + type: string + - description: Time duration since creation of BaremetalHost + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: BareMetalHost is the Schema for the baremetalhosts 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: BareMetalHostSpec defines the desired state of BareMetalHost + properties: + architecture: + description: CPU architecture of the host, e.g. "x86_64" or "aarch64". + If unset, eventually populated by inspection. + type: string + automatedCleaningMode: + default: metadata + description: When set to disabled, automated cleaning will be avoided + during provisioning and deprovisioning. + enum: + - metadata + - disabled + type: string + bmc: + description: How do we connect to the BMC? + properties: + address: + description: Address holds the URL for accessing the controller + on the network. + type: string + credentialsName: + description: The name of the secret containing the BMC credentials + (requires keys "username" and "password"). + type: string + disableCertificateVerification: + description: DisableCertificateVerification disables verification + of server certificates when using HTTPS to connect to the BMC. + This is required when the server certificate is self-signed, + but is insecure because it allows a man-in-the-middle to intercept + the connection. + type: boolean + required: + - address + - credentialsName + type: object + bootMACAddress: + description: Which MAC address will PXE boot? This is optional for + some types, but required for libvirt VMs driven by vbmc. + pattern: '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}' + type: string + bootMode: + description: Select the method of initializing the hardware during + boot. Defaults to UEFI. + enum: + - UEFI + - UEFISecureBoot + - legacy + type: string + consumerRef: + description: ConsumerRef can be used to store information about something + that is using a host. When it is not empty, the host is considered + "in use". + 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 + x-kubernetes-map-type: atomic + customDeploy: + description: A custom deploy procedure. + properties: + method: + description: Custom deploy method name. This name is specific + to the deploy ramdisk used. If you don't have a custom deploy + ramdisk, you shouldn't use CustomDeploy. + type: string + required: + - method + type: object + description: + description: Description is a human-entered text used to help identify + the host + type: string + externallyProvisioned: + description: ExternallyProvisioned means something else is managing + the image running on the host and the operator should only manage + the power status and hardware inventory inspection. If the Image + field is filled in, this field is ignored. + type: boolean + firmware: + description: BIOS configuration for bare metal server + properties: + simultaneousMultithreadingEnabled: + description: 'Allows a single physical processor core to appear + as several logical processors. This supports following options: + true, false.' + enum: + - true + - false + type: boolean + sriovEnabled: + description: 'SR-IOV support enables a hypervisor to create virtual + instances of a PCI-express device, potentially increasing performance. + This supports following options: true, false.' + enum: + - true + - false + type: boolean + virtualizationEnabled: + description: 'Supports the virtualization of platform hardware. + This supports following options: true, false.' + enum: + - true + - false + type: boolean + type: object + hardwareProfile: + description: What is the name of the hardware profile for this host? + It should only be necessary to set this when inspection cannot automatically + determine the profile. + type: string + image: + description: Image holds the details of the image to be provisioned. + properties: + checksum: + description: Checksum is the checksum for the image. + type: string + checksumType: + description: ChecksumType is the checksum algorithm for the image. + e.g md5, sha256, sha512 + enum: + - md5 + - sha256 + - sha512 + type: string + format: + description: DiskFormat contains the format of the image (raw, + qcow2, ...). Needs to be set to raw for raw images streaming. + Note live-iso means an iso referenced by the url will be live-booted + and not deployed to disk, and in this case the checksum options + are not required and if specified will be ignored. + enum: + - raw + - qcow2 + - vdi + - vmdk + - live-iso + type: string + url: + description: URL is a location of an image to deploy. + type: string + required: + - url + type: object + metaData: + description: MetaData holds the reference to the Secret containing + host metadata (e.g. meta_data.json) which is passed to the Config + Drive. + properties: + name: + description: name is unique within a namespace to reference a + secret resource. + type: string + namespace: + description: namespace defines the space within which the secret + name must be unique. + type: string + type: object + x-kubernetes-map-type: atomic + networkData: + description: NetworkData holds the reference to the Secret containing + network configuration (e.g content of network_data.json) which is + passed to the Config Drive. + properties: + name: + description: name is unique within a namespace to reference a + secret resource. + type: string + namespace: + description: namespace defines the space within which the secret + name must be unique. + type: string + type: object + x-kubernetes-map-type: atomic + online: + description: Should the server be online? + type: boolean + preprovisioningNetworkDataName: + description: PreprovisioningNetworkDataName is the name of the Secret + in the local namespace containing network configuration (e.g content + of network_data.json) which is passed to the preprovisioning image, + and to the Config Drive if not overridden by specifying NetworkData. + type: string + raid: + description: RAID configuration for bare metal server + properties: + hardwareRAIDVolumes: + description: The list of logical disks for hardware RAID, if rootDeviceHints + isn't used, first volume is root volume. You can set the value + of this field to `[]` to clear all the hardware RAID configurations. + items: + description: HardwareRAIDVolume defines the desired configuration + of volume in hardware RAID + properties: + controller: + description: The name of the RAID controller to use + type: string + level: + description: 'RAID level for the logical disk. The following + levels are supported: 0;1;2;5;6;1+0;5+0;6+0.' + enum: + - "0" + - "1" + - "2" + - "5" + - "6" + - 1+0 + - 5+0 + - 6+0 + type: string + name: + description: Name of the volume. Should be unique within + the Node. If not specified, volume name will be auto-generated. + maxLength: 64 + type: string + numberOfPhysicalDisks: + description: Integer, number of physical disks to use for + the logical disk. Defaults to minimum number of disks + required for the particular RAID level. + minimum: 1 + type: integer + physicalDisks: + description: Optional list of physical disk names to be + used for the Hardware RAID volumes. The disk names are + interpreted by the Hardware RAID controller, and the format + is hardware specific. + items: + type: string + type: array + rotational: + description: Select disks with only rotational or solid-state + storage + type: boolean + sizeGibibytes: + description: Size (Integer) of the logical disk to be created + in GiB. If unspecified or set be 0, the maximum capacity + of disk will be used for logical disk. + minimum: 0 + type: integer + required: + - level + type: object + nullable: true + type: array + softwareRAIDVolumes: + description: The list of logical disks for software RAID, if rootDeviceHints + isn't used, first volume is root volume. If HardwareRAIDVolumes + is set this item will be invalid. The number of created Software + RAID devices must be 1 or 2. If there is only one Software RAID + device, it has to be a RAID-1. If there are two, the first one + has to be a RAID-1, while the RAID level for the second one + can be 0, 1, or 1+0. As the first RAID device will be the deployment + device, enforcing a RAID-1 reduces the risk of ending up with + a non-booting node in case of a disk failure. Software RAID + will always be deleted. + items: + description: SoftwareRAIDVolume defines the desired configuration + of volume in software RAID + properties: + level: + description: 'RAID level for the logical disk. The following + levels are supported: 0;1;1+0.' + enum: + - "0" + - "1" + - 1+0 + type: string + physicalDisks: + description: A list of device hints, the number of items + should be greater than or equal to 2. + items: + description: RootDeviceHints holds the hints for specifying + the storage location for the root filesystem for the + image. + properties: + deviceName: + description: A Linux device name like "/dev/vda", + or a by-path link to it like "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0". + The hint must match the actual value exactly. + type: string + hctl: + description: A SCSI bus address like 0:0:0:0. The + hint must match the actual value exactly. + type: string + minSizeGigabytes: + description: The minimum size of the device in Gigabytes. + minimum: 0 + type: integer + model: + description: A vendor-specific device identifier. + The hint can be a substring of the actual value. + type: string + rotational: + description: True if the device should use spinning + media, false otherwise. + type: boolean + serialNumber: + description: Device serial number. The hint must match + the actual value exactly. + type: string + vendor: + description: The name of the vendor or manufacturer + of the device. The hint can be a substring of the + actual value. + type: string + wwn: + description: Unique storage identifier. The hint must + match the actual value exactly. + type: string + wwnVendorExtension: + description: Unique vendor storage identifier. The + hint must match the actual value exactly. + type: string + wwnWithExtension: + description: Unique storage identifier with the vendor + extension appended. The hint must match the actual + value exactly. + type: string + type: object + minItems: 2 + type: array + sizeGibibytes: + description: Size (Integer) of the logical disk to be created + in GiB. If unspecified or set be 0, the maximum capacity + of disk will be used for logical disk. + minimum: 0 + type: integer + required: + - level + type: object + maxItems: 2 + nullable: true + type: array + type: object + rootDeviceHints: + description: Provide guidance about how to choose the device for the + image being provisioned. + properties: + deviceName: + description: A Linux device name like "/dev/vda", or a by-path + link to it like "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0". + The hint must match the actual value exactly. + type: string + hctl: + description: A SCSI bus address like 0:0:0:0. The hint must match + the actual value exactly. + type: string + minSizeGigabytes: + description: The minimum size of the device in Gigabytes. + minimum: 0 + type: integer + model: + description: A vendor-specific device identifier. The hint can + be a substring of the actual value. + type: string + rotational: + description: True if the device should use spinning media, false + otherwise. + type: boolean + serialNumber: + description: Device serial number. The hint must match the actual + value exactly. + type: string + vendor: + description: The name of the vendor or manufacturer of the device. + The hint can be a substring of the actual value. + type: string + wwn: + description: Unique storage identifier. The hint must match the + actual value exactly. + type: string + wwnVendorExtension: + description: Unique vendor storage identifier. The hint must match + the actual value exactly. + type: string + wwnWithExtension: + description: Unique storage identifier with the vendor extension + appended. The hint must match the actual value exactly. + type: string + type: object + taints: + description: Taints is the full, authoritative list of taints to apply + to the corresponding Machine. This list will overwrite any modifications + made to the Machine on an ongoing basis. + items: + description: The node this Taint is attached to has the "effect" + on any pod that does not tolerate the Taint. + properties: + effect: + description: Required. The effect of the taint on pods that + do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule + and NoExecute. + type: string + key: + description: Required. The taint key to be applied to a node. + type: string + timeAdded: + description: TimeAdded represents the time at which the taint + was added. It is only written for NoExecute taints. + format: date-time + type: string + value: + description: The taint value corresponding to the taint key. + type: string + required: + - effect + - key + type: object + type: array + userData: + description: UserData holds the reference to the Secret containing + the user data to be passed to the host before it boots. + properties: + name: + description: name is unique within a namespace to reference a + secret resource. + type: string + namespace: + description: namespace defines the space within which the secret + name must be unique. + type: string + type: object + x-kubernetes-map-type: atomic + required: + - online + type: object + status: + description: BareMetalHostStatus defines the observed state of BareMetalHost + properties: + errorCount: + default: 0 + description: ErrorCount records how many times the host has encoutered + an error since the last successful operation + type: integer + errorMessage: + description: the last error message reported by the provisioning subsystem + type: string + errorType: + description: ErrorType indicates the type of failure encountered when + the OperationalStatus is OperationalStatusError + enum: + - provisioned registration error + - registration error + - inspection error + - preparation error + - provisioning error + - power management error + type: string + goodCredentials: + description: the last credentials we were able to validate as working + properties: + credentials: + description: SecretReference represents a Secret Reference. It + has enough information to retrieve secret in any namespace + properties: + name: + description: name is unique within a namespace to reference + a secret resource. + type: string + namespace: + description: namespace defines the space within which the + secret name must be unique. + type: string + type: object + x-kubernetes-map-type: atomic + credentialsVersion: + type: string + type: object + hardware: + description: The hardware discovered to exist on the host. + properties: + cpu: + description: CPU describes one processor on the host. + properties: + arch: + type: string + clockMegahertz: + description: ClockSpeed is a clock speed in MHz + format: double + type: number + count: + type: integer + flags: + items: + type: string + type: array + model: + type: string + type: object + firmware: + description: Firmware describes the firmware on the host. + properties: + bios: + description: The BIOS for this firmware + properties: + date: + description: The release/build date for this BIOS + type: string + vendor: + description: The vendor name for this BIOS + type: string + version: + description: The version of the BIOS + type: string + type: object + type: object + hostname: + type: string + nics: + items: + description: NIC describes one network interface on the host. + properties: + ip: + description: The IP address of the interface. This will + be an IPv4 or IPv6 address if one is present. If both + IPv4 and IPv6 addresses are present in a dual-stack environment, + two nics will be output, one with each IP. + type: string + mac: + description: The device MAC address + pattern: '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}' + type: string + model: + description: The vendor and product IDs of the NIC, e.g. + "0x8086 0x1572" + type: string + name: + description: The name of the network interface, e.g. "en0" + type: string + pxe: + description: Whether the NIC is PXE Bootable + type: boolean + speedGbps: + description: The speed of the device in Gigabits per second + type: integer + vlanId: + description: The untagged VLAN ID + format: int32 + maximum: 4094 + minimum: 0 + type: integer + vlans: + description: The VLANs available + items: + description: VLAN represents the name and ID of a VLAN + properties: + id: + description: VLANID is a 12-bit 802.1Q VLAN identifier + format: int32 + maximum: 4094 + minimum: 0 + type: integer + name: + type: string + type: object + type: array + type: object + type: array + ramMebibytes: + type: integer + storage: + items: + description: Storage describes one storage device (disk, SSD, + etc.) on the host. + properties: + hctl: + description: The SCSI location of the device + type: string + model: + description: Hardware model + type: string + name: + description: The Linux device name of the disk, e.g. "/dev/sda". + Note that this may not be stable across reboots. + type: string + rotational: + description: Whether this disk represents rotational storage. + This field is not recommended for usage, please prefer + using 'Type' field instead, this field will be deprecated + eventually. + type: boolean + serialNumber: + description: The serial number of the device + type: string + sizeBytes: + description: The size of the disk in Bytes + format: int64 + type: integer + type: + description: 'Device type, one of: HDD, SSD, NVME.' + enum: + - HDD + - SSD + - NVME + type: string + vendor: + description: The name of the vendor of the device + type: string + wwn: + description: The WWN of the device + type: string + wwnVendorExtension: + description: The WWN Vendor extension of the device + type: string + wwnWithExtension: + description: The WWN with the extension + type: string + type: object + type: array + systemVendor: + description: HardwareSystemVendor stores details about the whole + hardware system. + properties: + manufacturer: + type: string + productName: + type: string + serialNumber: + type: string + type: object + type: object + hardwareProfile: + description: The name of the profile matching the hardware details. + type: string + lastUpdated: + description: LastUpdated identifies when this status was last observed. + format: date-time + type: string + operationHistory: + description: OperationHistory holds information about operations performed + on this host. + properties: + deprovision: + description: OperationMetric contains metadata about an operation + (inspection, provisioning, etc.) used for tracking metrics. + properties: + end: + format: date-time + nullable: true + type: string + start: + format: date-time + nullable: true + type: string + type: object + inspect: + description: OperationMetric contains metadata about an operation + (inspection, provisioning, etc.) used for tracking metrics. + properties: + end: + format: date-time + nullable: true + type: string + start: + format: date-time + nullable: true + type: string + type: object + provision: + description: OperationMetric contains metadata about an operation + (inspection, provisioning, etc.) used for tracking metrics. + properties: + end: + format: date-time + nullable: true + type: string + start: + format: date-time + nullable: true + type: string + type: object + register: + description: OperationMetric contains metadata about an operation + (inspection, provisioning, etc.) used for tracking metrics. + properties: + end: + format: date-time + nullable: true + type: string + start: + format: date-time + nullable: true + type: string + type: object + type: object + operationalStatus: + description: OperationalStatus holds the status of the host + enum: + - "" + - OK + - discovered + - error + - delayed + - detached + type: string + poweredOn: + description: indicator for whether or not the host is powered on + type: boolean + provisioning: + description: Information tracked by the provisioner. + properties: + ID: + description: The machine's UUID from the underlying provisioning + tool + type: string + bootMode: + description: BootMode indicates the boot mode used to provision + the node + enum: + - UEFI + - UEFISecureBoot + - legacy + type: string + customDeploy: + description: Custom deploy procedure applied to the host. + properties: + method: + description: Custom deploy method name. This name is specific + to the deploy ramdisk used. If you don't have a custom deploy + ramdisk, you shouldn't use CustomDeploy. + type: string + required: + - method + type: object + firmware: + description: The Bios set by the user + properties: + simultaneousMultithreadingEnabled: + description: 'Allows a single physical processor core to appear + as several logical processors. This supports following options: + true, false.' + enum: + - true + - false + type: boolean + sriovEnabled: + description: 'SR-IOV support enables a hypervisor to create + virtual instances of a PCI-express device, potentially increasing + performance. This supports following options: true, false.' + enum: + - true + - false + type: boolean + virtualizationEnabled: + description: 'Supports the virtualization of platform hardware. + This supports following options: true, false.' + enum: + - true + - false + type: boolean + type: object + image: + description: Image holds the details of the last image successfully + provisioned to the host. + properties: + checksum: + description: Checksum is the checksum for the image. + type: string + checksumType: + description: ChecksumType is the checksum algorithm for the + image. e.g md5, sha256, sha512 + enum: + - md5 + - sha256 + - sha512 + type: string + format: + description: DiskFormat contains the format of the image (raw, + qcow2, ...). Needs to be set to raw for raw images streaming. + Note live-iso means an iso referenced by the url will be + live-booted and not deployed to disk, and in this case the + checksum options are not required and if specified will + be ignored. + enum: + - raw + - qcow2 + - vdi + - vmdk + - live-iso + type: string + url: + description: URL is a location of an image to deploy. + type: string + required: + - url + type: object + raid: + description: The Raid set by the user + properties: + hardwareRAIDVolumes: + description: The list of logical disks for hardware RAID, + if rootDeviceHints isn't used, first volume is root volume. + You can set the value of this field to `[]` to clear all + the hardware RAID configurations. + items: + description: HardwareRAIDVolume defines the desired configuration + of volume in hardware RAID + properties: + controller: + description: The name of the RAID controller to use + type: string + level: + description: 'RAID level for the logical disk. The following + levels are supported: 0;1;2;5;6;1+0;5+0;6+0.' + enum: + - "0" + - "1" + - "2" + - "5" + - "6" + - 1+0 + - 5+0 + - 6+0 + type: string + name: + description: Name of the volume. Should be unique within + the Node. If not specified, volume name will be auto-generated. + maxLength: 64 + type: string + numberOfPhysicalDisks: + description: Integer, number of physical disks to use + for the logical disk. Defaults to minimum number of + disks required for the particular RAID level. + minimum: 1 + type: integer + physicalDisks: + description: Optional list of physical disk names to + be used for the Hardware RAID volumes. The disk names + are interpreted by the Hardware RAID controller, and + the format is hardware specific. + items: + type: string + type: array + rotational: + description: Select disks with only rotational or solid-state + storage + type: boolean + sizeGibibytes: + description: Size (Integer) of the logical disk to be + created in GiB. If unspecified or set be 0, the maximum + capacity of disk will be used for logical disk. + minimum: 0 + type: integer + required: + - level + type: object + nullable: true + type: array + softwareRAIDVolumes: + description: The list of logical disks for software RAID, + if rootDeviceHints isn't used, first volume is root volume. + If HardwareRAIDVolumes is set this item will be invalid. + The number of created Software RAID devices must be 1 or + 2. If there is only one Software RAID device, it has to + be a RAID-1. If there are two, the first one has to be a + RAID-1, while the RAID level for the second one can be 0, + 1, or 1+0. As the first RAID device will be the deployment + device, enforcing a RAID-1 reduces the risk of ending up + with a non-booting node in case of a disk failure. Software + RAID will always be deleted. + items: + description: SoftwareRAIDVolume defines the desired configuration + of volume in software RAID + properties: + level: + description: 'RAID level for the logical disk. The following + levels are supported: 0;1;1+0.' + enum: + - "0" + - "1" + - 1+0 + type: string + physicalDisks: + description: A list of device hints, the number of items + should be greater than or equal to 2. + items: + description: RootDeviceHints holds the hints for specifying + the storage location for the root filesystem for + the image. + properties: + deviceName: + description: A Linux device name like "/dev/vda", + or a by-path link to it like "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0". + The hint must match the actual value exactly. + type: string + hctl: + description: A SCSI bus address like 0:0:0:0. + The hint must match the actual value exactly. + type: string + minSizeGigabytes: + description: The minimum size of the device in + Gigabytes. + minimum: 0 + type: integer + model: + description: A vendor-specific device identifier. + The hint can be a substring of the actual value. + type: string + rotational: + description: True if the device should use spinning + media, false otherwise. + type: boolean + serialNumber: + description: Device serial number. The hint must + match the actual value exactly. + type: string + vendor: + description: The name of the vendor or manufacturer + of the device. The hint can be a substring of + the actual value. + type: string + wwn: + description: Unique storage identifier. The hint + must match the actual value exactly. + type: string + wwnVendorExtension: + description: Unique vendor storage identifier. + The hint must match the actual value exactly. + type: string + wwnWithExtension: + description: Unique storage identifier with the + vendor extension appended. The hint must match + the actual value exactly. + type: string + type: object + minItems: 2 + type: array + sizeGibibytes: + description: Size (Integer) of the logical disk to be + created in GiB. If unspecified or set be 0, the maximum + capacity of disk will be used for logical disk. + minimum: 0 + type: integer + required: + - level + type: object + maxItems: 2 + nullable: true + type: array + type: object + rootDeviceHints: + description: The RootDevicehints set by the user + properties: + deviceName: + description: A Linux device name like "/dev/vda", or a by-path + link to it like "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0". + The hint must match the actual value exactly. + type: string + hctl: + description: A SCSI bus address like 0:0:0:0. The hint must + match the actual value exactly. + type: string + minSizeGigabytes: + description: The minimum size of the device in Gigabytes. + minimum: 0 + type: integer + model: + description: A vendor-specific device identifier. The hint + can be a substring of the actual value. + type: string + rotational: + description: True if the device should use spinning media, + false otherwise. + type: boolean + serialNumber: + description: Device serial number. The hint must match the + actual value exactly. + type: string + vendor: + description: The name of the vendor or manufacturer of the + device. The hint can be a substring of the actual value. + type: string + wwn: + description: Unique storage identifier. The hint must match + the actual value exactly. + type: string + wwnVendorExtension: + description: Unique vendor storage identifier. The hint must + match the actual value exactly. + type: string + wwnWithExtension: + description: Unique storage identifier with the vendor extension + appended. The hint must match the actual value exactly. + type: string + type: object + state: + description: An indiciator for what the provisioner is doing with + the host. + type: string + required: + - ID + - state + type: object + triedCredentials: + description: the last credentials we sent to the provisioning backend + properties: + credentials: + description: SecretReference represents a Secret Reference. It + has enough information to retrieve secret in any namespace + properties: + name: + description: name is unique within a namespace to reference + a secret resource. + type: string + namespace: + description: namespace defines the space within which the + secret name must be unique. + type: string + type: object + x-kubernetes-map-type: atomic + credentialsVersion: + type: string + type: object + required: + - errorCount + - errorMessage + - hardwareProfile + - operationalStatus + - poweredOn + - provisioning + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-bmceventsubscriptions.yaml b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-bmceventsubscriptions.yaml new file mode 100755 index 00000000..9aed81fa --- /dev/null +++ b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-bmceventsubscriptions.yaml @@ -0,0 +1,85 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.12.1 + labels: + clusterctl.cluster.x-k8s.io: "" + name: bmceventsubscriptions.metal3.io +spec: + group: metal3.io + names: + kind: BMCEventSubscription + listKind: BMCEventSubscriptionList + plural: bmceventsubscriptions + shortNames: + - bes + - bmcevent + singular: bmceventsubscription + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: The most recent error message + jsonPath: .status.error + name: Error + type: string + - description: Time duration since creation of BMCEventSubscription + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: BMCEventSubscription is the Schema for the fast eventing 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: + properties: + context: + description: Arbitrary user-provided context for the event + type: string + destination: + description: A webhook URL to send events to + type: string + hostName: + description: A reference to a BareMetalHost + type: string + httpHeadersRef: + description: A secret containing HTTP headers which should be passed + along to the Destination when making a request + properties: + name: + description: name is unique within a namespace to reference a + secret resource. + type: string + namespace: + description: namespace defines the space within which the secret + name must be unique. + type: string + type: object + x-kubernetes-map-type: atomic + type: object + status: + properties: + error: + type: string + subscriptionID: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-firmwareschemas.yaml b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-firmwareschemas.yaml new file mode 100755 index 00000000..30da8204 --- /dev/null +++ b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-firmwareschemas.yaml @@ -0,0 +1,90 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.12.1 + labels: + clusterctl.cluster.x-k8s.io: "" + name: firmwareschemas.metal3.io +spec: + group: metal3.io + names: + kind: FirmwareSchema + listKind: FirmwareSchemaList + plural: firmwareschemas + singular: firmwareschema + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: FirmwareSchema is the Schema for the firmwareschemas 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: FirmwareSchemaSpec defines the desired state of FirmwareSchema + properties: + hardwareModel: + description: The hardware model associated with this schema + type: string + hardwareVendor: + description: The hardware vendor associated with this schema + type: string + schema: + additionalProperties: + description: Additional data describing the firmware setting + properties: + allowable_values: + description: The allowable value for an Enumeration type setting. + items: + type: string + type: array + attribute_type: + description: The type of setting. + enum: + - Enumeration + - String + - Integer + - Boolean + - Password + type: string + lower_bound: + description: The lowest value for an Integer type setting. + type: integer + max_length: + description: Maximum length for a String type setting. + type: integer + min_length: + description: Minimum length for a String type setting. + type: integer + read_only: + description: Whether or not this setting is read only. + type: boolean + unique: + description: Whether or not this setting's value is unique to + this node, e.g. a serial number. + type: boolean + upper_bound: + description: The highest value for an Integer type setting. + type: integer + type: object + description: Map of firmware name to schema + type: object + required: + - schema + type: object + type: object + served: true + storage: true diff --git a/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-hardwaredata.yaml b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-hardwaredata.yaml new file mode 100755 index 00000000..5887da88 --- /dev/null +++ b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-hardwaredata.yaml @@ -0,0 +1,203 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.12.1 + labels: + clusterctl.cluster.x-k8s.io: "" + name: hardwaredata.metal3.io +spec: + group: metal3.io + names: + kind: HardwareData + listKind: HardwareDataList + plural: hardwaredata + shortNames: + - hd + singular: hardwaredata + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Time duration since creation of HardwareData + jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: HardwareData is the Schema for the hardwaredata 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: HardwareDataSpec defines the desired state of HardwareData + properties: + hardware: + description: The hardware discovered on the host during its inspection. + properties: + cpu: + description: CPU describes one processor on the host. + properties: + arch: + type: string + clockMegahertz: + description: ClockSpeed is a clock speed in MHz + format: double + type: number + count: + type: integer + flags: + items: + type: string + type: array + model: + type: string + type: object + firmware: + description: Firmware describes the firmware on the host. + properties: + bios: + description: The BIOS for this firmware + properties: + date: + description: The release/build date for this BIOS + type: string + vendor: + description: The vendor name for this BIOS + type: string + version: + description: The version of the BIOS + type: string + type: object + type: object + hostname: + type: string + nics: + items: + description: NIC describes one network interface on the host. + properties: + ip: + description: The IP address of the interface. This will + be an IPv4 or IPv6 address if one is present. If both + IPv4 and IPv6 addresses are present in a dual-stack environment, + two nics will be output, one with each IP. + type: string + mac: + description: The device MAC address + pattern: '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}' + type: string + model: + description: The vendor and product IDs of the NIC, e.g. + "0x8086 0x1572" + type: string + name: + description: The name of the network interface, e.g. "en0" + type: string + pxe: + description: Whether the NIC is PXE Bootable + type: boolean + speedGbps: + description: The speed of the device in Gigabits per second + type: integer + vlanId: + description: The untagged VLAN ID + format: int32 + maximum: 4094 + minimum: 0 + type: integer + vlans: + description: The VLANs available + items: + description: VLAN represents the name and ID of a VLAN + properties: + id: + description: VLANID is a 12-bit 802.1Q VLAN identifier + format: int32 + maximum: 4094 + minimum: 0 + type: integer + name: + type: string + type: object + type: array + type: object + type: array + ramMebibytes: + type: integer + storage: + items: + description: Storage describes one storage device (disk, SSD, + etc.) on the host. + properties: + hctl: + description: The SCSI location of the device + type: string + model: + description: Hardware model + type: string + name: + description: The Linux device name of the disk, e.g. "/dev/sda". + Note that this may not be stable across reboots. + type: string + rotational: + description: Whether this disk represents rotational storage. + This field is not recommended for usage, please prefer + using 'Type' field instead, this field will be deprecated + eventually. + type: boolean + serialNumber: + description: The serial number of the device + type: string + sizeBytes: + description: The size of the disk in Bytes + format: int64 + type: integer + type: + description: 'Device type, one of: HDD, SSD, NVME.' + enum: + - HDD + - SSD + - NVME + type: string + vendor: + description: The name of the vendor of the device + type: string + wwn: + description: The WWN of the device + type: string + wwnVendorExtension: + description: The WWN Vendor extension of the device + type: string + wwnWithExtension: + description: The WWN with the extension + type: string + type: object + type: array + systemVendor: + description: HardwareSystemVendor stores details about the whole + hardware system. + properties: + manufacturer: + type: string + productName: + type: string + serialNumber: + type: string + type: object + type: object + type: object + type: object + served: true + storage: true + subresources: {} diff --git a/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-hostfirmwaresettings.yaml b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-hostfirmwaresettings.yaml new file mode 100755 index 00000000..68cd974a --- /dev/null +++ b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-hostfirmwaresettings.yaml @@ -0,0 +1,164 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.12.1 + labels: + clusterctl.cluster.x-k8s.io: "" + name: hostfirmwaresettings.metal3.io +spec: + group: metal3.io + names: + kind: HostFirmwareSettings + listKind: HostFirmwareSettingsList + plural: hostfirmwaresettings + shortNames: + - hfs + singular: hostfirmwaresettings + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: HostFirmwareSettings is the Schema for the hostfirmwaresettings + 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: HostFirmwareSettingsSpec defines the desired state of HostFirmwareSettings + properties: + settings: + additionalProperties: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + description: Settings are the desired firmware settings stored as + name/value pairs. + type: object + required: + - settings + type: object + status: + description: HostFirmwareSettingsStatus defines the observed state of + HostFirmwareSettings + properties: + conditions: + description: Track whether settings stored in the spec are valid based + on the schema + 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, + \n 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 + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + lastUpdated: + description: Time that the status was last updated + format: date-time + type: string + schema: + description: FirmwareSchema is a reference to the Schema used to describe + each FirmwareSetting. By default, this will be a Schema in the same + Namespace as the settings but it can be overwritten in the Spec + properties: + name: + description: '`name` is the reference to the schema.' + type: string + namespace: + description: '`namespace` is the namespace of the where the schema + is stored.' + type: string + required: + - name + - namespace + type: object + settings: + additionalProperties: + type: string + description: Settings are the firmware settings stored as name/value + pairs + type: object + required: + - settings + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-preprovisioningimages.yaml b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-preprovisioningimages.yaml new file mode 100755 index 00000000..e722883c --- /dev/null +++ b/packages/baremetal-operator/charts/charts/baremetal-operator-crds/templates/customresource-preprovisioningimages.yaml @@ -0,0 +1,183 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.12.1 + labels: + clusterctl.cluster.x-k8s.io: "" + name: preprovisioningimages.metal3.io +spec: + group: metal3.io + names: + kind: PreprovisioningImage + listKind: PreprovisioningImageList + plural: preprovisioningimages + shortNames: + - ppimg + singular: preprovisioningimage + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Whether the image is ready + jsonPath: .status.conditions[?(@.type=='Ready')].status + name: Ready + type: string + - description: The reason for the image readiness status + jsonPath: .status.conditions[?(@.type=='Ready')].reason + name: Reason + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: PreprovisioningImage is the Schema for the preprovisioningimages + 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: PreprovisioningImageSpec defines the desired state of PreprovisioningImage + properties: + acceptFormats: + description: acceptFormats is a list of acceptable image formats. + items: + description: ImageFormat enumerates the allowed image formats + enum: + - iso + - initrd + type: string + type: array + architecture: + description: architecture is the processor architecture for which + to build the image. + type: string + networkDataName: + description: networkDataName is the name of a Secret in the local + namespace that contains network data to build in to the image. + type: string + type: object + status: + description: PreprovisioningImageStatus defines the observed state of + PreprovisioningImage + properties: + architecture: + description: architecture is the processor architecture for which + the image is built + type: string + conditions: + description: conditions describe the state of the built image + 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, + \n 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 + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + extraKernelParams: + description: extraKernelParams is a string with extra parameters to + pass to the kernel when booting the image over network. Only makes + sense for initrd images. + type: string + format: + description: 'format is the type of image that is available at the + download url: either iso or initrd.' + enum: + - iso + - initrd + type: string + imageUrl: + description: imageUrl is the URL from which the built image can be + downloaded. + type: string + kernelUrl: + description: kernelUrl is the URL from which the kernel of the image + can be downloaded. Only makes sense for initrd images. + type: string + networkData: + description: networkData is a reference to the version of the Secret + containing the network data used to build the image. + properties: + name: + type: string + version: + type: string + type: object + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/packages/baremetal-operator/generated-changes/dependencies/baremetal-operator-crds/dependency.yaml b/packages/baremetal-operator/generated-changes/dependencies/baremetal-operator-crds/dependency.yaml new file mode 100644 index 00000000..a7408e91 --- /dev/null +++ b/packages/baremetal-operator/generated-changes/dependencies/baremetal-operator-crds/dependency.yaml @@ -0,0 +1 @@ +url: packages/baremetal-operator-crds