adding formatting

pull/20/head
Cian Hatton 3 years ago
parent e644a03958
commit 4f3e9b552c

@ -17,3 +17,12 @@ verify:
deps:
pip install -r requirements.txt
ansible-galaxy install -r requirements.yml
format:
scripts/format_all_yaml.sh
lint:
ansible-lint host_vars
ansible-lint group_vars
ansible-lint roles
ansible-lint playbooks

@ -1,25 +1,24 @@
---
# all encrypted variables should go in the linked file.
vault_file: vault_vars/linode-vault.yml
# any linode specific variables go here
services:
- name: gitea
- name: mealie
- name: linkding
- name: overseerr
- name: nextcloud
- name: nginx-proxy-manager
- name: uptime-kuma
- name: docker-volume-backup
- name: mariadb
- name: photoprism
- name: olivetin
- name: gitea
- name: mealie
- name: linkding
- name: overseerr
- name: nextcloud
- name: nginx-proxy-manager
- name: uptime-kuma
- name: docker-volume-backup
- name: mariadb
- name: photoprism
- name: olivetin
# any additional docker networks that should be created
docker_networks:
- mariadb_net
- mariadb_net
# use docker compose
container_deployment_mode: "compose"
container_deployment_mode: compose
restore_from_s3: false

@ -1,8 +1,7 @@
---
backups:
schedule_keys:
monthly: "monthly"
nightly: "nightly"
monthly: monthly
nightly: nightly
# TODO: docker_volume_backup exists in vault. Clean this up.
dockervolumebackup:
@ -30,15 +29,15 @@ configure_samba: true
samba_group: smbgroup
samba_user: smbuser
users:
- name: cianhatton
- name: cianhatton
group: cianhatton
passwordless_sudo: true
shares:
- /share
- /share/public_files
- /share/private_files
- /share/cian_files
- /share
- /share/public_files
- /share/private_files
- /share/cian_files
directories:
# path on qnap where downloads go
@ -57,5 +56,5 @@ directories:
photoprism_dir: /mnt/mergerfs/photoprism
desired_docker_images:
- ubuntu:latest
- busybox:latest
- ubuntu:latest
- busybox:latest

@ -1,4 +1,3 @@
---
# all encrypted variables should go in the linked file.
vault_file: vault_vars/qnap-vault.yml
# any qnap specific variables go here
@ -6,56 +5,56 @@ mounts:
- path: /mnt/mergerfs
state: mounted
branches:
- "/mnt/data/device0"
- "/mnt/data/device1"
- "/mnt/data/device2"
- /mnt/data/device0
- /mnt/data/device1
- /mnt/data/device2
options: allow_other,use_ino
devices:
- uuid: "a54c1bde-1400-4975-bf24-08c603ca3a11" # /dev/sdc1
path: "/mnt/data/device0"
- uuid: "727dddaa-f7a1-439a-995f-5f4d35322e08" # /dev/sdd1
path: "/mnt/data/device1"
- uuid: "f3cff115-9adc-4761-b1e9-e81055f3e0af" # /dev/sda1
path: "/mnt/data/device2"
- uuid: a54c1bde-1400-4975-bf24-08c603ca3a11 # /dev/sdc1
path: /mnt/data/device0
- uuid: 727dddaa-f7a1-439a-995f-5f4d35322e08 # /dev/sdd1
path: /mnt/data/device1
- uuid: f3cff115-9adc-4761-b1e9-e81055f3e0af # /dev/sda1
path: /mnt/data/device2
# SSD for downloads / transcoding
- uuid: "c528bf82-61ab-4f3d-87e0-d1e6e02ef7ec" # /dev/sdf
path: "/mnt/ssd0/"
- uuid: c528bf82-61ab-4f3d-87e0-d1e6e02ef7ec # /dev/sdf
path: /mnt/ssd0/
services:
- name: gitea
- name: gitea
endpoint_id: 2
- name: mealie
- name: mealie
endpoint_id: 2
- name: linkding
- name: linkding
endpoint_id: 2
- name: overseerr
- name: overseerr
endpoint_id: 2
- name: nextcloud
- name: nextcloud
endpoint_id: 2
- name: dashboards
- name: dashboards
endpoint_id: 2
- name: nginx-proxy-manager
- name: nginx-proxy-manager
endpoint_id: 2
- name: plex
- name: plex
endpoint_id: 2
- name: uptime-kuma
- name: uptime-kuma
endpoint_id: 2
- name: vpn-stack
- name: vpn-stack
endpoint_id: 2
- name: docker-volume-backup
- name: docker-volume-backup
endpoint_id: 2
- name: mariadb
- name: mariadb
endpoint_id: 2
- name: photoprism
- name: photoprism
endpoint_id: 2
- name: olivetin
- name: olivetin
endpoint_id: 2
# any additional docker networks that should be created
docker_networks:
- mariadb_net
- mariadb_net
# use portainer
container_deployment_mode: "portainer"
container_deployment_mode: portainer
restore_from_s3: true

