mirror of
https://github.com/fscotto/infra.git
synced 2026-09-27 19:03:47 +00:00
212 lines
5.7 KiB
YAML
212 lines
5.7 KiB
YAML
---
|
|
- name: Render Atlas NFS exports
|
|
tags: [atlas, sharing]
|
|
ansible.builtin.template:
|
|
src: atlas.exports.j2
|
|
dest: /etc/exports.d/atlas.exports
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
notify: Reload NFS exports
|
|
when: atlas_manage_storage | bool
|
|
|
|
- name: Configure Atlas NFSv4-only service
|
|
tags: [atlas, sharing]
|
|
ansible.builtin.template:
|
|
src: atlas-nfs.conf.j2
|
|
dest: /etc/nfs.conf.d/atlas.conf
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
notify: Restart NFS server
|
|
when: atlas_manage_storage | bool
|
|
|
|
- name: Mask Atlas NFSv3 RPC services
|
|
tags: [atlas, sharing, services]
|
|
ansible.builtin.systemd:
|
|
name: "{{ item }}"
|
|
enabled: false
|
|
state: stopped
|
|
masked: true
|
|
loop:
|
|
- rpc-statd.service
|
|
- rpcbind.service
|
|
- rpcbind.socket
|
|
loop_control:
|
|
label: "{{ item }}"
|
|
when: atlas_manage_storage | bool
|
|
|
|
- name: Ensure Atlas NFS mount daemon drop-in directory exists
|
|
tags: [atlas, sharing, services]
|
|
ansible.builtin.file:
|
|
path: /etc/systemd/system/nfs-mountd.service.d
|
|
state: directory
|
|
owner: root
|
|
group: root
|
|
mode: "0755"
|
|
when: atlas_manage_storage | bool
|
|
|
|
- name: Disable Atlas NFSv3 mount daemon listeners
|
|
tags: [atlas, sharing, services]
|
|
ansible.builtin.template:
|
|
src: nfs-mountd-v4only.conf.j2
|
|
dest: /etc/systemd/system/nfs-mountd.service.d/v4only.conf
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
notify: Restart NFS mount daemon
|
|
when: atlas_manage_storage | bool
|
|
|
|
- name: Enable SELinux access for Atlas file sharing
|
|
tags: [atlas, sharing, services]
|
|
ansible.posix.seboolean:
|
|
name: "{{ item }}"
|
|
state: true
|
|
persistent: true
|
|
loop: "{{ atlas_selinux_booleans }}"
|
|
loop_control:
|
|
label: "{{ item }}"
|
|
when:
|
|
- atlas_manage_storage | bool
|
|
- (ansible_facts['selinux'] | default({})).get('status', 'disabled') == 'enabled'
|
|
|
|
- name: Render Atlas Samba configuration
|
|
tags: [atlas, sharing]
|
|
ansible.builtin.template:
|
|
src: smb.conf.j2
|
|
dest: /etc/samba/smb.conf
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
validate: "testparm --suppress-prompt %s"
|
|
notify: Restart Samba service
|
|
when: atlas_manage_storage | bool
|
|
|
|
- name: Require Atlas Samba password
|
|
tags: [atlas, sharing]
|
|
ansible.builtin.assert:
|
|
that:
|
|
- atlas_samba_password | length > 0
|
|
fail_msg: Define vault_atlas_samba_password before enabling Atlas storage.
|
|
no_log: true
|
|
when: atlas_manage_storage | bool
|
|
|
|
- name: Read Atlas Samba account
|
|
tags: [atlas, sharing]
|
|
ansible.builtin.command:
|
|
argv:
|
|
- pdbedit
|
|
- --list
|
|
- --user
|
|
- "{{ atlas_admin_username }}"
|
|
register: atlas_samba_account
|
|
changed_when: false
|
|
failed_when: false
|
|
when: atlas_manage_storage | bool
|
|
|
|
- name: Ensure Atlas Samba private state directory exists
|
|
tags: [atlas, sharing]
|
|
ansible.builtin.file:
|
|
path: "{{ atlas_samba_password_marker | dirname }}"
|
|
state: directory
|
|
owner: root
|
|
group: root
|
|
mode: "0700"
|
|
when: atlas_manage_storage | bool
|
|
|
|
- name: Check Atlas Samba password marker
|
|
tags: [atlas, sharing]
|
|
ansible.builtin.stat:
|
|
path: "{{ atlas_samba_password_marker }}"
|
|
register: atlas_samba_password_marker_stat
|
|
when: atlas_manage_storage | bool
|
|
|
|
- name: Read Atlas Samba password marker
|
|
tags: [atlas, sharing]
|
|
ansible.builtin.slurp:
|
|
src: "{{ atlas_samba_password_marker }}"
|
|
register: atlas_samba_password_marker_content
|
|
no_log: true
|
|
when:
|
|
- atlas_manage_storage | bool
|
|
- atlas_samba_password_marker_stat.stat.exists
|
|
|
|
- name: Determine whether Atlas Samba credentials must change
|
|
tags: [atlas, sharing]
|
|
ansible.builtin.set_fact:
|
|
atlas_samba_password_digest: "{{ atlas_samba_password | hash('sha256') }}"
|
|
atlas_samba_password_update_required: >-
|
|
{{
|
|
atlas_samba_account.rc != 0
|
|
or not atlas_samba_password_marker_stat.stat.exists
|
|
or (
|
|
atlas_samba_password_marker_content.content | default('')
|
|
| b64decode | trim
|
|
) != (atlas_samba_password | hash('sha256'))
|
|
}}
|
|
no_log: true
|
|
when: atlas_manage_storage | bool
|
|
|
|
- name: Set Atlas Samba account password
|
|
tags: [atlas, sharing]
|
|
ansible.builtin.command:
|
|
argv:
|
|
- smbpasswd
|
|
- -s
|
|
- -a
|
|
- "{{ atlas_admin_username }}"
|
|
stdin: "{{ atlas_samba_password }}\n{{ atlas_samba_password }}"
|
|
changed_when: true
|
|
no_log: true
|
|
when:
|
|
- atlas_manage_storage | bool
|
|
- atlas_samba_password_update_required | bool
|
|
|
|
- name: Record managed Atlas Samba password digest
|
|
tags: [atlas, sharing]
|
|
ansible.builtin.copy:
|
|
content: "{{ atlas_samba_password_digest }}\n"
|
|
dest: "{{ atlas_samba_password_marker }}"
|
|
owner: root
|
|
group: root
|
|
mode: "0600"
|
|
no_log: true
|
|
when:
|
|
- atlas_manage_storage | bool
|
|
- atlas_samba_password_update_required | bool
|
|
|
|
- name: Require completed Atlas firewall placeholders
|
|
tags: [atlas, sharing, services]
|
|
ansible.builtin.assert:
|
|
that:
|
|
- atlas_lan_subnet != 'CHANGEME_LAN_SUBNET'
|
|
- atlas_firewalld_zone | length > 0
|
|
fail_msg: Replace the Atlas LAN subnet and firewall zone placeholders.
|
|
when: atlas_manage_firewall | bool
|
|
|
|
- name: Apply Atlas firewalld rich rules
|
|
tags: [atlas, sharing, services]
|
|
ansible.posix.firewalld:
|
|
rich_rule: "{{ item }}"
|
|
permanent: true
|
|
immediate: true
|
|
state: enabled
|
|
zone: "{{ atlas_firewalld_zone }}"
|
|
loop: "{{ atlas_firewalld_rich_rules }}"
|
|
loop_control:
|
|
label: "{{ item }}"
|
|
when: atlas_manage_firewall | bool
|
|
|
|
- name: Remove unrestricted Atlas services from firewalld zone
|
|
tags: [atlas, sharing, services]
|
|
ansible.posix.firewalld:
|
|
service: "{{ item }}"
|
|
permanent: true
|
|
immediate: true
|
|
state: disabled
|
|
zone: "{{ atlas_firewalld_zone }}"
|
|
loop: "{{ atlas_firewalld_restricted_services }}"
|
|
loop_control:
|
|
label: "{{ item }}"
|
|
when: atlas_manage_firewall | bool
|