Add playbook for updating existing settings
This commit is contained in:
@@ -49,6 +49,7 @@
|
||||
requirements: "{{ skylab_ansible_venv }}/requirements.txt"
|
||||
state: present
|
||||
|
||||
|
||||
- name: Configure common server settings
|
||||
hosts: all
|
||||
vars_files:
|
||||
@@ -101,6 +102,7 @@
|
||||
name: "{{ skylab_packages_global + skylab_packages_rocky }}"
|
||||
state: present
|
||||
|
||||
|
||||
- name: Configure SSH
|
||||
hosts: all
|
||||
handlers:
|
||||
@@ -162,3 +164,6 @@
|
||||
src: motd.j2
|
||||
dest: /etc/motd
|
||||
mode: 0644
|
||||
|
||||
|
||||
- import_playbook: update.yaml
|
||||
|
161
playbooks/update.yaml
Normal file
161
playbooks/update.yaml
Normal file
@@ -0,0 +1,161 @@
|
||||
---
|
||||
- name: Update system
|
||||
hosts: all
|
||||
tags:
|
||||
- packages
|
||||
vars_files:
|
||||
- vars/packages.yaml
|
||||
tasks:
|
||||
- name: Update system packages via DNF
|
||||
when: ansible_distribution == "Rocky"
|
||||
become: true
|
||||
ansible.builtin.dnf:
|
||||
name: "*"
|
||||
state: latest
|
||||
|
||||
- name: Update unix accounts
|
||||
hosts: all
|
||||
tags:
|
||||
- accounts
|
||||
- access
|
||||
vars_files:
|
||||
- vars/access.yaml
|
||||
- vars/sshkeys.yaml
|
||||
tasks:
|
||||
- name: Create management groups
|
||||
become: true
|
||||
ansible.builtin.group:
|
||||
name: "{{ item.name }}"
|
||||
gid: "{{ item.gid }}"
|
||||
state: present
|
||||
loop:
|
||||
- "{{ skylab_group }}"
|
||||
- "{{ skylab_group_admin }}"
|
||||
- "{{ skylab_group_automation }}"
|
||||
|
||||
- name: Determine existing skylab users
|
||||
changed_when: false
|
||||
ansible.builtin.shell:
|
||||
cmd: 'grep {{ skylab_group.name }} /etc/group | cut --delimiter : --fields 4 | tr "," "\n"'
|
||||
register: _existing_skylab_accounts
|
||||
|
||||
- name: Delete removed user accounts
|
||||
become: true
|
||||
when: item not in (skylab_accounts | items2dict(key_name='name', value_name='uid'))
|
||||
ansible.builtin.user:
|
||||
name: "{{ item }}"
|
||||
state: absent
|
||||
loop: "{{ _existing_skylab_accounts.stdout_lines }}"
|
||||
|
||||
- name: Delete removed user groups
|
||||
become: true
|
||||
when: item not in (skylab_accounts | items2dict(key_name='name', value_name='uid'))
|
||||
ansible.builtin.group:
|
||||
name: "{{ item }}"
|
||||
state: absent
|
||||
loop: "{{ _existing_skylab_accounts.stdout_lines }}"
|
||||
|
||||
- name: Delete removed user home directories
|
||||
become: true
|
||||
when: item not in (skylab_accounts | items2dict(key_name='name', value_name='uid'))
|
||||
ansible.builtin.file:
|
||||
path: "/home/{{ item }}"
|
||||
state: absent
|
||||
loop: "{{ _existing_skylab_accounts.stdout_lines }}"
|
||||
|
||||
- name: Create account groups
|
||||
when: item.targets | intersect(skylab_targets)
|
||||
become: true
|
||||
ansible.builtin.group:
|
||||
name: "{{ item.name }}"
|
||||
gid: "{{ item.uid }}"
|
||||
state: present
|
||||
loop: "{{ skylab_accounts }}"
|
||||
loop_control:
|
||||
label: "{{ item.uid }},{{ item.name }}"
|
||||
|
||||
- name: Determine account groups
|
||||
ansible.builtin.set_fact:
|
||||
_determined_member_groups: "{{ _determined_member_groups | default({}) | combine({item.name: [
|
||||
skylab_group.name,
|
||||
'wheel' if (item.admin | default(false) and ansible_distribution == 'Rocky') else '',
|
||||
'sudo' if (item.admin | default(false) and ansible_os_family == 'Debian') else '',
|
||||
skylab_group_admin.name if item.admin | default(false) else '',
|
||||
skylab_group_automation.name if item.service | default(false) else '',
|
||||
]}) }}"
|
||||
loop: "{{ skylab_accounts }}"
|
||||
loop_control:
|
||||
label: "{{ item.uid }},{{ item.name }}"
|
||||
|
||||
- name: Create accounts
|
||||
when: item.targets | intersect(skylab_targets)
|
||||
become: true
|
||||
ansible.builtin.user:
|
||||
name: "{{ item.name }}"
|
||||
state: present
|
||||
uid: "{{ item.uid }}"
|
||||
group: "{{ item.name }}"
|
||||
groups: "{{ _determined_member_groups[item.name] }}"
|
||||
comment: "{{ item.fullname | default('') }}"
|
||||
system: "{{ item.service | default(false) }}"
|
||||
generate_ssh_key: false
|
||||
password: "{{ item.password }}"
|
||||
loop: "{{ skylab_accounts }}"
|
||||
loop_control:
|
||||
label: "{{ item.uid }},{{ item.name }}"
|
||||
|
||||
- name: Ensure proper ownership of user home directories
|
||||
become: true
|
||||
ansible.builtin.file:
|
||||
path: /home/{{ item.name }}
|
||||
state: directory
|
||||
group: "{{ item.name }}"
|
||||
owner: "{{ item.name }}"
|
||||
mode: 0700
|
||||
loop: "{{ skylab_accounts }}"
|
||||
loop_control:
|
||||
label: "{{ item.uid }},{{ item.name }}"
|
||||
|
||||
- name: Enforce root password
|
||||
become: true
|
||||
ansible.builtin.user:
|
||||
name: root
|
||||
password: "{{ skylab_root_password }}"
|
||||
state: present
|
||||
|
||||
- name: Create SSH directory
|
||||
become: true
|
||||
ansible.builtin.file:
|
||||
path: /home/{{ item.name }}/.ssh
|
||||
owner: "{{ item.name }}"
|
||||
group: "{{ item.name }}"
|
||||
state: directory
|
||||
mode: 0700
|
||||
loop: "{{ skylab_accounts }}"
|
||||
loop_control:
|
||||
label: "{{ item.uid }},{{ item.name }}"
|
||||
|
||||
- name: Update authorized keys
|
||||
become: true
|
||||
when: item.targets | intersect(skylab_targets)
|
||||
ansible.builtin.authorized_key:
|
||||
user: "{{ item.name }}"
|
||||
key: "{{ skylab_ssh_keys[item.name] | join('\n') }}"
|
||||
state: present
|
||||
exclusive: true
|
||||
loop: "{{ skylab_accounts }}"
|
||||
loop_control:
|
||||
label: "{{ item.uid }},{{ item.name }}"
|
||||
|
||||
- name: Enforce ownership of authorized keys
|
||||
become: true
|
||||
when: item.targets | intersect(skylab_targets)
|
||||
ansible.builtin.file:
|
||||
path: /home/{{ item.name }}/.ssh/authorized_keys
|
||||
state: file
|
||||
owner: "{{ item.name }}"
|
||||
group: "{{ item.name }}"
|
||||
mode: 0400
|
||||
loop: "{{ skylab_accounts }}"
|
||||
loop_control:
|
||||
label: "{{ item.uid }},{{ item.name }}"
|
1
playbooks/vars
Symbolic link
1
playbooks/vars
Symbolic link
@@ -0,0 +1 @@
|
||||
../vars/
|
Reference in New Issue
Block a user