@ -1,4 +1,3 @@
---
# needs to be run with a different user with access to create ansible key and user.
# e.g.
# ansible-playbook bootstrap.yml -e ansible_ssh_user=cianhatton
@ -11,7 +10,7 @@
- name: Generate an OpenSSH rsa keypair for ansible
community.crypto.openssh_keypair:
path: ~/.ssh/ansible
passphrase: ""
passphrase: ''
- hosts: all
become: true

@ -1,6 +1,5 @@
---
- name: Update packages and ensure users on all hosts
tags: ["always"]
tags: [always]
hosts: all
become: true
pre_tasks:
@ -16,25 +15,25 @@
become: true
roles:
- role: setup_docker
tags: ["setup","docker"]
tags: [setup, docker]
- name: Setup and deploy services on the QNAP
hosts: qnap
become: true
pre_tasks:
- name: Include vault variables.
include_vars: "{{vault_file}}"
tags: ["always"]
include_vars: '{{vault_file}}'
tags: [always]
roles:
- role: setup_mergerfs
tags: ["mergerfs"]
tags: [mergerfs]
- role: setup_samba
tags: ["samba"]
tags: [samba]
- role: setup_portainer
tags: ["services", "portainer"]
tags: [services, portainer]
- role: setup_hosted_services
tags: ["services"]
tags: [services]
- hosts: linodes
@ -42,13 +41,13 @@
pre_tasks:
- name: Include vault variables.
include_vars: "{{vault_file}}"
tags: ["always"]
include_vars: '{{vault_file}}'
tags: [always]
roles:
- role: setup_samba
tags: ["samba"]
tags: [samba]
- role: setup_docker
tags: ["docker"]
tags: [docker]
- role: setup_hosted_services
tags: ["services"]
tags: [services]

@ -1,7 +1,6 @@
---
- hosts: localhost
become: true
roles:
- role: 'roles/setup_linode'
- role: roles/setup_linode
vars:
state: present

@ -2,7 +2,7 @@
become: true
pre_tasks:
- name: Include vault variables.
include_vars: '../{{vault_file}}'
include_vars: ../{{vault_file}}
tags:
- always
tasks:
@ -30,11 +30,11 @@
register: image_details
- name: Assert desired images exist
assert:
that: {{item in image_details.images | map(attribute='RepoTags') | flatten }}
that: {{item in image_details.images | map(attribute='RepoTags') | flatten: !!null ''}: !!null ''}
with_items: '{{desired_docker_images}}'
- name: Fetch Sudoers Files
command: 'stat /etc/sudoers.d/{{item.name}}'
command: stat /etc/sudoers.d/{{item.name}}
changed_when: false
register: sudoers_stat
with_items: '{{users}}'

@ -49,7 +49,7 @@ PyYAML==6.0
requests==2.28.1
resolvelib==0.8.1
rich==12.5.1
ruamel.yaml==0.17.21
ruamel.yaml==0.15.100
ruamel.yaml.clib==0.2.6
six==1.16.0
subprocess-tee==0.3.5
@ -57,5 +57,6 @@ text-unidecode==1.3
typing_extensions==4.3.0
urllib3==1.26.12
wcmatch==8.4
yamlfmt==1.1.0
yamllint==1.27.1
zipp==3.8.1

@ -1,10 +1,3 @@
# @meta author: Cian Hatton
# @meta description: >
# Role to bootstrap a target host. This role will add an ansible
# user and allow paswordless sudo.
# @end
---
- name: Update Packages
apt:
upgrade: dist
@ -18,7 +11,7 @@
- name: Add ssh key for ansible
authorized_key:
user: "ansible"
user: ansible
state: present
key: "{{ lookup('file', '~/.ssh/ansible.pub') }}"

