diff --git a/elk_metrics_7x/roles/elastic_ilm/tasks/elastic_ilm_update_policy.yml b/elk_metrics_7x/roles/elastic_ilm/tasks/elastic_ilm_update_policy.yml
index 858c4f15..d58b9013 100644
--- a/elk_metrics_7x/roles/elastic_ilm/tasks/elastic_ilm_update_policy.yml
+++ b/elk_metrics_7x/roles/elastic_ilm/tasks/elastic_ilm_update_policy.yml
@@ -17,6 +17,18 @@
     body_format: json
   when: check_policy.status == 200 and ilm_policy_name is defined and ilm_policy is defined and (elk_package_state | default('present')) != "latest"
 
+
+# If e.g. the ilm_policy_name has changed, the ILM policy may not exist, and needs to be pushed
+- name: Add ILM policy if non-existent
+  uri:
+    url: "http://127.0.0.1:{{ elastic_port }}/_ilm/policy/{{ ilm_policy_name }}"
+    method: PUT
+    body: "{{ ilm_policy }}"
+    status_code: 200
+    body_format: json
+  when: check_policy.status == 404 and ilm_policy_name is defined and ilm_policy is defined and (elk_package_state | default('present')) != "latest"
+
+
 - name: Get template
   uri:
     url: "http://127.0.0.1:{{ elastic_port }}/_template/{{ ilm_policy_template }}/"
@@ -27,7 +39,7 @@
   when: ilm_policy_template is defined and ilm_policy_name is defined
 
 - set_fact:
-    updated_template: "{{ template.json | combine({template.json.keys()[0]|string:{'settings': {'index': {'lifecycle': {'name': 'ilm_policy_name' }}}}}, recursive=True) }}"
+    updated_template: "{{ template.json | combine({template.json.keys()[0]|string:{'settings': {'index': {'lifecycle': {'name': ilm_policy_name }}}}}, recursive=True) }}"
   when: template.status == 200 and ilm_policy_template is defined and ilm_policy_name is defined
 
 - name: Update template