format files
parent
82bc12046b
commit
2bee1b5566
@ -1,7 +1,6 @@
|
|||||||
---
|
|
||||||
pip_install_packages:
|
pip_install_packages:
|
||||||
- name: docker
|
- name: docker
|
||||||
|
|
||||||
docker_users:
|
docker_users:
|
||||||
- cianhatton
|
- cianhatton
|
||||||
- ansible
|
- ansible
|
||||||
|
|||||||
@ -1,33 +1,32 @@
|
|||||||
---
|
|
||||||
vault_file: vault_vars/qnap-vault.yml
|
vault_file: vault_vars/qnap-vault.yml
|
||||||
|
|
||||||
portainer_required_templates:
|
portainer_required_templates:
|
||||||
- source_file: diun-config.j2
|
- source_file: diun-config.j2
|
||||||
dest_file_name: diun-config.yml
|
dest_file_name: diun-config.yml
|
||||||
dest_directory: /etc/config/diun
|
dest_directory: /etc/config/diun
|
||||||
handler: restart-diun
|
handler: restart-diun
|
||||||
|
|
||||||
portainer_endpoint: 23
|
portainer_endpoint: 23
|
||||||
services:
|
services:
|
||||||
- name: linkding
|
- name: linkding
|
||||||
- name: pihole
|
- name: pihole
|
||||||
- name: hasteypaste
|
- name: hasteypaste
|
||||||
- name: dashboards
|
- name: dashboards
|
||||||
template_vars:
|
template_vars:
|
||||||
dashy: false
|
dashy: false
|
||||||
dashdot: true
|
dashdot: true
|
||||||
glances: true
|
glances: true
|
||||||
- name: diun
|
- name: diun
|
||||||
|
|
||||||
ansible_pull_path: /usr/local/bin/ansible-pull
|
ansible_pull_path: /usr/local/bin/ansible-pull
|
||||||
|
|
||||||
backup_directories: []
|
backup_directories: []
|
||||||
cron_hour: "4"
|
cron_hour: '4'
|
||||||
|
|
||||||
# docker options
|
# docker options
|
||||||
docker_daemon_options:
|
docker_daemon_options:
|
||||||
hosts:
|
hosts:
|
||||||
- "tcp://0.0.0.0:2375"
|
- tcp://0.0.0.0:2375
|
||||||
- "unix:///var/run/docker.sock"
|
- unix:///var/run/docker.sock
|
||||||
|
|
||||||
docker_backup_host_backup_directory: "/tmp"
|
docker_backup_host_backup_directory: /tmp
|
||||||
|
|||||||
@ -1,17 +1,16 @@
|
|||||||
---
|
|
||||||
- name: Backup Directories.
|
- name: Backup Directories.
|
||||||
hosts: servers
|
hosts: servers
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
pre_tasks:
|
pre_tasks:
|
||||||
- name: Include vault variables.
|
- name: Include vault variables.
|
||||||
ansible.builtin.include_vars: '../{{ vault_file }}'
|
ansible.builtin.include_vars: ../{{ vault_file }}
|
||||||
tags: [always]
|
tags: [always]
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
- name: Backup Directories.
|
- name: Backup Directories.
|
||||||
ansible.builtin.include_role:
|
ansible.builtin.include_role:
|
||||||
name: backup_directory
|
name: backup_directory
|
||||||
with_items: "{{ backup_directories }}"
|
with_items: '{{ backup_directories }}'
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: backup
|
loop_var: backup
|
||||||
|
|||||||
@ -1,20 +1,19 @@
|
|||||||
---
|
|
||||||
- name: Restore a docker volume.
|
- name: Restore a docker volume.
|
||||||
hosts: servers
|
hosts: servers
|
||||||
become: true
|
become: true
|
||||||
pre_tasks:
|
pre_tasks:
|
||||||
- name: Include vault variables.
|
- name: Include vault variables.
|
||||||
ansible.builtin.include_vars: '../{{ vault_file }}'
|
ansible.builtin.include_vars: ../{{ vault_file }}
|
||||||
tags: [always]
|
tags: [always]
|
||||||
vars:
|
vars:
|
||||||
volume_name: ""
|
volume_name: ''
|
||||||
s3_key: ""
|
s3_key: ''
|
||||||
roles:
|
roles:
|
||||||
- role: chatton.docker_backup.docker_s3_volume_restore
|
- role: chatton.docker_backup.docker_s3_volume_restore
|
||||||
vars:
|
vars:
|
||||||
docker_backup_restore_force: true
|
docker_backup_restore_force: true
|
||||||
docker_backup_restore_latest_s3_key: "{{ volume_name != '' | bool }}"
|
docker_backup_restore_latest_s3_key: "{{ volume_name != '' | bool }}"
|
||||||
docker_backup_fail_on_no_s3_backups: true
|
docker_backup_fail_on_no_s3_backups: true
|
||||||
docker_backup_s3_volume:
|
docker_backup_s3_volume:
|
||||||
name: "{{ volume_name }}"
|
name: '{{ volume_name }}'
|
||||||
s3_key: "{{ s3_key }}"
|
s3_key: '{{ s3_key }}'
|
||||||
|
|||||||
@ -1,58 +1,57 @@
|
|||||||
---
|
|
||||||
- name: Update packages and ensure users on all hosts.
|
- name: Update packages and ensure users on all hosts.
|
||||||
hosts: all
|
hosts: all
|
||||||
become: true
|
become: true
|
||||||
pre_tasks:
|
pre_tasks:
|
||||||
- name: Update Packages
|
- name: Update Packages
|
||||||
ansible.builtin.apt:
|
ansible.builtin.apt:
|
||||||
upgrade: dist
|
upgrade: dist
|
||||||
update_cache: true
|
update_cache: true
|
||||||
roles:
|
roles:
|
||||||
- role: setup_users
|
- role: setup_users
|
||||||
|
|
||||||
- name: Configure mergerfs pools.
|
- name: Configure mergerfs pools.
|
||||||
hosts: mergerfs
|
hosts: mergerfs
|
||||||
become: true
|
become: true
|
||||||
roles:
|
roles:
|
||||||
- role: setup_mergerfs
|
- role: setup_mergerfs
|
||||||
tags: [mergerfs]
|
tags: [mergerfs]
|
||||||
|
|
||||||
- name: Configure samba shares.
|
- name: Configure samba shares.
|
||||||
hosts: all
|
hosts: all
|
||||||
become: true
|
become: true
|
||||||
roles:
|
roles:
|
||||||
- role: geerlingguy.samba
|
- role: geerlingguy.samba
|
||||||
tags: [samba]
|
tags: [samba]
|
||||||
|
|
||||||
- name: Install Docker on Docker hosts.
|
- name: Install Docker on Docker hosts.
|
||||||
hosts: docker
|
hosts: docker
|
||||||
become: true
|
become: true
|
||||||
roles:
|
roles:
|
||||||
- geerlingguy.pip
|
- geerlingguy.pip
|
||||||
- geerlingguy.docker
|
- geerlingguy.docker
|
||||||
|
|
||||||
|
|
||||||
- name: Install Portainer on Portainer hosts.
|
- name: Install Portainer on Portainer hosts.
|
||||||
hosts: portainer
|
hosts: portainer
|
||||||
become: true
|
become: true
|
||||||
pre_tasks:
|
pre_tasks:
|
||||||
- name: Include vault variables.
|
- name: Include vault variables.
|
||||||
ansible.builtin.include_vars: '../{{ vault_file }}'
|
ansible.builtin.include_vars: ../{{ vault_file }}
|
||||||
tags: [always]
|
tags: [always]
|
||||||
roles:
|
roles:
|
||||||
- role: setup_portainer
|
- role: setup_portainer
|
||||||
tags: [services, portainer]
|
tags: [services, portainer]
|
||||||
vars:
|
vars:
|
||||||
portainer_version: "2.18.3"
|
portainer_version: 2.18.3
|
||||||
|
|
||||||
|
|
||||||
- name: Setup and deploy services.
|
- name: Setup and deploy services.
|
||||||
hosts: servers
|
hosts: servers
|
||||||
become: true
|
become: true
|
||||||
pre_tasks:
|
pre_tasks:
|
||||||
- name: Include vault variables.
|
- name: Include vault variables.
|
||||||
ansible.builtin.include_vars: '../{{ vault_file }}'
|
ansible.builtin.include_vars: ../{{ vault_file }}
|
||||||
tags: [always]
|
tags: [always]
|
||||||
roles:
|
roles:
|
||||||
- role: setup_hosted_services
|
- role: setup_hosted_services
|
||||||
tags: [services]
|
tags: [services]
|
||||||
|
|||||||
@ -1,8 +1,7 @@
|
|||||||
---
|
|
||||||
- name: Setup linode instance.
|
- name: Setup linode instance.
|
||||||
hosts: localhost
|
hosts: localhost
|
||||||
become: true
|
become: true
|
||||||
roles:
|
roles:
|
||||||
- role: roles/setup_linode
|
- role: roles/setup_linode
|
||||||
vars:
|
vars:
|
||||||
state: present
|
state: present
|
||||||
|
|||||||
@ -1,48 +1,49 @@
|
|||||||
---
|
|
||||||
- name: Verify HomeLab has been correctly set up.
|
- name: Verify HomeLab has been correctly set up.
|
||||||
hosts: all
|
hosts: all
|
||||||
become: true
|
become: true
|
||||||
pre_tasks:
|
pre_tasks:
|
||||||
- name: Include vault variables.
|
- name: Include vault variables.
|
||||||
ansible.builtin.include_vars: ../{{ vault_file }}
|
ansible.builtin.include_vars: ../{{ vault_file }}
|
||||||
tags:
|
tags:
|
||||||
- always
|
- always
|
||||||
tasks:
|
tasks:
|
||||||
- name: Docker Compose Files Exist
|
- name: Docker Compose Files Exist
|
||||||
ansible.builtin.command: stat {{ directories.docker_compose_directory }}/{{ item.name }}/docker-compose.yml
|
ansible.builtin.command: stat {{ directories.docker_compose_directory }}/{{ item.name
|
||||||
with_items: '{{ services }}'
|
}}/docker-compose.yml
|
||||||
changed_when: false
|
with_items: '{{ services }}'
|
||||||
register: docker_compose_stat
|
changed_when: false
|
||||||
|
register: docker_compose_stat
|
||||||
|
|
||||||
- name: Assert all Docker Compose files were created
|
- name: Assert all Docker Compose files were created
|
||||||
ansible.builtin.assert:
|
ansible.builtin.assert:
|
||||||
that: item.rc == 0
|
that: item.rc == 0
|
||||||
with_items: '{{ docker_compose_stat.results }}'
|
with_items: '{{ docker_compose_stat.results }}'
|
||||||
|
|
||||||
- name: Populate service facts
|
- name: Populate service facts
|
||||||
ansible.builtin.service_facts: {}
|
ansible.builtin.service_facts: {}
|
||||||
|
|
||||||
- name: Assert docker is installed and started
|
- name: Assert docker is installed and started
|
||||||
ansible.builtin.assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- ansible_facts.services.docker.state == "running"
|
- ansible_facts.services.docker.state == "running"
|
||||||
- ansible_facts.services['docker.service'].status == "enabled"
|
- ansible_facts.services['docker.service'].status == "enabled"
|
||||||
- name: Inspect all images
|
- name: Inspect all images
|
||||||
docker_image_info: {}
|
docker_image_info: {}
|
||||||
register: image_details
|
register: image_details
|
||||||
- name: Assert desired images exist
|
- name: Assert desired images exist
|
||||||
ansible.builtin.assert:
|
ansible.builtin.assert:
|
||||||
that: "{{ item in image_details.images | map(attribute='RepoTags') | flatten }}"
|
that: "{{ item in image_details.images | map(attribute='RepoTags') | flatten\
|
||||||
with_items: '{{ desired_docker_images }}'
|
\ }}"
|
||||||
|
with_items: '{{ desired_docker_images }}'
|
||||||
|
|
||||||
- name: Fetch Sudoers Files
|
- name: Fetch Sudoers Files
|
||||||
ansible.builtin.command: stat /etc/sudoers.d/{{ item.name }}
|
ansible.builtin.command: stat /etc/sudoers.d/{{ item.name }}
|
||||||
changed_when: false
|
changed_when: false
|
||||||
register: sudoers_stat
|
register: sudoers_stat
|
||||||
with_items: '{{ users }}'
|
with_items: '{{ users }}'
|
||||||
when: item.passwordless_sudo
|
when: item.passwordless_sudo
|
||||||
|
|
||||||
- name: Assert sudoers files are created
|
- name: Assert sudoers files are created
|
||||||
ansible.builtin.assert:
|
ansible.builtin.assert:
|
||||||
that: item.rc == 0
|
that: item.rc == 0
|
||||||
with_items: '{{ sudoers_stat.results }}'
|
with_items: '{{ sudoers_stat.results }}'
|
||||||
|
|||||||
@ -1,13 +1,12 @@
|
|||||||
---
|
|
||||||
galaxy_info:
|
galaxy_info:
|
||||||
author: Cian Hatton
|
author: Cian Hatton
|
||||||
namespace: chatton
|
namespace: chatton
|
||||||
description: Backup directories
|
description: Backup directories
|
||||||
license: MIT
|
license: MIT
|
||||||
min_ansible_version: "2.1"
|
min_ansible_version: '2.1'
|
||||||
galaxy_tags: []
|
galaxy_tags: []
|
||||||
platforms:
|
platforms:
|
||||||
- name: Debian
|
- name: Debian
|
||||||
versions:
|
versions:
|
||||||
- all
|
- all
|
||||||
dependencies: []
|
dependencies: []
|
||||||
|
|||||||
@ -1,2 +1,2 @@
|
|||||||
---
|
null
|
||||||
# defaults file for chatton.docker_restore
|
...
|
||||||
|
|||||||
@ -1,2 +1,2 @@
|
|||||||
---
|
null
|
||||||
# handlers file for chatton.docker_restore
|
...
|
||||||
|
|||||||
@ -1,121 +1,124 @@
|
|||||||
---
|
|
||||||
# tasks file for chatton.docker_backup
|
# tasks file for chatton.docker_backup
|
||||||
# https://docs.ansible.com/ansible/latest/collections/community/docker/docker_container_module.html#ansible-collections-community-docker-docker-container-module
|
# https://docs.ansible.com/ansible/latest/collections/community/docker/docker_container_module.html#ansible-collections-community-docker-docker-container-module
|
||||||
# https://docs.docker.com/storage/volumes/#backup-restore-or-migrate-data-volumes
|
# https://docs.docker.com/storage/volumes/#backup-restore-or-migrate-data-volumes
|
||||||
|
|
||||||
- name: Get container details
|
- name: Get container details
|
||||||
docker_container_info:
|
docker_container_info:
|
||||||
name: "{{ container_restore }}"
|
name: '{{ container_restore }}'
|
||||||
register: result
|
register: result
|
||||||
|
|
||||||
- name: Fail if container is not present
|
- name: Fail if container is not present
|
||||||
fail:
|
fail:
|
||||||
msg: Cannot restore volumes for a container when it does not exist. Ensure the container exists and try again.
|
msg: Cannot restore volumes for a container when it does not exist. Ensure the
|
||||||
|
container exists and try again.
|
||||||
when: result.exists == false
|
when: result.exists == false
|
||||||
|
|
||||||
- debug: msg="{{ result }}"
|
- debug: msg="{{ result }}"
|
||||||
|
|
||||||
- name: Extract only the volume mounts (not bind mounts)
|
- name: Extract only the volume mounts (not bind mounts)
|
||||||
set_fact: volume_mounts="{{ result.container.Mounts | selectattr("Type", "equalto", "volume")}}"
|
set_fact: volume_mounts="{{ result.container.Mounts | selectattr("Type", "equalto",
|
||||||
|
"volume")}}"
|
||||||
|
|
||||||
- debug: msg="{{ volume_mounts }}"
|
- debug: msg="{{ volume_mounts }}"
|
||||||
|
|
||||||
- name: Find relevant volume(s) in S3
|
- name: Find relevant volume(s) in S3
|
||||||
amazon.aws.aws_s3:
|
amazon.aws.aws_s3:
|
||||||
bucket: "{{ aws_s3.bucket }}"
|
bucket: '{{ aws_s3.bucket }}'
|
||||||
mode: list
|
mode: list
|
||||||
region: "{{ aws_s3.region }}"
|
region: '{{ aws_s3.region }}'
|
||||||
s3_url: "https://{{ aws_s3.s3_url }}"
|
s3_url: https://{{ aws_s3.s3_url }}
|
||||||
prefix: "{{ item.Name }}/{{ item.Name }}"
|
prefix: '{{ item.Name }}/{{ item.Name }}'
|
||||||
aws_access_key: "{{ aws_s3.aws_access_key }}"
|
aws_access_key: '{{ aws_s3.aws_access_key }}'
|
||||||
aws_secret_key: "{{ aws_s3.aws_secret_key }}"
|
aws_secret_key: '{{ aws_s3.aws_secret_key }}'
|
||||||
register: s3_list_output
|
register: s3_list_output
|
||||||
with_items: "{{ volume_mounts }}"
|
with_items: '{{ volume_mounts }}'
|
||||||
|
|
||||||
- debug: msg="{{ s3_list_output }}"
|
- debug: msg="{{ s3_list_output }}"
|
||||||
|
|
||||||
- name: Extract s3 keys for container
|
- name: Extract s3 keys for container
|
||||||
set_fact: container_s3_keys="{{ container_s3_keys | default([]) + [item.s3_keys | last] }}"
|
set_fact: container_s3_keys="{{ container_s3_keys | default([]) + [item.s3_keys
|
||||||
with_items: "{{ s3_list_output.results }}"
|
| last] }}"
|
||||||
|
with_items: '{{ s3_list_output.results }}'
|
||||||
|
|
||||||
- debug: msg="{{ container_s3_keys }}"
|
- debug: msg="{{ container_s3_keys }}"
|
||||||
|
|
||||||
- name: Create a directory for temporary backups if they do not exist
|
- name: Create a directory for temporary backups if they do not exist
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: "/tmp/{{ item.Name }}"
|
path: /tmp/{{ item.Name }}
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0755'
|
mode: '0755'
|
||||||
with_items: "{{ volume_mounts }}"
|
with_items: '{{ volume_mounts }}'
|
||||||
|
|
||||||
- name: Download archives from S3
|
- name: Download archives from S3
|
||||||
amazon.aws.aws_s3:
|
amazon.aws.aws_s3:
|
||||||
bucket: "{{ aws_s3.bucket }}"
|
bucket: '{{ aws_s3.bucket }}'
|
||||||
object: "{{ item }}"
|
object: '{{ item }}'
|
||||||
aws_access_key: "{{ aws_s3.aws_access_key }}"
|
aws_access_key: '{{ aws_s3.aws_access_key }}'
|
||||||
aws_secret_key: "{{ aws_s3.aws_secret_key }}"
|
aws_secret_key: '{{ aws_s3.aws_secret_key }}'
|
||||||
region: "{{ aws_s3.region }}"
|
region: '{{ aws_s3.region }}'
|
||||||
s3_url: "https://{{ aws_s3.s3_url }}"
|
s3_url: https://{{ aws_s3.s3_url }}
|
||||||
mode: get
|
mode: get
|
||||||
dest: "/tmp/{{ item }}"
|
dest: /tmp/{{ item }}
|
||||||
with_items: "{{ container_s3_keys }}"
|
with_items: '{{ container_s3_keys }}'
|
||||||
register: get_out
|
register: get_out
|
||||||
|
|
||||||
- debug: msg="{{ get_out }}"
|
- debug: msg="{{ get_out }}"
|
||||||
|
|
||||||
- set_fact:
|
- set_fact:
|
||||||
volume_details: "{{ volume_details | default([]) + [ {'mount': item.0, 's3_key': item.1} ] }}"
|
volume_details: "{{ volume_details | default([]) + [ {'mount': item.0, 's3_key':\
|
||||||
|
\ item.1} ] }}"
|
||||||
with_together:
|
with_together:
|
||||||
- "{{ volume_mounts }}"
|
- '{{ volume_mounts }}'
|
||||||
- "{{ container_s3_keys }}"
|
- '{{ container_s3_keys }}'
|
||||||
|
|
||||||
- debug: msg="{{ volume_details }}"
|
- debug: msg="{{ volume_details }}"
|
||||||
|
|
||||||
- name: Stop a container
|
- name: Stop a container
|
||||||
community.docker.docker_container:
|
community.docker.docker_container:
|
||||||
name: "{{ container_restore }}"
|
name: '{{ container_restore }}'
|
||||||
state: stopped
|
state: stopped
|
||||||
|
|
||||||
- name: Ensure Volume
|
- name: Ensure Volume
|
||||||
docker_volume:
|
docker_volume:
|
||||||
name: "{{ item.mount.Name }}"
|
name: '{{ item.mount.Name }}'
|
||||||
state: present
|
state: present
|
||||||
with_items: "{{ volume_details }}"
|
with_items: '{{ volume_details }}'
|
||||||
|
|
||||||
- name: Remove contents of volumes
|
- name: Remove contents of volumes
|
||||||
community.docker.docker_container:
|
community.docker.docker_container:
|
||||||
name: "restore-container-{{ item.mount.Name }}-{{ 10 | random }}"
|
name: restore-container-{{ item.mount.Name }}-{{ 10 | random }}
|
||||||
image: ubuntu
|
image: ubuntu
|
||||||
command: "rm -rf ./* "
|
command: 'rm -rf ./* '
|
||||||
auto_remove: true
|
auto_remove: true
|
||||||
detach: false # block until this container exists.
|
detach: false # block until this container exists.
|
||||||
state: started
|
state: started
|
||||||
# start inside the directory we want to wipe
|
# start inside the directory we want to wipe
|
||||||
working_dir: "{{ item.mount.Destination }}"
|
working_dir: '{{ item.mount.Destination }}'
|
||||||
volumes:
|
volumes:
|
||||||
- /tmp:/tmp
|
- /tmp:/tmp
|
||||||
volumes_from:
|
volumes_from:
|
||||||
- "{{ container_restore }}"
|
- '{{ container_restore }}'
|
||||||
with_items: "{{ volume_details }}"
|
with_items: '{{ volume_details }}'
|
||||||
|
|
||||||
|
|
||||||
- name: Restore contents of volumes
|
- name: Restore contents of volumes
|
||||||
community.docker.docker_container:
|
community.docker.docker_container:
|
||||||
name: "restore-container-{{ item.mount.Name }}-{{ 10 | random }}"
|
name: restore-container-{{ item.mount.Name }}-{{ 10 | random }}
|
||||||
image: ubuntu
|
image: ubuntu
|
||||||
# extract the tar into the volume.
|
# extract the tar into the volume.
|
||||||
command: "tar xvf /tmp/{{ item.s3_key }}"
|
command: tar xvf /tmp/{{ item.s3_key }}
|
||||||
auto_remove: true
|
auto_remove: true
|
||||||
detach: false # block until this container exists.
|
detach: false # block until this container exists.
|
||||||
state: started
|
state: started
|
||||||
# the compressed volume contains the directories, so we start from the root
|
# the compressed volume contains the directories, so we start from the root
|
||||||
working_dir: "/"
|
working_dir: /
|
||||||
volumes:
|
volumes:
|
||||||
- /tmp:/tmp
|
- /tmp:/tmp
|
||||||
volumes_from:
|
volumes_from:
|
||||||
- "{{ container_restore }}"
|
- '{{ container_restore }}'
|
||||||
with_items: "{{ volume_details }}"
|
with_items: '{{ volume_details }}'
|
||||||
|
|
||||||
- name: Start a container
|
- name: Start a container
|
||||||
community.docker.docker_container:
|
community.docker.docker_container:
|
||||||
name: "{{ container_restore }}"
|
name: '{{ container_restore }}'
|
||||||
state: started
|
state: started
|
||||||
|
|||||||
@ -1,2 +1,2 @@
|
|||||||
---
|
null
|
||||||
# vars file for chatton.docker_restore
|
...
|
||||||
|
|||||||
@ -1,4 +1,2 @@
|
|||||||
# These are supported funding model platforms
|
|
||||||
---
|
|
||||||
github: geerlingguy
|
github: geerlingguy
|
||||||
patreon: geerlingguy
|
patreon: geerlingguy
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
---
|
|
||||||
- name: restart docker
|
- name: restart docker
|
||||||
service:
|
service:
|
||||||
name: docker
|
name: docker
|
||||||
state: "{{ docker_restart_handler_state }}"
|
state: '{{ docker_restart_handler_state }}'
|
||||||
ignore_errors: "{{ ansible_check_mode }}"
|
ignore_errors: '{{ ansible_check_mode }}'
|
||||||
when: docker_service_manage | bool
|
when: docker_service_manage | bool
|
||||||
|
|||||||
@ -1,41 +1,40 @@
|
|||||||
---
|
|
||||||
dependencies: []
|
dependencies: []
|
||||||
|
|
||||||
galaxy_info:
|
galaxy_info:
|
||||||
role_name: docker
|
role_name: docker
|
||||||
author: geerlingguy
|
author: geerlingguy
|
||||||
description: Docker for Linux.
|
description: Docker for Linux.
|
||||||
company: "Midwestern Mac, LLC"
|
company: Midwestern Mac, LLC
|
||||||
license: "license (BSD, MIT)"
|
license: license (BSD, MIT)
|
||||||
min_ansible_version: 2.4
|
min_ansible_version: 2.4
|
||||||
platforms:
|
platforms:
|
||||||
- name: EL
|
- name: EL
|
||||||
versions:
|
versions:
|
||||||
- 7
|
- 7
|
||||||
- 8
|
- 8
|
||||||
- name: Fedora
|
- name: Fedora
|
||||||
versions:
|
versions:
|
||||||
- all
|
- all
|
||||||
- name: Debian
|
- name: Debian
|
||||||
versions:
|
versions:
|
||||||
- buster
|
- buster
|
||||||
- bullseye
|
- bullseye
|
||||||
- name: Ubuntu
|
- name: Ubuntu
|
||||||
versions:
|
versions:
|
||||||
- bionic
|
- bionic
|
||||||
- focal
|
- focal
|
||||||
- jammy
|
- jammy
|
||||||
- name: Alpine
|
- name: Alpine
|
||||||
version:
|
version:
|
||||||
- all
|
- all
|
||||||
- name: Arch
|
- name: Arch
|
||||||
versions:
|
versions:
|
||||||
- all
|
- all
|
||||||
galaxy_tags:
|
galaxy_tags:
|
||||||
- web
|
- web
|
||||||
- system
|
- system
|
||||||
- containers
|
- containers
|
||||||
- docker
|
- docker
|
||||||
- orchestration
|
- orchestration
|
||||||
- compose
|
- compose
|
||||||
- server
|
- server
|
||||||
|
|||||||
@ -1,24 +1,23 @@
|
|||||||
---
|
|
||||||
- name: Converge
|
- name: Converge
|
||||||
hosts: all
|
hosts: all
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
pre_tasks:
|
pre_tasks:
|
||||||
- name: Update apt cache.
|
- name: Update apt cache.
|
||||||
apt: update_cache=yes cache_valid_time=600
|
apt: update_cache=yes cache_valid_time=600
|
||||||
when: ansible_os_family == 'Debian'
|
when: ansible_os_family == 'Debian'
|
||||||
|
|
||||||
- name: Wait for systemd to complete initialization. # noqa 303
|
- name: Wait for systemd to complete initialization. # noqa 303
|
||||||
command: systemctl is-system-running
|
command: systemctl is-system-running
|
||||||
register: systemctl_status
|
register: systemctl_status
|
||||||
until: >
|
until: >
|
||||||
'running' in systemctl_status.stdout or
|
'running' in systemctl_status.stdout or
|
||||||
'degraded' in systemctl_status.stdout
|
'degraded' in systemctl_status.stdout
|
||||||
retries: 30
|
retries: 30
|
||||||
delay: 5
|
delay: 5
|
||||||
when: ansible_service_mgr == 'systemd'
|
when: ansible_service_mgr == 'systemd'
|
||||||
changed_when: false
|
changed_when: false
|
||||||
failed_when: systemctl_status.rc > 1
|
failed_when: systemctl_status.rc > 1
|
||||||
|
|
||||||
roles:
|
roles:
|
||||||
- role: geerlingguy.docker
|
- role: geerlingguy.docker
|
||||||
|
|||||||
@ -1,10 +1,9 @@
|
|||||||
---
|
|
||||||
- name: Ensure docker users are added to the docker group.
|
- name: Ensure docker users are added to the docker group.
|
||||||
user:
|
user:
|
||||||
name: "{{ item }}"
|
name: '{{ item }}'
|
||||||
groups: docker
|
groups: docker
|
||||||
append: true
|
append: true
|
||||||
with_items: "{{ docker_users }}"
|
with_items: '{{ docker_users }}'
|
||||||
|
|
||||||
- name: Reset ssh connection to apply user changes.
|
- name: Reset ssh connection to apply user changes.
|
||||||
meta: reset_connection
|
meta: reset_connection
|
||||||
|
|||||||
@ -1,2 +1 @@
|
|||||||
---
|
docker_package: docker
|
||||||
docker_package: "docker"
|
|
||||||
|
|||||||
@ -1,2 +1,2 @@
|
|||||||
---
|
null
|
||||||
# Empty file
|
...
|
||||||
|
|||||||
@ -1,4 +1,2 @@
|
|||||||
# These are supported funding model platforms
|
|
||||||
---
|
|
||||||
github: geerlingguy
|
github: geerlingguy
|
||||||
patreon: geerlingguy
|
patreon: geerlingguy
|
||||||
|
|||||||
@ -1,15 +1,14 @@
|
|||||||
---
|
|
||||||
- name: Ensure Pip is installed.
|
- name: Ensure Pip is installed.
|
||||||
package:
|
package:
|
||||||
name: "{{ pip_package }}"
|
name: '{{ pip_package }}'
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- name: Ensure pip_install_packages are installed.
|
- name: Ensure pip_install_packages are installed.
|
||||||
pip:
|
pip:
|
||||||
name: "{{ item.name | default(item) }}"
|
name: '{{ item.name | default(item) }}'
|
||||||
version: "{{ item.version | default(omit) }}"
|
version: '{{ item.version | default(omit) }}'
|
||||||
virtualenv: "{{ item.virtualenv | default(omit) }}"
|
virtualenv: '{{ item.virtualenv | default(omit) }}'
|
||||||
state: "{{ item.state | default(omit) }}"
|
state: '{{ item.state | default(omit) }}'
|
||||||
extra_args: "{{ item.extra_args | default(omit) }}"
|
extra_args: '{{ item.extra_args | default(omit) }}'
|
||||||
executable: "{{ pip_executable }}"
|
executable: '{{ pip_executable }}'
|
||||||
loop: "{{ pip_install_packages }}"
|
loop: '{{ pip_install_packages }}'
|
||||||
|
|||||||
@ -1,4 +1,2 @@
|
|||||||
# These are supported funding model platforms
|
|
||||||
---
|
|
||||||
github: geerlingguy
|
github: geerlingguy
|
||||||
patreon: geerlingguy
|
patreon: geerlingguy
|
||||||
|
|||||||
@ -1,3 +1,2 @@
|
|||||||
---
|
|
||||||
- name: restart smb
|
- name: restart smb
|
||||||
service: "name={{ samba_daemon }} state=restarted"
|
service: name={{ samba_daemon }} state=restarted
|
||||||
|
|||||||
@ -1,33 +1,32 @@
|
|||||||
---
|
|
||||||
dependencies: []
|
dependencies: []
|
||||||
|
|
||||||
galaxy_info:
|
galaxy_info:
|
||||||
role_name: samba
|
role_name: samba
|
||||||
author: geerlingguy
|
author: geerlingguy
|
||||||
description: "Samba for RHEL/CentOS."
|
description: Samba for RHEL/CentOS.
|
||||||
company: "Midwestern Mac, LLC"
|
company: Midwestern Mac, LLC
|
||||||
license: "license (BSD, MIT)"
|
license: license (BSD, MIT)
|
||||||
min_ansible_version: 2.0
|
min_ansible_version: 2.0
|
||||||
platforms:
|
platforms:
|
||||||
- name: EL
|
- name: EL
|
||||||
versions:
|
versions:
|
||||||
- 7
|
- 7
|
||||||
- 8
|
- 8
|
||||||
- name: Fedora
|
- name: Fedora
|
||||||
versions:
|
versions:
|
||||||
- all
|
- all
|
||||||
- name: Ubuntu
|
- name: Ubuntu
|
||||||
versions:
|
versions:
|
||||||
- all
|
- all
|
||||||
- name: Debian
|
- name: Debian
|
||||||
versions:
|
versions:
|
||||||
- all
|
- all
|
||||||
galaxy_tags:
|
galaxy_tags:
|
||||||
- networking
|
- networking
|
||||||
- system
|
- system
|
||||||
- samba
|
- samba
|
||||||
- windows
|
- windows
|
||||||
- filesystem
|
- filesystem
|
||||||
- fileshare
|
- fileshare
|
||||||
- sharing
|
- sharing
|
||||||
- files
|
- files
|
||||||
|
|||||||
@ -1,12 +1,11 @@
|
|||||||
---
|
|
||||||
- name: Converge
|
- name: Converge
|
||||||
hosts: all
|
hosts: all
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
pre_tasks:
|
pre_tasks:
|
||||||
- name: Update apt cache.
|
- name: Update apt cache.
|
||||||
apt: update_cache=true cache_valid_time=600
|
apt: update_cache=true cache_valid_time=600
|
||||||
when: ansible_os_family == 'Debian'
|
when: ansible_os_family == 'Debian'
|
||||||
|
|
||||||
roles:
|
roles:
|
||||||
- role: geerlingguy.samba
|
- role: geerlingguy.samba
|
||||||
|
|||||||
@ -1,27 +1,26 @@
|
|||||||
---
|
|
||||||
- name: Include OS-specific variables.
|
- name: Include OS-specific variables.
|
||||||
include_vars: "{{ ansible_os_family }}.yml"
|
include_vars: '{{ ansible_os_family }}.yml'
|
||||||
|
|
||||||
- name: Ensure Samba-related packages are installed (RedHat).
|
- name: Ensure Samba-related packages are installed (RedHat).
|
||||||
package:
|
package:
|
||||||
name:
|
name:
|
||||||
- samba
|
- samba
|
||||||
- samba-client
|
- samba-client
|
||||||
- samba-common
|
- samba-common
|
||||||
- cifs-utils
|
- cifs-utils
|
||||||
state: present
|
state: present
|
||||||
when: ansible_os_family == 'RedHat'
|
when: ansible_os_family == 'RedHat'
|
||||||
|
|
||||||
- name: Ensure Samba-related packages are installed (Debian).
|
- name: Ensure Samba-related packages are installed (Debian).
|
||||||
apt:
|
apt:
|
||||||
name:
|
name:
|
||||||
- samba
|
- samba
|
||||||
- samba-common
|
- samba-common
|
||||||
state: present
|
state: present
|
||||||
when: ansible_os_family == 'Debian'
|
when: ansible_os_family == 'Debian'
|
||||||
|
|
||||||
- name: Ensure Samba is running and set to start on boot.
|
- name: Ensure Samba is running and set to start on boot.
|
||||||
service:
|
service:
|
||||||
name: "{{ samba_daemon }}"
|
name: '{{ samba_daemon }}'
|
||||||
state: started
|
state: started
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@ -1,2 +1 @@
|
|||||||
---
|
|
||||||
samba_daemon: smbd
|
samba_daemon: smbd
|
||||||
|
|||||||
@ -1,2 +1 @@
|
|||||||
---
|
|
||||||
samba_daemon: smb
|
samba_daemon: smb
|
||||||
|
|||||||
@ -1 +1,2 @@
|
|||||||
---
|
null
|
||||||
|
...
|
||||||
|
|||||||
@ -1,12 +1,7 @@
|
|||||||
$ANSIBLE_VAULT;1.1;AES256
|
$ANSIBLE_VAULT;1.1;AES256 38343033383061343739363362626366376630376337376639376235316665363736376362633830
|
||||||
38343033383061343739363362626366376630376337376639376235316665363736376362633830
|
6638383135303063363866623262303736393337386364630a353533323537376437343033666334 32353832353466343832643238313834616662333736363738353565623063316438393635343631
|
||||||
6638383135303063363866623262303736393337386364630a353533323537376437343033666334
|
6662366132396337320a326335353333306262666561353037356539633432376439666133386463 30326230316634346431346266333030303435313065616665656362663164313638313639313633
|
||||||
32353832353466343832643238313834616662333736363738353565623063316438393635343631
|
63343538653230653330383336386138643636333361326139346336646665366530343537663331 61303639313335343162613838303034616362303935653862666166656634613562376330306165
|
||||||
6662366132396337320a326335353333306262666561353037356539633432376439666133386463
|
32373832666438623638616363363931636664633337396336653237356234616438623261353134 62373463313235323233343734363561353237613439663534393537333964323932373837356564
|
||||||
30326230316634346431346266333030303435313065616665656362663164313638313639313633
|
32383536613332323532633534306632373762666236366664383636323264363433396437666437 323637336362613139633237316237666365
|
||||||
63343538653230653330383336386138643636333361326139346336646665366530343537663331
|
...
|
||||||
61303639313335343162613838303034616362303935653862666166656634613562376330306165
|
|
||||||
32373832666438623638616363363931636664633337396336653237356234616438623261353134
|
|
||||||
62373463313235323233343734363561353237613439663534393537333964323932373837356564
|
|
||||||
32383536613332323532633534306632373762666236366664383636323264363433396437666437
|
|
||||||
323637336362613139633237316237666365
|
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
---
|
|
||||||
samba_group: smbgroup
|
samba_group: smbgroup
|
||||||
samba_user: smbuser
|
samba_user: smbuser
|
||||||
users:
|
users:
|
||||||
- name: cianhatton
|
- name: cianhatton
|
||||||
|
|||||||
@ -1,11 +1,10 @@
|
|||||||
---
|
|
||||||
- name: Converge
|
- name: Converge
|
||||||
hosts: all
|
hosts: all
|
||||||
vars:
|
vars:
|
||||||
mergerfs_mounts:
|
mergerfs_mounts:
|
||||||
- path: /mnt/storage
|
- path: /mnt/storage
|
||||||
branches:
|
branches:
|
||||||
- /mnt/data*
|
- /mnt/data*
|
||||||
options: allow_other,use_ino
|
options: allow_other,use_ino
|
||||||
roles:
|
roles:
|
||||||
- role: ansible-role-mergerfs
|
- role: ansible-role-mergerfs
|
||||||
|
|||||||
@ -1,25 +1,24 @@
|
|||||||
---
|
|
||||||
- name: Prepare
|
- name: Prepare
|
||||||
hosts: all
|
hosts: all
|
||||||
tasks:
|
tasks:
|
||||||
- name: Create directories
|
- name: Create directories
|
||||||
become: true
|
become: true
|
||||||
file:
|
file:
|
||||||
path: "{{ item }}"
|
path: '{{ item }}'
|
||||||
state: directory
|
state: directory
|
||||||
loop:
|
loop:
|
||||||
- /mnt/data1
|
- /mnt/data1
|
||||||
- /mnt/data2
|
- /mnt/data2
|
||||||
|
|
||||||
- name: Create data files
|
- name: Create data files
|
||||||
become: true
|
become: true
|
||||||
copy:
|
copy:
|
||||||
content: "{{ item.content }}\n"
|
content: "{{ item.content }}\n"
|
||||||
dest: "{{ item.path }}"
|
dest: '{{ item.path }}'
|
||||||
loop:
|
loop:
|
||||||
- path: /mnt/data1/file1.txt
|
- path: /mnt/data1/file1.txt
|
||||||
content: file1
|
content: file1
|
||||||
- path: /mnt/data2/file2.txt
|
- path: /mnt/data2/file2.txt
|
||||||
content: file2
|
content: file2
|
||||||
- path: /mnt/data2/file3.txt
|
- path: /mnt/data2/file3.txt
|
||||||
content: file3
|
content: file3
|
||||||
|
|||||||
@ -1,34 +1,33 @@
|
|||||||
---
|
|
||||||
- name: Include OS-specific variables
|
- name: Include OS-specific variables
|
||||||
include_vars: "{{ ansible_os_family }}.yml"
|
include_vars: '{{ ansible_os_family }}.yml'
|
||||||
tags:
|
tags:
|
||||||
- mergerfs
|
- mergerfs
|
||||||
|
|
||||||
- name: Install mergerfs prerequisites
|
- name: Install mergerfs prerequisites
|
||||||
become: true
|
become: true
|
||||||
package:
|
package:
|
||||||
name: "{{ mergerfs_prerequisites }}"
|
name: '{{ mergerfs_prerequisites }}'
|
||||||
state: present
|
state: present
|
||||||
update_cache: true
|
update_cache: true
|
||||||
tags:
|
tags:
|
||||||
- mergerfs
|
- mergerfs
|
||||||
- mergerfs_install
|
- mergerfs_install
|
||||||
|
|
||||||
- name: Include install tasks
|
- name: Include install tasks
|
||||||
import_tasks: install_from_{{ mergerfs_install_mode }}.yml
|
import_tasks: install_from_{{ mergerfs_install_mode }}.yml
|
||||||
tags:
|
tags:
|
||||||
- mergerfs
|
- mergerfs
|
||||||
- mergerfs_install
|
- mergerfs_install
|
||||||
|
|
||||||
- name: Mount mergerfs filesystems
|
- name: Mount mergerfs filesystems
|
||||||
become: true
|
become: true
|
||||||
mount:
|
mount:
|
||||||
fstype: fuse.mergerfs
|
fstype: fuse.mergerfs
|
||||||
src: "{{ ':'.join(item.branches | mandatory) }}"
|
src: "{{ ':'.join(item.branches | mandatory) }}"
|
||||||
path: "{{ item.path | mandatory }}"
|
path: '{{ item.path | mandatory }}'
|
||||||
opts: "{{ item.options | default('defaults') }}"
|
opts: "{{ item.options | default('defaults') }}"
|
||||||
state: "{{ item.state | default('mounted') }}"
|
state: "{{ item.state | default('mounted') }}"
|
||||||
loop: "{{ mergerfs_mounts }}"
|
loop: '{{ mergerfs_mounts }}'
|
||||||
tags:
|
tags:
|
||||||
- mergerfs
|
- mergerfs
|
||||||
- mergerfs_mount
|
- mergerfs_mount
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
---
|
|
||||||
mergerfs_prerequisites:
|
mergerfs_prerequisites:
|
||||||
- fuse
|
- fuse
|
||||||
mergerfs_dist: "{{ ansible_distribution|lower }}-{{ ansible_distribution_release }}"
|
mergerfs_dist: '{{ ansible_distribution|lower }}-{{ ansible_distribution_release }}'
|
||||||
mergerfs_arch_map:
|
mergerfs_arch_map:
|
||||||
x86_64: amd64
|
x86_64: amd64
|
||||||
i386: i386
|
i386: i386
|
||||||
aarch64: arm64
|
aarch64: arm64
|
||||||
armv7l: armhf
|
armv7l: armhf
|
||||||
mergerfs_arch: "{{ mergerfs_arch_map[ansible_userspace_architecture | default(ansible_architecture) ] }}"
|
mergerfs_arch: '{{ mergerfs_arch_map[ansible_userspace_architecture | default(ansible_architecture)
|
||||||
mergerfs_pkg_prefix: "mergerfs_"
|
] }}'
|
||||||
mergerfs_pkg_suffix: ".{{ mergerfs_dist }}_{{ mergerfs_arch }}.deb"
|
mergerfs_pkg_prefix: mergerfs_
|
||||||
|
mergerfs_pkg_suffix: .{{ mergerfs_dist }}_{{ mergerfs_arch }}.deb
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
---
|
|
||||||
mergerfs_prerequisites:
|
mergerfs_prerequisites:
|
||||||
- fuse
|
- fuse
|
||||||
mergerfs_dist: "{{ 'fc' if ansible_distribution == 'Fedora' else 'el' }}{{ ansible_distribution_major_version }}"
|
mergerfs_dist: "{{ 'fc' if ansible_distribution == 'Fedora' else 'el' }}{{ ansible_distribution_major_version\
|
||||||
mergerfs_arch: "{{ ansible_userspace_architecture }}"
|
\ }}"
|
||||||
mergerfs_pkg_prefix: "mergerfs-"
|
mergerfs_arch: '{{ ansible_userspace_architecture }}'
|
||||||
mergerfs_pkg_suffix: "-1.{{ mergerfs_dist }}.{{ mergerfs_arch }}.rpm"
|
mergerfs_pkg_prefix: mergerfs-
|
||||||
|
mergerfs_pkg_suffix: -1.{{ mergerfs_dist }}.{{ mergerfs_arch }}.rpm
|
||||||
|
|||||||
Loading…
Reference in New Issue