From dc31119c050787b624500df0c752f4699e7b2491 Mon Sep 17 00:00:00 2001 From: Sven Ketelsen Date: Wed, 1 Dec 2021 12:58:57 +0100 Subject: [PATCH] feat: new playbook to manipulate services from portal - update-service-state.yml service_state up down upgrade --- roles/awx/defaults/main.yml | 1 + roles/service-state/defaults/main.yml | 15 +++ roles/service-state/tasks/main.yml | 17 +++ .../provisioning/process/simple-connect.bpmn | 68 ++++++++++-- update-service-state.yml | 101 ++++++++++++++++++ 5 files changed, 194 insertions(+), 8 deletions(-) create mode 100644 roles/service-state/defaults/main.yml create mode 100644 roles/service-state/tasks/main.yml create mode 100644 update-service-state.yml diff --git a/roles/awx/defaults/main.yml b/roles/awx/defaults/main.yml index eeb6392..2feb703 100644 --- a/roles/awx/defaults/main.yml +++ b/roles/awx/defaults/main.yml @@ -37,3 +37,4 @@ awx_job_templates: - name: "remove-service" - name: "restore-database-backup" - name: "update-monitoring" + - name: "update-service-state" diff --git a/roles/service-state/defaults/main.yml b/roles/service-state/defaults/main.yml new file mode 100644 index 0000000..ca17a6d --- /dev/null +++ b/roles/service-state/defaults/main.yml @@ -0,0 +1,15 @@ +--- + +service_state_commands: + - key: up + command: "docker-compose up -d" + - key: down + command: "docker-compose down" + - key: upgrade + command: "docker-compose pull && docker-compose down && docker-compose up -d" + +service_state_command: "{{ service_state_commands + | selectattr('key', 'match', service_state ) + | map(attribute='command') + | list + | first }}" \ No newline at end of file diff --git a/roles/service-state/tasks/main.yml b/roles/service-state/tasks/main.yml new file mode 100644 index 0000000..072bbd8 --- /dev/null +++ b/roles/service-state/tasks/main.yml @@ -0,0 +1,17 @@ +--- + +### tags: + +- name: "Setting service state for <{{ service_id }}> to <{{ service_state }}>" + ansible.builtin.shell: "{{ service_state_command }}" + args: + chdir: '{{ service_base_path }}/{{ service_id }}' + register: service_state_command_output + +- name: "Printing service state stdout_lines" + debug: + msg: "{{ service_state_command_output }}" + delegate_to: 127.0.0.1 + become: false + when: + - debug diff --git a/smardigo/provisioning/process/simple-connect.bpmn b/smardigo/provisioning/process/simple-connect.bpmn index 622e8d5..48a16bb 100644 --- a/smardigo/provisioning/process/simple-connect.bpmn +++ b/smardigo/provisioning/process/simple-connect.bpmn @@ -469,7 +469,7 @@ Variables.userId(authenticatedUserId) ${1} - ${6} + ${3} Flow_0r057gs @@ -633,7 +633,7 @@ Variables.userId(authenticatedUserId) ${1} - ${2} + ${4} Flow_1c39717 @@ -646,7 +646,7 @@ Variables.userId(authenticatedUserId) Service gestartet - Flow_1xmeor7 + Flow_00jy6ae Flow_1rv440f @@ -677,7 +677,26 @@ Variables.userId(authenticatedUserId) - + + + + + + + + + + down + + + ${progress_current + 1} + + + Flow_09id3fl + Flow_1xmeor7 + + + @@ -692,10 +711,29 @@ Variables.userId(authenticatedUserId) ${progress_current + 1} - Flow_09id3fl - Flow_1xmeor7 + Flow_1xmeor7 + Flow_00a7lij - + + + + + + + + + + + up + + + ${progress_current + 1} + + + Flow_00a7lij + Flow_00jy6ae + + Flow_1n08t19 @@ -1456,9 +1494,17 @@ Server bei Hetzner löschen + + + + + + + + - + @@ -1656,6 +1702,12 @@ Server bei Hetzner löschen + + + + + + diff --git a/update-service-state.yml b/update-service-state.yml new file mode 100644 index 0000000..b087557 --- /dev/null +++ b/update-service-state.yml @@ -0,0 +1,101 @@ +--- + +# 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_services_str := (services to setup, e.g. 'connect,wordpress') +# service_state := the state of the service (e.g. up, down, upgrade) +# 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 + gather_facts: false + connection: local + + 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', 'connect_wordpress'] + +############################################################# +# Stop services for created inventory +############################################################# + +- hosts: "stage_{{ stage }}" + serial: "{{ serial_number | default(1) }}" + remote_user: root + vars: + service_state: up + ansible_ssh_host: "{{ stage_server_domain }}" + + pre_tasks: + - name: "Import autodiscover pre-tasks" + include_tasks: tasks/autodiscover_pre_tasks.yml + + roles: + - role: service-state + vars: + service_id: "{{ connect_id }}" + when: "'connect' in group_names" + + - role: service-state + vars: + service_id: "{{ wordpress_id }}" + when: "'connect_wordpress' in group_names" + +############################################################# +# Sending smardigo management message to process +############################################################# + +- hosts: "stage_{{ stage }}" + serial: "{{ serial_number | default(1) }}" + gather_facts: false + connection: local + run_once: true + + 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 + when: + - scope_id is defined + - process_instance_id is defined + - smardigo_management_action is defined