Convert existing roles into galaxy roles

This change implements the blueprint to convert all roles and plays into
a more generic setup, following upstream ansible best practices.

Items Changed:
* All tasks have tags.
* All roles use namespaced variables.
* All redundant tasks within a given play and role have been removed.
* All of the repetitive plays have been removed in-favor of a more
  simplistic approach. This change duplicates code within the roles but
  ensures that the roles only ever run within their own scope.
* All roles have been built using an ansible galaxy syntax.
* The `*requirement.txt` files have been reformatted follow upstream
  Openstack practices.
* Dynamically generated inventory is now more organized, this should assist
  anyone who may want or need to dive into the JSON blob that is created.
  In the inventory a properties field is used for items that customize containers
  within the inventory.
* The environment map has been modified to support additional host groups to
  enable the seperation of infrastructure pieces. While the old infra_hosts group
  will still work this change allows for groups to be divided up into seperate
  chunks; eg: deployment of a swift only stack.
* The LXC logic now exists within the plays.
* etc/openstack_deploy/user_variables.yml has all password/token
  variables extracted into the separate file
  etc/openstack_deploy/user_secrets.yml in order to allow seperate
  security settings on that file.

Items Excised:
* All of the roles have had the LXC logic removed from within them which
  should allow roles to be consumed outside of the `os-ansible-deployment`
  reference architecture.

Note:
* the directory rpc_deployment still exists and is presently pointed at plays
  containing a deprecation warning instructing the user to move to the standard
  playbooks directory.
* While all of the rackspace specific components and variables have been removed
  and or were refactored the repository still relies on an upstream mirror of
  Openstack built python files and container images. This upstream mirror is hosted
  at rackspace at "http://rpc-repo.rackspace.com" though this is
  not locked to and or tied to rackspace specific installations. This repository
  contains all of the needed code to create and/or clone your own mirror.

DocImpact
Co-Authored-By: Jesse Pretorius <jesse.pretorius@rackspace.co.uk>
Closes-Bug: #1403676
Implements: blueprint galaxy-roles
Change-Id: I03df3328b7655f0cc9e43ba83b02623d038d214e
This commit is contained in:
Kevin Carter 2015-02-14 10:06:50 -06:00 committed by Jesse Pretorius
commit eaa4d69958
8 changed files with 914 additions and 0 deletions

90
defaults/main.yml Normal file
View File

@ -0,0 +1,90 @@
---
# Copyright 2014, Rackspace US, 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.
# Defines that the role will be deployed on a host machine
is_metal: true
## Verbosity Options
debug: False
verbose: True
tempest_private_subnet_cidr: "192.168.74.0/24"
tempest_public_subnet_cidr: "10.1.13.0/24"
tempest_compute_image_ssh_user: cirros
tempest_compute_image_alt_ssh_user: cirros
tempest_compute_image_ssh_password: cubswin:)
tempest_compute_image_alt_ssh_password: cubswin:)
tempest_compute_run_ssh: false
tempest_dashboard_login_url: "http://{{ external_lb_vip_address }}/auth/login/"
tempest_dashboard_url: "http://{{ external_lb_vip_address }}/"
tempest_service_available_ceilometer: False
tempest_service_available_cinder: True
tempest_service_available_glance: True
tempest_service_available_heat: True
tempest_service_available_horizon: True
tempest_service_available_ironic: False
tempest_service_available_neutron: True
tempest_service_available_nova: True
tempest_service_available_sahara: False
tempest_service_available_swift: True
tempest_service_available_trove: False
tempest_service_available_zaqar: False
tempest_boto_s3_url: "http://{{ external_lb_vip_address }}:3333"
tempest_boto_ec2_url: "http://{{ external_lb_vip_address }}:8773/services/Cloud"
tempest_swift_enabled: false
tempest_git_repo: https://github.com/openstack/tempest
tempest_git_install_branch: master
tempest_git_dest: "/opt/tempest_{{ tempest_git_install_branch | replace('/', '_') }}"
tempest_main_group: tempest_all
tempest_pip_packages:
- nose
- python-barbicanclient
- python-ceilometerclient
- python-cinderclient
- python-designateclient
- python-glanceclient
- python-heatclient
- python-ironicclient
- python-keystoneclient
- python-marconiclient
- python-memcached
- python-neutronclient
- python-novaclient
- python-openstackclient
- python-saharaclient
- python-seamicroclient
- python-swiftclient
- python-troveclient
- python-tuskarclient
- python-memcached
- testrepository
- testtools
tempest_image_dir: "/opt/images"
tempest_images:
- url: "http://download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-uec.tar.gz"
sha256: "f462729fc2f071081dbc55932e07437e265263ef2e688306c353a1f152162b03"
name: "cirros-0.3.2-x86_64-uec.tar.gz"
- url: "http://download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img"
sha256: "f11286e2bd317ee1a1d0469a6b182b33bda4af6f35ba224ca49d75752c81e20a"
name: "cirros-0.3.3-x86_64-disk.img"

