|
21 | 21 | ansible.builtin.group: "{{ item }}"
|
22 | 22 | loop: "{{ basic_users_groups }}"
|
23 | 23 |
|
24 |
| -- name: Create users and generate public keys |
25 |
| - user: "{{ basic_users_userdefaults | combine(item) | filter_user_params() }}" |
| 24 | +- name: Create users |
| 25 | + user: "{{ basic_users_userdefaults | combine(item) | filter_user_params() | combine(_disable_homedir) }}" |
26 | 26 | loop: "{{ basic_users_users }}"
|
27 | 27 | loop_control:
|
28 |
| - label: "{{ item.name }} [{{ item.state | default('present') }}]" |
29 |
| - register: basic_users_info |
| 28 | + label: "{{ item.name }}" |
| 29 | + vars: |
| 30 | + _disable_homedir: # ensure this task doesn't touch $HOME |
| 31 | + create_home: false |
| 32 | + generate_ssh_key: false |
30 | 33 |
|
31 | 34 | - name: Restart sssd if required
|
32 | 35 | systemd:
|
33 | 36 | name: sssd
|
34 | 37 | state: started
|
35 | 38 | when: _stop_sssd is changed
|
36 | 39 |
|
37 |
| -- name: Write supplied public key as authorized for SSH access |
38 |
| - authorized_key: |
39 |
| - user: "{{ item.name }}" |
40 |
| - state: present |
41 |
| - key: "{{ item.public_key }}" |
42 |
| - become_user: "{{ item.name }}" |
43 |
| - loop: "{{ basic_users_users }}" |
44 |
| - loop_control: |
45 |
| - label: "{{ item.name }} [{{ item.state | default('present') }}]" |
46 |
| - when: |
47 |
| - - item.state | default('present') == 'present' |
48 |
| - - item.public_key is defined |
49 |
| - - _basic_users_manage_homedir |
| 40 | +- name: Modify home directories |
| 41 | + delegate_to: "{{ basic_users_homedir_host }}" |
| 42 | + run_once: true |
| 43 | + block: |
| 44 | + - name: Create home directories |
| 45 | + # doesn't delete with state=absent, same as ansible.builtin.user |
| 46 | + file: |
| 47 | + state: directory |
| 48 | + path: "{{ item.home | default( basic_users_homedir_host_path + '/' + item.name ) }}" |
| 49 | + owner: "{{ item.name }}" |
| 50 | + group: "{{ item.name }}" |
| 51 | + mode: u=rwX,go= |
| 52 | + loop: "{{ basic_users_users }}" |
| 53 | + loop_control: |
| 54 | + label: "{{ item.name }}" |
| 55 | + when: |
| 56 | + - item.state | default('present') == 'present' |
| 57 | + - item.create_home | default(true) | bool |
50 | 58 |
|
51 |
| -- name: Write generated public key as authorized for SSH access |
52 |
| - # this only runs on the _basic_users_manage_homedir so has registered var |
53 |
| - # from that host too |
54 |
| - authorized_key: |
55 |
| - user: "{{ item.name }}" |
56 |
| - state: present |
57 |
| - manage_dir: no |
58 |
| - key: "{{ item.ssh_public_key }}" |
59 |
| - become_user: "{{ item.name }}" |
60 |
| - loop: "{{ basic_users_info.results }}" |
61 |
| - loop_control: |
62 |
| - label: "{{ item.name }}" |
63 |
| - when: |
64 |
| - - item.ssh_public_key is defined |
65 |
| - - _basic_users_manage_homedir |
| 59 | + - name: Create ~/.ssh directories |
| 60 | + file: |
| 61 | + state: directory |
| 62 | + path: "{{ _homedir }}/.ssh/" |
| 63 | + owner: "{{ item.name }}" |
| 64 | + group: "{{ item.name }}" |
| 65 | + mode: u=rwX,go= |
| 66 | + vars: |
| 67 | + _homedir: "{{ item.home | default( basic_users_homedir_host_path + '/' + item.name ) }}" |
| 68 | + become_user: "{{ item.name }}" |
| 69 | + loop: "{{ basic_users_users }}" |
| 70 | + loop_control: |
| 71 | + label: "{{ item.name }}" |
| 72 | + when: |
| 73 | + - item.state | default('present') == 'present' |
| 74 | + |
| 75 | + - name: Generate cluster ssh key |
| 76 | + community.crypto.openssh_keypair: |
| 77 | + path: "{{ item.ssh_key_file | default(_homedir + '/.ssh/' + _ssh_key_type )}}" |
| 78 | + type: "{{ _ssh_key_type }}" |
| 79 | + vars: |
| 80 | + _homedir: "{{ item.home | default( basic_users_homedir_host_path + '/' + item.name ) }}" |
| 81 | + _ssh_key_type: "{{ item.ssh_key_type | default('ed25519') }}" |
| 82 | + become_user: "{{ item.name }}" |
| 83 | + loop: "{{ basic_users_users }}" |
| 84 | + loop_control: |
| 85 | + label: "{{ item.name }}" |
| 86 | + when: |
| 87 | + - item.state | default('present') == 'present' |
| 88 | + - item.generate_ssh_key | default(true) | bool |
| 89 | + register: _cluster_ssh_keypair |
| 90 | + |
| 91 | + # - debug: |
| 92 | + # var: _cluster_ssh_keypair |
| 93 | + # - meta: end_here |
| 94 | + |
| 95 | + - name: Write supplied public key as authorized for SSH access |
| 96 | + ansible.posix.authorized_key: |
| 97 | + user: "{{ item.name }}" |
| 98 | + state: present |
| 99 | + manage_dir: false |
| 100 | + key: "{{ item.public_key }}" |
| 101 | + path: "{{ _homedir }}/.ssh/authorized_keys" |
| 102 | + vars: |
| 103 | + _homedir: "{{ item.home | default( basic_users_homedir_host_path + '/' + item.name ) }}" |
| 104 | + become_user: "{{ item.name }}" |
| 105 | + loop: "{{ basic_users_users }}" |
| 106 | + loop_control: |
| 107 | + label: "{{ item.name }}" |
| 108 | + when: |
| 109 | + - item.state | default('present') == 'present' |
| 110 | + - item.public_key is defined |
| 111 | + |
| 112 | + - name: Write generated public key as authorized for SSH access |
| 113 | + ansible.posix.authorized_key: |
| 114 | + user: "{{ item.item.name }}" |
| 115 | + state: present |
| 116 | + manage_dir: false |
| 117 | + key: "{{ item.public_key }}" |
| 118 | + path: "{{ _homedir }}/.ssh/authorized_keys" |
| 119 | + vars: |
| 120 | + _homedir: "{{ item.item.home | default( basic_users_homedir_host_path + '/' + item.item.name ) }}" |
| 121 | + become_user: "{{ item.item.name }}" |
| 122 | + loop: "{{ _cluster_ssh_keypair.results }}" |
| 123 | + loop_control: |
| 124 | + label: "{{ item.item.name }}" |
| 125 | + when: |
| 126 | + - item.item.state | default('present') == 'present' |
| 127 | + - "'public_key' in item" |
66 | 128 |
|
67 | 129 | - name: Write sudo rules
|
68 | 130 | blockinfile:
|
|
72 | 134 | loop: "{{ basic_users_users }}"
|
73 | 135 | loop_control:
|
74 | 136 | label: "{{ item.name }}"
|
75 |
| - when: "'sudo' in item" |
| 137 | + when: |
| 138 | + - item.state | default('present') == 'present' |
| 139 | + - "'sudo' in item" |
0 commit comments