blob: 60838b1f0825380d4060916f47dfc68fccb54917 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
---
# https://documenter.getpostman.com/view/14802249/TzkyNLMQ#intro
## TODO: allow other installer variants
- name: generate host specific installer iso
delegate_to: localhost
vars:
installer_base_path: "{{ global_cache_dir }}/debian-installer"
installer_keyrings_path: "{{ global_files_dir }}/common/keyrings"
import_role:
name: installer/debian/iso
- name: upload installer iso to publishing host
delegate_to: "{{ install.cloud.image_publish.host }}"
copy:
src: "{{ iso_install_target_dir }}/{{ install_hostname }}.iso"
dest: "{{ install.cloud.image_publish.path }}"
- name: generate auth sessions from API
delegate_to: localhost
check_mode: no
uri:
url: "https://session.edis.at/kvm/v2/get/auth"
method: POST
body_format: form-urlencoded
body:
email: "{{ install.cloud.credentials.email }}"
pw: "{{ install.cloud.credentials.password }}"
status_code: 200
register: edis_kvm_auth_session_response
- name: make sure server-id is in results
assert:
that: install.cloud.id in edis_kvm_auth_session_response.json.data
- name: retrieve auth session for server-id
set_fact:
edis_kvm_auth_session: "{{ edis_kvm_auth_session_response.json.data[install.cloud.id] }}"
- name: make sure no iso image is mounted
delegate_to: localhost
uri:
url: "https://{{ edis_kvm_auth_session.api_host }}/kvm/v2/set/umount"
method: POST
body_format: form-urlencoded
body:
kvm_id: "{{ edis_kvm_auth_session.kvm_id }}"
signature: "{{ edis_kvm_auth_session.signature }}"
valid_until: "{{ edis_kvm_auth_session.valid_until }}"
status_code: 200
- name: download the custom installer image to API host
delegate_to: localhost
uri:
url: "https://{{ edis_kvm_auth_session.api_host }}/kvm/v2/set/download_iso"
method: POST
body_format: form-urlencoded
body:
kvm_id: "{{ edis_kvm_auth_session.kvm_id }}"
signature: "{{ edis_kvm_auth_session.signature }}"
valid_until: "{{ edis_kvm_auth_session.valid_until }}"
url: "{{ install.cloud.image_publish.base_url }}/{{ install_hostname }}.iso"
status_code: 500 ## TODO: create ticket @ edis support ....
- name: fetch list of isos
delegate_to: localhost
uri:
url: "https://{{ edis_kvm_auth_session.api_host }}/kvm/v2/get/isos"
method: POST
body_format: form-urlencoded
body:
kvm_id: "{{ edis_kvm_auth_session.kvm_id }}"
signature: "{{ edis_kvm_auth_session.signature }}"
valid_until: "{{ edis_kvm_auth_session.valid_until }}"
status_code: 200
register: edis_kvm_installer_isos
- name: extract full path of custom iso
set_fact:
edis_kvm_custom_iso_fullpath: "{{ edis_kvm_installer_isos.json.data | select('match', '.*/' + install.cloud.id + '.iso') | first }}"
- name: mount custom iso
delegate_to: localhost
uri:
url: "https://{{ edis_kvm_auth_session.api_host }}/kvm/v2/set/mount"
method: POST
body_format: form-urlencoded
body:
kvm_id: "{{ edis_kvm_auth_session.kvm_id }}"
signature: "{{ edis_kvm_auth_session.signature }}"
valid_until: "{{ edis_kvm_auth_session.valid_until }}"
iso: "{{ edis_kvm_custom_iso_fullpath }}"
status_code: 200
- name: make sure VNC access is disabled
delegate_to: localhost
uri:
url: "https://{{ edis_kvm_auth_session.api_host }}/kvm/v2/set/vnc/disable"
method: POST
body_format: form-urlencoded
body:
kvm_id: "{{ edis_kvm_auth_session.kvm_id }}"
signature: "{{ edis_kvm_auth_session.signature }}"
valid_until: "{{ edis_kvm_auth_session.valid_until }}"
status_code: 200
- name: wait for VNC disable to kick in
pause:
seconds: 5
- name: generate random password for VNC access
set_fact:
edis_kvm_vnc_password: "{{ lookup('password', '/dev/null chars=ascii_lowercase,ascii_uppercase,digits length=16') }}"
## TODO: sadly setting the password does not work -> create ticket @ edis support ....
- name: (re)enable VNC access with new temporary password
delegate_to: localhost
uri:
url: "https://{{ edis_kvm_auth_session.api_host }}/kvm/v2/set/vnc/enable"
method: POST
body_format: form-urlencoded
body:
kvm_id: "{{ edis_kvm_auth_session.kvm_id }}"
signature: "{{ edis_kvm_auth_session.signature }}"
valid_until: "{{ edis_kvm_auth_session.valid_until }}"
vnc_pw: "{{ edis_kvm_vnc_password }}"
status_code: 200
register: edis_kvm_vnc_info
- name: user interaction needed...
pause:
prompt: |
Please connect to the VNC using the following link:
https://manage.edis.at/novnc/?host={{ edis_kvm_vnc_info.json.vnc_host }}&port={{ edis_kvm_vnc_info.json.novnc_port }}&scale=true
Alternativly you may connect to the VNC server at {{ edis_kvm_vnc_info.json.vnc_host }} on port {{ edis_kvm_vnc_info.json.vnc_port }} using any VNC compatible client.
The VNC session is protected using this password: "{{ edis_kvm_vnc_password }}"
While VNC is connected reboot the server (i.e. using CTRL+ALT+DEL) and then press F12 or ESC during the BIOS phase of
the boot. At the boot device selection menu select the DVD/CD drive entry that contains the string '(ISOIMAGE)' to
boot the installer.
Once the installation is done press ENTER to continue or CTRL-C then A to abort.
- name: unount the installer iso image
delegate_to: localhost
uri:
url: "https://{{ edis_kvm_auth_session.api_host }}/kvm/v2/set/umount"
method: POST
body_format: form-urlencoded
body:
kvm_id: "{{ edis_kvm_auth_session.kvm_id }}"
signature: "{{ edis_kvm_auth_session.signature }}"
valid_until: "{{ edis_kvm_auth_session.valid_until }}"
status_code: 200
- name: disable VNC access
delegate_to: localhost
uri:
url: "https://{{ edis_kvm_auth_session.api_host }}/kvm/v2/set/vnc/disable"
method: POST
body_format: form-urlencoded
body:
kvm_id: "{{ edis_kvm_auth_session.kvm_id }}"
signature: "{{ edis_kvm_auth_session.signature }}"
valid_until: "{{ edis_kvm_auth_session.valid_until }}"
status_code: 200
|