summaryrefslogtreecommitdiff
path: root/playbooks/legacy/grenade-dsvm-ironic-multinode-multitenant/run.yaml
blob: a29fa530e3acacc77d86ea9c2007c2ee2497540e (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
161
162
163
164
165
166
167
168
169
170
171
172
173
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# NOTE(sambetts) DO NOT UPDATE this job when you update the other jobs with
# changes related to the current branch. The devstack local config defined in
# this job is run against the last (old) version of the devstack plugin in the
# grenade steps.
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

- hosts: primary
  name: Autoconverted job legacy-grenade-dsvm-ironic-multinode-multitenant from old
    job gate-grenade-dsvm-ironic-multinode-multitenant-ubuntu-xenial
  tasks:

    # NOTE(TheJulia): Python supports recompiling bytecode if a precompiled
    # (.pyc) file is written to disk. Python will automatically recompile
    # should that file disappear and attempt to load and use that bytecode.
    # This can lead to unexpected and undesirable behavior such as python
    # crashing.
    #
    # As this job scenario upgrades across possible structural changes to
    # python modules, and operates in a mixed environment between releases
    # it is a good idea to prevent scenarios where newer modules installed
    # by packages are leveraged by un-upgraded services because their
    # underlying python packages have been updated during runtime.
    #
    # This is unique to Ironic's rolling upgrade grenade job, as Nova is
    # excluded from being upgraded in the stack, and Ironic is left in
    # a half-upgraded situation. The net result of which is we have an
    # unstable Nova installation.
    # https://bugs.launchpad.net/ironic/+bug/1744139
    #
    # TODO(TheJulia): We either need to find a better way to test rolling
    # upgrades. Something which supports virtualenvs would be ideal, as
    # well as something that allows us greater upgrade order control as
    # the Ironic upgrade sequence is problematic and breaks towards the end
    # of every cycle.
    - shell:
        cmd: |
          echo 'DefaultEnvironment="PYTHONDONTWRITEBYTECODE=1"' >>/etc/systemd/system.conf
          systemctl daemon-reexec
      become: yes

    - shell:
        cmd: |
          cat << 'EOF' >> ironic-vars-early
            # Set this early so that we do not have to be as careful with builder ordering in jobs.
          export GRENADE_PLUGINRC="enable_grenade_plugin ironic https://opendev.org/openstack/ironic"

          EOF
        chdir: '{{ ansible_user_dir }}/workspace'
      environment: '{{ zuul | zuul_legacy_vars }}'

    - shell:
        cmd: |

          # Precreate brbm so that it is created before neutron services are started, as they fail if it
          # is not present
          DEBIAN_FRONTEND=noninteractive sudo -E apt-get --option Dpkg::Options::=--force-confold --assume-yes install openvswitch-switch
          sudo systemctl restart openvswitch-switch
          sudo ovs-vsctl -- --may-exist add-br brbm

          cat << 'EOF' >> ironic-extra-vars
            export PROJECTS="openstack/grenade $PROJECTS"
            export DEVSTACK_GATE_GRENADE=pullup
            export DEVSTACK_GATE_OS_TEST_TIMEOUT=2600
            export DEVSTACK_GATE_TEMPEST_BAREMETAL_BUILD_TIMEOUT=1200
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_BUILD_DEPLOY_RAMDISK=False"
            export DEVSTACK_GATE_TLSPROXY=0
            export DEVSTACK_GATE_USE_PYTHON3=True
            export BUILD_TIMEOUT

            export GRENADE_PLUGINRC+=$'\n'"enable_grenade_plugin networking-generic-switch https://opendev.org/openstack/networking-generic-switch"

            export DEVSTACK_GATE_TOPOLOGY="multinode"

            # networking-generic-switch requires sudo to execute ovs-vsctl commands
            export DEVSTACK_GATE_REMOVE_STACK_SUDO=0
            export PROJECTS="openstack/networking-generic-switch $PROJECTS"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin networking-generic-switch https://opendev.org/openstack/networking-generic-switch"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_USE_LINK_LOCAL=True"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"OVS_BRIDGE_MAPPINGS=mynetwork:brbm,public:br_ironic_vxlan"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"OVS_PHYSICAL_BRIDGE=brbm"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"PHYSICAL_NETWORK=mynetwork"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_PROVISION_NETWORK_NAME=ironic-provision"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_PROVISION_SUBNET_PREFIX=10.0.5.0/24"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_PROVISION_SUBNET_GATEWAY=10.0.5.1"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"Q_PLUGIN=ml2"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"PUBLIC_BRIDGE=br_ironic_vxlan"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"ENABLE_TENANT_VLANS=True"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"Q_ML2_TENANT_NETWORK_TYPE=vlan"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"TENANT_VLAN_RANGE=100:150"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_ENABLED_NETWORK_INTERFACES=flat,neutron"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_NETWORK_INTERFACE=neutron"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_DEFAULT_BOOT_OPTION=local"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_AUTOMATED_CLEAN_ENABLED=False"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_SPECS_RAM=384"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_RAMDISK_TYPE=tinyipa"
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"LIBVIRT_STORAGE_POOL_PATH=/opt/libvirt/images"
            export DEVSTACK_GATE_TEMPEST_REGEX=test_server_basic_ops

          EOF
        chdir: '{{ ansible_user_dir }}/workspace'
      environment: '{{ zuul | zuul_legacy_vars }}'

    - shell:
        cmd: |
          cat << 'EOF' >> ironic-vars-early
            # use tempest plugin
            export DEVSTACK_LOCAL_CONFIG+=$'\n'"TEMPEST_PLUGINS+=' /opt/stack/new/ironic-tempest-plugin'"
            export TEMPEST_CONCURRENCY=4
          EOF
        chdir: '{{ ansible_user_dir }}/workspace'
      environment: '{{ zuul | zuul_legacy_vars }}'

    - shell:
        cmd: |
          set -e
          set -x
          export PROJECTS="openstack/ironic $PROJECTS"
          export PROJECTS="openstack/ironic-lib $PROJECTS"
          export PROJECTS="openstack/ironic-python-agent $PROJECTS"
          export PROJECTS="openstack/ironic-python-agent-builder $PROJECTS"
          export PROJECTS="openstack/ironic-tempest-plugin $PROJECTS"
          export PROJECTS="openstack/python-ironicclient $PROJECTS"
          export PROJECTS="openstack/virtualbmc $PROJECTS"
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_IRONIC=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_VIRT_DRIVER=ironic
          export DEVSTACK_GATE_CONFIGDRIVE=1
          export DEVSTACK_GATE_IRONIC_DRIVER=ipmi
          export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_DEFAULT_DEPLOY_INTERFACE=direct"

          export BRANCH_OVERRIDE="{{ zuul.override_checkout | default('default') }}"
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi

          if [[ "$ZUUL_BRANCH" != "stable/ocata" && "$BRANCH_OVERRIDE" != "stable/ocata" ]]; then
              export DEVSTACK_GATE_TLSPROXY=1
          fi

          # the direct deploy interface requires Swift temporary URLs
          export DEVSTACK_LOCAL_CONFIG+=$'\n'"SWIFT_ENABLE_TEMPURLS=True"
          export DEVSTACK_LOCAL_CONFIG+=$'\n'"SWIFT_TEMPURL_KEY=secretkey"

          export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_TEMPEST_WHOLE_DISK_IMAGE=True"
          export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_EPHEMERAL_DISK=0"

          export DEVSTACK_GATE_IRONIC_BUILD_RAMDISK=0
          export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_INSPECTOR_BUILD_RAMDISK=False"

          export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_VM_COUNT=7"

          export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_REQUIRE_AGENT_TOKEN=False"

          # Ensure the ironic-vars-EARLY file exists
          touch ironic-vars-early
          # Pull in the EARLY variables injected by the optional builders
          source ironic-vars-early

          export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin ironic https://opendev.org/openstack/ironic"

          # Ensure the ironic-EXTRA-vars file exists
          touch ironic-extra-vars
          # Pull in the EXTRA variables injected by the optional builders
          source ironic-extra-vars

          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh
        executable: /bin/bash
        chdir: '{{ ansible_user_dir }}/workspace'
      environment: '{{ zuul | zuul_legacy_vars }}'