2026-02-28 20:24:55 +00:00
|
|
|
---
|
|
|
|
|
- name: Check if Hetzner CCM is already deployed
|
2026-03-01 03:44:36 +00:00
|
|
|
command: kubectl -n kube-system get deployment hcloud-cloud-controller-manager
|
2026-02-28 20:24:55 +00:00
|
|
|
register: ccm_namespace
|
|
|
|
|
failed_when: false
|
|
|
|
|
changed_when: false
|
|
|
|
|
|
|
|
|
|
- name: Create Hetzner cloud secret
|
2026-03-01 03:13:33 +00:00
|
|
|
shell: |
|
2026-03-01 03:44:36 +00:00
|
|
|
kubectl -n kube-system create secret generic hcloud \
|
2026-03-01 03:13:33 +00:00
|
|
|
--from-literal=token='{{ hcloud_token }}' \
|
|
|
|
|
--from-literal=network='{{ cluster_name }}-network' \
|
|
|
|
|
--dry-run=client -o yaml | kubectl apply -f -
|
2026-02-28 20:24:55 +00:00
|
|
|
no_log: true
|
|
|
|
|
when: hcloud_token is defined
|
2026-03-01 03:13:33 +00:00
|
|
|
changed_when: true
|
2026-02-28 20:24:55 +00:00
|
|
|
|
|
|
|
|
- name: Deploy Hetzner CCM
|
2026-03-01 03:13:33 +00:00
|
|
|
command: kubectl apply -f https://raw.githubusercontent.com/hetznercloud/hcloud-cloud-controller-manager/main/deploy/ccm-networks.yaml
|
|
|
|
|
changed_when: true
|
2026-02-28 20:24:55 +00:00
|
|
|
|
2026-03-01 03:37:08 +00:00
|
|
|
- name: Detect CCM workload kind
|
|
|
|
|
shell: |
|
2026-03-01 03:44:36 +00:00
|
|
|
if kubectl -n kube-system get deployment hcloud-cloud-controller-manager >/dev/null 2>&1; then
|
2026-03-01 03:37:08 +00:00
|
|
|
echo deployment
|
2026-03-01 03:44:36 +00:00
|
|
|
elif kubectl -n kube-system get daemonset hcloud-cloud-controller-manager >/dev/null 2>&1; then
|
2026-03-01 03:37:08 +00:00
|
|
|
echo daemonset
|
|
|
|
|
else
|
|
|
|
|
echo missing
|
|
|
|
|
fi
|
|
|
|
|
register: ccm_workload_kind
|
|
|
|
|
changed_when: false
|
|
|
|
|
|
|
|
|
|
- name: Wait for CCM deployment rollout
|
2026-03-01 03:44:36 +00:00
|
|
|
command: kubectl rollout status deployment/hcloud-cloud-controller-manager -n kube-system
|
2026-03-01 03:37:08 +00:00
|
|
|
register: ccm_rollout_deploy
|
|
|
|
|
until: ccm_rollout_deploy.rc == 0
|
|
|
|
|
changed_when: false
|
|
|
|
|
retries: 30
|
|
|
|
|
delay: 10
|
|
|
|
|
when: ccm_workload_kind.stdout == "deployment"
|
|
|
|
|
|
|
|
|
|
- name: Wait for CCM daemonset rollout
|
2026-03-01 03:44:36 +00:00
|
|
|
command: kubectl rollout status daemonset/hcloud-cloud-controller-manager -n kube-system
|
2026-03-01 03:37:08 +00:00
|
|
|
register: ccm_rollout_ds
|
|
|
|
|
until: ccm_rollout_ds.rc == 0
|
2026-02-28 20:24:55 +00:00
|
|
|
changed_when: false
|
|
|
|
|
retries: 30
|
|
|
|
|
delay: 10
|
2026-03-01 03:37:08 +00:00
|
|
|
when: ccm_workload_kind.stdout == "daemonset"
|
|
|
|
|
|
|
|
|
|
- name: Show CCM namespace objects when workload missing
|
2026-03-01 03:44:36 +00:00
|
|
|
command: kubectl -n kube-system get all | grep hcloud-cloud-controller-manager || true
|
2026-03-01 03:37:08 +00:00
|
|
|
register: ccm_ns_objects
|
|
|
|
|
changed_when: false
|
|
|
|
|
when: ccm_workload_kind.stdout == "missing"
|
|
|
|
|
|
|
|
|
|
- name: Fail when CCM workload is missing
|
|
|
|
|
fail:
|
|
|
|
|
msg: |
|
|
|
|
|
hcloud-cloud-controller-manager workload not found after applying manifest.
|
|
|
|
|
Namespace objects:
|
|
|
|
|
{{ ccm_ns_objects.stdout | default('n/a') }}
|
|
|
|
|
when: ccm_workload_kind.stdout == "missing"
|