]> git.immae.eu Git - github/fretlink/ansible-kong-app.git/blobdiff - tasks/plugins.yml
Merge pull request #23 from paulrbr-fl/use-put-for-idempotency
[github/fretlink/ansible-kong-app.git] / tasks / plugins.yml
index c8f165c1e1a4d79c5b94dc6b7e921d49b2169b9f..90a038667db479d8adf82c84f8dac338403b929a 100644 (file)
 - name: Get plugins
   uri:
-    url: "{{ kong_app_admin_url }}/services/{{ kong_app_service_name }}/plugins"
+    url: "{{ server.kong_app_admin_url }}/services/{{ service.name }}/plugins"
     method: GET
     validate_certs: no
+    headers:
+      apikey: "{{ server.kong_app_admin_apikey }}"
   register: kong_app_service_plugins_check
 
-- name: Set plugins facts
-  set_fact:
-    kong_app_current_plugins: "{{ kong_app_service_plugins_check.json | default('{}') | from_json }}"
-
-- name: Setup plugin {{ plugin.name }}
+- name: Setup plugin
   uri:
-    url: "{{ kong_app_admin_url }}/services/{{ kong_app_service_name }}/plugins"
-    method: "{{ (current_config == {}) | ternary ('POST', 'PATCH') }}"
+    url: "{{ server.kong_app_admin_url }}/{{ exists_plugin | ternary(create_url, update_url) }}"
+    method: "{{ exists_plugin | ternary ('POST', 'PATCH') }}"
     body: "{{ plugin | combine(current_body)  | to_json }}"
     headers:
-      apikey: "{{ kong_app_admin_apikey }}"
+      apikey: "{{ server.kong_app_admin_apikey }}"
       Content-Type: application/json
     status_code: 200,201
-  with_items: "{{ kong_app_plugins }}"
+  with_items: "{{ service.plugins | default([]) }}"
   loop_control:
     loop_var: plugin
   vars:
-    current_config: "{{ kong_app_current_plugins.data | selectattr('name', plugin.name) | first |default({}) }}"
+    create_url: "services/{{ service.name }}/plugins"
+    update_url: "plugins/{{ current_config.id }}"
+    plugins_list: "{{ kong_app_service_plugins_check.json.data }}"
+    current_config: "{{ plugins_list | selectattr('name', 'equalto', plugin.name) | first |default({\"id\": ''}) }}"
     current_id_hash:
-      id: "{{ current_config.id | default('')}}"
-    current_body: "{{ (current_id_hash.id == '') | ternary({}, current_id_hash) }}"
+      id: "{{ current_config.id }}"
+    current_body: "{{ (not current_id_hash.id)  | ternary({}, current_id_hash) }}"
+    exists_plugin: "{{ not current_id_hash.id  }}"
+  when: not kong_app_service_plugins_check is skipped
+  ignore_errors: true
+  no_log: true
+  register: kong_plugin_update_st
+
+- name: Retry failed (deletion)
+  uri:
+    url: "{{ url }}"
+    method: "DELETE"
+    headers: "{{ headers }}"
+    status_code: 204
+  loop: "{{ kong_plugin_update_st.results }}"
+  loop_control:
+    loop_var: result
+    label: "{{ label_name }}"
+  vars:
+    method: "{{ result.invocation.module_args.method }}"
+    url: "{{ result.invocation.module_args.url }}"
+    headers: "{{ result.invocation.module_args.headers }}"
+    label_name: "{{ result.plugin.name }}"
+  when:
+    - kong_plugin_update_st is failed
+    - result is failed
+    - method == "PATCH"
+  no_log: true
+
+- name: Retry failed (recreation)
+  uri:
+    url: "{{ server.kong_app_admin_url }}/services/{{ service.name }}/plugins"
+    method: "POST"
+    body: "{{ body | to_json }}"
+    headers: "{{ headers }}"
+    status_code: 200,201
+  loop: "{{ kong_plugin_update_st.results }}"
+  loop_control:
+    loop_var: result
+    label: "{{ label_name }}"
+  vars:
+    method: "{{ result.invocation.module_args.method }}"
+    headers: "{{ result.invocation.module_args.headers }}"
+    body: "{{ result.invocation.module_args.body }}"
+    label_name: "{{ result.plugin.name }}"
+  when:
+    - kong_plugin_update_st is failed
+    - result is failed
+    - method == "PATCH"
+  no_log: true
+
+- name: Give info on errors
+  debug:
+      msg: "{{ info }}"
+  loop: "{{ kong_plugin_update_st.results }}"
+  loop_control:
+    label: "{{ item.plugin.name }}"
+  when:
+    - kong_plugin_update_st is failed
+    - item is failed
+    - item.plugin is defined
+    - item.plugin.name is defined
+    - item.json is defined
+    - item.json.message is defined
+  vars:
+    info: "{{ item.json.message }}"
+
+- name: Fail otherwise
+  fail:
+    msg: "This plugin {{ result.plugin.name }} failed to be created"
+  loop: "{{ kong_plugin_update_st.results }}"
+  loop_control:
+    loop_var: result
+    label: "{{ label_name }}"
+  vars:
+    method: "{{ result.invocation.module_args.method }}"
+    label_name: "{{ result.plugin.name }}"
+  when:
+    - kong_plugin_update_st is failed
+    - result is failed
+    - method == "POST"
+  no_log: true