34
meta/main.yml Normal file
View File

@ -0,0 +1,34 @@
---
# Copyright 2014, Rackspace US, 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.
galaxy_info:
author: rcbops
description: Installation and setup of tempest
company: Rackspace
license: Apache2
min_ansible_version: 1.6.6
platforms:
- name: Ubuntu
versions:
- trusty
categories:
- cloud
- python
- tempest
- development
- openstack
dependencies:
- openstack_openrc
- pip_lock_down

26
tasks/main.yml Normal file
View File

@ -0,0 +1,26 @@
---
# Copyright 2014, Rackspace US, 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.
- include: tempest_resources.yml
when: >
inventory_hostname == groups[tempest_main_group][0]
# Called a second time to set facts on the other utility containers.
- include: tempest_resources.yml
when: >
inventory_hostname != groups[tempest_main_group][0]
- include: tempest_install.yml
- include: tempest_post_install.yml

50
tasks/tempest_install.yml Normal file
View File

@ -0,0 +1,50 @@
---
# Copyright 2014, Rackspace US, 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.
- name: Install pip packages
pip:
name: "{{ item }}"
state: present
register: install_packages
until: install_packages|success
retries: 5
delay: 2
with_items:
- "{{ tempest_pip_packages }}"
tags:
- tempest-pip-packages
- name: Get tempest from git
git:
repo: "{{ tempest_git_repo }}"
dest: "{{ tempest_git_dest }}"
version: "{{ tempest_git_install_branch }}"
register: git_clone
until: git_clone|success
retries: 5
delay: 2
tags:
- tempest-git-clone
- name: Install local tempest
pip:
name: "{{ tempest_git_dest }}"
state: present
register: install_packages
until: install_packages|success
retries: 5
delay: 2
tags:
- tempest-pip-install

View File

@ -0,0 +1,94 @@
---
# Copyright 2014, Rackspace US, 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.
- name: Get admin tenant id
keystone:
command: get_tenant
tenant_name: admin
endpoint: "{{ keystone_service_internalurl }}"
login_tenant_name: "{{ keystone_service_tenant_name }}"
login_user: "{{ keystone_service_user_name }}"
login_password: "{{ keystone_auth_admin_password }}"
register: add_service
until: add_service|success
retries: 5
delay: 10
tags:
- tempest-config
- name: Store admin tenant id
set_fact:
tempest_admin_tenant_id: "{{ keystone_facts.id }}"
tags:
- tempest-config
- name: Create tempest dir
file:
path: "{{ item.path }}"
state: directory
owner: "root"
group: "root"
mode: "{{ item.mode|default('0755') }}"
with_items:
- { path: "{{ tempest_git_dest }}/locks", mode: "0777" }
- { path: "{{ tempest_git_dest }}/etc" }
- { path: "{{ tempest_image_dir }}" }
tags:
- tempest-dirs
- tempest-config
- tempest-image
- name: Image(s) download
get_url:
url: "{{ item.url }}"
dest: "{{ tempest_image_dir }}"
sha256sum: "{{ item.sha256 }}"
with_items: tempest_images
tags:
- tempest-config
- tempest-image
- name: Locate archives
shell: |
ls -1 {{ tempest_image_dir }} | grep '.gz'
register: tempest_archives
tags:
- tempest-config
- tempest-image
- tempest-image-unarchive
- name: Image(s) unarchive
unarchive:
src: "{{ tempest_image_dir }}/{{ item }}"
dest: "{{ tempest_image_dir }}"
copy: "no"
with_items: tempest_archives.stdout
tags:
- tempest-config
- tempest-image
- tempest-image-unarchive
- name: Generate tempest Config
template:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
owner: "root"
group: "root"
mode: "{{ item.mode|default('0644') }}"
with_items:
- { src: "tempest.conf.j2", dest: "{{ tempest_git_dest }}/etc/tempest.conf" }
- { src: openstack_tempest_gate.sh.j2, dest: /opt/openstack_tempest_gate.sh, mode: "0755" }
tags:
- tempest-config