@ -1,12 +1,7 @@
# https://github.com/Lissy93/dashy/blob/master/docs/showcase.md
# Details about config.
# https://github.com/Lissy93/dashy/blob/master/docs/configuring.md
# Widgets: https://github.com/Lissy93/dashy/blob/master/docs/widgets.md
---
pageInfo:
title: Home Lab
sections:
- name: Dashboards
- name: Dashboards
widgets:
- type: gl-disk-space
options:
@ -24,78 +19,78 @@ sections:
items:
- title: Dash Dot
icon: hl-dashdot
url: "http://qnap:3010"
url: http://qnap:3010
- title: Uptime Kuma
icon: hl-uptime-kuma
url: "http://qnap:3001"
url: http://qnap:3001
- title: Tautulli
icon: hl-tautulli
url: "http://qnap:8182"
url: http://qnap:8182
- title: Glances
icon: hl-glances
url: "http://qnap:8083"
- name: Media Stack
url: http://qnap:8083
- name: Media Stack
items:
- title: Plex
icon: hl-plex
url: "http://qnap:32400"
url: http://qnap:32400
statusCheck: false
- title: Sonarr
icon: hl-sonarr
url: "http://qnap:8989"
url: http://qnap:8989
- title: Radarr
icon: hl-radarr
url: "http://qnap:7878"
url: http://qnap:7878
- title: Overseerr
icon: hl-overseerr
url: "http://qnap:5055"
url: http://qnap:5055
- title: Jackett
icon: hl-jackett
url: "http://qnap:9117"
statusCheckUrl: "http://qnap:9117/health"
url: http://qnap:9117
statusCheckUrl: http://qnap:9117/health
- title: Qbittorrent
icon: hl-qbittorrent
url: "http://qnap:15000"
- name: Tools
url: http://qnap:15000
- name: Tools
items:
- title: Photoprism
description: Manager photos
icon: hl-photoprism
url: "http://qnap:2342"
url: http://qnap:2342
- title: Olivetin
description: Run pre-defined shell commands
icon: hl-olivetin
url: "http://qnap:1337"
url: http://qnap:1337
- title: Linkding
description: Manager photos
icon: hl-linkding
url: "http://qnap:9090"
url: http://qnap:9090
- title: Nextcloud
icon: hl-nextcloud
url: "http://qnap:8081"
url: http://qnap:8081
- title: Mealie
icon: hl-mealie
url: "https://mealie.cianhatton.ie"
url: https://mealie.cianhatton.ie
- title: Gitea
icon: hl-gitea
url: "https://git.cianhatton.ie"
- name: System Admin
url: https://git.cianhatton.ie
- name: System Admin
items:
- title: Portainer
description: Manage docker apps using Portainer
icon: hl-portainer
url: "http://qnap:9000"
url: http://qnap:9000
- title: Webmin
icon: hl-webmin
url: "http://qnap:10000"
url: http://qnap:10000
- title: Adminer
description: Manage MariaDB
icon: hl-adminer
url: "http://qnap:3307"
url: http://qnap:3307
- title: Nginx Proxy Manager
description: Manage reverse proxies
icon: hl-nginx
url: "http://qnap:8181"
url: http://qnap:8181
appConfig:
statusCheck: true
showSplashScreen: false

@ -1,23 +1,23 @@
# Listen on all addresses available, port 1337
listenAddressSingleHTTPFrontend: 0.0.0.0:1337
# Choose from INFO (default), WARN and DEBUG
logLevel: "INFO"
logLevel: INFO
# Actions (buttons) to show up on the WebUI:
actions:
# Docs: https://docs.olivetin.app/action-container-control.html
- title: Restart Plex
- title: Restart Plex
icon: plex
shell: docker restart plex
timeout: 30
- title: Restart Dashy
- title: Restart Dashy
icon: restart
shell: docker restart dashy
timeout: 30
- title: Restart Dashy 2
- title: Restart Dashy 2
icon: restart
shell: docker restart dashy
timeout: 30
- title: Restart Olivetin
- title: Restart Olivetin
icon: restart
shell: docker restart olivetin
timeout: 30

@ -1,8 +1,7 @@
---
# handlers file for setup_hosted_services
- name: restart-dashy
shell: docker restart dashy
ignore_errors: True
ignore_errors: true
- name: restart-olivetin
shell: docker restart olivetin

