Skip to content

Commit 366b139

Browse files
ssimpson89claude
andauthored
Always trigger a restart when tag is latest (#199)
* Force rolling restart for latest-tagged Ascender and Ledger deployments When image tag is "latest", Kubernetes won't re-pull if the Deployment spec is unchanged. This adds a restartedAt annotation patch after deployments are ready, forcing a rollout so the newest image is pulled. Only runs when ASCENDER_VERSION or LEDGER_VERSION is "latest". Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Force rolling restart for latest-tagged Ascender and Ledger deployments When image tag is "latest", Kubernetes won't re-pull if the Deployment spec is unchanged. This adds a restartedAt annotation patch after deployments are ready, forcing a rollout so the newest image is pulled. Only runs when ASCENDER_VERSION or LEDGER_VERSION is "latest". Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix review findings: case-insensitive version check, missing verify_ssl, remove dead files - Add | lower filter to all 14 when conditions so "Latest" and "LATEST" are handled correctly - Add verify_ssl: false to DKP Ascender restart task for consistency - Remove orphaned restart_latest_deployments.yml files from both roles Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Gate restart on apply result to skip unnecessary rollouts on fresh installs Register the apply task result and only trigger the restartedAt annotation patch when the apply did not change anything. This avoids redundant restarts on fresh installs and version switches where pods are already pulling the latest image. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 2a078e2 commit 366b139

14 files changed

Lines changed: 343 additions & 0 deletions

playbooks/roles/ascender_install/tasks/ascender_install_aks.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
state: present
8282
definition: "{{ lookup('ansible.builtin.template', 'ascender-deployment/ascender-deployment-aks.yml') }}"
8383
verify_ssl: false
84+
register: ascender_apply_result
8485

8586
- name: Wait for ascender-app-web Deployment to complete setting up (this may take up to 10 minutes)
8687
kubernetes.core.k8s_info:
@@ -92,6 +93,29 @@
9293
wait_timeout: 360
9394
verify_ssl: false
9495

96+
- name: Restart Ascender deployments to pull latest image
97+
kubernetes.core.k8s:
98+
state: present
99+
api_version: apps/v1
100+
kind: Deployment
101+
name: "{{ item }}"
102+
namespace: "{{ ASCENDER_NAMESPACE }}"
103+
definition:
104+
spec:
105+
template:
106+
metadata:
107+
annotations:
108+
kubectl.kubernetes.io/restartedAt: "{{ ansible_date_time.iso8601 }}"
109+
merge_type:
110+
- strategic-merge
111+
verify_ssl: false
112+
loop:
113+
- ascender-app-web
114+
- ascender-app-task
115+
when:
116+
- ASCENDER_VERSION | lower == "latest"
117+
- not ascender_apply_result.changed
118+
95119
- name: Retrieve the ascender-app-ingress Ingress object
96120
kubernetes.core.k8s_info:
97121
api_version: v1

playbooks/roles/ascender_install/tasks/ascender_install_dkp.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
kubernetes.core.k8s:
7373
state: present
7474
definition: "{{ lookup('ansible.builtin.template', 'ascender-deployment/ascender-deployment-dkp.yml') }}"
75+
register: ascender_apply_result
7576

7677
- name: Wait for ascender-app-web Deployment to complete setting up (this may take up to 10 minutes)
7778
kubernetes.core.k8s_info:
@@ -82,6 +83,29 @@
8283
wait_sleep: 10
8384
wait_timeout: 360
8485

86+
- name: Restart Ascender deployments to pull latest image
87+
kubernetes.core.k8s:
88+
state: present
89+
api_version: apps/v1
90+
kind: Deployment
91+
name: "{{ item }}"
92+
namespace: "{{ ASCENDER_NAMESPACE }}"
93+
definition:
94+
spec:
95+
template:
96+
metadata:
97+
annotations:
98+
kubectl.kubernetes.io/restartedAt: "{{ ansible_date_time.iso8601 }}"
99+
merge_type:
100+
- strategic-merge
101+
verify_ssl: false
102+
loop:
103+
- ascender-app-web
104+
- ascender-app-task
105+
when:
106+
- ASCENDER_VERSION | lower == "latest"
107+
- not ascender_apply_result.changed
108+
85109
- name: Set the Ascender URL
86110
ansible.builtin.set_fact:
87111
ascender_ip: "{{ ASCENDER_HOSTNAME }}"

playbooks/roles/ascender_install/tasks/ascender_install_eks.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
state: present
8080
definition: "{{ lookup('ansible.builtin.template', 'ascender-deployment/ascender-deployment-eks.yml') }}"
8181
verify_ssl: false
82+
register: ascender_apply_result
8283

8384
- name: Wait for ascender-app-task Deployment to complete setting up (this may take up to 10 minutes)
8485
kubernetes.core.k8s_info:
@@ -90,6 +91,29 @@
9091
wait_timeout: 900
9192
verify_ssl: false
9293

94+
- name: Restart Ascender deployments to pull latest image
95+
kubernetes.core.k8s:
96+
state: present
97+
api_version: apps/v1
98+
kind: Deployment
99+
name: "{{ item }}"
100+
namespace: "{{ ASCENDER_NAMESPACE }}"
101+
definition:
102+
spec:
103+
template:
104+
metadata:
105+
annotations:
106+
kubectl.kubernetes.io/restartedAt: "{{ ansible_date_time.iso8601 }}"
107+
merge_type:
108+
- strategic-merge
109+
verify_ssl: false
110+
loop:
111+
- ascender-app-web
112+
- ascender-app-task
113+
when:
114+
- ASCENDER_VERSION | lower == "latest"
115+
- not ascender_apply_result.changed
116+
93117
- name: Retrieve the ascender-app-ingress Ingress object
94118
kubernetes.core.k8s_info:
95119
api_version: v1

playbooks/roles/ascender_install/tasks/ascender_install_gke.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
state: present
8282
definition: "{{ lookup('ansible.builtin.template', 'ascender-deployment/ascender-deployment-gke.yml') }}"
8383
verify_ssl: false
84+
register: ascender_apply_result
8485

8586
- name: Wait for ascender-app-web Deployment to complete setting up (this may take up to 10 minutes)
8687
kubernetes.core.k8s_info:
@@ -92,6 +93,29 @@
9293
wait_timeout: 360
9394
verify_ssl: false
9495

96+
- name: Restart Ascender deployments to pull latest image
97+
kubernetes.core.k8s:
98+
state: present
99+
api_version: apps/v1
100+
kind: Deployment
101+
name: "{{ item }}"
102+
namespace: "{{ ASCENDER_NAMESPACE }}"
103+
definition:
104+
spec:
105+
template:
106+
metadata:
107+
annotations:
108+
kubectl.kubernetes.io/restartedAt: "{{ ansible_date_time.iso8601 }}"
109+
merge_type:
110+
- strategic-merge
111+
verify_ssl: false
112+
loop:
113+
- ascender-app-web
114+
- ascender-app-task
115+
when:
116+
- ASCENDER_VERSION | lower == "latest"
117+
- not ascender_apply_result.changed
118+
95119
- name: Retrieve the ascender-app-ingress Ingress object
96120
kubernetes.core.k8s_info:
97121
api_version: v1

playbooks/roles/ascender_install/tasks/ascender_install_k3s.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
state: present
9292
definition: "{{ lookup('ansible.builtin.template', 'ascender-deployment/ascender-deployment-k3s.yml') }}"
9393
verify_ssl: false
94+
register: ascender_apply_result
9495

9596
- name: Wait for ascender-app-web Deployment to complete setting up (this may take up to 10 minutes)
9697
kubernetes.core.k8s_info:
@@ -102,6 +103,29 @@
102103
wait_timeout: 360
103104
verify_ssl: false
104105

106+
- name: Restart Ascender deployments to pull latest image
107+
kubernetes.core.k8s:
108+
state: present
109+
api_version: apps/v1
110+
kind: Deployment
111+
name: "{{ item }}"
112+
namespace: "{{ ASCENDER_NAMESPACE }}"
113+
definition:
114+
spec:
115+
template:
116+
metadata:
117+
annotations:
118+
kubectl.kubernetes.io/restartedAt: "{{ ansible_date_time.iso8601 }}"
119+
merge_type:
120+
- strategic-merge
121+
verify_ssl: false
122+
loop:
123+
- ascender-app-web
124+
- ascender-app-task
125+
when:
126+
- ASCENDER_VERSION | lower == "latest"
127+
- not ascender_apply_result.changed
128+
105129
- name: Set the Ascender URL
106130
ansible.builtin.set_fact:
107131
ascender_ip: "{{ ASCENDER_HOSTNAME }}"

playbooks/roles/ascender_install/tasks/ascender_install_ocp.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@
114114
state: present
115115
definition: "{{ lookup('ansible.builtin.template', 'ascender-deployment/ascender-deployment-ocp.yml') }}"
116116
verify_ssl: false
117+
register: ascender_apply_result
117118

118119
- name: Wait for ascender-app-web Deployment to complete setting up (this may take up to 10 minutes)
119120
kubernetes.core.k8s_info:
@@ -125,6 +126,29 @@
125126
wait_timeout: 360
126127
verify_ssl: false
127128

129+
- name: Restart Ascender deployments to pull latest image
130+
kubernetes.core.k8s:
131+
state: present
132+
api_version: apps/v1
133+
kind: Deployment
134+
name: "{{ item }}"
135+
namespace: "{{ ASCENDER_NAMESPACE }}"
136+
definition:
137+
spec:
138+
template:
139+
metadata:
140+
annotations:
141+
kubectl.kubernetes.io/restartedAt: "{{ ansible_date_time.iso8601 }}"
142+
merge_type:
143+
- strategic-merge
144+
verify_ssl: false
145+
loop:
146+
- ascender-app-web
147+
- ascender-app-task
148+
when:
149+
- ASCENDER_VERSION | lower == "latest"
150+
- not ascender_apply_result.changed
151+
128152
- name: Set the Ascender URL
129153
ansible.builtin.set_fact:
130154
ascender_ip: "{{ ASCENDER_HOSTNAME }}"

playbooks/roles/ascender_install/tasks/ascender_install_rke2.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
state: present
7676
definition: "{{ lookup('ansible.builtin.template', 'ascender-deployment/ascender-deployment-rke2.yml') }}"
7777
verify_ssl: false
78+
register: ascender_apply_result
7879

7980
- name: Wait for ascender-app-web Deployment to complete setting up (this may take up to 10 minutes)
8081
kubernetes.core.k8s_info:
@@ -86,6 +87,29 @@
8687
wait_timeout: 360
8788
verify_ssl: false
8889

90+
- name: Restart Ascender deployments to pull latest image
91+
kubernetes.core.k8s:
92+
state: present
93+
api_version: apps/v1
94+
kind: Deployment
95+
name: "{{ item }}"
96+
namespace: "{{ ASCENDER_NAMESPACE }}"
97+
definition:
98+
spec:
99+
template:
100+
metadata:
101+
annotations:
102+
kubectl.kubernetes.io/restartedAt: "{{ ansible_date_time.iso8601 }}"
103+
merge_type:
104+
- strategic-merge
105+
verify_ssl: false
106+
loop:
107+
- ascender-app-web
108+
- ascender-app-task
109+
when:
110+
- ASCENDER_VERSION | lower == "latest"
111+
- not ascender_apply_result.changed
112+
89113
- name: Set the Ascender URL
90114
ansible.builtin.set_fact:
91115
ascender_ip: "{{ ASCENDER_HOSTNAME }}"

playbooks/roles/ledger_install/tasks/ledger_install_aks.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
namespace: "{{ LEDGER_NAMESPACE }}"
2929
definition: "{{ lookup('template', 'templates/ledger_deployment_aks.yaml') | from_yaml_all }}"
3030
verify_ssl: false
31+
register: ledger_apply_result
3132

3233
- name: Wait for Ledger web Deployment to complete setting up
3334
kubernetes.core.k8s_info:
@@ -53,6 +54,30 @@
5354
- ansible.builtin.debug:
5455
var: parser_svc.resources[0].spec.ports[0].port
5556

57+
- name: Restart Ledger deployments to pull latest image
58+
kubernetes.core.k8s:
59+
state: present
60+
api_version: apps/v1
61+
kind: Deployment
62+
name: "{{ item }}"
63+
namespace: "{{ LEDGER_NAMESPACE }}"
64+
definition:
65+
spec:
66+
template:
67+
metadata:
68+
annotations:
69+
kubectl.kubernetes.io/restartedAt: "{{ ansible_date_time.iso8601 }}"
70+
merge_type:
71+
- strategic-merge
72+
verify_ssl: false
73+
loop:
74+
- db
75+
- parser
76+
- web
77+
when:
78+
- LEDGER_VERSION | lower == "latest"
79+
- not ledger_apply_result.changed
80+
5681
- name: Retrieve the ledger-web-ingress Ingress object
5782
kubernetes.core.k8s_info:
5883
api_version: v1

playbooks/roles/ledger_install/tasks/ledger_install_dkp.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
state: present
2828
namespace: "{{ LEDGER_NAMESPACE }}"
2929
definition: "{{ lookup('template', 'templates/ledger_deployment_dkp.yaml') | from_yaml_all }}"
30+
register: ledger_apply_result
3031

3132
- name: Wait for Ledger web Deployment to complete setting up
3233
kubernetes.core.k8s_info:
@@ -50,6 +51,30 @@
5051
- ansible.builtin.debug:
5152
var: parser_svc.resources[0].spec.ports[0].port
5253

54+
- name: Restart Ledger deployments to pull latest image
55+
kubernetes.core.k8s:
56+
state: present
57+
api_version: apps/v1
58+
kind: Deployment
59+
name: "{{ item }}"
60+
namespace: "{{ LEDGER_NAMESPACE }}"
61+
definition:
62+
spec:
63+
template:
64+
metadata:
65+
annotations:
66+
kubectl.kubernetes.io/restartedAt: "{{ ansible_date_time.iso8601 }}"
67+
merge_type:
68+
- strategic-merge
69+
verify_ssl: false
70+
loop:
71+
- db
72+
- parser
73+
- web
74+
when:
75+
- LEDGER_VERSION | lower == "latest"
76+
- not ledger_apply_result.changed
77+
5378
- name: Set the Ledger URL
5479
ansible.builtin.set_fact:
5580
ledger_ip: "{{ LEDGER_HOSTNAME }}"

playbooks/roles/ledger_install/tasks/ledger_install_eks.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
namespace: "{{ LEDGER_NAMESPACE }}"
6363
definition: "{{ lookup('template', 'templates/ledger_deployment_eks.yaml') | from_yaml_all }}"
6464
verify_ssl: false
65+
register: ledger_apply_result
6566

6667
- name: Wait for Ledger web Deployment to complete setting up
6768
kubernetes.core.k8s_info:
@@ -87,6 +88,30 @@
8788
- ansible.builtin.debug:
8889
var: parser_svc.resources[0].spec.ports[0].port
8990

91+
- name: Restart Ledger deployments to pull latest image
92+
kubernetes.core.k8s:
93+
state: present
94+
api_version: apps/v1
95+
kind: Deployment
96+
name: "{{ item }}"
97+
namespace: "{{ LEDGER_NAMESPACE }}"
98+
definition:
99+
spec:
100+
template:
101+
metadata:
102+
annotations:
103+
kubectl.kubernetes.io/restartedAt: "{{ ansible_date_time.iso8601 }}"
104+
merge_type:
105+
- strategic-merge
106+
verify_ssl: false
107+
loop:
108+
- db
109+
- parser
110+
- web
111+
when:
112+
- LEDGER_VERSION | lower == "latest"
113+
- not ledger_apply_result.changed
114+
90115
- name: Retrieve the ledger-web-ingress Ingress object
91116
kubernetes.core.k8s_info:
92117
api_version: v1

0 commit comments

Comments
 (0)