265
tasks/tempest_resources.yml Normal file
View File

@ -0,0 +1,265 @@
---
# Copyright 2014, Rackspace US, 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.
- name: Ensure cirros image
glance:
command: 'image-create'
openrc_path: /root/openrc
image_name: cirros
image_url: 'http://download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img'
image_container_format: bare
image_disk_format: qcow2
image_is_public: True
tags:
- tempest-setup
- tempest-config
- name: Store glance image id
set_fact:
tempest_glance_image_id: "{{ glance_images.cirros.id }}"
tags:
- tempest-setup
- tempest-config
- name: Ensure tempest tenants
keystone:
command: ensure_tenant
tenant_name: "{{ item }}"
description: "{{ item }} Tenant"
endpoint: "{{ keystone_service_internalurl }}"
login_tenant_name: "{{ keystone_service_tenant_name }}"
login_user: "{{ keystone_service_user_name }}"
login_password: "{{ keystone_auth_admin_password }}"
register: add_service
until: add_service|success
retries: 5
delay: 10
with_items:
- demo
- alt_demo
tags:
- tempest-setup
- name: Ensure tempest users
keystone:
command: ensure_user
tenant_name: "{{ item }}"
user_name: "{{ item }}"
password: "{{ item }}"
description: "{{ item }} User"
endpoint: "{{ keystone_service_internalurl }}"
login_tenant_name: "{{ keystone_service_tenant_name }}"
login_user: "{{ keystone_service_user_name }}"
login_password: "{{ keystone_auth_admin_password }}"
register: add_service
until: add_service|success
retries: 5
delay: 10
with_items:
- demo
- alt_demo
tags:
- tempest-setup
- name: Ensure tempest users have heat_stack_owners role
keystone:
command: ensure_user_role
tenant_name: "{{ item }}"
user_name: "{{ item }}"
role_name: heat_stack_owner
endpoint: "{{ keystone_service_internalurl }}"
login_tenant_name: "{{ keystone_service_tenant_name }}"
login_user: "{{ keystone_service_user_name }}"
login_password: "{{ keystone_auth_admin_password }}"
register: add_service
until: add_service|success
retries: 5
delay: 10
with_items:
- demo
- alt_demo
tags:
- tempest-setup
- name: Ensure reseller_admin role
keystone:
command: ensure_role
endpoint: "{{ keystone_service_internalurl }}"
login_tenant_name: "{{ keystone_service_tenant_name }}"
login_user: "{{ keystone_service_user_name }}"
login_password: "{{ keystone_auth_admin_password }}"
role_name: "reseller_admin"
register: add_service
until: add_service|success
retries: 5
delay: 10
tags:
- tempest-setup
- name: Ensure remote_image role exists
keystone:
command: ensure_role
role_name: remote_image
endpoint: "{{ keystone_service_internalurl }}"
login_tenant_name: "{{ keystone_service_tenant_name }}"
login_user: "{{ keystone_service_user_name }}"
login_password: "{{ keystone_auth_admin_password }}"
register: add_service
until: add_service|success
retries: 5
delay: 10
tags:
- tempest-setup
- name: Get demo tenant id
keystone:
command: get_tenant
tenant_name: demo
endpoint: "{{ keystone_service_internalurl }}"
login_tenant_name: "{{ keystone_service_tenant_name }}"
login_user: "{{ keystone_service_user_name }}"
login_password: "{{ keystone_auth_admin_password }}"
register: add_service
until: add_service|success
retries: 5
delay: 10
tags:
- tempest-setup
- tempest-config
- name: Store demo tenant id
set_fact:
keystone_demo_tenant_id: "{{ keystone_facts.id }}"
tags:
- tempest-setup
- tempest-config
- name: Ensure private network exists
neutron:
command: create_network
openrc_path: /root/openrc
net_name: private
tenant_id: "{{ keystone_demo_tenant_id }}"
tags:
- tempest-setup
- name: Store neutron private network id
set_fact:
tempest_neutron_private_network_id: "{{ neutron_networks.private.id }}"
tags:
- tempest-setup
- tempest-config
- name: Ensure public network exists
neutron:
command: create_network
openrc_path: /root/openrc
net_name: public
provider_network_type: flat
provider_physical_network: flat
router_external: true
tags:
- tempest-setup
- tempest-config
- name: Store neutron public network id
set_fact:
tempest_neutron_public_network_id: "{{ neutron_networks.public.id }}"
tags:
- tempest-setup
- tempest-config
- name: Ensure private subnet exists
neutron:
command: create_subnet
openrc_path: /root/openrc
net_name: private
subnet_name: private-subnet
cidr: "{{ tempest_private_subnet_cidr }}"
tenant_id: "{{ keystone_demo_tenant_id }}"
tags:
- tempest-setup
- name: Ensure public subnet exists
neutron:
command: create_subnet
openrc_path: /root/openrc
net_name: public
subnet_name: public-subnet
cidr: "{{ tempest_public_subnet_cidr }}"
tags:
- tempest-setup
- name: Create router
neutron:
command: create_router
openrc_path: /root/openrc
router_name: router
external_gateway_info: public
tenant_id: "{{ keystone_demo_tenant_id }}"
tags:
- tempest-setup
- name: Store neutron router id
set_fact:
tempest_neutron_router_id: "{{ neutron_routers.router.id }}"
tags:
- tempest-setup
- tempest-config
- name: Add private subnet to router
neutron:
command: add_router_interface
openrc_path: /root/openrc
router_name: router
subnet_name: private-subnet
tags:
- tempest-setup
- name: Check if tempest flavor 201 exists
shell: |
. /root/openrc
nova flavor-show tempest1
register: tempest1
failed_when: False
changed_when: tempest1.rc != 0
tags:
- tempest-setup
- name: Create tempest flavor 201
shell: |
. /root/openrc
nova flavor-create tempest1 201 256 1 1
when: tempest1.rc != 0
tags:
- tempest-setup
- name: Check if tempest flavor 202 exists
shell: |
. /root/openrc
nova flavor-show tempest2
register: tempest2
failed_when: False
changed_when: tempest2.rc != 0
tags:
- tempest-setup
- name: Create tempest flavor 202
shell: |
. /root/openrc
nova flavor-create tempest2 202 512 1 1
when: tempest2.rc != 0
tags:
- tempest-setup

