|
|
|
@ -1,4 +1,12 @@
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
- name: "Block to handle hetzner server state in case of problems"
|
|
|
|
|
|
|
|
vars:
|
|
|
|
|
|
|
|
max_retries: "{{ max_retries | default(15) | int }}"
|
|
|
|
|
|
|
|
retry_delay: "{{ retry_delay | default(60) | int }}"
|
|
|
|
|
|
|
|
block:
|
|
|
|
|
|
|
|
- name: "Increment the retry count"
|
|
|
|
|
|
|
|
set_fact:
|
|
|
|
|
|
|
|
retry_count: "{{ retry_count | default(0) | int + 1 }}"
|
|
|
|
|
|
|
|
|
|
|
|
- name: "Checking state for server <{{ inventory_hostname }}> is <{{ server_state }}>"
|
|
|
|
- name: "Checking state for server <{{ inventory_hostname }}> is <{{ server_state }}>"
|
|
|
|
hetzner.hcloud.hcloud_server:
|
|
|
|
hetzner.hcloud.hcloud_server:
|
|
|
|
@ -17,7 +25,12 @@
|
|
|
|
register: hcloud_response
|
|
|
|
register: hcloud_response
|
|
|
|
ignore_errors: yes
|
|
|
|
ignore_errors: yes
|
|
|
|
|
|
|
|
|
|
|
|
# poweron server if server not running
|
|
|
|
- name: "Block - DEBUG: hcloud_response"
|
|
|
|
|
|
|
|
debug:
|
|
|
|
|
|
|
|
msg: '{{ hcloud_response.msg }}'
|
|
|
|
|
|
|
|
when:
|
|
|
|
|
|
|
|
- hcloud_response.msg is defined
|
|
|
|
|
|
|
|
|
|
|
|
- name: "Ensure Server is STARTED when server_state=present"
|
|
|
|
- name: "Ensure Server is STARTED when server_state=present"
|
|
|
|
hetzner.hcloud.hcloud_server:
|
|
|
|
hetzner.hcloud.hcloud_server:
|
|
|
|
api_token: "{{ hetzner_authentication_ansible }}"
|
|
|
|
api_token: "{{ hetzner_authentication_ansible }}"
|
|
|
|
@ -25,45 +38,27 @@
|
|
|
|
state: "started"
|
|
|
|
state: "started"
|
|
|
|
delegate_to: 127.0.0.1
|
|
|
|
delegate_to: 127.0.0.1
|
|
|
|
become: false
|
|
|
|
become: false
|
|
|
|
async: 300
|
|
|
|
async: 150
|
|
|
|
poll: 15
|
|
|
|
poll: 15
|
|
|
|
|
|
|
|
register: hcloud_response
|
|
|
|
when:
|
|
|
|
when:
|
|
|
|
- server_state == 'present'
|
|
|
|
- server_state == 'present'
|
|
|
|
- not hcloud_response.msg is defined
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# just catching hetzner error and trying to avoid manual interaction
|
|
|
|
rescue:
|
|
|
|
- name: "DEBUGGING Block for hetzner << message not found >> - error"
|
|
|
|
- name: "RESCUE - fail: Maximum retries reached"
|
|
|
|
block:
|
|
|
|
fail:
|
|
|
|
- name: "DEBUG: hcloud_response"
|
|
|
|
msg: "max_retries of {{ max_retries }} reached. Plz check."
|
|
|
|
|
|
|
|
when: retry_count | int == max_retries | int
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- name: "RESCUE-fail DEBUG: hcloud_response"
|
|
|
|
debug:
|
|
|
|
debug:
|
|
|
|
msg: '{{ hcloud_response.msg }}'
|
|
|
|
msg: '{{ hcloud_response.msg }}'
|
|
|
|
|
|
|
|
|
|
|
|
- name: "Ensure Server is STARTED when server_state=present"
|
|
|
|
- name: "RESCUE: wait_for between retries"
|
|
|
|
hetzner.hcloud.hcloud_server:
|
|
|
|
wait_for:
|
|
|
|
api_token: "{{ hetzner_authentication_ansible }}"
|
|
|
|
timeout: "{{ retry_delay }}"
|
|
|
|
name: "{{ inventory_hostname }}"
|
|
|
|
delegate_to: localhost
|
|
|
|
state: "started"
|
|
|
|
|
|
|
|
delegate_to: 127.0.0.1
|
|
|
|
|
|
|
|
become: false
|
|
|
|
|
|
|
|
retries: 40
|
|
|
|
|
|
|
|
delay: 15
|
|
|
|
|
|
|
|
until: server_locked.rc == 0
|
|
|
|
|
|
|
|
register: server_locked
|
|
|
|
|
|
|
|
when:
|
|
|
|
|
|
|
|
- server_state == 'present'
|
|
|
|
|
|
|
|
- hcloud_response.msg == 'cannot perform operation because server is locked'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- name: "Ensure Server is STARTED when server_state=present"
|
|
|
|
|
|
|
|
hetzner.hcloud.hcloud_server:
|
|
|
|
|
|
|
|
api_token: "{{ hetzner_authentication_ansible }}"
|
|
|
|
|
|
|
|
name: "{{ inventory_hostname }}"
|
|
|
|
|
|
|
|
state: "started"
|
|
|
|
|
|
|
|
delegate_to: 127.0.0.1
|
|
|
|
|
|
|
|
become: false
|
|
|
|
become: false
|
|
|
|
async: 300
|
|
|
|
|
|
|
|
poll: 15
|
|
|
|
|
|
|
|
when:
|
|
|
|
|
|
|
|
- server_state == 'present'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
when:
|
|
|
|
- name: "Include _set_server one time again - retry_count: {{ retry_count }}"
|
|
|
|
- hcloud_response.msg is defined
|
|
|
|
include_tasks: _set_server_state.yml
|
|
|
|
|