Skip to content

Commit 9fb60f1

Browse files
authored
Merge branch 'main' into feat/use-clouds
2 parents f24afde + dc348fa commit 9fb60f1

30 files changed

+1420
-10
lines changed

hack/generate_version.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from pathlib import Path, PosixPath
2020

2121
import yaml
22+
import requests
2223

2324
BASE_PATH = Path(__file__).parent.parent
2425
SOURCE_PATH = BASE_PATH.joinpath("providers", "openstack", "scs")
@@ -238,12 +239,18 @@ def update_node_images(target: PosixPath, **kwargs):
238239

239240
# TODO: can this magic URL be 'removed'?
240241
# pylint: disable=locally-disabled, line-too-long
241-
url = f'https://swift.services.a.regiocloud.tech/swift/v1/AUTH_b182637428444b9aa302bb8d5a5a418c/openstack-k8s-capi-images/ubuntu-2204-kube-v{kwargs["kubernetes"][0:4]}/ubuntu-2204-kube-v{kwargs["kubernetes"]}.qcow2'
242-
content["openStackNodeImages"][0]["url"] = url
242+
url = f"https://swift.services.a.regiocloud.tech/swift/v1/AUTH_b182637428444b9aa302bb8d5a5a418c/openstack-k8s-capi-images/ubuntu-2204-kube-v{kwargs['kubernetes'][0:4]}/ubuntu-2204-kube-v{kwargs['kubernetes']}.qcow2"
243+
content["spec"]["resource"]["content"]["download"]["url"] = url
243244

244-
content["openStackNodeImages"][0]["createOpts"][
245-
"name"
246-
] = f"ubuntu-capi-image-v{kwargs['kubernetes']}"
245+
checksum_url = f"{url}.CHECKSUM"
246+
response = requests.get(checksum_url, timeout=30)
247+
response.raise_for_status()
248+
249+
checksum_line = response.text.strip()
250+
checksum = checksum_line.split()[0]
251+
252+
content["spec"]["resource"]["content"]["download"]["hash"]["value"] = checksum
253+
logger.info("Updated checksum: %s", checksum)
247254

248255
writefile(target, content)
249256

@@ -297,4 +304,6 @@ def update_node_images(target: PosixPath, **kwargs):
297304
)
298305
update_csctl_conf(output_dir.joinpath("csctl.yaml"), **tv)
299306
update_cluster_class(output_dir.joinpath("cluster-class"), **tv)
300-
update_node_images(output_dir.joinpath("node-images", "config.yaml"), **tv)
307+
update_node_images(
308+
output_dir.joinpath("cluster-class", "templates", "image.yaml"), **tv
309+
)
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
dependencies:
22
- name: cilium
33
repository: https://helm.cilium.io/
4-
version: 1.17.2
5-
digest: sha256:50ad7512444f79ac3180a9c1f33ed38b352a5241f2602ff6a023665bdb11363d
6-
generated: "2025-04-07T22:09:00.709068531+02:00"
4+
version: 1.17.4
5+
digest: sha256:bbf6df8f80e3eef4e48b2f767734b19ec0c69aa23afc12f5a2f04587383ef089
6+
generated: "2025-05-28T20:26:29.333212374+02:00"

providers/openstack/scs/cluster-addon/cni/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ dependencies:
77
- alias: cilium
88
name: cilium
99
repository: https://helm.cilium.io/
10-
version: 1.17.2
10+
version: 1.17.4
Binary file not shown.
Binary file not shown.

