Files
ansible/playbooks/switch_destination.yaml
2025-03-18 17:24:20 +01:00

174 lines
6.9 KiB
YAML
Executable File

- hosts: docker_servers
name: Switch server
ignore_unreachable: false
tasks:
- name: Reconfigure swap size
ansible.builtin.lineinfile:
path: /etc/sysctl.conf
regexp: "^net.ipv4.igmp_max_memberships =.*"
line: "net.ipv4.igmp_max_memberships = 1024"
create: true
become: "{{ false if inventory_hostname == 'nas.home.lan' else true }}"
when: inventory_hostname != "router.home.lan"
- name: Start containers
shell: docker start `docker ps -a |awk '{ print $NF }'|grep -v NAME |xargs`
become: "{{ false if inventory_hostname == 'nas.home.lan' else true }}"
ignore_errors: true
when: inventory_hostname == destination and inventory_hostname != "nas.home.lan"
- name: Start containers
shell: docker exec -it gitlab update-permissions
become: "{{ false if inventory_hostname == 'nas.home.lan' else true }}"
ignore_errors: true
when: inventory_hostname == destination and inventory_hostname != "nas.home.lan and inventory_hostname != "rpi5.home.lan"
- name: Start containers
shell: /share/ZFS530_DATA/.qpkg/container-station/bin/docker exec -it gitlab update-permissions
become: "{{ false if inventory_hostname == 'nas.home.lan' else true }}"
ignore_errors: true
when: inventory_hostname == destination and inventory_hostname == "nas.home.lan"
- name: Start containers
shell: /share/ZFS530_DATA/.qpkg/container-station/bin/docker start `/share/ZFS530_DATA/.qpkg/container-station/bin/docker ps -a |awk '{ print $NF }'|grep -v NAME |xargs`
become: "{{ false if inventory_hostname == 'nas.home.lan' else true }}"
ignore_errors: true
when: inventory_hostname == destination and inventory_hostname == "nas.home.lan"
- name: Get Authentification token
ansible.builtin.uri:
url: http://localhost:9380/api/auth
method: POST
body_format: json
body: {"password":"l4c1j4yd33Du5lo"}
register: login
when: inventory_hostname != "router.home.lan"
# - debug:
# msg: "{{ login.json.session }}"
- name: Get Config
ansible.builtin.uri:
url: http://localhost:9380/api/config
method: GET
headers:
X-FTL-SID: "{{ login.json.session.sid }}"
register: old_config
when: inventory_hostname != "router.home.lan"
# - debug:
# msg: "{{ old_config.json.config.dns.cnameRecords }}"
- name: Parse config
ansible.builtin.set_fact:
jsondata: "{{ old_config }}"
- name: New records for nas
ansible.builtin.set_fact:
new_data: ["mqtt.home.lan,nas.home.lan","media.home.lan,nas.home.lan","ldap.home.lan,nas.home.lan","webhub.home.lan,nas.home.lan","semaphore.home.lan,nas.home.lan","active.home.lan,nas.home.lan"]
when: destination == 'nas.home.lan'
- name: New records for m-server
ansible.builtin.set_fact:
new_data: ["mqtt.home.lan,m-server.home.lan","media.home.lan,m-server.home.lan","ldap.home.lan,m-server.home.lan","webhub.home.lan,m-server.home.lan","semaphore.home.lan,m-server.home.lan","active.home.lan,m-server.home.lan"]
when: destination == 'm-server.home.lan'
- name: New records for rpi5
ansible.builtin.set_fact:
new_data: ["mqtt.home.lan,rpi5.home.lan","media.home.lan,rpi5.home.lan","ldap.home.lan,rpi5.home.lan","webhub.home.lan,rpi5.home.lan","semaphore.home.lan,rpi5.home.lan","active.home.lan,rpi5.home.lan"]
when: destination == 'rpi5.home.lan'
# - debug:
# msg: "{{ new_data }}"
- name: Set new values
ansible.utils.update_fact:
updates:
- path: jsondata.json.config.dns.cnameRecords
value: "{{ new_data }}"
register: new_config
when: inventory_hostname != "router.home.lan"
- name: Patch config
ansible.builtin.uri:
url: http://localhost:9380/api/config
method: PATCH
body: "{{ new_config.jsondata.json |to_json}}"
headers:
X-FTL-SID: "{{ login.json.session.sid }}"
Content-Type: application/json
register: _result
until: _result.status == 200
retries: 3 # 720 * 5 seconds = 1hour (60*60/5)
delay: 5 # Every 5 seconds
register: _result
until: _result.status == 200
retries: 3 # 720 * 5 seconds = 1hour (60*60/5)
delay: 5 # Every 5 seconds
when: inventory_hostname != "router.home.lan"
- name: Sleep for 30 seconds and continue with play
ansible.builtin.wait_for:
timeout: 10
- name: Logout
ansible.builtin.uri:
url: http://localhost:9380/api/auth
method: DELETE
status_code: 204
headers:
X-FTL-SID: "{{ login.json.session.sid }}"
when: inventory_hostname != "router.home.lan"
ignore_errors: true
- name: Setting up resolv.conf
ansible.builtin.copy:
dest: "/etc/resolv.conf"
content: |
nameserver 192.168.77.101
nameserver 192.168.77.106
nameserver 192.168.77.238
options rotate
options timeout:1
become: "{{ false if inventory_hostname == 'nas.home.lan' else true }}"
# until: _result.status == 204
# retries: 3 # 720 * 5 seconds = 1hour (60*60/5)
# delay: 5 # Every 5 seconds
- name: Sleep for 60 seconds and continue with play
ansible.builtin.wait_for:
timeout: 60
- name: Reconfigurte router containers
shell: python3 /root/unifi-api/unifi.py -s -d "{{ destination.split('.')[0] }}"
when: inventory_hostname == "router.home.lan"
- name: Stop containers
shell: docker stop `docker ps -a |awk '{ print $NF }'|egrep -v "NAME|^pihole$|watchtower|portainer" |xargs`
become: "{{ false if inventory_hostname == 'nas.home.lan' else true }}"
ignore_errors: true
when: inventory_hostname != destination and inventory_hostname != "nas.home.lan" and inventory_hostname != "router.home.lan"
- name: Restart containers
shell: docker restart nginx-app-1
become: "{{ false if inventory_hostname == 'nas.home.lan' else true }}"
when: inventory_hostname == destination
- name: Stop containers
shell: /share/ZFS530_DATA/.qpkg/container-station/bin/docker stop `/share/ZFS530_DATA/.qpkg/container-station/bin/docker ps -a |awk '{ print $NF }'|egrep -v "NAME|pihole|watchtower" |xargs`
become: "{{ false if inventory_hostname == 'nas.home.lan' else true }}"
ignore_errors: true
when: inventory_hostname != destination and inventory_hostname == "nas.home.lan" and inventory_hostname != "router.home.lan"
- name: Sleep for 120 seconds and continue with play
ansible.builtin.wait_for:
timeout: 120
# - name: Restart containers
# shell: docker restart nginx-app-1
# become: "{{ false if inventory_hostname == 'nas.home.lan' else true }}"
# when: inventory_hostname == destination