From 3c55ccb22322f107c8b82a824e5e28a576af9ae0 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sat, 13 Apr 2019 23:31:30 +0200 Subject: added cloud install role/playbook --- roles/cloud-install/tasks/install_hroot.yml | 124 ++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 roles/cloud-install/tasks/install_hroot.yml (limited to 'roles/cloud-install/tasks/install_hroot.yml') diff --git a/roles/cloud-install/tasks/install_hroot.yml b/roles/cloud-install/tasks/install_hroot.yml new file mode 100644 index 00000000..6d4d6017 --- /dev/null +++ b/roles/cloud-install/tasks/install_hroot.yml @@ -0,0 +1,124 @@ +--- +- name: retrieve ssh key fingerprints + uri: + url: "https://robot-ws.your-server.de/key" + method: GET + user: "{{ hroot_robot_account.username }}" + password: "{{ hroot_robot_account.password }}" + force_basic_auth: yes + status_code: 200 + register: sshkeys + delegate_to: localhost + check_mode: no + +- name: do not continue in check mode + fail: + msg: "can not bootstrap new servers in check mode" + when: ansible_check_mode + check_mode: no + +- block: + - name: retrieve server list from robot + uri: + url: "https://robot-ws.your-server.de/server" + method: GET + user: "{{ hroot_robot_account.username }}" + password: "{{ hroot_robot_account.password }}" + force_basic_auth: yes + status_code: 200 + register: servers + delegate_to: localhost + check_mode: no + + - name: extract server IP address from robot result + set_fact: + hetzner_main_ip: "{{ servers.json | hroot_extract_serverip(host_name) }}" + + when: hetzner_main_ip is not defined + +- name: display warning message + pause: + prompt: | + *** Danger **** + will be bootstraping host {{ inventory_hostname }} with main IP {{ hetzner_main_ip }} ... + ALL DATA WILL BE LOST!!! press CTRL-C then A to abort. + seconds: 15 + +- name: check if rescue mode is already active + uri: + url: "https://robot-ws.your-server.de/boot/{{ hetzner_main_ip }}/rescue" + method: GET + user: "{{ hroot_robot_account.username }}" + password: "{{ hroot_robot_account.password }}" + force_basic_auth: yes + status_code: 200 + register: rescuestatus + delegate_to: localhost + check_mode: no + +### TODO: for now we add all ssh keys that are installed in the robot - this might not be a good idea! +- name: activate rescue mode + when: not rescuestatus.json.rescue.active + uri: + url: "https://robot-ws.your-server.de/boot/{{ hetzner_main_ip }}/rescue" + method: POST + user: "{{ hroot_robot_account.username }}" + password: "{{ hroot_robot_account.password }}" + force_basic_auth: yes + body: "os=linux&arch=64&authorized_key[]={{ sshkeys.json | hroot_extract_ssh_key_fingerprints | join('&authorized_key[]=') }}" + status_code: 200 + headers: + Content-Type: "application/x-www-form-urlencoded" + delegate_to: localhost + +- name: wait for the rescue mode to become active + pause: + seconds: 5 + +- name: do a hardware reset + uri: + url: "https://robot-ws.your-server.de/reset/{{ hetzner_main_ip }}" + method: POST + user: "{{ hroot_robot_account.username }}" + password: "{{ hroot_robot_account.password }}" + force_basic_auth: yes + body: "type=hw" + status_code: 200 + headers: + Content-Type: "application/x-www-form-urlencoded" + delegate_to: localhost + +### TODO: would be nice to get the SSH host key from robot +- name: completely ignore ssh host keys for now + set_fact: + old_ansible_ssh_extra_args: "{{ ansible_ssh_extra_args | default('') }}" + ansible_ssh_extra_args: "{{ ansible_ssh_extra_args | default('') }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" + +- name: wait for rescue system to start up + wait_for_connection: + delay: 30 + timeout: 120 + +- import_tasks: hetzner_installimage.yml + +- name: reboot + shell: sleep 2 && shutdown -r now "triggered by ansible after running installimage" + async: 1 + poll: 0 + ignore_errors: True + changed_when: True + +### TODO: SSH host key handling needs to be improved +- name: automatically accept new ssh host key + set_fact: + ansible_ssh_extra_args: "{{ old_ansible_ssh_extra_args }} -o StrictHostKeyChecking=no" + +- name: wait for host to start up + wait_for_connection: + delay: 15 + timeout: 120 + +### TODO: SSH host key handling needs to be improved +- name: re-enable ssh host key checking + set_fact: + ansible_ssh_extra_args: "{{ old_ansible_ssh_extra_args }}" -- cgit v1.2.3