@ -1,7 +1,6 @@
---
- name: Docker | Pull images
docker_image:
name: "{{item}}"
name: '{{item}}'
source: pull
with_items:
- ubuntu
@ -9,47 +8,47 @@
- name: Docker Compose | Create a directory if it does not exist
file:
path: "{{directories.docker_compose_directory}}/{{item.name}}"
path: '{{directories.docker_compose_directory}}/{{item.name}}'
state: directory
mode: '0755'
with_items: "{{services}}"
with_items: '{{services}}'
- name: Docker Compose | Template Docker Compose Files
template:
src: "{{item.name}}.j2"
dest: "{{directories.docker_compose_directory}}/{{item.name}}/docker-compose.yml"
with_items: "{{services}}"
src: '{{item.name}}.j2'
dest: '{{directories.docker_compose_directory}}/{{item.name}}/docker-compose.yml'
with_items: '{{services}}'
- name: Directories | Ensure required directories
file:
path: "{{item}}"
path: '{{item}}'
state: directory
mode: '0755'
with_items:
- "{{dashy.config_directory}}"
- "{{olivetin.config_directory}}"
- "{{dockervolumebackup.config_directory}}"
- "{{directories.backups_dir}}/.s3tmp"
- '{{dashy.config_directory}}'
- '{{olivetin.config_directory}}'
- '{{dockervolumebackup.config_directory}}'
- '{{directories.backups_dir}}/.s3tmp'
- name: Dashy | Config Files
copy:
src: "{{dashy.source_file}}"
dest: "{{dashy.config_directory}}/{{dashy.config_file}}"
src: '{{dashy.source_file}}'
dest: '{{dashy.config_directory}}/{{dashy.config_file}}'
notify:
- restart-dashy
- name: Olivetin | Config Files
copy:
src: "{{olivetin.source_file}}"
dest: "{{olivetin.config_directory}}/{{olivetin.config_file}}"
src: '{{olivetin.source_file}}'
dest: '{{olivetin.config_directory}}/{{olivetin.config_file}}'
notify:
- restart-olivetin
- name: Docker Volume Backup | Config Files
template:
src: "docker-volume-backup/config.j2"
dest: "{{dockervolumebackup.config_directory}}/config.yml"
src: docker-volume-backup/config.j2
dest: '{{dockervolumebackup.config_directory}}/config.yml'
notify:
- restart-docker-volume-backup
@ -58,32 +57,35 @@
name: requests
- name: Docker | Find docker volumes
shell: docker volume ls -f name={{item.name}} --format '{{ '{{' }} .Name {{ '}}' }}'
with_items: "{{services}}"
shell: docker volume ls -f name={{item.name}} --format '{{ '{{' }} .Name {{ '}}'
}}'
with_items: '{{services}}'
register: find_volumes
changed_when: False
changed_when: false
- debug: msg="{{find_volumes.results | map(attribute='stdout_lines') | list | flatten }}"
- debug: msg="{{find_volumes.results | map(attribute='stdout_lines') | list | flatten
}}"
- name: Docker | Find volumes that need to be restored
script: scripts/find-volumes-to-restore.py
environment:
EXISTING_VOLUMES: "{{ find_volumes.results | map(attribute='stdout_lines') | list | flatten }}"
SERVICES: "{{ services }}"
DOCKER_COMPOSE_DIR: "{{directories.docker_compose_directory}}"
EXISTING_VOLUMES: "{{ find_volumes.results | map(attribute='stdout_lines') | list\
\ | flatten }}"
SERVICES: '{{ services }}'
DOCKER_COMPOSE_DIR: '{{directories.docker_compose_directory}}'
args:
executable: python3
register: python_output
changed_when: False
changed_when: false
- debug: msg="{{python_output.stdout_lines | list }}"
- name: Docker Volume Backup | Restore any missing backups from S3
when: restore_from_s3
docker_container:
command: "restore-volume --s3 --volume {{item}}"
image: "ghcr.io/chatton/docker-volume-backup:v0.3.0"
name: "s3-restore-{{item}}"
command: restore-volume --s3 --volume {{item}}
image: ghcr.io/chatton/docker-volume-backup:v0.3.0
name: s3-restore-{{item}}
cleanup: true # delete container after it's done.
state: started # container should execute.
detach: no # task fails if container exits.
@ -91,32 +93,33 @@
- /var/run/docker.sock:/var/run/docker.sock
- /tmp:/tmp # temp s3 archive goes here
env:
AWS_ACCESS_KEY_ID: "{{aws_s3.aws_access_key}}"
AWS_SECRET_ACCESS_KEY: "{{aws_s3.aws_secret_key}}"
AWS_DEFAULT_REGION: "{{aws_s3.region}}"
AWS_BUCKET: "{{aws_s3.bucket}}"
AWS_ENDPOINT: "{{aws_s3.s3_url}}"
with_items: "{{ python_output.stdout_lines }}"
AWS_ACCESS_KEY_ID: '{{aws_s3.aws_access_key}}'
AWS_SECRET_ACCESS_KEY: '{{aws_s3.aws_secret_key}}'
AWS_DEFAULT_REGION: '{{aws_s3.region}}'
AWS_BUCKET: '{{aws_s3.bucket}}'
AWS_ENDPOINT: '{{aws_s3.s3_url}}'
with_items: '{{ python_output.stdout_lines }}'
- name: Docker | Create required docker networks
docker_network:
name: "{{item}}"
with_items: "{{ docker_networks }}"
name: '{{item}}'
with_items: '{{ docker_networks }}'
- name: Portainer | Update Stack
when: container_deployment_mode == "portainer"
chatton.portainer.portainer_stack:
username: admin
password: "{{portainer.password}}"
docker_compose_file_path: "{{directories.docker_compose_directory}}/{{ item.name }}/docker-compose.yml"
stack_name: "{{ item.name }}"
endpoint_id: "{{ item.endpoint_id }}"
password: '{{portainer.password}}'
docker_compose_file_path: '{{directories.docker_compose_directory}}/{{ item.name
}}/docker-compose.yml'
stack_name: '{{ item.name }}'
endpoint_id: '{{ item.endpoint_id }}'
state: present
with_items: "{{services}}"
with_items: '{{services}}'
- name: Docker compose | Update Stack
when: container_deployment_mode == "compose"
docker_compose:
project_src: "{{directories.docker_compose_directory}}/{{ item.name }}"
project_src: '{{directories.docker_compose_directory}}/{{ item.name }}'
state: present
with_items: "{{services}}"
with_items: '{{services}}'