View File

@ -0,0 +1,103 @@
#!/usr/bin/env bash
# Copyright 2014, Rackspace US, 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.
# Script for running gate tests. Initially very sparse
# additional projects and test types will be added over time.
# -------------------- Shell Options -------------------------
set -x
# -------------------- Parameters -------------------------
# The only parameter this script takes is the name of a test list to use:
# ./$0 <test_list_name>
#
# If a name is not supplied commit_multinode will be used.
test_list_name=${1:-commit_multinode}
# -------------------- Functions -------------------------
# Test list functions. Each tempest test scenario (eg commit gate, nightly,
# pre release) should have a function here to generate the list of tests that
# should be run. Each function takes in the full list of tempest tests and
# should output a filtered list.
function gen_test_list_commit_multinode() {
# filter test list to produce list of tests to use.
egrep 'tempest\.api\.(identity|image|volume)'\
|grep -vi xml \
|grep -v compute \
|grep -v VolumesV.ActionsTest
}
# Run smoke tests
function gen_test_list_commit_aio() {
egrep 'test_minimum_basic|test_swift_basic_ops'
}
# Run smoke tests
function gen_test_list_nightly_heat_multinode() {
grep smoke
}
# Run all tests
function gen_test_list_all() {
cat
}
# -------------------- Main -------------------------
available_test_lists=$(compgen -A function|sed -n '/^gen_test_list_/s/gen_test_list_//p')
grep $test_list_name <<<$available_test_lists || {
echo "$test_list_name is not a valid test list, available test lists: "
echo $available_test_lists
exit 1
}
# work in tempest directory
pushd {{ tempest_git_dest }}
# read creds into environment
source /root/openrc
# create testr repo - required for testr to do anything
testr init &>/dev/null ||:
# Get list of available tests
testr list-tests > full_test_list
# Write filter test list using selected function
gen_test_list_$test_list_name <full_test_list >test_list
test_list_summary="${test_list_name} ($(wc -l <test_list) tests)"
echo "Using test list $test_list_summary"
# execute chosen tests with pretty output
./run_tempest.sh --no-virtual-env -- --load-list test_list;
result=$?
popd
if [[ $result == 0 ]]; then
echo "TEMPEST PASS $test_list_summary"
else
echo "TEMPEST FAIL $test_list_summary"
fi
exit $result

