diff --git a/Makefile b/Makefile index 74cd2ff..922b0b6 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,7 @@ ADAPTER_REPOSITORY ?= ci/hyperfleet-adapter API_IMAGE_TAG ?= latest SENTINEL_IMAGE_TAG ?= latest ADAPTER_IMAGE_TAG ?= latest +SENTINEL_EXTRA_ARGS ?= DRY_RUN ?= AUTO_APPROVE ?= # Derived flags from boolean variables (only true/1 are treated as truthy) @@ -183,7 +184,8 @@ install-sentinel-clusters: check-helm check-kubectl check-namespace ## Install S $(if $(REGISTRY),--set hyperfleet-sentinel.image.registry=$(REGISTRY)) \ $(if $(SENTINEL_REPOSITORY),--set hyperfleet-sentinel.image.repository=$(SENTINEL_REPOSITORY)) \ --set hyperfleet-sentinel.image.tag=$(SENTINEL_IMAGE_TAG) \ - $(if $(wildcard $(GENERATED_DIR)/sentinel-clusters.yaml),--values $(GENERATED_DIR)/sentinel-clusters.yaml) + $(if $(wildcard $(GENERATED_DIR)/sentinel-clusters.yaml),--values $(GENERATED_DIR)/sentinel-clusters.yaml) \ + $(SENTINEL_EXTRA_ARGS) .PHONY: install-sentinel-nodepools install-sentinel-nodepools: check-helm check-kubectl check-namespace ## Install Sentinel for nodepools @@ -268,6 +270,34 @@ install-all: install-terraform get-credentials tf-helm-values install-maestro cr install-all-rabbitmq: BROKER_TYPE = rabbitmq install-all-rabbitmq: install-rabbitmq tf-helm-values install-hyperfleet install-maestro create-maestro-consumer ## Full RabbitMQ install (rabbitmq + hyperfleet + maestro, no terraform) +# ────────────────────────────────────────────── +# OCI/OKE deployment targets +# ────────────────────────────────────────────── + +.PHONY: install-hyperfleet-oci +install-hyperfleet-oci: install-api install-sentinel-clusters install-adapter1 ## Install API + sentinel + adapter1 for OCI + +.PHONY: install-all-oci +install-all-oci: ## Full OCI/OKE install (rabbitmq + api + sentinel + adapter1) +install-all-oci: BROKER_TYPE = rabbitmq +install-all-oci: REGISTRY = quay.io +install-all-oci: API_REPOSITORY = openshift-hyperfleet/hyperfleet-api +install-all-oci: SENTINEL_REPOSITORY = openshift-hyperfleet/hyperfleet-sentinel +install-all-oci: ADAPTER_REPOSITORY = openshift-hyperfleet/hyperfleet-adapter +install-all-oci: API_IMAGE_TAG = v0.2.0 +install-all-oci: SENTINEL_IMAGE_TAG = v0.2.0 +install-all-oci: ADAPTER_IMAGE_TAG = v0.2.0 +install-all-oci: SENTINEL_CHART_REF = v0.2.0 +install-all-oci: SENTINEL_EXTRA_ARGS = --values $(HELM_DIR)/sentinel-clusters/values-oci.yaml +install-all-oci: install-rabbitmq tf-helm-values install-hyperfleet-oci + +.PHONY: uninstall-all-oci +uninstall-all-oci: ## Uninstall all OCI components + -helm uninstall $(NAMESPACE)-adapter1 --namespace $(NAMESPACE) --kubeconfig $(KUBECONFIG) + -helm uninstall $(NAMESPACE)-sentinel-clusters --namespace $(NAMESPACE) --kubeconfig $(KUBECONFIG) + -helm uninstall $(NAMESPACE)-api --namespace $(NAMESPACE) --kubeconfig $(KUBECONFIG) + $(MAKE) uninstall-rabbitmq + # ────────────────────────────────────────────── # CI validation targets # ────────────────────────────────────────────── diff --git a/helm/adapter-hypershift-nodepool/Chart.yaml b/helm/adapter-hypershift-nodepool/Chart.yaml new file mode 100644 index 0000000..018acec --- /dev/null +++ b/helm/adapter-hypershift-nodepool/Chart.yaml @@ -0,0 +1,11 @@ +apiVersion: v2 +name: adapter-hypershift-nodepool +description: HyperShift NodePool adapter - creates NodePool resources on a remote management cluster +type: application +version: 0.1.0 +appVersion: "0.0.0-dev" + +dependencies: + - name: hyperfleet-adapter + version: "2.0.0" + repository: "git+https://github.com/openshift-hyperfleet/hyperfleet-adapter@charts?ref=main" diff --git a/helm/adapter-hypershift-nodepool/adapter-config.yaml b/helm/adapter-hypershift-nodepool/adapter-config.yaml new file mode 100644 index 0000000..1515786 --- /dev/null +++ b/helm/adapter-hypershift-nodepool/adapter-config.yaml @@ -0,0 +1,26 @@ +# HyperShift NodePool adapter deployment configuration +# Creates NodePool resources on a remote HyperShift management cluster +adapter: + name: adapter-hypershift-nodepool + version: "0.2.0" + +debug_config: true +log: + level: debug + +clients: + hyperfleet_api: + base_url: http://hyperfleet-api:8000 + version: v1 + timeout: 10s + retry_attempts: 3 + retry_backoff: exponential + + broker: + subscription_id: "adapter-hypershift-nodepool" + topic: "hyperfleet-nodepools" + + kubernetes: + api_version: "v1" + # Use the mounted kubeconfig to target the remote HyperShift management cluster + kube_config_path: /etc/hypershift/kubeconfig diff --git a/helm/adapter-hypershift-nodepool/adapter-task-config.yaml b/helm/adapter-hypershift-nodepool/adapter-task-config.yaml new file mode 100644 index 0000000..a67812c --- /dev/null +++ b/helm/adapter-hypershift-nodepool/adapter-task-config.yaml @@ -0,0 +1,214 @@ +# HyperShift NodePool adapter task configuration +# Creates a NodePool resource on the remote management cluster +params: + + - name: "nodepoolId" + source: "event.id" + type: "string" + required: true + + - name: "clusterId" + source: "event.owner_references.id" + type: "string" + required: true + + - name: "generation" + source: "event.generation" + type: "int" + required: true + + - name: "namespace" + source: "env.CLUSTERS_NAMESPACE" + type: "string" + + - name: "ociAD" + source: "env.OCI_AD" + type: "string" + + - name: "ociSubnetId" + source: "env.OCI_SUBNET_ID" + type: "string" + + - name: "ociShape" + source: "env.OCI_SHAPE" + type: "string" + + - name: "ociOcpus" + source: "env.OCI_OCPUS" + type: "string" + + - name: "ociMemoryGBs" + source: "env.OCI_MEMORY_GBS" + type: "string" + + - name: "ociBootVolumeGB" + source: "env.OCI_BOOT_VOLUME_GB" + type: "string" + +# Preconditions: look up nodepool and parent cluster from the API +preconditions: + + # Fetch nodepool details (name, spec, status) + - name: "nodepoolDetails" + api_call: + method: "GET" + url: "/clusters/{{ .clusterId }}/nodepools/{{ .nodepoolId }}" + timeout: 10s + retry_attempts: 3 + retry_backoff: "exponential" + capture: + - name: "nodepoolName" + field: "name" + - name: "generation" + field: "generation" + - name: "nodepoolSpec" + field: "spec" + - name: "nodepoolNotReady" + expression: | + !has(status) || !has(status.conditions) + ? true + : (status.conditions.filter(c, c.type == "Ready").size() > 0 + ? status.conditions.filter(c, c.type == "Ready")[0].status != "True" + : true) + + # Fetch parent cluster details (need the cluster name for clusterName ref) + - name: "clusterDetails" + api_call: + method: "GET" + url: "/clusters/{{ .clusterId }}" + timeout: 10s + retry_attempts: 3 + retry_backoff: "exponential" + capture: + - name: "clusterName" + field: "name" + + # Check if HostedCluster is Available via adapter-hypershift status + - name: "clusterAdapterStatus" + api_call: + method: "GET" + url: "/clusters/{{ .clusterId }}/statuses" + timeout: 10s + retry_attempts: 3 + retry_backoff: "exponential" + capture: + - name: "clusterAvailable" + expression: | + items.filter(s, s.adapter == "adapter-hypershift").size() > 0 + ? (has(items.filter(s, s.adapter == "adapter-hypershift")[0].conditions) + ? (items.filter(s, s.adapter == "adapter-hypershift")[0].conditions.filter(c, c.type == "Available").size() > 0 + ? items.filter(s, s.adapter == "adapter-hypershift")[0].conditions.filter(c, c.type == "Available")[0].status == "True" + : false) + : false) + : false + + - name: "validationCheck" + # Only proceed if nodepool is NOT Ready AND HostedCluster adapter reports Available + expression: | + nodepoolNotReady && clusterAvailable + +# Resources: NodePool on the remote management cluster +resources: + + - name: "nodePool" + transport: + client: "kubernetes" + manifest: + apiVersion: hypershift.openshift.io/v1beta1 + kind: NodePool + metadata: + name: "{{ .clusterName }}-{{ .nodepoolName }}" + namespace: "{{ .namespace }}" + labels: + hyperfleet.io/cluster-id: "{{ .clusterId }}" + hyperfleet.io/cluster-name: "{{ .clusterName }}" + hyperfleet.io/nodepool-id: "{{ .nodepoolId }}" + hyperfleet.io/nodepool-name: "{{ .nodepoolName }}" + spec: + clusterName: "{{ .clusterName }}" + replicas: {{ index .nodepoolSpec "replicas" | default 2 }} + management: + autoRepair: true + upgradeType: Replace + platform: + type: OCI + oci: + instanceShape: '{{ index .nodepoolSpec "instanceShape" | default .ociShape }}' + instanceShapeConfig: + ocpus: {{ index .nodepoolSpec "ocpus" | default .ociOcpus }} + memoryInGBs: {{ index .nodepoolSpec "memoryInGBs" | default .ociMemoryGBs }} + availabilityDomain: '{{ index .nodepoolSpec "availabilityDomain" | default .ociAD }}' + subnetId: '{{ index .nodepoolSpec "subnetId" | default .ociSubnetId }}' + bootVolumeSize: {{ index .nodepoolSpec "bootVolumeSize" | default .ociBootVolumeGB }} + release: + image: '{{ index .nodepoolSpec "releaseImage" | default "quay.io/openshift-release-dev/ocp-release:4.20.2-x86_64" }}' + discovery: + namespace: "{{ .namespace }}" + by_selectors: + label_selector: + hyperfleet.io/nodepool-id: "{{ .nodepoolId }}" + +# Post-processing: report NodePool status back to API +post: + payloads: + - name: "statusPayload" + build: + adapter: "{{ .adapter.name }}" + conditions: + - type: "Applied" + status: + expression: | + has(resources.nodePool.metadata.creationTimestamp) ? "True" : "False" + reason: + expression: | + has(resources.nodePool.metadata.creationTimestamp) ? "NodePoolCreated" : "NodePoolPending" + message: + expression: | + has(resources.nodePool.metadata.creationTimestamp) + ? "NodePool has been created on the management cluster" + : "NodePool is pending creation" + - type: "Available" + status: + expression: | + has(resources.nodePool.status) && has(resources.nodePool.status.conditions) + ? (resources.nodePool.status.conditions.filter(c, c.type == "Ready").size() > 0 + ? resources.nodePool.status.conditions.filter(c, c.type == "Ready")[0].status + : "False") + : "False" + reason: + expression: | + has(resources.nodePool.status) && has(resources.nodePool.status.conditions) + ? (resources.nodePool.status.conditions.filter(c, c.type == "Ready").size() > 0 + ? resources.nodePool.status.conditions.filter(c, c.type == "Ready")[0].reason + : "WaitingForNodes") + : "WaitingForNodes" + message: + expression: | + has(resources.nodePool.status) && has(resources.nodePool.status.conditions) + ? (resources.nodePool.status.conditions.filter(c, c.type == "Ready").size() > 0 + ? resources.nodePool.status.conditions.filter(c, c.type == "Ready")[0].message + : "Waiting for worker nodes to be provisioned") + : "Waiting for worker nodes to be provisioned" + - type: "Health" + status: + expression: | + adapter.?executionStatus.orValue("") == "success" ? "True" : (adapter.?executionStatus.orValue("") == "failed" ? "False" : "Unknown") + reason: + expression: | + adapter.?errorReason.orValue("") != "" ? adapter.?errorReason.orValue("") : "Healthy" + message: + expression: | + adapter.?errorMessage.orValue("") != "" ? adapter.?errorMessage.orValue("") : "Adapter executed successfully" + observed_generation: + expression: "generation" + observed_time: "{{ now | date \"2006-01-02T15:04:05Z07:00\" }}" + + post_actions: + - name: "reportNodepoolStatus" + api_call: + method: "POST" + url: "/clusters/{{ .clusterId }}/nodepools/{{ .nodepoolId }}/statuses" + headers: + - name: "Content-Type" + value: "application/json" + body: "{{ .statusPayload }}" diff --git a/helm/adapter-hypershift-nodepool/charts/hyperfleet-adapter-2.0.0.tgz b/helm/adapter-hypershift-nodepool/charts/hyperfleet-adapter-2.0.0.tgz new file mode 100644 index 0000000..dbc44e3 Binary files /dev/null and b/helm/adapter-hypershift-nodepool/charts/hyperfleet-adapter-2.0.0.tgz differ diff --git a/helm/adapter-hypershift-nodepool/nodepool-manifest.yaml b/helm/adapter-hypershift-nodepool/nodepool-manifest.yaml new file mode 100644 index 0000000..5cd1701 --- /dev/null +++ b/helm/adapter-hypershift-nodepool/nodepool-manifest.yaml @@ -0,0 +1,28 @@ +apiVersion: hypershift.openshift.io/v1beta1 +kind: NodePool +metadata: + name: "{{ .clusterName }}-{{ .nodepoolName }}" + namespace: "{{ .namespace }}" + labels: + hyperfleet.io/cluster-id: "{{ .clusterId }}" + hyperfleet.io/cluster-name: "{{ .clusterName }}" + hyperfleet.io/nodepool-id: "{{ .nodepoolId }}" + hyperfleet.io/nodepool-name: "{{ .nodepoolName }}" +spec: + clusterName: "{{ .clusterName }}" + replicas: {{ index .nodepoolSpec "replicas" | default 2 }} + management: + autoRepair: true + upgradeType: Replace + platform: + type: OCI + oci: + instanceShape: "{{ index .nodepoolSpec "instanceShape" | default .ociShape }}" + instanceShapeConfig: + ocpus: {{ index .nodepoolSpec "ocpus" | default .ociOcpus }} + memoryInGBs: {{ index .nodepoolSpec "memoryInGBs" | default .ociMemoryGBs }} + availabilityDomain: "{{ index .nodepoolSpec "availabilityDomain" | default .ociAD }}" + subnetId: "{{ index .nodepoolSpec "subnetId" | default .ociSubnetId }}" + bootVolumeSize: {{ index .nodepoolSpec "bootVolumeSize" | default .ociBootVolumeGB }} + release: + image: "{{ index .nodepoolSpec "releaseImage" | default "quay.io/openshift-release-dev/ocp-release:4.20.2-x86_64" }}" diff --git a/helm/adapter-hypershift-nodepool/values.yaml b/helm/adapter-hypershift-nodepool/values.yaml new file mode 100644 index 0000000..cdb8816 --- /dev/null +++ b/helm/adapter-hypershift-nodepool/values.yaml @@ -0,0 +1,67 @@ +# Values for adapter-hypershift-nodepool +# Creates NodePool resources on a remote HyperShift management cluster + +hyperfleet-adapter: + image: + registry: CHANGE_ME + repository: CHANGE_ME + tag: latest + + adapterConfig: + create: true + log: + level: debug + + adapterTaskConfig: + create: true + + broker: + type: googlepubsub + googlepubsub: + projectId: CHANGE_ME + subscriptionId: CHANGE_ME + topic: CHANGE_ME + deadLetterTopic: "" + createTopicIfMissing: true + createSubscriptionIfMissing: true + rabbitmq: + url: CHANGE_ME + queue: "" + exchange: "" + routingKey: "" + + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CLUSTERS_NAMESPACE + value: clusters + - name: OCI_AD + value: US-SANJOSE-1-AD-1 + - name: OCI_SUBNET_ID + value: CHANGE_ME + - name: OCI_SHAPE + value: VM.Standard.E4.Flex + - name: OCI_OCPUS + value: "4" + - name: OCI_MEMORY_GBS + value: "16" + - name: OCI_BOOT_VOLUME_GB + value: "120" + + # Mount the management cluster kubeconfig + extraVolumeMounts: + - name: hypershift-kubeconfig + mountPath: /etc/hypershift + readOnly: true + + extraVolumes: + - name: hypershift-kubeconfig + secret: + secretName: hypershift-mgmt-kubeconfig + + # RBAC is for the local CLM cluster only; remote access uses the mounted kubeconfig + rbac: + resources: + - configmaps diff --git a/helm/adapter-hypershift/Chart.yaml b/helm/adapter-hypershift/Chart.yaml new file mode 100644 index 0000000..8a7fcc4 --- /dev/null +++ b/helm/adapter-hypershift/Chart.yaml @@ -0,0 +1,11 @@ +apiVersion: v2 +name: adapter-hypershift +description: HyperShift adapter - creates HostedCluster resources on a remote management cluster +type: application +version: 0.1.0 +appVersion: "0.0.0-dev" + +dependencies: + - name: hyperfleet-adapter + version: "2.0.0" + repository: "git+https://github.com/openshift-hyperfleet/hyperfleet-adapter@charts?ref=main" diff --git a/helm/adapter-hypershift/adapter-config.yaml b/helm/adapter-hypershift/adapter-config.yaml new file mode 100644 index 0000000..338866a --- /dev/null +++ b/helm/adapter-hypershift/adapter-config.yaml @@ -0,0 +1,26 @@ +# HyperShift adapter deployment configuration +# Creates HostedCluster resources on a remote HyperShift management cluster +adapter: + name: adapter-hypershift + version: "0.2.0" + +debug_config: true +log: + level: debug + +clients: + hyperfleet_api: + base_url: http://hyperfleet-api:8000 + version: v1 + timeout: 10s + retry_attempts: 3 + retry_backoff: exponential + + broker: + subscription_id: "adapter-hypershift" + topic: "hyperfleet-clusters" + + kubernetes: + api_version: "v1" + # Use the mounted kubeconfig to target the remote HyperShift management cluster + kube_config_path: /etc/hypershift/kubeconfig diff --git a/helm/adapter-hypershift/adapter-task-config.yaml b/helm/adapter-hypershift/adapter-task-config.yaml new file mode 100644 index 0000000..df9ba0a --- /dev/null +++ b/helm/adapter-hypershift/adapter-task-config.yaml @@ -0,0 +1,203 @@ +# HyperShift adapter task configuration +# Creates a HostedCluster + required secrets on the remote management cluster +params: + + - name: "clusterId" + source: "event.id" + type: "string" + required: true + + - name: "generation" + source: "event.generation" + type: "int" + required: true + + - name: "namespace" + source: "env.CLUSTERS_NAMESPACE" + type: "string" + + - name: "ociRegion" + source: "env.OCI_REGION" + type: "string" + + - name: "ociCompartmentId" + source: "env.OCI_COMPARTMENT_ID" + type: "string" + + - name: "releaseImage" + source: "env.OPENSHIFT_RELEASE_IMAGE" + type: "string" + + - name: "baseDomain" + source: "env.BASE_DOMAIN" + type: "string" + + - name: "cpoImage" + source: "env.CPO_IMAGE" + type: "string" + + +# Preconditions: check cluster details from API +preconditions: + - name: "clusterStatus" + api_call: + method: "GET" + url: "/clusters/{{ .clusterId }}" + timeout: 10s + retry_attempts: 3 + retry_backoff: "exponential" + capture: + - name: "clusterName" + field: "name" + - name: "generation" + field: "generation" + - name: "clusterNotReady" + expression: | + !has(status) || !has(status.conditions) + ? true + : (status.conditions.filter(c, c.type == "Ready").size() > 0 + ? status.conditions.filter(c, c.type == "Ready")[0].status != "True" + : true) + + - name: "validationCheck" + expression: | + clusterNotReady + +# Resources: Namespace + HostedCluster on the remote management cluster +resources: + + # Ensure the clusters namespace exists on the management cluster + - name: "clustersNamespace" + transport: + client: "kubernetes" + manifest: + apiVersion: v1 + kind: Namespace + metadata: + name: "{{ .namespace }}" + discovery: + by_name: "{{ .namespace }}" + + # Create the HostedCluster resource + - name: "hostedCluster" + transport: + client: "kubernetes" + manifest: + apiVersion: hypershift.openshift.io/v1beta1 + kind: HostedCluster + metadata: + name: "{{ .clusterName }}" + namespace: "{{ .namespace }}" + annotations: + hypershift.openshift.io/pod-security-admission-label-override: "privileged" + hypershift.openshift.io/control-plane-operator-image: "{{ .cpoImage }}" + hypershift.openshift.io/disable-monitoring-services: "true" + labels: + hyperfleet.io/cluster-id: "{{ .clusterId }}" + hyperfleet.io/cluster-name: "{{ .clusterName }}" + spec: + platform: + type: OCI + oci: + identityRef: + name: oci-credentials + region: "{{ .ociRegion }}" + compartmentId: "{{ .ociCompartmentId }}" + controllerAvailabilityPolicy: SingleReplica + pullSecret: + name: pull-secret + sshKey: + name: ssh-key + networking: + clusterNetwork: + - cidr: 10.132.0.0/14 + serviceNetwork: + - cidr: 172.31.0.0/16 + networkType: OVNKubernetes + services: + - service: Ignition + servicePublishingStrategy: + type: Route + - service: OAuthServer + servicePublishingStrategy: + type: Route + - service: APIServer + servicePublishingStrategy: + type: LoadBalancer + - service: Konnectivity + servicePublishingStrategy: + type: LoadBalancer + release: + image: "{{ .releaseImage }}" + dns: + baseDomain: "{{ .baseDomain }}" + discovery: + namespace: "{{ .namespace }}" + by_selectors: + label_selector: + hyperfleet.io/cluster-id: "{{ .clusterId }}" + +# Post-processing: report HostedCluster status back to API +post: + payloads: + - name: "statusPayload" + build: + adapter: "{{ .adapter.name }}" + conditions: + - type: "Applied" + status: + expression: | + has(resources.hostedCluster.metadata.creationTimestamp) ? "True" : "False" + reason: + expression: | + has(resources.hostedCluster.metadata.creationTimestamp) ? "HostedClusterCreated" : "HostedClusterPending" + message: + expression: | + has(resources.hostedCluster.metadata.creationTimestamp) + ? "HostedCluster has been created on the management cluster" + : "HostedCluster is pending creation" + - type: "Available" + status: + expression: | + has(resources.hostedCluster.status) && has(resources.hostedCluster.status.conditions) + ? (resources.hostedCluster.status.conditions.filter(c, c.type == "Available").size() > 0 + ? resources.hostedCluster.status.conditions.filter(c, c.type == "Available")[0].status + : "False") + : "False" + reason: + expression: | + has(resources.hostedCluster.status) && has(resources.hostedCluster.status.conditions) + ? (resources.hostedCluster.status.conditions.filter(c, c.type == "Available").size() > 0 + ? resources.hostedCluster.status.conditions.filter(c, c.type == "Available")[0].reason + : "WaitingForControlPlane") + : "WaitingForControlPlane" + message: + expression: | + has(resources.hostedCluster.status) && has(resources.hostedCluster.status.conditions) + ? (resources.hostedCluster.status.conditions.filter(c, c.type == "Available").size() > 0 + ? resources.hostedCluster.status.conditions.filter(c, c.type == "Available")[0].message + : "Waiting for hosted control plane to become available") + : "Waiting for hosted control plane to become available" + - type: "Health" + status: + expression: | + adapter.?executionStatus.orValue("") == "success" ? "True" : (adapter.?executionStatus.orValue("") == "failed" ? "False" : "Unknown") + reason: + expression: | + adapter.?errorReason.orValue("") != "" ? adapter.?errorReason.orValue("") : "Healthy" + message: + expression: | + adapter.?errorMessage.orValue("") != "" ? adapter.?errorMessage.orValue("") : "Adapter executed successfully" + observed_generation: + expression: "generation" + observed_time: "{{ now | date \"2006-01-02T15:04:05Z07:00\" }}" + + post_actions: + - name: "reportClusterStatus" + api_call: + method: "POST" + url: "/clusters/{{ .clusterId }}/statuses" + headers: + - name: "Content-Type" + value: "application/json" + body: "{{ .statusPayload }}" diff --git a/helm/adapter-hypershift/charts/hyperfleet-adapter-2.0.0.tgz b/helm/adapter-hypershift/charts/hyperfleet-adapter-2.0.0.tgz new file mode 100644 index 0000000..3129398 Binary files /dev/null and b/helm/adapter-hypershift/charts/hyperfleet-adapter-2.0.0.tgz differ diff --git a/helm/adapter-hypershift/values.yaml b/helm/adapter-hypershift/values.yaml new file mode 100644 index 0000000..de0c6c6 --- /dev/null +++ b/helm/adapter-hypershift/values.yaml @@ -0,0 +1,65 @@ +# Values for adapter-hypershift +# Creates HostedCluster resources on a remote HyperShift management cluster + +hyperfleet-adapter: + image: + registry: CHANGE_ME + repository: CHANGE_ME + tag: latest + + adapterConfig: + create: true + log: + level: debug + + adapterTaskConfig: + create: true + + broker: + type: googlepubsub + googlepubsub: + projectId: CHANGE_ME + subscriptionId: CHANGE_ME + topic: CHANGE_ME + deadLetterTopic: "" + createTopicIfMissing: true + createSubscriptionIfMissing: true + rabbitmq: + url: CHANGE_ME + queue: "" + exchange: "" + routingKey: "" + + env: + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CLUSTERS_NAMESPACE + value: clusters + - name: OCI_REGION + value: us-sanjose-1 + - name: OCI_COMPARTMENT_ID + value: ocid1.compartment.oc1..aaaaaaaazgovbe2qxduadk3bmj5dobvoe5wnengzavax5pwsfr3bqbdrrcqa + - name: OPENSHIFT_RELEASE_IMAGE + value: "quay.io/openshift-release-dev/ocp-release:4.20.2-x86_64" + - name: BASE_DOMAIN + value: hyperfleet.local + - name: CPO_IMAGE + value: "quay.io/vkareh/control-plane-operator:1775859030" + + # Mount the management cluster kubeconfig + extraVolumeMounts: + - name: hypershift-kubeconfig + mountPath: /etc/hypershift + readOnly: true + + extraVolumes: + - name: hypershift-kubeconfig + secret: + secretName: hypershift-mgmt-kubeconfig + + # RBAC is for the local CLM cluster only; remote access uses the mounted kubeconfig + rbac: + resources: + - configmaps diff --git a/helm/sentinel-clusters/values-oci.yaml b/helm/sentinel-clusters/values-oci.yaml new file mode 100644 index 0000000..0985167 --- /dev/null +++ b/helm/sentinel-clusters/values-oci.yaml @@ -0,0 +1,24 @@ +# OCI/OKE overrides for Sentinel (v0.2.0 config format) +# The v0.2.0 binary uses flat config (hyperfleetApi under config, not clients) + +hyperfleet-sentinel: + config: + resourceType: clusters + resourceSelector: [] + + hyperfleetApi: + baseUrl: http://hyperfleet-api:8000 + timeout: 5s + + broker: + type: rabbitmq + topic: hyperfleet-clusters + rabbitmq: + url: amqp://guest:guest@rabbitmq:5672/ + exchangeType: topic + + monitoring: + podMonitoring: + enabled: false + prometheusRule: + enabled: false diff --git a/helm/sentinel-nodepools/values-oci.yaml b/helm/sentinel-nodepools/values-oci.yaml new file mode 100644 index 0000000..0d482df --- /dev/null +++ b/helm/sentinel-nodepools/values-oci.yaml @@ -0,0 +1,23 @@ +# OCI/OKE overrides for Sentinel nodepools (v0.2.0 config format) + +hyperfleet-sentinel: + config: + resourceType: nodepools + resourceSelector: [] + + hyperfleetApi: + baseUrl: http://hyperfleet-api:8000 + timeout: 5s + + broker: + type: rabbitmq + topic: hyperfleet-nodepools + rabbitmq: + url: amqp://guest:guest@rabbitmq:5672/ + exchangeType: topic + + monitoring: + podMonitoring: + enabled: false + prometheusRule: + enabled: false