@ -1,12 +1,7 @@
$ANSIBLE_VAULT;1.1;AES256
36356161663039666634393933383830653035633438343866643730303434353632383031303965
3465343332353437616663643662343262373333366162300a373662386533363234636234633339
35383439373430656130353938653531636563663066646265643838323230356231333836326262
6439626538643837390a383039373366626637333738386332356361306131323133383534323462
32376564376363663666383639313064316365353037356633363035373632313561643030643933
34663533313231636162306465656433663634643038343938396462643261656238626432633136
39356562353463353034373534386537313634326534623830616362336638396337386631663538
30663236653532316461306636333536373836626537363430613961346137626261333238366234
30633438653936316539326436393634366236616664383835396434373966333166366265636661
39666335653265323565313831303264336331363339333532353939653330383362363965353032
383434386133323961373833303262336439
$ANSIBLE_VAULT;1.1;AES256 36356161663039666634393933383830653035633438343866643730303434353632383031303965
3465343332353437616663643662343262373333366162300a373662386533363234636234633339 35383439373430656130353938653531636563663066646265643838323230356231333836326262
6439626538643837390a383039373366626637333738386332356361306131323133383534323462 32376564376363663666383639313064316365353037356633363035373632313561643030643933
34663533313231636162306465656433663634643038343938396462643261656238626432633136 39356562353463353034373534386537313634326534623830616362336638396337386631663538
30663236653532316461306636333536373836626537363430613961346137626261333238366234 30633438653936316539326436393634366236616664383835396434373966333166366265636661
39666335653265323565313831303264336331363339333532353939653330383362363965353032 383434386133323961373833303262336439
...

@ -1,13 +1,12 @@
---
# defaults file for setup_linode
ssh_keys:
- "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
- "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
label: simple-linode
# hosts that are added to the generated .ini file.
hosts:
- user: root
ip: "{{my_linode.instance.ipv4[0]}}"
ip: '{{my_linode.instance.ipv4[0]}}'
# https://www.linode.com/community/questions/17190/obtain-a-list-of-image-and-plan-types-using-linode-apicli
type: g6-standard-2

