|
31 | 31 | create_home: false
|
32 | 32 | generate_ssh_key: false
|
33 | 33 |
|
| 34 | +- name: Write sudo rules |
| 35 | + blockinfile: |
| 36 | + path: /etc/sudoers.d/80-{{ item.name}}-user |
| 37 | + block: "{{ item.sudo }}" |
| 38 | + create: true |
| 39 | + loop: "{{ basic_users_users }}" |
| 40 | + loop_control: |
| 41 | + label: "{{ item.name }}" |
| 42 | + when: |
| 43 | + - item.state | default('present') == 'present' |
| 44 | + - "'sudo' in item" |
| 45 | + |
34 | 46 | - name: Restart sssd if required
|
35 | 47 | systemd:
|
36 | 48 | name: sssd
|
37 | 49 | state: started
|
38 | 50 | when: _stop_sssd is changed
|
39 | 51 |
|
40 |
| -- name: Modify home directories |
| 52 | +# This task runs (only) on the home diretory server, if in the group, so it can |
| 53 | +# handle root squashed exports |
| 54 | +- name: Create home directories |
| 55 | + # doesn't delete with state=absent, same as ansible.builtin.user |
| 56 | + file: |
| 57 | + state: directory |
| 58 | + path: "{{ item.home | default( basic_users_homedir_host_path + '/' + item.name ) }}" |
| 59 | + owner: "{{ item.name }}" |
| 60 | + group: "{{ item.name }}" |
| 61 | + mode: u=rwX,go= |
41 | 62 | delegate_to: "{{ basic_users_homedir_host }}"
|
42 | 63 | 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 |
| 64 | + loop: "{{ basic_users_users }}" |
| 65 | + loop_control: |
| 66 | + label: "{{ item.name }}" |
| 67 | + when: |
| 68 | + - item.state | default('present') == 'present' |
| 69 | + - item.create_home | default(true) | bool |
58 | 70 |
|
| 71 | +# The following tasks deliberately run on a (single) *client* node, so that |
| 72 | +# home directory paths are easily constructed, becoming each user so that root |
| 73 | +# squash doesn't matter |
| 74 | +- delegate_to: "{{ groups['basic_users'] | difference([basic_users_homedir_host]) | first }}" |
| 75 | + run_once: true |
| 76 | + block: |
59 | 77 | - name: Create ~/.ssh directories
|
60 | 78 | file:
|
61 | 79 | state: directory
|
62 |
| - path: "{{ _homedir }}/.ssh/" |
| 80 | + path: ~/.ssh/ |
63 | 81 | owner: "{{ item.name }}"
|
64 | 82 | group: "{{ item.name }}"
|
65 | 83 | mode: u=rwX,go=
|
66 |
| - vars: |
67 |
| - _homedir: "{{ item.home | default( basic_users_homedir_host_path + '/' + item.name ) }}" |
68 | 84 | become_user: "{{ item.name }}"
|
69 | 85 | loop: "{{ basic_users_users }}"
|
70 | 86 | loop_control:
|
|
74 | 90 |
|
75 | 91 | - name: Generate cluster ssh key
|
76 | 92 | community.crypto.openssh_keypair:
|
77 |
| - path: "{{ item.ssh_key_file | default(_homedir + '/.ssh/' + _ssh_key_type )}}" |
| 93 | + path: "{{ item.ssh_key_file | default('~/.ssh/' + _ssh_key_type )}}" # NB: ssh_key_file is from ansible.builtin.user |
78 | 94 | type: "{{ _ssh_key_type }}"
|
79 | 95 | vars:
|
80 |
| - _homedir: "{{ item.home | default( basic_users_homedir_host_path + '/' + item.name ) }}" |
81 | 96 | _ssh_key_type: "{{ item.ssh_key_type | default('ed25519') }}"
|
82 | 97 | become_user: "{{ item.name }}"
|
83 | 98 | loop: "{{ basic_users_users }}"
|
|
88 | 103 | - item.generate_ssh_key | default(true) | bool
|
89 | 104 | register: _cluster_ssh_keypair
|
90 | 105 |
|
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 |
| 106 | + - name: Write generated cluster ssh key to authorized_keys |
113 | 107 | ansible.posix.authorized_key:
|
114 | 108 | user: "{{ item.item.name }}"
|
115 | 109 | state: present
|
116 | 110 | manage_dir: false
|
117 | 111 | 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 ) }}" |
| 112 | + path: ~/.ssh/authorized_keys |
121 | 113 | become_user: "{{ item.item.name }}"
|
122 | 114 | loop: "{{ _cluster_ssh_keypair.results }}"
|
123 | 115 | loop_control:
|
|
126 | 118 | - item.item.state | default('present') == 'present'
|
127 | 119 | - "'public_key' in item"
|
128 | 120 |
|
129 |
| -- name: Write sudo rules |
130 |
| - blockinfile: |
131 |
| - path: /etc/sudoers.d/80-{{ item.name}}-user |
132 |
| - block: "{{ item.sudo }}" |
133 |
| - create: true |
134 |
| - loop: "{{ basic_users_users }}" |
135 |
| - loop_control: |
136 |
| - label: "{{ item.name }}" |
137 |
| - when: |
138 |
| - - item.state | default('present') == 'present' |
139 |
| - - "'sudo' in item" |
| 121 | + - name: Write supplied public key to authorized_keys |
| 122 | + ansible.posix.authorized_key: |
| 123 | + user: "{{ item.name }}" |
| 124 | + state: present |
| 125 | + manage_dir: false |
| 126 | + key: "{{ item.public_key }}" |
| 127 | + path: ~/.ssh/authorized_keys |
| 128 | + become_user: "{{ item.name }}" |
| 129 | + loop: "{{ basic_users_users }}" |
| 130 | + loop_control: |
| 131 | + label: "{{ item.name }}" |
| 132 | + when: |
| 133 | + - item.state | default('present') == 'present' |
| 134 | + - item.public_key is defined |
0 commit comments