aboutsummaryrefslogblamecommitdiffhomepage
path: root/test/main.yml
blob: 19ff526e3167647b8932c42e324acf013cbeee51 (plain) (tree)

























































































































































                                                                                                                            
---
- name: Bring up docker containers
  hosts: localhost
  vars: &common_vars
    postgres_version: 10
    postgres_barman_directory: 'test-postgres-10'
    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-stretch"
      - name: postgres_one
        image: "python:3.7-stretch"
        links:
          - "{{ postgres_barman_server }}"
      - name: postgres_two
        image: "python:3.7-stretch"
        links:
          - "{{ postgres_barman_server }}"
          - postgres_one
      - name: postgres_three
        image: "python:3.7-stretch"
        links:
          - "{{ postgres_barman_server }}"
          - postgres_one
  roles:
    - role: provision_docker
      provision_docker_inventory: "{{inventory}}"
      provision_docker_use_docker_connection: true
  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: barman
                password: "secret_cocktail"
                permissions: 'SUPERUSER'
              - username: replicator
                password: "secret_repli"
                permissions: 'REPLICATION'

      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_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
            primary_barman_password: "secret_cocktail"
            backup_method: rsync
            ansible_group: db-all
            retention_policy: 'RECOVERY WINDOW OF 7 DAYS'
      with_items:
        - postgres_barman
      tags: provision_docker

- name: Test installing Barman role
  hosts: barman
  connection: docker
  vars: {}
  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: barman, tags: ['barman'] }

- 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
  roles:
    - { role: postgresql, 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 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: postgresql, tags: ['postgres'] }