--- - name: Bring up docker containers hosts: localhost vars: &common_vars postgres_barman_directory: "test-postgres-{{ postgres_version }}" postgres_barman_server: postgres_barman barman_rsync_password: "secret_rsync" barman_rsync_allowed_hosts: 172.17.0.0/24 postgres_allowed_hosts: - user: all range: 172.17.0.0/24 postgres_replication_hosts: - user: replicator range: 172.17.0.0/24 inventory: - name: "{{ postgres_barman_server }}" image: "python:3.7-{{ debian_release }}" - name: postgres_one image: "python:3.7-{{ debian_release }}" links: - "{{ postgres_barman_server }}" - name: postgres_two image: "python:3.7-{{ debian_release }}" links: - "{{ postgres_barman_server }}" - postgres_one - name: postgres_three image: "python:3.7-{{ debian_release }}" links: - "{{ postgres_barman_server }}" - postgres_one roles: - role: provision_docker vars: provision_docker_inventory: "{{inventory}}" provision_docker_use_docker_connection: true ansible_connection: local ansible_python_interpreter: "{{ansible_playbook_python}}" tasks: - name: Group primary add_host: hostname: "{{item}}" groups: primary <<: *common_vars postgres_clusters: - version: "{{ postgres_version }}" name: 'main' port: 5432 fsync_enabled: True checksums: False archive_enabled: True barman_directory: "{{ postgres_barman_directory }}" users: - username: tester password: tester - username: barman password: "secret_cocktail" permissions: 'SUPERUSER' - username: replicator password: "secret_repli" permissions: 'REPLICATION' databases: - dbname: test_database owner: tester extensions: - description: PostGis apt_deps: - "postgresql-{{ postgres_version }}-postgis-3" names: - postgis - postgis_topology - btree_gist with_items: - postgres_one tags: provision_docker - name: Group secondaries add_host: hostname: "{{item}}" groups: secondary <<: *common_vars postgres_clusters: - version: "{{ postgres_version }}" name: 'main' port: 5432 fsync_enabled: True checksums: False archive_enabled: True barman_directory: "{{ postgres_barman_directory }}" primary: host: postgres_one port: 5432 restore_barman_directory: "{{ postgres_barman_directory }}" replication_user: "replicator" replication_password: "secret_repli" with_items: - postgres_two - postgres_three tags: provision_docker - name: Group db-all add_host: hostname: "{{item}}" groups: db-all with_items: - postgres_one - postgres_two - postgres_three tags: provision_docker - name: Group barman add_host: hostname: "{{item}}" groups: barman <<: *common_vars barman_databases: - name: "{{ postgres_barman_directory }}" description: 'Main database' primary_host: postgres_one postgres_barman_password: "secret_cocktail" backup_method: rsync standby_hosts: "{{ groups['db-all'][1:] }}" retention_policy: 'RECOVERY WINDOW OF 7 DAYS' with_items: - postgres_barman tags: provision_docker - name: Test installing Postgresql role hosts: primary:secondary connection: docker vars: postgres_listen_addresses: ["{{ hostvars[inventory_hostname].ansible_default_ipv4.address }}"] pre_tasks: &pre_tasks - name: "Build hosts file" shell: 'echo "{{ hostvars[inventory_hostname].ansible_default_ipv4.address }} {{inventory_hostname}}" >> /etc/hosts' when: hostvars[inventory_hostname].ansible_default_ipv4.address is defined - debug: msg="Running on host {{inventory_hostname}} ({{ hostvars[inventory_hostname].ansible_default_ipv4.address }})" roles: - { role: ansible-postgresql-role, tags: ['postgres'] } tasks: - name: Start postgres cluster service: name=postgresql state=started - name: Test connection to Postgres instances. become: true become_user: postgres become_method: su command: psql --port=5432 --command='select NOW()' - name: Test installing Barman role hosts: barman connection: docker vars: {} pre_tasks: *pre_tasks roles: - { role: barman, tags: ['barman'] } - name: Test running Postgresql role when database is started connection: docker hosts: primary:secondary vars: postgres_listen_addresses: ["{{ hostvars[inventory_hostname].ansible_default_ipv4.address }}"] pre_tasks: *pre_tasks roles: - { role: ansible-postgresql-role, tags: ['postgres'] }