#!/usr/bin/env ansible-playbook # vim:ft=ansible: --- # Mass storage Pis - hosts: pi-storage-1.desu.ltd tasks: - name: assure mount directory file: path=/data state=directory tags: [ pis, storage ] - name: assure mount mount: path=/data src=LABEL=mass state=mounted fstype=ext4 tags: [ pis, storage ] - name: assure directories in mount file: path=/data/{{ item }} state=directory with_items: - nfs - postgresql tags: [ pis, storage ] - name: assure symlinks to directories in mount file: path={{ item.path }} src=/data/{{ item.src }} state=link with_items: - { path: /var/lib/postgresql, src: postgresql } - { path: /srv/nfs, src: nfs } tags: [ pis, storage ] roles: - role: backup vars: backup_script: s3pgdump tags: [ backup ] # - role: backup # vars: # backup_s3backup_list_extra: # - /data # backup_time: "Mon *-*-* 02:00:00" - role: motd vars: motd_watch_services_extra: - docker - postgresql - role: postgresql vars: postgresql_global_config_options: - option: listen_addresses value: 192.168.103.1,172.23.103.1 postgresql_hba_entries: - { type: local, database: all, user: postgres, auth_method: peer } - { type: local, database: all, user: all, auth_method: md5 } - { type: host, database: all, user: all, address: '127.0.0.0/8', auth_method: md5 } - { type: host, database: all, user: all, address: '::1/128', auth_method: md5 } # Used for internal access from other nodes - { type: host, database: all, user: all, address: '192.168.0.0/16', auth_method: md5 } # Allow hosts over zerotier - { type: host, database: all, user: all, address: '172.23.0.0/16', auth_method: md5 } postgresql_users: - name: grafana password: "{{ secret_grafana_local_db_pass }}" - name: netbox password: "{{ secret_netbox_local_db_pass }}" postgresql_databases: - name: grafana owner: grafana - name: netbox owner: netbox tags: [ pis, storage, psql ] - role: nfs vars: nfs_exports: - "/srv/nfs 192.168.0.0/16(ro,no_root_squash,sync) 172.23.0.0/16(ro,no_root_squash,sync)" - "/srv/nfs/bulk 192.168.0.0/16(rw,no_root_squash,sync) 172.23.0.0/16(rw,no_root_squash,sync)" - "/srv/nfs/bulk/media 192.168.0.0/16(rw,no_root_squash,sync) 172.23.0.0/16(rw,no_root_squash,sync)" - "/srv/nfs/k8s 192.168.0.0/16(rw,no_root_squash,sync) 172.23.0.0/16(ro,no_root_squash,sync)" tags: [ pis, storage, nfs ] # Multipurpose Pis running unbound - hosts: pi-mp-1.desu.ltd,pi-mp-2.desu.ltd vars: container_default_behavior: no_defaults tasks: - name: docker deploy unbound docker_container: name: unbound image: rehashedsalt/unbound-desu-local:latest restart_policy: unless-stopped pull: yes ports: - "{{ ansible_facts.eth0.ipv4.address }}:53:5053/tcp" - "{{ ansible_facts.eth0.ipv4.address }}:53:5053/udp" tags: [ pis, mp, unbound ] roles: - role: motd vars: motd_watch_services_extra: - docker - isc-dhcp-server motd_watch_containers_extra: - unbound tags: [ pis, mp, motd ] # And also serving DHCP - hosts: pi-mp-1.desu.ltd vars_files: - vars/desulocal-dhcp.yml roles: - role: netplan-static-ip tags: [ pis, mp, dhcp, static-ip ] - role: dhcp vars: dhcp_global_failover_peer: failover-group dhcp_global_failover: role: primary address: 192.168.103.100 port: 647 peer_address: 192.168.103.101 peer_port: 647 max_response_delay: 15 max_unacked_updates: 10 load_balance_max_seconds: 5 split: 255 mclt: 3600 tags: [ pis, mp, dhcp ] - hosts: pi-mp-2.desu.ltd vars_files: - vars/desulocal-dhcp.yml roles: - role: netplan-static-ip tags: [ pis, mp, dhcp, static-ip ] - role: dhcp vars: dhcp_global_failover_peer: failover-group dhcp_global_failover: role: secondary address: 192.168.103.101 port: 647 peer_address: 192.168.103.100 peer_port: 647 max_response_delay: 15 max_unacked_updates: 10 load_balance_max_seconds: 5 tags: [ pis, mp, dhcp ]