@@ -13,6 +13,10 @@ mainBranch := "main"
1313workingBranchPrefix := " chore/update-"
1414targetBranchPrefix := " release-"
1515
16+ # For Cluster Stack creation
17+ mgmtcluster := " contextName"
18+ mgmcluster_namespace := " NamespaceName"
19+
1620[private ]
1721default :
1822 @ just --list --justfile {{ justfile () }}
9094 done
9195 echo " ${toTest[@]} "
9296
93-
9497# Build Clusterstacks version directories according to changes in versions.yaml. Builds out directoy
9598[group (' Build Manifests' )]
9699build-versions : dependencies
@@ -197,6 +200,12 @@ publish-assets-all:
197200 just publish-assets ${version}
198201 done
199202
203+ # Publish new release of providers/openstack/scs
204+ [group('Release')]
205+ [confirm('Are you sure to publish a new stable release? (y|n)')]
206+ publish-release: dependencies
207+ csctl create --publish --remote oci providers/openstack/scs/
208+
200209# Remove old branches that had been merged to main
201210[group('git')]
202211git-clean:
@@ -237,12 +246,6 @@ git-chore-branches-all:
237246 done
238247 fi
239248
240- # Publish new release of providers/openstack/scs
241- [group('Release')]
242- [confirm('Are you sure to publish a new stable release? (y|n)')]
243- publish-release: dependencies
244- csctl create --publish --remote oci providers/openstack/scs/
245-
246249# Login to Github with GitHub CLI
247250[group('GitHub')]
248251gh-login GH_TOKEN="${GH_TOKEN} ":
@@ -275,3 +278,103 @@ gh-create-chore-pr VERSION: gh-login
275278 --base {{ targetBranchPrefix }}{{replace(VERSION, "-", ".") }} \
276279 --dry-run
277280 fi
281+
282+ # UNTESTED RECIPE: Create Cluster Stack on Cluster for given Version at $PATH in ./release
283+ [group('Test')]
284+ create-clusterstack PATH:
285+ #!/usr/bin/env bash
286+ set -euo pipefail
287+ # Given directory name
288+ directory_name=".release/$PATH "
289+
290+ # Extract parts from the directory name
291+ IFS='/' read -ra PARTS <<<"$directory_name "
292+ IFS='-' read -ra PARTS <<<"${PARTS[1]} "
293+
294+ provider="${PARTS[0]} "
295+ name="${PARTS[1]} "
296+ kubernetes_major_version="${PARTS[2]} "
297+ kubernetes_minor_version="${PARTS[3]} "
298+ version="${PARTS[4]} - ${PARTS[5]} .${PARTS[6]} "
299+ channel="custom"
300+
301+ if [[ -z ${PARTS[6]} ]]; then
302+ version="${PARTS[4]} "
303+ channel="stable"
304+ fi
305+
306+ Create the YAML structure
307+ clusterstack_yaml=$(cat <<-EOF
308+ ---
309+ apiVersion: clusterstack.x-k8 s.io/v1 alpha1
310+ kind: ClusterStack
311+ metadata:
312+ name: ${provider} - ${name} - ${kubernetes_major_version} - ${kubernetes_minor_version}
313+ spec:
314+ provider: ${provider}
315+ name: ${name}
316+ kubernetesVersion: "${kubernetes_major_version} .${kubernetes_minor_version} "
317+ channel: ${channel}
318+ autoSubscribe: false
319+ providerRef:
320+ apiVersion: infrastructure.clusterstack.x-k8 s.io/v1 alpha1
321+ kind: OpenStackClusterStackReleaseTemplate
322+ name: cspotemplate
323+ versions:
324+ - ${version}
325+ EOF
326+ )
327+
328+ echo "$clusterstack " | kubectl apply -f -
329+
330+ # UNTESTED RECIPE: Check on Cluster Stack creation
331+ [group('Test')]
332+ check-clusterstack NAME:
333+ #!/usr/bin/env bash
334+ set -euo pipefail
335+ declare -i RETRIES
336+ RETRIES=20
337+ declare -i INTERVAL
338+ INTERVAL=5
339+ # TODO: Refine Status Command
340+ STATUS_CMD="kubectl get clusterstack -n $ ${NAME} - ojson | jq .status"
341+ while (( $RETRIES > 0 )) ; do
342+ RETRIES-= 1
343+ if ${STATUS_CMD} ; then
344+ STATUS=$( ${STATUS_CMD} )
345+ if true ; then
346+ echo " Clusterstack creation successful."
347+ break
348+ else
349+ echo " waiting for Cluster Stack creation"
350+ fi
351+ fi
352+ sleep $INTERVAL
353+ done
354+
355+ # UNTESTED RECIPE: Create Test Cluster for Kubernetes VERSION and Cluster CLASS
356+ [group(' Test' )]
357+ create-cluster VERSION CLASS:
358+ #! /usr/bin/env bash
359+ set -e uo pipefail
360+ cluster_manifest=<< -EOF
361+ ---
362+ apiVersion: cluster.x-k8s.io/v1beta1
363+ kind: Cluster
364+ metadata:
365+ name: cs-cluster
366+ labels:
367+ managed-secret: cloud-config
368+ spec:
369+ topology:
370+ class: {{ CLASS }}
371+ controlPlane:
372+ replicas: 1
373+ version: v{{ VERSION }}
374+ workers:
375+ machineDeployments:
376+ - class: default-worker
377+ name: md-0
378+ replicas: 1
379+ EOF
380+ echo " ${cluster_manifest} " | kubectl apply -f -
0 commit comments