From 2591c3368d2dfdabb08d6a68cf3de4e1a92f5545 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=B6rz=2C=20Friedrich?= Date: Mon, 18 Oct 2021 11:31:34 +0000 Subject: [PATCH] DEV-196 feat: reverting changes done by create-service --- ansible.cfg | 3 +- remove-server.yml | 2 + remove-service.yml | 99 +++++++++++++++++++++++ roles/_digitalocean/tasks/_remove_dns.yml | 12 +-- tasks/autodiscover_pre_tasks.yml | 2 +- 5 files changed, 110 insertions(+), 8 deletions(-) create mode 100644 remove-service.yml diff --git a/ansible.cfg b/ansible.cfg index 1bd34e5..29763a2 100644 --- a/ansible.cfg +++ b/ansible.cfg @@ -1,2 +1,3 @@ [defaults] -inventory_plugins = ./inventory_plugins \ No newline at end of file +inventory_plugins = ./inventory_plugins +callback_whitelist = profile_tasks diff --git a/remove-server.yml b/remove-server.yml index 0b75655..0d5e7a1 100644 --- a/remove-server.yml +++ b/remove-server.yml @@ -65,6 +65,8 @@ include_role: name: _digitalocean tasks_from: _remove_dns + vars: + record_to_remove: '{{ inventory_hostname }}' ############################################################# # Sending smardigo management message to process diff --git a/remove-service.yml b/remove-service.yml new file mode 100644 index 0000000..a13fecc --- /dev/null +++ b/remove-service.yml @@ -0,0 +1,99 @@ +--- + +# Parameters: +# playbook inventory +# stage := the type of the stage (e.g. dev, int, qa, prod) +# tenant_id := (unique key for the tenant, e.g. customer) +# cluster_name := (business name for the cluster, e.g. product, department ) +# cluster_size := (WIP node count for the cluster) +# cluster_services_str := (services to setup, e.g. 'connect,wordpress') +# smardigo message callback +# scope_id := (scope id of the management process) +# process_instance_id := (process instance id of the management process) +# smardigo_management_action := (smardigo management action anme of the management process) + +############################################################# +# Creating inventory dynamically for given parameters +############################################################# + +- hosts: localhost + connection: local + gather_facts: false + + pre_tasks: + - name: "Check if ansible version is at least 2.10.x" + assert: + that: + - ansible_version.major >= 2 + - ansible_version.minor >= 10 + msg: "The ansible version has to be at least ({{ ansible_version.full }})" + - name: "Parsing cluster_services_str into cluster_services" + set_fact: + cluster_services: "{{ cluster_services_str | split(',') }}" + + tasks: + - name: Add hosts + add_host: + name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-01" + groups: + - "stage_{{ stage }}" + - "{{ cluster_service }}" + - "{{ item }}" + changed_when: False + with_items: "{{ cluster_services }}" + when: item in ['connect'] + + - name: Add hosts + add_host: + name: "{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-01" + groups: + - "stage_{{ stage }}" + - "{{ cluster_service }}" + - "{{ item }}" + changed_when: False + with_items: "{{ cluster_services }}" + when: item in ['connect_wordpress'] + +############################################################# +# Setup services for created inventory +############################################################# + +- hosts: "stage_{{ stage }}" + serial: "{{ serial_number | default(1) }}" + remote_user: root + + pre_tasks: + - name: "Import autodiscover pre-tasks" + include_tasks: tasks/autodiscover_pre_tasks.yml + - name: "Delete DNS entry <{{ inventory_hostname }}> for <{{ domain }}>" + include_role: + name: _digitalocean + tasks_from: _remove_dns + vars: + record_to_remove: '{{ stage }}-{{ tenant_id }}-{{ cluster_name }}-01-{{ cluster_service }}' + +############################################################# +# Sending smardigo management message to process +############################################################# + +- hosts: "stage_{{ stage }}" + serial: "{{ serial_number | default(1) }}" + connection: local + gather_facts: false + run_once: true + + post_tasks: + - name: "Sending smardigo management message <{{ smardigo_management_action }}> to <{{ scope_id }}/{{ process_instance_id }}>" + uri: + url: "{{ smardigo_management_url }}" + method: POST + body_format: json + body: "{{ lookup('template','smardigo-management-message.json.j2') }}" + headers: + accept: "*/*" + Content-Type: "application/json" + Smardigo-User-Token: "{{ smardigo_management_token }}" + status_code: [200] + retries: 5 + delay: 5 + delegate_to: 127.0.0.1 diff --git a/roles/_digitalocean/tasks/_remove_dns.yml b/roles/_digitalocean/tasks/_remove_dns.yml index b820462..2b80c42 100644 --- a/roles/_digitalocean/tasks/_remove_dns.yml +++ b/roles/_digitalocean/tasks/_remove_dns.yml @@ -1,8 +1,8 @@ --- -- name: "Read DNS entry for <{{ inventory_hostname }}.{{ domain }}> from digitalocean" +- name: "Read DNS entry for <{{ record_to_remove }}.{{ domain }}> from digitalocean" uri: - url: "https://api.digitalocean.com/v2/domains/{{ domain }}/records?name={{ inventory_hostname }}.{{ domain }}" + url: "https://api.digitalocean.com/v2/domains/{{ domain }}/records?name={{ record_to_remove }}.{{ domain }}" headers: accept: application/json authorization: "Bearer {{ digitalocean_authentication_token }}" @@ -21,7 +21,7 @@ tags: - update_dns -- name: "Parse DNS entry for <{{ inventory_hostname }}.{{ domain }}>" +- name: "Parse DNS entry for <{{ record_to_remove }}.{{ domain }}>" set_fact: domain_record: "{{ domain_records_response_json.domain_records | json_query(jmesquery) | first | default({'name': '-', 'ip': '-'}) }}" vars: @@ -31,7 +31,7 @@ tags: - update_dns -- name: Print DNS entry for <{{ inventory_hostname }}.{{ domain }}> +- name: Print DNS entry for <{{ record_to_remove }}.{{ domain }}> debug: msg: "{{ domain_record }}" delegate_to: 127.0.0.1 @@ -39,7 +39,7 @@ tags: - update_dns -- name: "Delete DNS entry <{{ inventory_hostname }}> for <{{ domain }}>" +- name: "Delete DNS entry <{{ record_to_remove }}> for <{{ domain }}>" uri: method: DELETE url: "https://api.digitalocean.com/v2/domains/{{ domain }}/records/{{ domain_record.id }}" @@ -49,7 +49,7 @@ status_code: 204 when: domain_record.ip != '-' - and inventory_hostname != domain_record.ip + and record_to_remove != domain_record.ip delegate_to: 127.0.0.1 become: false tags: diff --git a/tasks/autodiscover_pre_tasks.yml b/tasks/autodiscover_pre_tasks.yml index 5af9d47..b342f42 100644 --- a/tasks/autodiscover_pre_tasks.yml +++ b/tasks/autodiscover_pre_tasks.yml @@ -107,7 +107,7 @@ - name: "Reading public ip address for {{ inventory_hostname }}" set_fact: - stage_server_ip: "{{ hetzner_servers.json.servers | json_query(querystr) | first }}" + stage_server_ip: "{{ hetzner_servers.json.servers | json_query(querystr) | first | default('') }}" vars: querystr: "[?name=='{{ inventory_hostname }}'].public_net.ipv4.ip" delegate_to: 127.0.0.1