@ -1,31 +1,27 @@
---
- name: Include vault variables.
include_vars: defaults/main-vault.yml
- name: Create a new Linode.
linode_v4:
label: "{{ label }}"
access_token: "{{ token }}"
type: "{{ type }}"
region: "{{ region }}"
label: '{{ label }}'
access_token: '{{ token }}'
type: '{{ type }}'
region: '{{ region }}'
image: linode/debian11
root_pass: "{{ password }}"
authorized_keys: "{{ ssh_keys }}"
root_pass: '{{ password }}'
authorized_keys: '{{ ssh_keys }}'
group: servers
state: "{{ state }}"
state: '{{ state }}'
register: my_linode
- name: Wait for SSH to come up
local_action:
module: wait_for
host={{ my_linode.instance.ipv4[0] }}
port=22
search_regex=OpenSSH
module: wait_for host={{ my_linode.instance.ipv4[0] }} port=22 search_regex=OpenSSH
timeout=320
- name: Instance Details
debug:
msg: "{{my_linode}}"
msg: '{{my_linode}}'
- name: Update hosts.ini
blockinfile:

@ -1,2 +1,2 @@
---
# vars file for setup_linode
null
...

@ -1,4 +1,3 @@
---
# dangerous to use this as the device name changes when there are new drives.
# can this be done with an ID?
#- name: Create a ext4 filesystem on /dev/sdb1
@ -9,12 +8,12 @@
- name: Mount Volumes
mount:
path: "{{item.path}}"
src: "UUID={{item.uuid}}"
path: '{{item.path}}'
src: UUID={{item.uuid}}
fstype: ext4
state: mounted
opts: defaults,nofail
loop: "{{ devices }}"
loop: '{{ devices }}'
register: volume_out
- debug: msg="{{volume_out}}"
@ -38,4 +37,4 @@
include_role:
name: sprat.mergerfs
vars:
mergerfs_mounts: "{{mounts}}"
mergerfs_mounts: '{{mounts}}'

@ -1,14 +1,13 @@
---
version: '3.2'
services:
portainer:
labels:
ie.cianhatton.backup.enabled: "true"
ie.cianhatton.backup.key: "nightly"
ie.cianhatton.backup.enabled: 'true'
ie.cianhatton.backup.key: nightly
image: portainer/portainer-ce
container_name: "portainer"
container_name: portainer
ports:
- "9000:9000"
- 9000:9000
volumes:
- portainer_data:/data
- /var/run/docker.sock:/var/run/docker.sock

