|
1 | 1 | ---
|
2 | 2 |
|
3 |
| -- name: Ensure hostkeys directory exists on persistent storage |
4 |
| - file: |
5 |
| - path: "{{ appliances_state_dir }}/hostkeys/{{ inventory_hostname }}" |
6 |
| - state: directory |
7 |
| - owner: root |
8 |
| - group: root |
9 |
| - mode: 0600 |
| 3 | +- name: Generate persistent hostkeys in state directory |
| 4 | + delegate_to: "{{ persist_hostkeys_state_server }}" |
| 5 | + block: |
| 6 | + - name: Ensure hostkeys directory exists on persistent storage |
| 7 | + file: |
| 8 | + path: "{{ persist_hostkeys_state_dir }}" |
| 9 | + state: directory |
| 10 | + owner: root |
| 11 | + group: root |
| 12 | + mode: 0600 |
10 | 13 |
|
11 |
| -- name: Copy hostkeys from persistent storage |
12 |
| - # won't fail if no keys are in persistent storage |
13 |
| - copy: |
14 |
| - src: "{{ appliances_state_dir }}/hostkeys/{{ inventory_hostname }}/" |
15 |
| - dest: /etc/ssh/ |
16 |
| - remote_src: true |
| 14 | + - name: Check for existing hostkeys |
| 15 | + find: |
| 16 | + paths: "{{ persist_hostkeys_state_dir }}/" |
| 17 | + register: _files_found |
| 18 | + |
| 19 | + - name: Generate hostkeys |
| 20 | + when: _files_found.matched == 0 |
| 21 | + shell: |
| 22 | + # ssh-keygen -A needs a directory with an /etc/ssh suffix to write hostkeys into |
| 23 | + cmd: | |
| 24 | + mkdir -p {{ persist_hostkeys_state_dir }}/etc/ssh |
| 25 | + ssh-keygen -A -N '' -f {{ persist_hostkeys_state_dir }} |
| 26 | + mv {{ persist_hostkeys_state_dir }}/etc/ssh/* {{ persist_hostkeys_state_dir }} |
| 27 | + rm -rf {{ persist_hostkeys_state_dir }}/etc/ssh |
| 28 | + |
| 29 | + - name: Get created key names |
| 30 | + find: |
| 31 | + path: "{{ persist_hostkeys_state_dir }}/" |
| 32 | + register: _find_ssh_keys |
17 | 33 |
|
18 |
| -- name: Find hostkeys |
19 |
| - find: |
20 |
| - path: /etc/ssh/ |
21 |
| - patterns: ssh_host_*_key* |
22 |
| - register: _find_ssh_keys |
| 34 | + - name: Create in-memory copies of keys |
| 35 | + ansible.builtin.slurp: |
| 36 | + src: "{{ item.path }}" |
| 37 | + loop: "{{ _find_ssh_keys.files }}" |
| 38 | + register: _slurp_keys |
23 | 39 |
|
24 |
| -- name: Persist hostkeys |
| 40 | +- name: Copy keys to hosts |
| 41 | + no_log: true |
25 | 42 | copy:
|
26 |
| - dest: "{{ appliances_state_dir }}/hostkeys/{{ inventory_hostname }}/" |
27 |
| - src: "{{ item }}" |
28 |
| - remote_src: true |
29 |
| - mode: preserve |
30 |
| - loop: "{{ _find_ssh_keys.files | map(attribute='path') }}" |
| 43 | + content: "{{ item.content | b64decode }}" |
| 44 | + dest: "/etc/ssh/{{ item.source | regex_search('[^/]+$') }}" |
| 45 | + loop: "{{ _slurp_keys.results }}" |
31 | 46 |
|
32 | 47 | - meta: reset_connection
|
33 |
| - |
|
0 commit comments