summaryrefslogtreecommitdiff
path: root/roles/cloud/install/tasks/edis-kvm.yml
blob: 43bb6d52b14d2b962c17bd338f711688c233d9d9 (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
170
171
---
# 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"
    headers:
      Cache-Control: "no-cache"
    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=8') }}"

 ## 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