Implemented DCI Manager finish

This commit is contained in:
Jeroen Vermeulen 2023-09-18 16:12:07 +02:00
parent dd0cb886e1
commit 4d317cb64f
No known key found for this signature in database
8 changed files with 159 additions and 0 deletions

View File

@ -0,0 +1,4 @@
---
dependencies:
- role: common
- role: talos_dci_login

View File

@ -0,0 +1,25 @@
---
- debug:
var: dci_server_info.id
- name: Wait for Talos port 50000
delegate_to: "{{ talosctl_host }}"
become: no
ansible.builtin.wait_for:
host: "{{ ansible_remote }}"
port: 50000
- name: Call DCI Manager API to finish operation
when: dci_server_info.operation.status == 'running'
delegate_to: "{{ dci_manager_access_host }}"
become: no
ansible.builtin.uri:
url: "{{ dci_manager_protocol }}://{{ dci_manager_host }}:{{ dci_manager_port }}/dci/v3/server/{{ dci_server_info.id }}/operation_finish"
method: POST
headers:
X-Xsrf-Token: "{{ dci_token }}"
body_format: json
body: "{}"
register: _dci_finish
until: _dci_server.status != 503

View File

@ -0,0 +1,7 @@
---
dci_manager_access_host: localhost
dci_manager_protocol: https
dci_manager_host: dcimanager6.snel.com
dci_manager_port: 443
dci_manager_bitwarden_item_name: "dcimanager6.snel.com Ansible"
dci_manager_talos_os_template_id: 92

View File

@ -0,0 +1,69 @@
---
- name: Check BitWarden item
ansible.builtin.assert:
that: "lookup('community.general.bitwarden', dci_manager_bitwarden_item_name, field='password') | first | length > 0"
quiet: true
- name: Login on DCI Manager API
delegate_to: "{{ dci_manager_access_host }}"
become: no
ansible.builtin.uri:
url: "{{ dci_manager_protocol }}://{{ dci_manager_host }}:{{ dci_manager_port }}/api/auth/v4/public/token"
method: POST
body_format: json
return_content: true
headers:
Accept: application/json
body:
email: "{{ lookup('community.general.bitwarden', dci_manager_bitwarden_item_name, field='username') | first }}"
password: "{{ lookup('community.general.bitwarden', dci_manager_bitwarden_item_name, field='password') | first }}"
status_code: 201
register: _dci_manager_login
until: _dci_manager_login.status != 503
- name: Set token fact
ansible.builtin.set_fact:
dci_token: "{{ (_dci_manager_login.content | from_json).token }}"
- name: Get TOTP code from BitWarden
delegate_to: "localhost"
ansible.builtin.command:
cmd: "bw get totp '{{ dci_manager_bitwarden_item_name }}'"
register: _totp
changed_when: false
- name: Two factor authenticate DCI Manager API
delegate_to: "{{ dci_manager_access_host }}"
become: no
ansible.builtin.uri:
url: "{{ dci_manager_protocol }}://{{ dci_manager_host }}:{{ dci_manager_port }}/api/auth/v4/public/token/confirm"
method: POST
body_format: json
return_content: true
headers:
Accept: application/json
body: "{
\"token\": \"{{ dci_token }}\",
\"code\": {{ _totp.stdout | int }}
}"
register: _dci_2fa_auth
until: _dci_2fa_auth.status != 503
- name: Get all servers from DCI Manager
delegate_to: "{{ dci_manager_access_host }}"
become: no
ansible.builtin.uri:
url: "{{ dci_manager_protocol }}://{{ dci_manager_host }}:{{ dci_manager_port }}/dci/v3/server"
method: GET
return_content: true
headers:
Accept: application/json
X-Xsrf-Token: "{{ dci_token }}"
register: _dci_server
until: _dci_server.status != 503
- name: Set fact with server info from DCI Manager
ansible.builtin.set_fact:
dci_server_info: "{{ _dci_server.content | from_json | community.general.json_query('list[?@.ip[?@.name==`' ~ ansible_remote ~ '`]]') | first }}"

View File

@ -0,0 +1,4 @@
---
dependencies:
- role: common
- role: talos_dci_login

View File

@ -0,0 +1,32 @@
---
- debug:
var: dci_server_info.id
- name: Call DCI Manager API to reinstall Talos Linux
delegate_to: "{{ dci_manager_access_host }}"
become: no
ansible.builtin.uri:
url: "{{ dci_manager_protocol }}://{{ dci_manager_host }}:{{ dci_manager_port }}/dci/v3/server/{{ dci_server_info.id }}/operation_os"
method: POST
return_content: true
headers:
Accept: application/json
X-Xsrf-Token: "{{ dci_token }}"
body_format: json
body:
hdd_raid: "no_raid"
os_template_id: "{{ dci_manager_talos_os_template_id }}"
password: "_not_used_"
register: _dci_finish
until: _dci_server.status != 503
- debug:
var: _dci_finish
- name: Wait for Talos port 50000
delegate_to: "{{ talosctl_host }}"
become: no
ansible.builtin.wait_for:
host: "{{ ansible_remote }}"
port: 50000

View File

@ -1,6 +1,16 @@
---
# Playbook Talos Install
- name: Talos hardware nodes
become: no
gather_facts: false
hosts:
- talos_hardware_nodes
roles:
- role: talos_dci_finish
tags:
- talos_dci_finish
- name: Talos configs
become: no
gather_facts: false

8
talos_dci_reinstall.yml Normal file
View File

@ -0,0 +1,8 @@
---
- name: Reinstall Talos using DCI Manager
gather_facts: false
hosts:
- talos_hardware_nodes
roles:
- role: talos_dci_reinstall