252
templates/tempest.conf.j2 Normal file
View File

@ -0,0 +1,252 @@
# {{ ansible_managed }}
[DEFAULT]
disable_process_locking = false
lock_path = {{ tempest_git_dest }}/locks
debug = {{ debug }}
verbose = {{ verbose }}
log_file = {{ tempest_git_dest }}/tempest.log
use_stderr = False
fatal_deprecations = true
[auth]
tempest_roles = remote_image
allow_tenant_isolation = True
[baremetal]
[boto]
aki_manifest = cirros-0.3.2-x86_64-vmlinuz.manifest.xml
ami_manifest = cirros-0.3.2-x86_64-blank.img.manifest.xml
ari_manifest = cirros-0.3.2-x86_64-initrd.manifest.xml
build_timeout = 600
ec2_url = {{ tempest_boto_ec2_url }}
instance_type = tempest1
http_socket_timeout = 30
s3_url = {{ tempest_boto_s3_url }}
s3_materials_path = /opt/images/s3-materials/cirros-0.3.2
[cli]
enabled = true
cli_dir = /usr/local/bin
has_manage = false
timeout = 15
[compute]
build_interval = 1
build_timeout = 600
catalog_type = compute
catalog_v3_type = computev3
endpoint_type = internalURL
fixed_network_name = private
flavor_ref = 201
flavor_ref_alt = 202
floating_ip_range = 10.0.0.0/29
image_alt_ssh_password = {{ tempest_compute_image_alt_ssh_password }}
image_alt_ssh_user = {{ tempest_compute_image_alt_ssh_user }}
image_ref = {{ tempest_glance_image_id }}
image_ref_alt = {{ tempest_glance_image_id }}
image_ssh_password = {{ tempest_compute_image_ssh_password }}
image_ssh_user = {{ tempest_compute_image_ssh_user }}
ip_version_for_ssh = 4
network_for_ssh = private
ping_timeout = 240
run_ssh = {{ tempest_compute_run_ssh }}
ssh_auth_method = configured
ssh_connect_method = floating
ssh_timeout = 196
ssh_user = {{ tempest_compute_image_ssh_user }}
use_floatingip_for_ssh = true
volume_device_name = vdb
[compute-admin]
password = {{ keystone_auth_admin_password }}
tenant_name = {{ keystone_service_tenant_name }}
username = {{ keystone_service_user_name }}
[compute-feature-enabled]
api_extensions = all
api_v3 = false
api_v3_extensions = all
block_migrate_cinder_iscsi = false
block_migration_for_live_migration = false
change_password = false
console_output = false
disk_config = true
enable_instance_password = false
interface_attach = false
live_migration = false
pause = false
rdp_console = false
rescue = false
resize = false
shelve = false
snapshot = false
spice_console = true
suspend = false
vnc_console = false
[dashboard]
login_url = {{ tempest_dashboard_login_url }}
dashboard_url = {{ tempest_dashboard_url }}
[data_processing]
[database]
[debug]
enable = true
[identity]
admin_domain_name = Default
admin_password = {{ keystone_auth_admin_password }}
admin_role = admin
admin_tenant_name = {{ keystone_service_tenant_name }}
admin_username = {{ keystone_service_user_name }}
admin_tenant_id = {{ tempest_admin_tenant_id }}
alt_tenant_name = alt_demo
alt_password = alt_demo
alt_username = alt_demo
auth_version = v2
catalog_type = identity
disable_ssl_certificate_validation = false
endpoint_type = internalURL
password = demo
tenant_name = demo
uri_v3 = {{ keystone_service_internalurl_v3 }}
uri = {{ keystone_service_internalurl }}
username = demo
[identity-feature-enabled]
api_v2 = true
api_v3 = false
trust = false
[image]
catalog_type = image
endpoint_type = internalURL
http_image = http://download.cirros-cloud.net/0.3.1/cirros-0.3.1-x86_64-uec.tar.gz
[image-feature-enabled]
api_v1 = true
api_v2 = false
[input-scenario]
[negative]
[messaging]
[network]
build_interval = 1
build_timeout = 300
catalog_type = network
dns_servers = 8.8.8.8,8.8.4.4
endpoint_type = internalURL
public_router_id = {{ tempest_neutron_router_id }}
public_network_id = {{ tempest_neutron_public_network_id }}
tenant_network_cidr = {{ tempest_private_subnet_cidr }}
tenant_networks_reachable = false
[network-feature-enabled]
api_extensions = agent,allowed-address-pairs,binding,dhcp_agent_scheduler,ext-gw-mode,external-net,extra_dhcp_opt,extra_dhcp_optagent,extraroute,l3_agent_scheduler,metering,provider,quotas,router,security-group,service-type
ipv6_subnet_attributes = false
ipv6 = false
[object-storage]
catalog_type = object-store
container_sync_interval = 5
container_sync_timeout = 120
endpoint_type = internalURL
operator_role = swiftoperator
reseller_admin_role = reseller_admin
[object-storage-feature-enabled]
container_sync = false
object_versioning = false
discoverable_apis = all
[orchestration]
build_interval = 1
build_timeout = 900
catalog_type = orchestration
endpoint_type = internalURL
image_ref = {{ tempest_glance_image_id }}
instance_type = tempest1
[scenario]
large_ops_number = 0
aki_img_file = cirros-0.3.2-x86_64-vmlinuz
ari_img_file = cirros-0.3.2-x86_64-initrd
ami_img_file = cirros-0.3.2-x86_64-blank.img
img_container_format = bare
img_dir = {{ tempest_image_dir }}
img_disk_format = qcow2
img_file = cirros-0.3.2-x86_64-disk.img
ssh_user = {{ tempest_compute_image_ssh_user }}
[service_available]
ceilometer = {{ tempest_service_available_ceilometer }}
cinder = {{ tempest_service_available_cinder }}
glance = {{ tempest_service_available_glance }}
heat = {{ tempest_service_available_heat }}
horizon = {{ tempest_service_available_horizon }}
ironic = {{ tempest_service_available_ironic }}
neutron = {{ tempest_service_available_neutron }}
nova = {{ tempest_service_available_nova }}
sahara = {{ tempest_service_available_sahara }}
swift = {{ tempest_service_available_swift }}
trove = {{ tempest_service_available_trove }}
zaqar = {{ tempest_service_available_zaqar }}
[stress]
[telemetry]
[volume]
backend1_name = lvm
build_interval = 1
build_timeout = 600
catalog_type = volume
disk_format = raw
endpoint_type = internalURL
storage_protocol = iSCSI
vendor_name = Open Source
volume_size = 1
[volume-feature-enabled]
api_extensions = all
api_v1 = true
api_v2 = false
backup = false
multi_backend = false
snapshot = false