@ -1,31 +1,23 @@
# @meta author: Cian Hatton
# @meta description: >
# Role to configure Portainer. This role copies the docker-compose.yml
# onto the host and starts portainer with docker compose.
# If there is a backup of the portainer volume stored in s3, it will
# be restored before portainer is started.
# @end
---
- name: Portainer | Create directory if it does not exist
ansible.builtin.file:
path: "{{directories.docker_compose_directory}}"
path: '{{directories.docker_compose_directory}}'
state: directory
mode: '0755'
- name: Portainer | Copy docker compose file
copy:
src: docker-compose.yml
dest: "{{directories.docker_compose_directory}}/docker-compose.yml"
dest: '{{directories.docker_compose_directory}}/docker-compose.yml'
- name: Portainer | Check if volume exists
shell: docker volume ls -f name=portainer_portainer_data --format '{{ '{{' }} .Name {{ '}}' }}'
shell: docker volume ls -f name=portainer_portainer_data --format '{{ '{{' }} .Name
{{ '}}' }}'
register: portainer_volume
changed_when: False
changed_when: false
- name: Portainer | Pull images
docker_image:
name: "{{item}}"
name: '{{item}}'
source: pull
with_items:
- ubuntu
@ -34,9 +26,9 @@
- name: Docker Volume Backup | Restore Portainer volume from S3
when: (portainer_volume.stdout_lines | length) == 0
docker_container:
command: "restore-volume --s3 --volume portainer_portainer_data"
image: "ghcr.io/chatton/docker-volume-backup:v0.3.0"
name: "s3-restore-portainer"
command: restore-volume --s3 --volume portainer_portainer_data
image: ghcr.io/chatton/docker-volume-backup:v0.3.0
name: s3-restore-portainer
cleanup: true # delete container after it's done.
state: started # container should execute.
detach: no # task fails if container exits.
@ -44,16 +36,16 @@
- /var/run/docker.sock:/var/run/docker.sock
- /tmp:/tmp # temp s3 archive goes here
env:
AWS_ACCESS_KEY_ID: "{{aws_s3.aws_access_key}}"
AWS_SECRET_ACCESS_KEY: "{{aws_s3.aws_secret_key}}"
AWS_DEFAULT_REGION: "{{aws_s3.region}}"
AWS_BUCKET: "{{aws_s3.bucket}}"
AWS_ENDPOINT: "{{aws_s3.s3_url}}"
AWS_ACCESS_KEY_ID: '{{aws_s3.aws_access_key}}'
AWS_SECRET_ACCESS_KEY: '{{aws_s3.aws_secret_key}}'
AWS_DEFAULT_REGION: '{{aws_s3.region}}'
AWS_BUCKET: '{{aws_s3.bucket}}'
AWS_ENDPOINT: '{{aws_s3.s3_url}}'
- name: Portainer | Docker compose up
community.docker.docker_compose:
project_src: "{{directories.docker_compose_directory}}/portainer"
project_src: '{{directories.docker_compose_directory}}/portainer'
# Don't really need this as long as there is an S3 backup.
#- name: Portainer | Register Admin User

@ -1,10 +1,9 @@
---
samba_group: smbgroup
samba_user: smbuser
users:
- name: cianhatton
- name: cianhatton
shares:
- /share
- /share/public_files
- /share/private_files
- /share/cian_files
- /share
- /share/public_files
- /share/private_files
- /share/cian_files

@ -1,4 +1,3 @@
---
- name: restart-samba
ansible.builtin.service:
name: smbd

@ -1,4 +1,3 @@
---
- name: Install samba packages using apt
apt:
name:
@ -8,7 +7,7 @@
- name: Ensure samba group exists
ansible.builtin.group:
name: "{{samba_group}}"
name: '{{samba_group}}'
state: present
system: true
notify:
@ -16,9 +15,9 @@
- name: Ensure samba user
ansible.builtin.user:
name: "{{samba_user}}"
name: '{{samba_user}}'
comment: Samba user
group: "{{samba_group}}"
group: '{{samba_group}}'
shell: /bin/false
create_home: false
notify:
@ -26,27 +25,27 @@
- name: Add the User(s) to Samba group
user:
name: "{{ item.name }}"
groups: "{{ samba_group }}"
name: '{{ item.name }}'
groups: '{{ samba_group }}'
append: yes
with_items: "{{users}}"
with_items: '{{users}}'
- name: Ensure Share directories
ansible.builtin.file:
path: "{{item}}"
path: '{{item}}'
recurse: yes
state: directory
owner: "{{samba_user}}"
group: "{{samba_group}}"
mode: 'u+rw,g+rw'
with_items: "{{shares}}"
owner: '{{samba_user}}'
group: '{{samba_group}}'
mode: u+rw,g+rw
with_items: '{{shares}}'
notify:
- reload-samba
- name: Copy smb conf files
copy:
src: "{{item}}"
dest: "/etc/samba/{{item}}"
src: '{{item}}'
dest: /etc/samba/{{item}}
with_items:
- smb.conf
- shares.conf

@ -8,26 +8,26 @@
- name: Make sure we have a groups
group:
name: "{{item.group}}"
name: '{{item.group}}'
state: present
with_items: "{{users}}"
with_items: '{{users}}'
- name: Add Users
ansible.builtin.user:
name: "{{item.name}}"
comment: "{{item.name}} user"
group: "{{item.group}}"
with_items: "{{users}}"
name: '{{item.name}}'
comment: '{{item.name}} user'
group: '{{item.group}}'
with_items: '{{users}}'
- name: Add sudoers
template:
src: sudoers.j2
dest: "/etc/sudoers.d/{{item.name}}"
with_items: "{{users}}"
dest: /etc/sudoers.d/{{item.name}}
with_items: '{{users}}'
when: item.passwordless_sudo == true
- name: Set authorized key
authorized_key:
user: "{{homelab_user}}"
user: '{{homelab_user}}'
state: present
key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"

@ -0,0 +1,15 @@
#!/bin/bash
function format_dir(){
dir="${1}"
yaml_files="$(find ${dir} -type f -name "*.yml")"
for f in $yaml_files
do
yamlfmt $f -w
done
}
format_dir roles
format_dir playbooks
format_dir host_vars
format_dir group_vars
Loading…
Cancel
Save