Loading chart/ocm-scheduler-chart/templates/cleanup-job.yaml +47 −7 Changes for chart/ocm-scheduler-chart/templates/cleanup-job.yaml: 47 added lines, 7 removed lines. Original line number Diff line number Diff line Loading @@ -33,12 +33,13 @@ rules: resources: ["customresourcedefinitions"] resourceNames: ["hyposchedulingmanifests.scheduling.hypo.eu"] verbs: ["delete"] {{- if .Values.clusterSet.enabled }} - apiGroups: ["cluster.open-cluster-management.io"] resources: ["managedclustersets/join"] resourceNames: - {{ .Values.clusterSet.name | quote }} verbs: ["create"] {{- end }} --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding Loading @@ -57,6 +58,40 @@ subjects: name: {{ .Release.Name }}-cleanup namespace: {{ .Release.Namespace | quote }} --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: {{ .Release.Name }}-cleanup-inventory namespace: {{ .Release.Namespace | quote }} annotations: "helm.sh/hook": pre-delete "helm.sh/hook-weight": "-10" "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded rules: - apiGroups: [""] resources: ["configmaps"] resourceNames: - {{ printf "%s-cluster-inventory" .Release.Name | quote }} verbs: ["get", "delete"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: {{ .Release.Name }}-cleanup-inventory namespace: {{ .Release.Namespace | quote }} annotations: "helm.sh/hook": pre-delete "helm.sh/hook-weight": "-10" "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded subjects: - kind: ServiceAccount name: {{ .Release.Name }}-cleanup namespace: {{ .Release.Namespace | quote }} roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: {{ .Release.Name }}-cleanup-inventory --- apiVersion: batch/v1 kind: Job metadata: Loading @@ -78,21 +113,25 @@ spec: command: ["/bin/sh", "-ec"] args: - | # Let the running scheduler finalize its own resources first. # Let the running Scheduler finalize its resources first. kubectl delete hyposchedulingmanifests --all -n {{ .Values.namespace.name | quote }} --ignore-not-found --wait=true --timeout=180s # Delete any remaining scheduler-owned ManifestWorks, never unrelated works. # Delete only Scheduler-owned ManifestWorks. kubectl delete manifestworks -A -l scheduling.hypo.eu/owner --ignore-not-found --wait=true --timeout=180s {{- range $i, $cluster := .Values.managedClusters }} kubectl --kubeconfig=/kubeconfigs/{{ $i }}/kubeconfig delete clusterclaim hypo.filter.location --ignore-not-found --wait=true # Remove only the membership assigned by this release. kubectl --kubeconfig=/kubeconfigs/{{ $i }}/kubeconfig \ delete clusterclaim hypo.filter.location --ignore-not-found --wait=true {{- if $.Values.clusterSet.enabled }} current=$(kubectl get managedcluster {{ $cluster.name | quote }} -o jsonpath='{.metadata.labels.cluster\.open-cluster-management\.io/clusterset}') current=$(kubectl get managedcluster {{ $cluster.name | quote }} \ -o jsonpath='{.metadata.labels.cluster\.open-cluster-management\.io/clusterset}') if [ "$current" = {{ $.Values.clusterSet.name | quote }} ]; then kubectl label managedcluster {{ $cluster.name | quote }} cluster.open-cluster-management.io/clusterset- kubectl label managedcluster {{ $cluster.name | quote }} \ cluster.open-cluster-management.io/clusterset- fi {{- end }} {{- end }} kubectl delete crd hyposchedulingmanifests.scheduling.hypo.eu --ignore-not-found --wait=false kubectl delete configmap {{ printf "%s-cluster-inventory" .Release.Name | quote }} \ -n {{ .Release.Namespace | quote }} --ignore-not-found {{- if .Values.managedClusters }} volumeMounts: {{- range $i, $cluster := .Values.managedClusters }} Loading @@ -112,3 +151,4 @@ spec: path: kubeconfig {{- end }} {{- end }} chart/ocm-scheduler-chart/templates/managed-clusters-job.yaml +94 −6 Changes for chart/ocm-scheduler-chart/templates/managed-clusters-job.yaml: 94 added lines, 6 removed lines. Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ metadata: rules: - apiGroups: ["cluster.open-cluster-management.io"] resources: ["managedclusters"] verbs: ["get", "patch"] verbs: ["get", "list", "patch"] - apiGroups: ["cluster.open-cluster-management.io"] resources: ["managedclustersets/join"] resourceNames: Loading @@ -32,15 +32,42 @@ subjects: name: {{ .Release.Name }}-setup namespace: {{ .Release.Namespace | quote }} --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: {{ .Release.Name }}-inventory namespace: {{ .Release.Namespace | quote }} rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get"] - apiGroups: [""] resources: ["configmaps"] verbs: ["get", "create", "patch", "update"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: {{ .Release.Name }}-inventory namespace: {{ .Release.Namespace | quote }} subjects: - kind: ServiceAccount name: {{ .Release.Name }}-setup namespace: {{ .Release.Namespace | quote }} roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: {{ .Release.Name }}-inventory --- apiVersion: batch/v1 kind: Job metadata: name: {{ .Release.Name }}-configure-clusters namespace: {{ .Release.Namespace | quote }} annotations: helm.sh/hook: post-install,post-upgrade helm.sh/hook-weight: "5" helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded "helm.sh/hook": post-install,post-upgrade "helm.sh/hook-weight": "5" "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded spec: backoffLimit: 2 template: Loading @@ -53,9 +80,64 @@ spec: command: ["/bin/sh", "-ec"] args: - | CLUSTERSET={{ .Values.clusterSet.name | quote }} INVENTORY={{ printf "%s-cluster-inventory" .Release.Name | quote }} NAMESPACE={{ .Release.Namespace | quote }} DESIRED_CLUSTERS="{{ range .Values.managedClusters }}{{ .name }} {{ end }}" echo "Reconciling ClusterSet ${CLUSTERSET}" echo "Desired clusters: ${DESIRED_CLUSTERS}" # Validate every desired Hub ManagedCluster before making changes. for cluster in ${DESIRED_CLUSTERS}; do kubectl get managedcluster "${cluster}" >/dev/null done # Load previous inventory. An absent inventory is normal on first install. PREVIOUS_CLUSTERS="" if kubectl get configmap "${INVENTORY}" -n "${NAMESPACE}" >/dev/null 2>&1; then PREVIOUS_CLUSTERS=$(kubectl get configmap "${INVENTORY}" \ -n "${NAMESPACE}" -o jsonpath='{.data.clusters}') fi echo "Previously managed clusters: ${PREVIOUS_CLUSTERS}" # Remove Scheduler-owned state from clusters removed from values.yaml. for cluster in ${PREVIOUS_CLUSTERS}; do case " ${DESIRED_CLUSTERS} " in *" ${cluster} "*) echo "Keeping ${cluster}" ;; *) echo "Cleaning removed cluster ${cluster}" # HypO must retain this Secret until the upgrade succeeds. SECRET_DATA=$(kubectl get secret "${cluster}" -n "${NAMESPACE}" \ -o jsonpath='{.data.kubeconfig}') test -n "${SECRET_DATA}" printf '%s' "${SECRET_DATA}" | base64 -d > /tmp/removed-kubeconfig test -s /tmp/removed-kubeconfig kubectl --kubeconfig=/tmp/removed-kubeconfig \ delete clusterclaim hypo.filter.location --ignore-not-found --wait=true rm -f /tmp/removed-kubeconfig # Never remove a label if another controller moved this cluster. CURRENT_SET=$(kubectl get managedcluster "${cluster}" \ -o jsonpath='{.metadata.labels.cluster\.open-cluster-management\.io/clusterset}') if [ "${CURRENT_SET}" = "${CLUSTERSET}" ]; then kubectl label managedcluster "${cluster}" \ cluster.open-cluster-management.io/clusterset- fi echo "Cleaned ${cluster}" ;; esac done # Reconcile all currently configured clusters and their location claims. {{- range $i, $cluster := .Values.managedClusters }} kubectl get managedcluster {{ $cluster.name | quote }} >/dev/null kubectl label managedcluster {{ $cluster.name | quote }} 'cluster.open-cluster-management.io/clusterset={{ $.Values.clusterSet.name }}' --overwrite echo "Configuring {{ $cluster.name }}" kubectl label managedcluster {{ $cluster.name | quote }} \ "cluster.open-cluster-management.io/clusterset=${CLUSTERSET}" --overwrite cat <<'CLAIM_{{ $i }}' | kubectl --kubeconfig=/kubeconfigs/{{ $i }}/kubeconfig apply -f - apiVersion: cluster.open-cluster-management.io/v1alpha1 kind: ClusterClaim Loading @@ -65,6 +147,12 @@ spec: value: {{ $cluster.location | quote }} CLAIM_{{ $i }} {{- end }} # Commit the inventory only after all operations succeeded. kubectl create configmap "${INVENTORY}" -n "${NAMESPACE}" \ --from-literal=clusters="${DESIRED_CLUSTERS}" \ --dry-run=client -o yaml | kubectl apply -f - echo "Reconciliation completed" {{- if .Values.managedClusters }} volumeMounts: {{- range $i, $cluster := .Values.managedClusters }} Loading chart/ocm-scheduler-chart/values.yaml +0 −1 Changes for chart/ocm-scheduler-chart/values.yaml: 0 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ managedClusters: - name: managed-1 location: athens kubeconfigSecretId: 97b71df0-650a-4410-8b5f-10dfc08c031a - name: managed-2 location: patra kubeconfigSecretId: f55cfe33-18ef-46dc-a3ab-e095dd2af0b1 Loading
chart/ocm-scheduler-chart/templates/cleanup-job.yaml +47 −7 Changes for chart/ocm-scheduler-chart/templates/cleanup-job.yaml: 47 added lines, 7 removed lines. Original line number Diff line number Diff line Loading @@ -33,12 +33,13 @@ rules: resources: ["customresourcedefinitions"] resourceNames: ["hyposchedulingmanifests.scheduling.hypo.eu"] verbs: ["delete"] {{- if .Values.clusterSet.enabled }} - apiGroups: ["cluster.open-cluster-management.io"] resources: ["managedclustersets/join"] resourceNames: - {{ .Values.clusterSet.name | quote }} verbs: ["create"] {{- end }} --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding Loading @@ -57,6 +58,40 @@ subjects: name: {{ .Release.Name }}-cleanup namespace: {{ .Release.Namespace | quote }} --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: {{ .Release.Name }}-cleanup-inventory namespace: {{ .Release.Namespace | quote }} annotations: "helm.sh/hook": pre-delete "helm.sh/hook-weight": "-10" "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded rules: - apiGroups: [""] resources: ["configmaps"] resourceNames: - {{ printf "%s-cluster-inventory" .Release.Name | quote }} verbs: ["get", "delete"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: {{ .Release.Name }}-cleanup-inventory namespace: {{ .Release.Namespace | quote }} annotations: "helm.sh/hook": pre-delete "helm.sh/hook-weight": "-10" "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded subjects: - kind: ServiceAccount name: {{ .Release.Name }}-cleanup namespace: {{ .Release.Namespace | quote }} roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: {{ .Release.Name }}-cleanup-inventory --- apiVersion: batch/v1 kind: Job metadata: Loading @@ -78,21 +113,25 @@ spec: command: ["/bin/sh", "-ec"] args: - | # Let the running scheduler finalize its own resources first. # Let the running Scheduler finalize its resources first. kubectl delete hyposchedulingmanifests --all -n {{ .Values.namespace.name | quote }} --ignore-not-found --wait=true --timeout=180s # Delete any remaining scheduler-owned ManifestWorks, never unrelated works. # Delete only Scheduler-owned ManifestWorks. kubectl delete manifestworks -A -l scheduling.hypo.eu/owner --ignore-not-found --wait=true --timeout=180s {{- range $i, $cluster := .Values.managedClusters }} kubectl --kubeconfig=/kubeconfigs/{{ $i }}/kubeconfig delete clusterclaim hypo.filter.location --ignore-not-found --wait=true # Remove only the membership assigned by this release. kubectl --kubeconfig=/kubeconfigs/{{ $i }}/kubeconfig \ delete clusterclaim hypo.filter.location --ignore-not-found --wait=true {{- if $.Values.clusterSet.enabled }} current=$(kubectl get managedcluster {{ $cluster.name | quote }} -o jsonpath='{.metadata.labels.cluster\.open-cluster-management\.io/clusterset}') current=$(kubectl get managedcluster {{ $cluster.name | quote }} \ -o jsonpath='{.metadata.labels.cluster\.open-cluster-management\.io/clusterset}') if [ "$current" = {{ $.Values.clusterSet.name | quote }} ]; then kubectl label managedcluster {{ $cluster.name | quote }} cluster.open-cluster-management.io/clusterset- kubectl label managedcluster {{ $cluster.name | quote }} \ cluster.open-cluster-management.io/clusterset- fi {{- end }} {{- end }} kubectl delete crd hyposchedulingmanifests.scheduling.hypo.eu --ignore-not-found --wait=false kubectl delete configmap {{ printf "%s-cluster-inventory" .Release.Name | quote }} \ -n {{ .Release.Namespace | quote }} --ignore-not-found {{- if .Values.managedClusters }} volumeMounts: {{- range $i, $cluster := .Values.managedClusters }} Loading @@ -112,3 +151,4 @@ spec: path: kubeconfig {{- end }} {{- end }}
chart/ocm-scheduler-chart/templates/managed-clusters-job.yaml +94 −6 Changes for chart/ocm-scheduler-chart/templates/managed-clusters-job.yaml: 94 added lines, 6 removed lines. Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ metadata: rules: - apiGroups: ["cluster.open-cluster-management.io"] resources: ["managedclusters"] verbs: ["get", "patch"] verbs: ["get", "list", "patch"] - apiGroups: ["cluster.open-cluster-management.io"] resources: ["managedclustersets/join"] resourceNames: Loading @@ -32,15 +32,42 @@ subjects: name: {{ .Release.Name }}-setup namespace: {{ .Release.Namespace | quote }} --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: {{ .Release.Name }}-inventory namespace: {{ .Release.Namespace | quote }} rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get"] - apiGroups: [""] resources: ["configmaps"] verbs: ["get", "create", "patch", "update"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: {{ .Release.Name }}-inventory namespace: {{ .Release.Namespace | quote }} subjects: - kind: ServiceAccount name: {{ .Release.Name }}-setup namespace: {{ .Release.Namespace | quote }} roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: {{ .Release.Name }}-inventory --- apiVersion: batch/v1 kind: Job metadata: name: {{ .Release.Name }}-configure-clusters namespace: {{ .Release.Namespace | quote }} annotations: helm.sh/hook: post-install,post-upgrade helm.sh/hook-weight: "5" helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded "helm.sh/hook": post-install,post-upgrade "helm.sh/hook-weight": "5" "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded spec: backoffLimit: 2 template: Loading @@ -53,9 +80,64 @@ spec: command: ["/bin/sh", "-ec"] args: - | CLUSTERSET={{ .Values.clusterSet.name | quote }} INVENTORY={{ printf "%s-cluster-inventory" .Release.Name | quote }} NAMESPACE={{ .Release.Namespace | quote }} DESIRED_CLUSTERS="{{ range .Values.managedClusters }}{{ .name }} {{ end }}" echo "Reconciling ClusterSet ${CLUSTERSET}" echo "Desired clusters: ${DESIRED_CLUSTERS}" # Validate every desired Hub ManagedCluster before making changes. for cluster in ${DESIRED_CLUSTERS}; do kubectl get managedcluster "${cluster}" >/dev/null done # Load previous inventory. An absent inventory is normal on first install. PREVIOUS_CLUSTERS="" if kubectl get configmap "${INVENTORY}" -n "${NAMESPACE}" >/dev/null 2>&1; then PREVIOUS_CLUSTERS=$(kubectl get configmap "${INVENTORY}" \ -n "${NAMESPACE}" -o jsonpath='{.data.clusters}') fi echo "Previously managed clusters: ${PREVIOUS_CLUSTERS}" # Remove Scheduler-owned state from clusters removed from values.yaml. for cluster in ${PREVIOUS_CLUSTERS}; do case " ${DESIRED_CLUSTERS} " in *" ${cluster} "*) echo "Keeping ${cluster}" ;; *) echo "Cleaning removed cluster ${cluster}" # HypO must retain this Secret until the upgrade succeeds. SECRET_DATA=$(kubectl get secret "${cluster}" -n "${NAMESPACE}" \ -o jsonpath='{.data.kubeconfig}') test -n "${SECRET_DATA}" printf '%s' "${SECRET_DATA}" | base64 -d > /tmp/removed-kubeconfig test -s /tmp/removed-kubeconfig kubectl --kubeconfig=/tmp/removed-kubeconfig \ delete clusterclaim hypo.filter.location --ignore-not-found --wait=true rm -f /tmp/removed-kubeconfig # Never remove a label if another controller moved this cluster. CURRENT_SET=$(kubectl get managedcluster "${cluster}" \ -o jsonpath='{.metadata.labels.cluster\.open-cluster-management\.io/clusterset}') if [ "${CURRENT_SET}" = "${CLUSTERSET}" ]; then kubectl label managedcluster "${cluster}" \ cluster.open-cluster-management.io/clusterset- fi echo "Cleaned ${cluster}" ;; esac done # Reconcile all currently configured clusters and their location claims. {{- range $i, $cluster := .Values.managedClusters }} kubectl get managedcluster {{ $cluster.name | quote }} >/dev/null kubectl label managedcluster {{ $cluster.name | quote }} 'cluster.open-cluster-management.io/clusterset={{ $.Values.clusterSet.name }}' --overwrite echo "Configuring {{ $cluster.name }}" kubectl label managedcluster {{ $cluster.name | quote }} \ "cluster.open-cluster-management.io/clusterset=${CLUSTERSET}" --overwrite cat <<'CLAIM_{{ $i }}' | kubectl --kubeconfig=/kubeconfigs/{{ $i }}/kubeconfig apply -f - apiVersion: cluster.open-cluster-management.io/v1alpha1 kind: ClusterClaim Loading @@ -65,6 +147,12 @@ spec: value: {{ $cluster.location | quote }} CLAIM_{{ $i }} {{- end }} # Commit the inventory only after all operations succeeded. kubectl create configmap "${INVENTORY}" -n "${NAMESPACE}" \ --from-literal=clusters="${DESIRED_CLUSTERS}" \ --dry-run=client -o yaml | kubectl apply -f - echo "Reconciliation completed" {{- if .Values.managedClusters }} volumeMounts: {{- range $i, $cluster := .Values.managedClusters }} Loading
chart/ocm-scheduler-chart/values.yaml +0 −1 Changes for chart/ocm-scheduler-chart/values.yaml: 0 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ managedClusters: - name: managed-1 location: athens kubeconfigSecretId: 97b71df0-650a-4410-8b5f-10dfc08c031a - name: managed-2 location: patra kubeconfigSecretId: f55cfe33-18ef-46dc-a3ab-e095dd2af0b1