# Copyright (c) 2023 VEXXHOST, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

- import_playbook: vexxhost.atmosphere.generate_workspace
  vars:
    workspace_path: "{{ lookup('env', 'MOLECULE_SCENARIO_DIRECTORY') }}"
    domain_name: "{{ '{{' }} ansible_default_ipv4['address'].replace('.', '-') {{ '}}' }}.{{ lookup('env', 'ATMOSPHERE_DNS_SUFFIX_NAME') | default('nip.io', True) }}"

- name: Prepare
  hosts: all
  become: true
  pre_tasks:
    - name: Wait for systemd to complete initialization
      ansible.builtin.command: systemctl is-system-running
      register: systemctl_status
      until: >
        'running' in systemctl_status.stdout or
        'degraded' in systemctl_status.stdout
      retries: 30
      delay: 5
      changed_when: false
      failed_when: systemctl_status.rc > 1
  tasks:
    - name: Refresh cache & install "iptables"
      ansible.builtin.package:
        name: iptables
        update_cache: true

    # NOTE(mnaser): The base image installs Ansible using `pip` which breaks
    #               the system Python, we uninstall all Python packages.
    - name: Fix Python installation
      block:
        - name: Get all Python packages
          ansible.builtin.command: pip freeze
          register: pip_freeze

        - name: Uninstall all Python packages
          ansible.builtin.pip:
            name: "{{ pip_freeze.stdout_lines }}"
            state: absent

- ansible.builtin.import_playbook: vexxhost.ceph.create_fake_devices

- hosts: controllers
  become: true
  tasks:
    - name: Overwrite existing osds.yml file
      delegate_to: localhost
      ansible.builtin.copy:
        dest: "{{ lookup('env', 'MOLECULE_SCENARIO_DIRECTORY') }}/group_vars/cephs/osds.yml"
        content: |
          ceph_osd_devices:
            - "/dev/ceph-{{ inventory_hostname_short }}-osd0/data"
            - "/dev/ceph-{{ inventory_hostname_short }}-osd1/data"
            - "/dev/ceph-{{ inventory_hostname_short }}-osd2/data"

    - name: Set masquerade rule
      become: yes
      ansible.builtin.iptables:
        table: nat
        chain: POSTROUTING
        source: 10.96.250.0/24
        out_interface: "{{ ansible_default_ipv4.interface }}"
        jump: MASQUERADE
