aboutsummaryrefslogtreecommitdiff
path: root/tests/pre.yml
blob: be8df89b939b9fe0a46dc8b345b3fb3877495819 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
---
- hosts: all
  any_errors_fatal: true
  vars:
    logs_dir: "/tmp/logs"
  roles:
    - configure-ephemeral
    - multi-node-firewall
    - role: multi-node-vxlan-overlay
      vars:
        vxlan_interface_name: "{{ api_interface_name }}"
        vxlan_vni: 10000
    - role: multi-node-managed-addressing
      vars:
        managed_interface_name: "{{ api_interface_name }}"
        managed_network_prefix: "{{ api_network_prefix }}"
        managed_network_prefix_length: "{{ api_network_prefix_length }}"
        managed_network_address_family: "{{ address_family }}"
    # NOTE(yoctozepto): no addressing for neutron_external_interface in here
    # because it is enslaved by a bridge
    - role: multi-node-vxlan-overlay
      vars:
        vxlan_interface_name: "{{ neutron_external_vxlan_interface_name }}"
        vxlan_vni: 10001
    - role: bridge
      vars:
        bridge_name: "{{ neutron_external_bridge_name }}"
        bridge_member_name: "{{ neutron_external_vxlan_interface_name }}"
    - role: multi-node-vxlan-overlay
      vars:
        vxlan_interface_name: "{{ external_api_interface_name }}"
        vxlan_vni: 10002
      when: external_api_interface_name is defined
    - role: multi-node-managed-addressing
      vars:
        managed_interface_name: "{{ external_api_interface_name }}"
        managed_network_prefix: "{{ external_api_network_prefix }}"
        managed_network_prefix_length: "{{ external_api_network_prefix_length }}"
        managed_network_address_family: "{{ address_family }}"
      when: external_api_interface_name is defined
    # TODO(mnasiadka): Update ipv6 jobs to test ipv6 in Neutron
    - role: multi-node-managed-addressing
      vars:
        managed_interface_name: "{{ neutron_external_bridge_name }}"
        managed_network_prefix: "{{ neutron_external_network_prefix }}"
        managed_network_prefix_length: "{{ neutron_external_network_prefix_length }}"
        managed_network_address_family: "ipv4"
    - role: veth
      vars:
        veth_pair:
          - "veth-{{ neutron_external_bridge_name }}"
          - "veth-{{ neutron_external_bridge_name }}-ext"
        bridge_name: "{{ neutron_external_bridge_name }}"
  tasks:
    - name: Set Rockylinux mirror to download.rockylinux.org
      become: true
      ansible.builtin.shell:
        cmd: sed -i 's/mirrorlist/#mirrorlist/g; s/#baseurl/baseurl/g' /etc/yum.repos.d/rocky.repo
      when: ansible_facts.distribution == "Rocky"

    - name: Install kernel-modules-extra for running kernel
      become: true
      ansible.builtin.dnf:
        name: "kernel-modules-extra-{{ ansible_facts.kernel }}"
        state: present
      when: ansible_facts.distribution == "Rocky"

    # TODO(mnasiadka): prefer IPv4 over IPv6 in getaddrinfo() to avoid
    # slow/failing AAAA lookups against hosts without real IPv6
    # connectivity. Remove once IPv6 in VexxHost ca-ymq-1 is reliable.
    - name: Prefer IPv4 over IPv6 for name resolution
      become: true
      ansible.builtin.lineinfile:
        path: /etc/gai.conf
        line: "precedence ::ffff:0:0/96  100"
        create: true
      when: nodepool.region == 'ca-ymq-1'

    # NOTE(yoctozepto): we use gawk to add time to each logged line
    # outside of Ansible (e.g. for init-runonce)
    - name: Install gawk and required Python modules
      become: true
      package:
        name:
          - gawk
          - python3-pip
          - python3-setuptools
          - python3-requests

    - name: Install stestr
      become: true
      pip:
        break_system_packages: true
        name: stestr

    - name: Install lvm on storage scenarios
      become: true
      package:
        name: lvm2
      when: scenario in ['cephadm']

    - name: Ensure /tmp/logs/ dir
      file:
        path: "{{ logs_dir }}"
        state: "directory"

    - name: Ensure /tmp/logs/pre dir
      file:
        path: "{{ logs_dir }}/pre"
        state: "directory"

    - name: Run diagnostics script
      environment:
        LOG_DIR: "{{ logs_dir }}/pre"
        KOLLA_INTERNAL_VIP_ADDRESS: "{{ kolla_internal_vip_address }}"
        CONTAINER_ENGINE: "{{ container_engine }}"
      script: get_logs.sh
      register: get_logs_result
      become: true
      failed_when: false

    - name: Print get_logs output
      debug:
        msg: "{{ get_logs_result.stdout }}"

    - name: Ensure node directories
      file:
        path: "{{ logs_dir }}/{{ item }}"
        state: "directory"
        mode: 0777
      with_items:
        - "container_logs"
        - "kolla_configs"
        - "system_logs"
        - "kolla"
        - "ansible"

    # NOTE(yoctozepto): let's observe forwarding behavior
    - name: Iptables - LOG FORWARD
      become: true
      iptables:
        state: present
        action: append
        chain: FORWARD
        jump: LOG
        log_prefix: 'iptables FORWARD: '

    - name: Set new hostname based on ansible inventory file
      hostname:
        name: "{{ inventory_hostname }}"
        use: systemd
      become: true

    - name: Wait for ntp time sync
      command: timedatectl status
      register: timedatectl_status
      changed_when: false
      until: "'synchronized: yes' in timedatectl_status.stdout"
      retries: 90
      delay: 10