{"id":2,"sha1":"14bae390d2f0ee0824ca50a7a8b3a7bb93f55976","playbook":{"id":1,"items":{"plays":1,"tasks":154,"results":154,"hosts":1,"files":22,"records":0},"arguments":{"version":null,"verbosity":0,"private_key_file":null,"remote_user":null,"connection":"openstack.osa.ssh","timeout":null,"ssh_common_args":null,"sftp_extra_args":null,"scp_extra_args":null,"ssh_extra_args":null,"ask_pass":false,"connection_password_file":null,"force_handlers":true,"flush_cache":false,"become":false,"become_method":"sudo","become_user":null,"become_ask_pass":false,"become_password_file":null,"tags":["all"],"skip_tags":[],"check":false,"diff":false,"inventory":["/home/zuul/src/opendev.org/openstack/openstack-ansible/tests/test-inventory.ini"],"listhosts":false,"subset":null,"extra_vars":"Not saved by ARA as configured by 'ignored_arguments'","vault_ids":[],"ask_vault_pass":false,"vault_password_files":[],"forks":10,"module_path":null,"syntax":false,"listtasks":false,"listtags":false,"step":false,"start_at_task":null,"args":["bootstrap-aio.yml"]},"labels":[{"id":1,"name":"check:False"},{"id":2,"name":"tags:all"}],"started":"2025-12-08T13:25:10.417083Z","ended":"2025-12-08T13:27:15.725717Z","duration":"00:02:05.308634","name":null,"ansible_version":"2.18.6","client_version":"1.7.4","python_version":"3.12.3","server_version":"1.7.4","status":"completed","path":"/home/zuul/src/opendev.org/openstack/openstack-ansible/tests/bootstrap-aio.yml","controller":"npdb25d4c136674","user":"root"},"content":"---\n# Copyright 2017, Rackspace US, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nbootstrap_host_scenarios: \"{{ (bootstrap_host_scenario.split('_') | reject('equalto', '')) | list }}\"\n\n_lxc_container_backing_store: |-\n  {% if 'zfs' in bootstrap_host_scenarios %}\n  {%   set store = 'zfs' %}\n  {% elif 'btrfs' in bootstrap_host_scenarios %}\n  {%   set store = 'btrfs' %}\n  {% elif 'dir' in bootstrap_host_scenarios %}\n  {%   set store = 'dir' %}\n  {% elif 'lvm' in bootstrap_host_scenarios %}\n  {%   set store = 'lvm' %}\n  {% elif 'overlayfs' in bootstrap_host_scenarios %}\n  {%   set store = 'overlayfs' %}\n  {% else %}\n  {%   set store = 'dir' %}\n  {% endif %}\n  {{ store }}\n\n# Expand the scenario list to include specific services that are being deployed\n# as part of the scenario\nbootstrap_host_scenarios_expanded: |-\n  {# Keystone is included in every scenario #}\n  {% set scenario_list = bootstrap_host_scenarios + ['keystone', 'haproxy'] %}\n  {% if ['aio', 'translations'] | intersect(bootstrap_host_scenarios) | length > 0 %}\n  {#   Base services deployed with aio and translations scenarios #}\n  {%   set _ = scenario_list.extend(['cinder', 'glance', 'neutron', 'nova', 'placement', 'horizon']) %}\n  {% endif %}\n  {# Service additions based on scenario presence #}\n  {% if 'cloudkitty' in bootstrap_host_scenarios %}\n  {%   set _ = scenario_list.extend(['ceilometer', 'gnocchi']) %}\n  {% endif %}\n  {% if 'designate' in bootstrap_host_scenarios or\n        ('validate' in bootstrap_host_scenarios and ('integrated' in bootstrap_host_scenarios or 'plugins' in bootstrap_host_scenarios)) %}\n  {%   set _ = scenario_list.extend(['zookeeper']) %}\n  {% endif %}\n  {% if 'ironic' in bootstrap_host_scenarios %}\n  {%   set _ = scenario_list.extend(['swift']) %}\n  {% endif %}\n  {% if ('magnum' in bootstrap_host_scenarios) %}\n  {%   set _ = scenario_list.extend(['heat'])  %}\n  {% endif %}\n  {% if 'manila' in bootstrap_host_scenarios %}\n  {%   set _ = scenario_list.extend(['ceph'])  %}\n  {% endif %}\n  {% if ['telemetry', 'aodh', 'ceilometer', 'gnocchi'] | intersect(bootstrap_host_scenarios) | length > 0 %}\n  {%   set _ = scenario_list.extend(['aodh', 'ceilometer', 'gnocchi', 'zookeeper']) %}\n  {% endif %}\n  {% if 'translations' in bootstrap_host_scenarios %}\n  {%   set _ = scenario_list.extend(['designate', 'heat', 'magnum', 'swift', 'trove']) %}\n  {% endif %}\n  {{ (scenario_list | unique) | sort }}\n\n_neutron_plugin_driver: |-\n  {% if 'ovs' in bootstrap_host_scenarios_expanded %}\n  {%   set plugin = 'ml2.ovs' %}\n  {% else %}\n  {%   set plugin = 'ml2.ovn' %}\n  {% endif %}\n  {{ plugin }}\n\n_loopback_device_data: |-\n  {% set data = {'sparse': [], 'fs': [], 'mounts': [], 'services': [], 'lvm': []} %}\n  {% if bootstrap_host_loopback_nova | bool %}\n  {%   set _ = data['sparse'].append({'size': bootstrap_host_loopback_nova_size, 'path': '/openstack/nova.img'}) %}\n  {%   set _ = data['fs'].append({'fstype': 'xfs', 'opts': bootstrap_host_format_options['xfs'], 'path': '/openstack/nova.img'}) %}\n  {%   set _ = data['mounts'].append({\n                'what': '/openstack/nova.img',\n                'where': '/var/lib/nova/instances',\n                'type': 'xfs',\n                'options': 'loop,' ~ bootstrap_host_data_mount_options['xfs'],\n                'enabled': true,\n                'state': 'started',\n      }) %}\n  {% endif %}\n  {% if bootstrap_host_loopback_cinder | bool %}\n  {%   set _ = data['sparse'].append({'size': bootstrap_host_loopback_cinder_size, 'path': '/openstack/cinder.img'}) %}\n  {%   set _ = data['services'].append({\n                 'name': 'loop-cinder',\n                 'execstarts': [\n                   '/bin/bash -c \"/sbin/losetup /dev/loop6 /openstack/cinder.img\"',\n                   '/sbin/pvscan'\n                 ],\n                 'execstops': ['/bin/bash -c \"losetup -d /dev/loop6\"'],\n  }) %}\n  {%    set _ = data['lvm'].append({\n                  'vg': 'cinder-volumes',\n                  'pvs': '/dev/loop6',\n  }) %}\n  {% endif %}\n  {% if bootstrap_host_loopback_manila | bool %}\n  {%   set _ = data['sparse'].append({'size': bootstrap_host_loopback_manila_size, 'path': '/openstack/manila.img'}) %}\n  {%   set _ = data['services'].append({\n                 'name': 'loop-manila',\n                 'execstarts': [\n                   '/bin/bash -c \"/sbin/losetup /dev/loop7 /openstack/manila.img\"',\n                   '/sbin/pvscan'\n                 ],\n                 'execstops': ['/bin/bash -c \"losetup -d /dev/loop7\"'],\n  }) %}\n  {%    set _ = data['lvm'].append({\n                  'vg': 'manila-shares',\n                  'pvs': '/dev/loop7',\n  }) %}\n  {% endif %}\n  {% if bootstrap_host_ceph | bool %}\n  {%   for image in ceph_osd_images %}\n  {%     set device = '/dev/loop' ~ (10 + loop.index) %}\n  {%     set _ = data['sparse'].append({'size': bootstrap_host_loopback_ceph_size, 'path': '/openstack/' ~ image ~ '.img'}) %}\n  {%     set _ = data['services'].append({\n                  'name': 'loop-' ~ image,\n                  'execstarts': [\n                    '/bin/bash -c \"/sbin/losetup '~ device ~' /openstack/' ~ image ~ '.img\"',\n                    '/sbin/pvscan'\n                  ],\n                  'execstops': ['/bin/bash -c \"losetup -d ' ~ device ~ '\"']\n  }) %}\n  {%     set _ = data['lvm'].append({\n                  'lv': 'lv-' ~ image,\n                  'vg': 'vg-' ~ image,\n                  'pvs': device,\n  }) %}\n  {%   endfor %}\n  {% endif %}\n  {% if bootstrap_host_loopback_swift | bool %}\n  {%   for image in ['swift1', 'swift2', 'swift3'] %}\n  {%     set _ = data['sparse'].append({'size': bootstrap_host_loopback_swift_size, 'path': '/openstack/' ~ image ~ '.img'}) %}\n  {%     set _ = data['fs'].append({'fstype': 'xfs', 'opts': bootstrap_host_format_options['xfs'], 'path': '/openstack/' ~ image ~ '.img'}) %}\n  {%     set _ = data['mounts'].append({\n                  'what': '/openstack/' ~ image ~ '.img',\n                  'where': '/srv/' ~ image ~ '.img',\n                  'type': 'xfs',\n                  'options': 'loop,' ~ bootstrap_host_data_mount_options['xfs'],\n                  'enabled': true,\n                  'state': 'started',\n        }) %}\n  {%   endfor %}\n  {% endif %}\n  {% if bootstrap_host_loopback_btrfs | bool and bootstrap_host_data_disk_device == None and _lxc_container_backing_store == 'btrfs'%}\n  {%   set _ = data['sparse'].append({'size': bootstrap_host_loopback_btrfs_size, 'path': '/openstack/lxc-btrfs.img'}) %}\n  {%   set _ = data['fs'].append({'fstype': 'btrfs', 'opts': bootstrap_host_format_options['btrfs'], 'path': '/openstack/lxc-btrfs.img'}) %}\n  {%   set _ = data['mounts'].append({\n                'what': '/openstack/lxc-btrfs.img',\n                'where': '/var/lib/lxc',\n                'type': 'btrfs',\n                'options': 'loop,' ~ bootstrap_host_data_mount_options['btrfs'],\n                'enabled': true,\n                'state': 'started',\n      }) %}\n  {% endif %}\n  {% if bootstrap_host_loopback_btrfs | bool and bootstrap_host_data_disk_device == None and _lxc_container_backing_store == 'zfs'%}\n  {%   set _ = data['sparse'].append({'size': bootstrap_host_loopback_zfs_size, 'path': '/openstack/lxc-zfs.img'}) %}\n  {% endif %}\n  {% if bootstrap_host_nfs | bool %}\n  {%   set _ = data['sparse'].append({'size': bootstrap_host_loopback_nfs_size, 'path': '/openstack/nfs.img'}) %}\n  {%   set _ = data['fs'].append({'fstype': 'xfs', 'opts': bootstrap_host_format_options['xfs'], 'path': '/openstack/nfs.img'}) %}\n  {%   set _ = data['mounts'].append({\n                'what': '/openstack/nfs.img',\n                'where': '/srv/nfs',\n                'type': 'xfs',\n                'options': 'loop,' ~ bootstrap_host_data_mount_options['xfs'],\n                'enabled': true,\n                'state': 'started',\n      }) %}\n  {% endif %}\n  {% if bootstrap_host_loopback_swap | bool and ansible_facts['swaptotal_mb'] < 1 %}\n  {%   set _ = data['sparse'].append({'size': bootstrap_host_loopback_swap_size, 'path': '/openstack/swap.img'}) %}\n  {%   set _ = data['fs'].append({'fstype': 'swap', 'path': '/openstack/swap.img'}) %}\n  {%   set _ = data['mounts'].append({\n                'what': '/openstack/swap.img',\n                'priority': 0,\n                'type': 'swap',\n                'options': bootstrap_host_data_mount_options['swap'],\n                'enabled': true,\n                'state': 'started',\n      }) %}\n  {% endif %}\n  {{ data }}\n","created":"2025-12-08T13:25:10.581060Z","updated":"2025-12-08T13:25:10.581099Z","path":"/home/zuul/src/opendev.org/openstack/openstack-ansible/tests/roles/bootstrap-host/vars/main.yml"}