|
49 | 49 | state: started |
50 | 50 | when: _stop_sssd is changed |
51 | 51 |
|
52 | | -# This task runs (only) on the home directory server, if in the group, so it can |
53 | | -# handle root squashed exports |
| 52 | +# This task runs only on the home directory server so it can handle |
| 53 | +# root-squashed exports |
54 | 54 | - name: Create home directories |
55 | 55 | # doesn't delete with state=absent, same as ansible.builtin.user |
56 | 56 | ansible.builtin.copy: |
57 | 57 | remote_src: true |
58 | 58 | src: "{{ item.skeleton | default('/etc/skel/') }}" |
59 | | - dest: "{{ item.home | default( basic_users_homedir_host_path + '/' + item.name ) }}" |
| 59 | + dest: "{{ item.home | default( basic_users_homedir_server_path + '/' + item.name ) }}" |
60 | 60 | owner: "{{ item.name }}" |
61 | 61 | group: "{{ item.name }}" |
62 | 62 | mode: u=rwX,go= |
63 | | - delegate_to: "{{ basic_users_homedir_host }}" |
64 | | - run_once: true |
65 | 63 | loop: "{{ basic_users_users }}" |
66 | 64 | loop_control: |
67 | 65 | label: "{{ item.name }}" |
68 | 66 | when: |
69 | 67 | - item.state | default('present') == 'present' |
70 | 68 | - item.create_home | default(true) | bool |
| 69 | + - inventory_hostname == basic_users_homedir_server |
71 | 70 |
|
72 | | -# The following tasks deliberately run on a (single) *client* node, so that |
73 | | -# home directory paths are easily constructed, becoming each user so that root |
74 | | -# squash doesn't matter |
75 | | -- delegate_to: "{{ groups['basic_users'] | difference([basic_users_homedir_host]) | first }}" |
76 | | - run_once: true |
77 | | - block: |
78 | | - - name: Create ~/.ssh directories |
79 | | - file: |
80 | | - state: directory |
81 | | - path: ~/.ssh/ |
82 | | - owner: "{{ item.name }}" |
83 | | - group: "{{ item.name }}" |
84 | | - mode: u=rwX,go= |
85 | | - become_user: "{{ item.name }}" |
86 | | - loop: "{{ basic_users_users }}" |
87 | | - loop_control: |
88 | | - label: "{{ item.name }}" |
89 | | - when: |
90 | | - - item.state | default('present') == 'present' |
| 71 | +# The following tasks run on a single *client* node, so that home directory |
| 72 | +# paths are easily constructed, becoming each user so that root-squash |
| 73 | +# doesn't matter |
| 74 | +- name: Create ~/.ssh directories |
| 75 | + file: |
| 76 | + state: directory |
| 77 | + path: ~/.ssh/ |
| 78 | + owner: "{{ item.name }}" |
| 79 | + group: "{{ item.name }}" |
| 80 | + mode: u=rwX,go= |
| 81 | + become_user: "{{ item.name }}" |
| 82 | + loop: "{{ basic_users_users }}" |
| 83 | + loop_control: |
| 84 | + label: "{{ item.name }}" |
| 85 | + when: |
| 86 | + - item.state | default('present') == 'present' |
| 87 | + - item.generate_ssh_key | default(true) | bool or item.public_key is defined |
| 88 | + - inventory_hostname == basic_users_homedir_client |
91 | 89 |
|
92 | | - - name: Generate cluster ssh key |
93 | | - community.crypto.openssh_keypair: |
94 | | - path: "{{ item.ssh_key_file | default('~/.ssh/id_' + _ssh_key_type )}}" # NB: ssh_key_file is from ansible.builtin.user |
95 | | - type: "{{ _ssh_key_type }}" |
96 | | - comment: "{{ item.ssh_key_comment | default(item.name) }}" |
97 | | - vars: |
98 | | - _ssh_key_type: "{{ item.ssh_key_type | default('ed25519') }}" |
99 | | - become_user: "{{ item.name }}" |
100 | | - loop: "{{ basic_users_users }}" |
101 | | - loop_control: |
102 | | - label: "{{ item.name }}" |
103 | | - when: |
104 | | - - item.state | default('present') == 'present' |
105 | | - - item.generate_ssh_key | default(true) | bool |
106 | | - register: _cluster_ssh_keypair |
| 90 | +- name: Generate cluster ssh key |
| 91 | + community.crypto.openssh_keypair: |
| 92 | + path: "{{ item.ssh_key_file | default('~/.ssh/id_' + _ssh_key_type )}}" # NB: ssh_key_file is from ansible.builtin.user |
| 93 | + type: "{{ _ssh_key_type }}" |
| 94 | + comment: "{{ item.ssh_key_comment | default(item.name) }}" |
| 95 | + vars: |
| 96 | + _ssh_key_type: "{{ item.ssh_key_type | default('ed25519') }}" |
| 97 | + become_user: "{{ item.name }}" |
| 98 | + loop: "{{ basic_users_users }}" |
| 99 | + loop_control: |
| 100 | + label: "{{ item.name }}" |
| 101 | + when: |
| 102 | + - item.state | default('present') == 'present' |
| 103 | + - item.generate_ssh_key | default(true) |
| 104 | + - inventory_hostname == basic_users_homedir_client |
| 105 | + register: _cluster_ssh_keypair |
107 | 106 |
|
108 | | - - name: Write generated cluster ssh key to authorized_keys |
109 | | - ansible.posix.authorized_key: |
110 | | - user: "{{ item.item.name }}" |
111 | | - state: present |
112 | | - manage_dir: false |
113 | | - key: "{{ item.public_key }}" |
114 | | - path: ~/.ssh/authorized_keys |
115 | | - become_user: "{{ item.item.name }}" |
116 | | - loop: "{{ _cluster_ssh_keypair.results }}" |
117 | | - loop_control: |
118 | | - label: "{{ item.item.name }}" |
119 | | - when: |
120 | | - - item.item.state | default('present') == 'present' |
121 | | - - "'public_key' in item" |
| 107 | +- name: Write generated cluster ssh key to authorized_keys |
| 108 | + ansible.posix.authorized_key: |
| 109 | + user: "{{ item.item.name }}" |
| 110 | + state: present |
| 111 | + manage_dir: false |
| 112 | + key: "{{ item.public_key }}" |
| 113 | + path: ~/.ssh/authorized_keys |
| 114 | + become_user: "{{ item.item.name }}" |
| 115 | + loop: "{{ _cluster_ssh_keypair.results }}" |
| 116 | + loop_control: |
| 117 | + label: "{{ item.item.name }}" |
| 118 | + when: |
| 119 | + - item.item.state | default('present') == 'present' |
| 120 | + - item.item.generate_ssh_key | default(true) |
| 121 | + - inventory_hostname == basic_users_homedir_client |
| 122 | + - item.public_key is defined # NB this is the *returned* public key |
122 | 123 |
|
123 | | - - name: Write supplied public key to authorized_keys |
124 | | - ansible.posix.authorized_key: |
125 | | - user: "{{ item.name }}" |
126 | | - state: present |
127 | | - manage_dir: false |
128 | | - key: "{{ item.public_key }}" |
129 | | - path: ~/.ssh/authorized_keys |
130 | | - become_user: "{{ item.name }}" |
131 | | - loop: "{{ basic_users_users }}" |
132 | | - loop_control: |
133 | | - label: "{{ item.name }}" |
134 | | - when: |
135 | | - - item.state | default('present') == 'present' |
136 | | - - item.public_key is defined |
| 124 | +- name: Write supplied public key to authorized_keys |
| 125 | + ansible.posix.authorized_key: |
| 126 | + user: "{{ item.name }}" |
| 127 | + state: present |
| 128 | + manage_dir: false |
| 129 | + key: "{{ item.public_key }}" |
| 130 | + path: ~/.ssh/authorized_keys |
| 131 | + become_user: "{{ item.name }}" |
| 132 | + loop: "{{ basic_users_users }}" |
| 133 | + loop_control: |
| 134 | + label: "{{ item.name }}" |
| 135 | + when: |
| 136 | + - item.state | default('present') == 'present' |
| 137 | + - inventory_hostname == basic_users_homedir_client |
| 138 | + - item.public_key is defined # NB this is the *provided* public key |
0 commit comments