providers/openstack/scs2/README.md

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
# Cluster Stacks
2+
3+
## Getting started
4+
5+
```sh
6+
# Create bootstrap cluster
7+
kind create cluster
8+
9+
# Init Cluster API
10+
export CLUSTER_TOPOLOGY=true
11+
export EXP_CLUSTER_RESOURCE_SET=true
12+
export EXP_RUNTIME_SDK=true
13+
kubectl apply -f https://github.com/k-orc/openstack-resource-controller/releases/latest/download/install.yaml
14+
clusterctl init --infrastructure openstack
15+
16+
kubectl -n capi-system rollout status deployment
17+
kubectl -n capo-system rollout status deployment
18+
```
19+
20+
```
21+
# Install CSO and CSPO
22+
helm upgrade -i cso \
23+
-n cso-system \
24+
--create-namespace \
25+
oci://registry.scs.community/cluster-stacks/cso
26+
```
27+
28+
```sh
29+
export CLUSTER_NAMESPACE=cluster
30+
export CLUSTER_NAME=my-cluster
31+
export CLUSTERSTACK_NAMESPACE=cluster
32+
export CLUSTERSTACK_VERSION=v1
33+
export OS_CLIENT_CONFIG_FILE=${PWD}/clouds.yaml
34+
kubectl create namespace $CLUSTER_NAMESPACE --dry-run=client -o yaml | kubectl apply -f -
35+
```
36+
37+
```sh
38+
# Create secret for CAPO
39+
kubectl create secret -n $CLUSTER_NAMESPACE generic openstack --from-file=clouds.yaml=$OS_CLIENT_CONFIG_FILE --dry-run=client -oyaml | kubectl apply -f -
40+
41+
# Prepare the Secret as it will be deployed in the Workload Cluster
42+
kubectl create secret -n kube-system generic clouds-yaml --from-file=clouds.yaml=$OS_CLIENT_CONFIG_FILE --dry-run=client -oyaml > clouds-yaml-secret
43+
44+
# Add the Secret to the ClusterResourceSet Secret in the Management Cluster
45+
kubectl create -n $CLUSTER_NAMESPACE secret generic clouds-yaml --from-file=clouds-yaml-secret --type=addons.cluster.x-k8s.io/resource-set --dry-run=client -oyaml | kubectl apply -f -
46+
```
47+
48+
```yaml
49+
cat <<EOF | kubectl apply -f -
50+
apiVersion: addons.cluster.x-k8s.io/v1beta1
51+
kind: ClusterResourceSet
52+
metadata:
53+
name: clouds-yaml
54+
namespace: $CLUSTER_NAMESPACE
55+
spec:
56+
strategy: "Reconcile"
57+
clusterSelector:
58+
matchLabels:
59+
managed-secret: clouds-yaml
60+
resources:
61+
- name: clouds-yaml
62+
kind: Secret
63+
EOF
64+
```
65+
66+
```sh
67+
# Apply ClusterStack resource
68+
cat <<EOF | kubectl apply -f -
69+
apiVersion: clusterstack.x-k8s.io/v1alpha1
70+
kind: ClusterStack
71+
metadata:
72+
name: openstack
73+
namespace: $CLUSTERSTACK_NAMESPACE
74+
spec:
75+
provider: openstack
76+
name: scs2
77+
kubernetesVersion: "1.33"
78+
channel: stable
79+
autoSubscribe: false
80+
noProvider: true
81+
versions:
82+
- $CLUSTERSTACK_VERSION
83+
EOF
84+
```
85+
86+
```sh
87+
# Apply Cluster resource
88+
cat <<EOF | kubectl apply -f -
89+
apiVersion: cluster.x-k8s.io/v1beta1
90+
kind: Cluster
91+
metadata:
92+
name: $CLUSTER_NAME
93+
namespace: $CLUSTER_NAMESPACE
94+
95+
labels:
96+
managed-secret: clouds-yaml
97+
spec:
98+
clusterNetwork:
99+
pods:
100+
cidrBlocks:
101+
- "172.16.0.0/16"
102+
serviceDomain: cluster.local
103+
services:
104+
cidrBlocks:
105+
- "10.96.0.0/12"
106+
topology:
107+
variables:
108+
class: openstack-scs2-1-33-$CLUSTERSTACK_VERSION
109+
classNamespace: $CLUSTERSTACK_NAMESPACE
110+
controlPlane:
111+
replicas: 1
112+
version: v1.33.4
113+
workers:
114+
machineDeployments:
115+
- class: default-worker
116+
name: md-0
117+
replicas: 1
118+
EOF
119+
```
120+
121+
```sh
122+
clusterctl get kubeconfig -n $CLUSTER_NAMESPACE openstack-testcluster > /tmp/kubeconfig
123+
kubectl get nodes --kubeconfig /tmp/kubeconfig
124+
```
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
apiVersion: v2
2+
type: application
3+
description: CCM
4+
name: CCM
5+
version: v1
6+
dependencies:
7+
- alias: openstack-cloud-controller-manager
8+
name: openstack-cloud-controller-manager
9+
repository: https://kubernetes.github.io/cloud-provider-openstack
10+
version: 2.33.1
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
values: |
2+
openstack-cloud-controller-manager:
3+
cluster:
4+
name: {{ .Cluster.metadata.name }}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
openstack-cloud-controller-manager:
2+
secret:
3+
enabled: true
4+
name: ccm-cloud-config
5+
create: true
6+
nodeSelector:
7+
tolerations:
8+
- key: node.cloudprovider.kubernetes.io/uninitialized
9+
value: "true"
10+
effect: NoSchedule
11+
extraVolumes:
12+
- name: clouds-yaml
13+
secret:
14+
secretName: clouds-yaml
15+
extraVolumeMounts:
16+
- name: clouds-yaml
17+
readOnly: true
18+
mountPath: /etc/openstack
19+
cloudConfig:
20+
global:
21+
use-clouds: true
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
apiVersion: v2
2+
type: application
3+
description: CNI
4+
name: CNI
5+
version: v1
6+
dependencies:
7+
- alias: cilium
8+
name: cilium
9+
repository: https://helm.cilium.io/
10+
version: 1.18.1

0 commit comments

Comments
 (0)