Add initial placement role
This patch adds the support for the placement service with a simple functional test which hits the API (which in turn hits the database and keystone for authorization). Depends-On: I878e8c479d8963b339b5e1f6031f649c0f87082f Change-Id: Iaa11a8cc4d945712b62c3b9c2cb6ad168def34eb
This commit is contained in:
parent
565c63a659
commit
32c1eb8488
|
@ -0,0 +1,75 @@
|
||||||
|
# Compiled source #
|
||||||
|
###################
|
||||||
|
*.com
|
||||||
|
*.class
|
||||||
|
*.dll
|
||||||
|
*.exe
|
||||||
|
*.o
|
||||||
|
*.so
|
||||||
|
*.pyc
|
||||||
|
build/
|
||||||
|
dist/
|
||||||
|
doc/build/
|
||||||
|
|
||||||
|
# Packages #
|
||||||
|
############
|
||||||
|
# it's better to unpack these files and commit the raw source
|
||||||
|
# git has its own built in compression methods
|
||||||
|
*.7z
|
||||||
|
*.dmg
|
||||||
|
*.gz
|
||||||
|
*.iso
|
||||||
|
*.jar
|
||||||
|
*.rar
|
||||||
|
*.tar
|
||||||
|
*.zip
|
||||||
|
|
||||||
|
# Logs and databases #
|
||||||
|
######################
|
||||||
|
*.log
|
||||||
|
*.sql
|
||||||
|
*.sqlite
|
||||||
|
logs/*
|
||||||
|
|
||||||
|
# OS generated files #
|
||||||
|
######################
|
||||||
|
.DS_Store
|
||||||
|
.DS_Store?
|
||||||
|
._*
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trashes
|
||||||
|
.idea
|
||||||
|
.tox
|
||||||
|
*.sublime*
|
||||||
|
*.egg-info
|
||||||
|
Icon?
|
||||||
|
ehthumbs.db
|
||||||
|
Thumbs.db
|
||||||
|
.eggs
|
||||||
|
|
||||||
|
# User driven backup files #
|
||||||
|
############################
|
||||||
|
*.bak
|
||||||
|
*.swp
|
||||||
|
|
||||||
|
# Generated by pbr while building docs
|
||||||
|
######################################
|
||||||
|
AUTHORS
|
||||||
|
ChangeLog
|
||||||
|
|
||||||
|
# Files created by releasenotes build
|
||||||
|
releasenotes/build
|
||||||
|
|
||||||
|
# Test temp files
|
||||||
|
tests/common
|
||||||
|
tests/*.retry
|
||||||
|
|
||||||
|
# Vagrant artifacts
|
||||||
|
.vagrant
|
||||||
|
|
||||||
|
# Git clones
|
||||||
|
openstack-ansible-ops
|
||||||
|
previous
|
||||||
|
|
||||||
|
# Editor files
|
||||||
|
.vscode
|
|
@ -0,0 +1,127 @@
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
# Set installation method
|
||||||
|
placement_install_method: "source"
|
||||||
|
|
||||||
|
# Set the package install state for distribution and pip packages
|
||||||
|
# Options are 'present' and 'latest'
|
||||||
|
placement_package_state: "latest"
|
||||||
|
placement_pip_package_state: "latest"
|
||||||
|
|
||||||
|
# Set the host which will execute the shade modules
|
||||||
|
# for the service setup. The host must already have
|
||||||
|
# clouds.yaml properly configured.
|
||||||
|
placement_service_setup_host: "{{ openstack_service_setup_host | default('localhost') }}"
|
||||||
|
placement_service_setup_host_python_interpreter: "{{ openstack_service_setup_host_python_interpreter | default((placement_service_setup_host == 'localhost') | ternary(ansible_playbook_python, ansible_python['executable'])) }}"
|
||||||
|
|
||||||
|
placement_git_repo: https://git.openstack.org/openstack/placement
|
||||||
|
placement_git_install_branch: master
|
||||||
|
placement_developer_mode: false
|
||||||
|
placement_developer_constraints:
|
||||||
|
- "git+{{ placement_git_repo }}@{{ placement_git_install_branch }}#egg=openstack-placement"
|
||||||
|
|
||||||
|
|
||||||
|
# TODO(odyssey4me):
|
||||||
|
# This can be simplified once all the roles are using
|
||||||
|
# python_venv_build. We can then switch to using a
|
||||||
|
# set of constraints in pip.conf inside the venv,
|
||||||
|
# perhaps prepared by giving a giving a list of
|
||||||
|
# constraints to the role.
|
||||||
|
placement_pip_install_args: >-
|
||||||
|
{{ placement_developer_mode | ternary(pip_install_developer_constraints | default('--constraint /opt/developer-pip-constraints.txt'), '') }}
|
||||||
|
{{ (pip_install_upper_constraints is defined) | ternary('--constraint ' + pip_install_upper_constraints | default(''), '') }}
|
||||||
|
{{ pip_install_options | default('') }}
|
||||||
|
|
||||||
|
# Name of the virtual env to deploy into
|
||||||
|
placement_venv_tag: "{{ venv_tag | default('untagged') }}"
|
||||||
|
placement_bin: "{{ _placement_bin }}"
|
||||||
|
|
||||||
|
## Database info
|
||||||
|
placement_db_setup_host: "{{ ('galera_all' in groups) | ternary(groups['galera_all'][0], 'localhost') }}"
|
||||||
|
placement_galera_address: "{{ galera_address | default('127.0.0.1') }}"
|
||||||
|
placement_galera_database: placement
|
||||||
|
placement_galera_user: placement
|
||||||
|
placement_galera_use_ssl: "{{ galera_use_ssl | default(False) }}"
|
||||||
|
placement_galera_ssl_ca_cert: "{{ galera_ssl_ca_cert | default('/etc/ssl/certs/galera-ca.pem') }}"
|
||||||
|
|
||||||
|
## Placement User / Group
|
||||||
|
placement_system_user_name: placement
|
||||||
|
placement_system_group_name: placement
|
||||||
|
placement_system_comment: placement system user
|
||||||
|
placement_system_shell: /bin/false
|
||||||
|
placement_system_user_home: "/var/lib/{{ placement_system_user_name }}"
|
||||||
|
|
||||||
|
# API
|
||||||
|
placement_bind_address: 0.0.0.0
|
||||||
|
placement_service_port: 8780
|
||||||
|
|
||||||
|
# UWSGI
|
||||||
|
placement_wsgi_processes_max: 16
|
||||||
|
placement_wsgi_processes: "{{ [[ansible_processor_vcpus|default(1), 1] | max * 2, placement_wsgi_processes_max] | min }}"
|
||||||
|
placement_wsgi_threads: 1
|
||||||
|
placement_wsgi_buffer_size: 65535
|
||||||
|
|
||||||
|
## Service Type and Data
|
||||||
|
placement_service_region: RegionOne
|
||||||
|
placement_service_name: placement
|
||||||
|
placement_service_proto: http
|
||||||
|
placement_service_registry_proto: "{{ placement_service_proto }}"
|
||||||
|
placement_service_publicuri_proto: "{{ openstack_service_publicuri_proto | default(placement_service_proto) }}"
|
||||||
|
placement_service_adminuri_proto: "{{ openstack_service_adminuri_proto | default(placement_service_proto) }}"
|
||||||
|
placement_service_internaluri_proto: "{{ openstack_service_internaluri_proto | default(placement_service_proto) }}"
|
||||||
|
placement_service_type: placement
|
||||||
|
placement_service_description: "Placement Service"
|
||||||
|
placement_service_user_name: placement
|
||||||
|
placement_service_project_name: service
|
||||||
|
placement_service_project_domain_id: default
|
||||||
|
placement_service_user_domain_id: default
|
||||||
|
placement_service_publicurl: "{{ placement_service_publicuri_proto }}://{{ external_lb_vip_address }}:{{ placement_service_port }}"
|
||||||
|
placement_service_internalurl: "{{ placement_service_internaluri_proto }}://{{ internal_lb_vip_address }}:{{ placement_service_port }}"
|
||||||
|
placement_service_adminurl: "{{ placement_service_adminuri_proto }}://{{ internal_lb_vip_address }}:{{ placement_service_port }}"
|
||||||
|
placement_service_in_ldap: false
|
||||||
|
|
||||||
|
placement_auth_strategy: keystone
|
||||||
|
|
||||||
|
## Keystone authentication middleware
|
||||||
|
placement_keystone_auth_type: password
|
||||||
|
placement_role_name: admin
|
||||||
|
|
||||||
|
# Common pip packages
|
||||||
|
placement_pip_packages:
|
||||||
|
- openstack-placement
|
||||||
|
- PyMySQL
|
||||||
|
- python-memcached
|
||||||
|
- cryptography
|
||||||
|
- uwsgi
|
||||||
|
|
||||||
|
## Service Name-Group Mapping
|
||||||
|
placement_services:
|
||||||
|
placement-api:
|
||||||
|
group: placement_api
|
||||||
|
service_name: placement-api
|
||||||
|
init_config_overrides: "{{ placement_api_init_overrides }}"
|
||||||
|
start_order: 1
|
||||||
|
wsgi_overrides: "{{ placement_api_uwsgi_ini_overrides }}"
|
||||||
|
wsgi_app: True
|
||||||
|
wsgi_name: placement-api
|
||||||
|
uwsgi_bind_address: "{{ placement_bind_address }}"
|
||||||
|
uwsgi_port: "{{ placement_service_port }}"
|
||||||
|
execstarts: "{{ placement_uwsgi_bin }}/uwsgi --autoload --ini /etc/uwsgi/placement-api.ini"
|
||||||
|
execreloads: "{{ placement_uwsgi_bin }}/uwsgi --reload /var/run/placement-api/placement-uwsgi.pid"
|
||||||
|
|
||||||
|
## Tunable overrides
|
||||||
|
placement_api_uwsgi_ini_overrides: {}
|
||||||
|
placement_api_init_overrides: {}
|
||||||
|
placement_placement_conf_overrides: {}
|
|
@ -0,0 +1,49 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
|
||||||
|
- name: Stop services
|
||||||
|
service:
|
||||||
|
name: "{{ item.service_name }}"
|
||||||
|
enabled: yes
|
||||||
|
state: "stopped"
|
||||||
|
daemon_reload: yes
|
||||||
|
with_items: "{{ filtered_placement_services }}"
|
||||||
|
register: _stop
|
||||||
|
until: _stop is success
|
||||||
|
retries: 5
|
||||||
|
delay: 2
|
||||||
|
listen:
|
||||||
|
- "Restart placement services"
|
||||||
|
- "venv changed"
|
||||||
|
|
||||||
|
- name: Start services
|
||||||
|
service:
|
||||||
|
name: "{{ item.service_name }}"
|
||||||
|
enabled: yes
|
||||||
|
state: "started"
|
||||||
|
daemon_reload: yes
|
||||||
|
with_items: "{{ filtered_placement_services }}"
|
||||||
|
register: _start
|
||||||
|
until: _start is success
|
||||||
|
retries: 5
|
||||||
|
delay: 2
|
||||||
|
listen:
|
||||||
|
- "Restart placement services"
|
||||||
|
- "venv changed"
|
||||||
|
|
||||||
|
- meta: noop
|
||||||
|
listen: Manage LB
|
||||||
|
when: false
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
# Copyright 2018, Vexxhost, Inc.
|
# Copyright 2019, VEXXHOST, Inc.
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
# Copyright 2018, Vexxhost, Inc.
|
# Copyright 2019, VEXXHOST, Inc.
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# Copyright 2015, 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.
|
||||||
|
|
||||||
|
# PURPOSE:
|
||||||
|
# This script clones the openstack-ansible-tests repository to the
|
||||||
|
# tests/common folder in order to be able to re-use test components
|
||||||
|
# for role testing. This is intended to be the thinnest possible
|
||||||
|
# shim for test execution outside of OpenStack CI.
|
||||||
|
|
||||||
|
# WARNING:
|
||||||
|
# This file is maintained in the openstack-ansible-tests repository.
|
||||||
|
# https://git.openstack.org/cgit/openstack/openstack-ansible-tests/tree/run_tests.sh
|
||||||
|
# If you need to modify this file, update the one in the openstack-ansible-tests
|
||||||
|
# repository and then update this file as well. The purpose of this file is to
|
||||||
|
# prepare the host and then execute all the tox tests.
|
||||||
|
#
|
||||||
|
|
||||||
|
## Shell Opts ----------------------------------------------------------------
|
||||||
|
set -xeu
|
||||||
|
|
||||||
|
## Vars ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
WORKING_DIR="$(readlink -f $(dirname $0))"
|
||||||
|
OSA_PROJECT_NAME="$(sed -n 's|^project=openstack/\(.*\).git$|\1|p' $(pwd)/.gitreview)"
|
||||||
|
|
||||||
|
COMMON_TESTS_PATH="${WORKING_DIR}/tests/common"
|
||||||
|
TESTING_HOME=${TESTING_HOME:-$HOME}
|
||||||
|
ZUUL_TESTS_CLONE_LOCATION="/home/zuul/src/git.openstack.org/openstack/openstack-ansible-tests"
|
||||||
|
|
||||||
|
# Use .gitreview as the key to determine the appropriate
|
||||||
|
# branch to clone for tests.
|
||||||
|
TESTING_BRANCH=$(awk -F'=' '/defaultbranch/ {print $2}' "${WORKING_DIR}/.gitreview")
|
||||||
|
if [[ "${TESTING_BRANCH}" == "" ]]; then
|
||||||
|
TESTING_BRANCH="master"
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Main ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Source distribution information
|
||||||
|
source /etc/os-release || source /usr/lib/os-release
|
||||||
|
|
||||||
|
# Prefer dnf over yum for CentOS.
|
||||||
|
which dnf &>/dev/null && RHT_PKG_MGR='dnf' || RHT_PKG_MGR='yum'
|
||||||
|
|
||||||
|
# Figure out the appropriate package install command
|
||||||
|
case ${ID,,} in
|
||||||
|
*suse*) pkg_mgr_cmd="zypper -n in" ;;
|
||||||
|
centos|rhel|fedora) pkg_mgr_cmd="${RHT_PKG_MGR} install -y" ;;
|
||||||
|
ubuntu|debian) pkg_mgr_cmd="apt-get install -y" ;;
|
||||||
|
gentoo) pkg_mgr_cmd="emerge" ;;
|
||||||
|
*) echo "unsupported distribution: ${ID,,}"; exit 1 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Install git so that we can clone the tests repo if git is not available
|
||||||
|
which git &>/dev/null || eval sudo "${pkg_mgr_cmd}" git
|
||||||
|
|
||||||
|
# Clone the tests repo for access to the common test script
|
||||||
|
if [[ ! -d "${COMMON_TESTS_PATH}" ]]; then
|
||||||
|
# The tests repo doesn't need a clone, we can just
|
||||||
|
# symlink it.
|
||||||
|
if [[ "${OSA_PROJECT_NAME}" == "openstack-ansible-tests" ]]; then
|
||||||
|
ln -s "${WORKING_DIR}" "${COMMON_TESTS_PATH}"
|
||||||
|
|
||||||
|
# In zuul v3 any dependent repository is placed into
|
||||||
|
# /home/zuul/src/git.openstack.org, so we check to see
|
||||||
|
# if there is a tests checkout there already. If so, we
|
||||||
|
# symlink that and use it.
|
||||||
|
elif [[ -d "${ZUUL_TESTS_CLONE_LOCATION}" ]]; then
|
||||||
|
ln -s "${ZUUL_TESTS_CLONE_LOCATION}" "${COMMON_TESTS_PATH}"
|
||||||
|
|
||||||
|
# Otherwise we're clearly not in zuul or using a previously setup
|
||||||
|
# repo in some way, so just clone it from upstream.
|
||||||
|
else
|
||||||
|
git clone -b "${TESTING_BRANCH}" \
|
||||||
|
https://git.openstack.org/openstack/openstack-ansible-tests \
|
||||||
|
"${COMMON_TESTS_PATH}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Execute the common test script
|
||||||
|
source tests/common/run_tests_common.sh
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
- name: Gather variables for each operating system
|
||||||
|
include_vars: "{{ item }}"
|
||||||
|
with_first_found:
|
||||||
|
- "{{ ansible_distribution | lower }}-{{ ansible_distribution_version | lower }}.yml"
|
||||||
|
- "{{ ansible_distribution | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
|
||||||
|
- "{{ ansible_os_family | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
|
||||||
|
- "{{ ansible_distribution | lower }}.yml"
|
||||||
|
- "{{ ansible_os_family | lower }}-{{ ansible_distribution_version.split('.')[0] }}.yml"
|
||||||
|
- "{{ ansible_os_family | lower }}.yml"
|
||||||
|
tags:
|
||||||
|
- always
|
||||||
|
|
||||||
|
- name: Fail if service was deployed using a different installation method
|
||||||
|
fail:
|
||||||
|
msg: "Switching installation methods for OpenStack services is not supported"
|
||||||
|
when:
|
||||||
|
- ansible_local is defined
|
||||||
|
- ansible_local.openstack_ansible is defined
|
||||||
|
- ansible_local.openstack_ansible.placement is defined
|
||||||
|
- ansible_local.openstack_ansible.placement.install_method is defined
|
||||||
|
- ansible_local.openstack_ansible.placement.install_method != placement_install_method
|
||||||
|
|
||||||
|
- name: Gather variables for installation method
|
||||||
|
include_vars: "{{ placement_install_method }}_install.yml"
|
||||||
|
tags:
|
||||||
|
- always
|
||||||
|
|
||||||
|
- include_tasks: placement_pre_install.yml
|
||||||
|
tags:
|
||||||
|
- placement-install
|
||||||
|
|
||||||
|
- include_tasks: placement_install.yml
|
||||||
|
tags:
|
||||||
|
- placement-install
|
||||||
|
|
||||||
|
- include_tasks: placement_post_install.yml
|
||||||
|
tags:
|
||||||
|
- placement-config
|
||||||
|
|
||||||
|
- include_tasks: placement_db_setup.yml
|
||||||
|
run_once: true
|
||||||
|
tags:
|
||||||
|
- placement-config
|
||||||
|
|
||||||
|
- include_tasks: placement_service_setup.yml
|
||||||
|
run_once: true
|
||||||
|
tags:
|
||||||
|
- placement-config
|
||||||
|
|
||||||
|
- name: Flush handlers
|
||||||
|
meta: flush_handlers
|
|
@ -0,0 +1,46 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
- name: Create DB for service
|
||||||
|
mysql_db:
|
||||||
|
login_user: "{{ galera_root_user }}"
|
||||||
|
login_password: "{{ galera_root_password }}"
|
||||||
|
login_host: "{{ placement_galera_address }}"
|
||||||
|
name: "{{ placement_galera_database }}"
|
||||||
|
state: "present"
|
||||||
|
delegate_to: "{{ placement_db_setup_host }}"
|
||||||
|
no_log: True
|
||||||
|
|
||||||
|
- name: Grant access to the DB for the service
|
||||||
|
mysql_user:
|
||||||
|
login_user: "{{ galera_root_user }}"
|
||||||
|
login_password: "{{ galera_root_password }}"
|
||||||
|
login_host: "{{ placement_galera_address }}"
|
||||||
|
name: "{{ placement_galera_user }}"
|
||||||
|
password: "{{ placement_galera_password }}"
|
||||||
|
host: "{{ item }}"
|
||||||
|
state: "present"
|
||||||
|
priv: "{{ placement_galera_database }}.*:ALL"
|
||||||
|
delegate_to: "{{ placement_db_setup_host }}"
|
||||||
|
with_items:
|
||||||
|
- "localhost"
|
||||||
|
- "%"
|
||||||
|
no_log: True
|
||||||
|
|
||||||
|
- name: Perform a Placement DB sync
|
||||||
|
command: "{{ placement_bin }}/placement-manage db sync"
|
||||||
|
become: yes
|
||||||
|
become_user: "{{ placement_system_user_name }}"
|
||||||
|
changed_when: false
|
|
@ -0,0 +1,97 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
- name: Record the installation method
|
||||||
|
ini_file:
|
||||||
|
dest: "/etc/ansible/facts.d/openstack_ansible.fact"
|
||||||
|
section: "placement"
|
||||||
|
option: "install_method"
|
||||||
|
value: "{{ placement_install_method }}"
|
||||||
|
|
||||||
|
- name: Refresh local facts to ensure the placement section is present
|
||||||
|
setup:
|
||||||
|
filter: ansible_local
|
||||||
|
gather_subset: "!all"
|
||||||
|
|
||||||
|
- name: Install distro packages
|
||||||
|
package:
|
||||||
|
name: "{{ placement_package_list }}"
|
||||||
|
state: "{{ placement_package_state }}"
|
||||||
|
update_cache: "{{ (ansible_pkg_mgr in ['apt', 'zypper']) | ternary('yes', omit) }}"
|
||||||
|
cache_valid_time: "{{ (ansible_pkg_mgr == 'apt') | ternary(cache_timeout, omit) }}"
|
||||||
|
register: install_packages
|
||||||
|
until: install_packages is success
|
||||||
|
retries: 5
|
||||||
|
delay: 2
|
||||||
|
|
||||||
|
- name: Install placement packages from PIP
|
||||||
|
include_tasks: placement_install_source.yml
|
||||||
|
when: placement_install_method == 'source'
|
||||||
|
|
||||||
|
- name: Record the need for a service restart
|
||||||
|
ini_file:
|
||||||
|
dest: "/etc/ansible/facts.d/openstack_ansible.fact"
|
||||||
|
section: "placement"
|
||||||
|
option: "need_service_restart"
|
||||||
|
value: true
|
||||||
|
when: (install_packages | changed) or
|
||||||
|
('need_service_restart' not in ansible_local['openstack_ansible']['placement'])
|
||||||
|
|
||||||
|
- name: Run the systemd service role
|
||||||
|
include_role:
|
||||||
|
name: systemd_service
|
||||||
|
private: true
|
||||||
|
vars:
|
||||||
|
systemd_user_name: "{{ placement_system_user_name }}"
|
||||||
|
systemd_group_name: "{{ placement_system_group_name }}"
|
||||||
|
systemd_tempd_prefix: openstack
|
||||||
|
systemd_slice_name: placement
|
||||||
|
systemd_lock_path: /var/lock/placement
|
||||||
|
systemd_CPUAccounting: true
|
||||||
|
systemd_BlockIOAccounting: true
|
||||||
|
systemd_MemoryAccounting: true
|
||||||
|
systemd_TasksAccounting: true
|
||||||
|
systemd_services:
|
||||||
|
- service_name: "{{ service_var.service_name }}"
|
||||||
|
enabled: yes
|
||||||
|
state: started
|
||||||
|
execstarts: "{{ service_var.execstarts }}"
|
||||||
|
execreloads: "{{ service_var.execreloads | default([]) }}"
|
||||||
|
config_overrides: "{{ service_var.init_config_overrides }}"
|
||||||
|
with_items: "{{ filtered_placement_services }}"
|
||||||
|
loop_control:
|
||||||
|
loop_var: service_var
|
||||||
|
tags:
|
||||||
|
- placement-config
|
||||||
|
- systemd-service
|
||||||
|
|
||||||
|
- name: Ensure uWSGI directory exists
|
||||||
|
file:
|
||||||
|
path: "/etc/uwsgi/"
|
||||||
|
state: directory
|
||||||
|
mode: "0711"
|
||||||
|
|
||||||
|
- name: Apply uWSGI configuration
|
||||||
|
config_template:
|
||||||
|
src: "placement-uwsgi.ini.j2"
|
||||||
|
dest: "/etc/uwsgi/{{ item.service_name }}.ini"
|
||||||
|
mode: "0744"
|
||||||
|
config_overrides: "{{ item.wsgi_overrides }}"
|
||||||
|
config_type: ini
|
||||||
|
with_items: "{{ filtered_placement_services }}"
|
||||||
|
when: item.wsgi_app | default(False)
|
||||||
|
notify:
|
||||||
|
- Manage LB
|
||||||
|
- Restart placement services
|
|
@ -0,0 +1,52 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
# TODO(odyssey4me):
|
||||||
|
# This can be simplified once all the roles are using
|
||||||
|
# python_venv_build. We can then switch to using a
|
||||||
|
# set of constraints in pip.conf inside the venv,
|
||||||
|
# perhaps prepared by giving a giving a list of
|
||||||
|
# constraints to the role.
|
||||||
|
- name: Create developer mode constraint file
|
||||||
|
copy:
|
||||||
|
dest: "/opt/developer-pip-constraints.txt"
|
||||||
|
content: |
|
||||||
|
{% for item in placement_developer_constraints %}
|
||||||
|
{{ item }}
|
||||||
|
{% endfor %}
|
||||||
|
when: placement_developer_mode | bool
|
||||||
|
|
||||||
|
- name: Ensure remote wheel building is disabled in developer mode
|
||||||
|
set_fact:
|
||||||
|
venv_build_host: "{{ ansible_hostname }}"
|
||||||
|
when:
|
||||||
|
- placement_developer_mode | bool
|
||||||
|
|
||||||
|
- name: Install the python venv
|
||||||
|
include_role:
|
||||||
|
name: "python_venv_build"
|
||||||
|
private: yes
|
||||||
|
vars:
|
||||||
|
venv_install_destination_path: "{{ placement_bin | dirname }}"
|
||||||
|
venv_install_distro_package_list: "{{ placement_distro_packages }}"
|
||||||
|
venv_pip_install_args: "{{ placement_pip_install_args }}"
|
||||||
|
venv_pip_packages: "{{ placement_pip_packages }}"
|
||||||
|
venv_facts_when_changed:
|
||||||
|
- section: "placement"
|
||||||
|
option: "need_service_restart"
|
||||||
|
value: True
|
||||||
|
- section: "placement"
|
||||||
|
option: "venv_tag"
|
||||||
|
value: "{{ placement_venv_tag }}"
|
|
@ -0,0 +1,29 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
- name: Copy placement configs
|
||||||
|
config_template:
|
||||||
|
src: "{{ item.src }}"
|
||||||
|
dest: "{{ item.dest }}"
|
||||||
|
owner: "root"
|
||||||
|
group: "{{ item.group|default(placement_system_group_name) }}"
|
||||||
|
mode: "0640"
|
||||||
|
config_overrides: "{{ item.config_overrides }}"
|
||||||
|
config_type: "{{ item.config_type }}"
|
||||||
|
with_items:
|
||||||
|
- src: "placement.conf.j2"
|
||||||
|
dest: "/etc/placement/placement.conf"
|
||||||
|
config_overrides: "{{ placement_placement_conf_overrides }}"
|
||||||
|
config_type: "ini"
|
|
@ -0,0 +1,50 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
- name: create the system group
|
||||||
|
group:
|
||||||
|
name: "{{ placement_system_group_name }}"
|
||||||
|
gid: "{{ placement_system_group_gid|default(omit) }}"
|
||||||
|
state: "present"
|
||||||
|
system: "yes"
|
||||||
|
|
||||||
|
- name: Create the placement system user
|
||||||
|
user:
|
||||||
|
name: "{{ placement_system_user_name }}"
|
||||||
|
uid: "{{ placement_system_user_uid|default(omit) }}"
|
||||||
|
group: "{{ placement_system_group_name }}"
|
||||||
|
comment: "{{ placement_system_comment }}"
|
||||||
|
shell: "{{ placement_system_shell }}"
|
||||||
|
system: "yes"
|
||||||
|
createhome: "yes"
|
||||||
|
home: "{{ placement_system_user_home }}"
|
||||||
|
|
||||||
|
- name: Create placement dir
|
||||||
|
file:
|
||||||
|
path: "{{ item.path }}"
|
||||||
|
state: directory
|
||||||
|
owner: "{{ item.owner|default(placement_system_user_name) }}"
|
||||||
|
group: "{{ item.group|default(placement_system_group_name) }}"
|
||||||
|
mode: "{{ item.mode|default('0755') }}"
|
||||||
|
with_items:
|
||||||
|
- path: "/openstack"
|
||||||
|
mode: "0755"
|
||||||
|
owner: "root"
|
||||||
|
group: "root"
|
||||||
|
- path: "/etc/placement"
|
||||||
|
mode: "0700"
|
||||||
|
- path: "{{ placement_system_user_home }}"
|
||||||
|
- path: "/var/log/placement"
|
||||||
|
mode: "0755"
|
|
@ -0,0 +1,93 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
# We set the python interpreter to the ansible runtime venv if
|
||||||
|
# the delegation is to localhost so that we get access to the
|
||||||
|
# appropriate python libraries in that venv. If the delegation
|
||||||
|
# is to another host, we assume that it is accessible by the
|
||||||
|
# system python instead.
|
||||||
|
#
|
||||||
|
- name: Setup the service
|
||||||
|
delegate_to: "{{ placement_service_setup_host }}"
|
||||||
|
vars:
|
||||||
|
ansible_python_interpreter: "{{ placement_service_setup_host_python_interpreter }}"
|
||||||
|
block:
|
||||||
|
- name: Add services to the keystone service catalog
|
||||||
|
os_keystone_service:
|
||||||
|
cloud: default
|
||||||
|
state: present
|
||||||
|
name: "{{ placement_service_name }}"
|
||||||
|
service_type: "{{ placement_service_type }}"
|
||||||
|
description: "{{ placement_service_description }}"
|
||||||
|
endpoint_type: admin
|
||||||
|
verify: "{{ not keystone_service_adminuri_insecure }}"
|
||||||
|
register: add_service
|
||||||
|
until: add_service is success
|
||||||
|
retries: 5
|
||||||
|
delay: 10
|
||||||
|
|
||||||
|
- name: Add service user
|
||||||
|
os_user:
|
||||||
|
cloud: default
|
||||||
|
state: present
|
||||||
|
name: "{{ placement_service_user_name }}"
|
||||||
|
password: "{{ placement_service_password }}"
|
||||||
|
domain: default
|
||||||
|
default_project: "{{ placement_service_project_name }}"
|
||||||
|
endpoint_type: admin
|
||||||
|
verify: "{{ not keystone_service_adminuri_insecure }}"
|
||||||
|
register: add_service
|
||||||
|
when: not placement_service_in_ldap | bool
|
||||||
|
until: add_service is success
|
||||||
|
retries: 5
|
||||||
|
delay: 10
|
||||||
|
no_log: True
|
||||||
|
|
||||||
|
- name: Add service user to admin role
|
||||||
|
os_user_role:
|
||||||
|
cloud: default
|
||||||
|
state: present
|
||||||
|
user: "{{ placement_service_user_name }}"
|
||||||
|
role: "{{ placement_role_name }}"
|
||||||
|
project: "{{ placement_service_project_name }}"
|
||||||
|
endpoint_type: admin
|
||||||
|
verify: "{{ not keystone_service_adminuri_insecure }}"
|
||||||
|
register: add_service
|
||||||
|
when: not placement_service_in_ldap | bool
|
||||||
|
until: add_service is success
|
||||||
|
retries: 5
|
||||||
|
delay: 10
|
||||||
|
|
||||||
|
- name: Add endpoints to keystone endpoint catalog
|
||||||
|
os_keystone_endpoint:
|
||||||
|
cloud: default
|
||||||
|
state: present
|
||||||
|
service: "{{ placement_service_name }}"
|
||||||
|
endpoint_interface: "{{ item.interface }}"
|
||||||
|
url: "{{ item.url }}"
|
||||||
|
region: "{{ placement_service_region }}"
|
||||||
|
endpoint_type: admin
|
||||||
|
verify: "{{ not keystone_service_adminuri_insecure }}"
|
||||||
|
register: add_service
|
||||||
|
until: add_service is success
|
||||||
|
retries: 5
|
||||||
|
delay: 10
|
||||||
|
with_items:
|
||||||
|
- interface: "public"
|
||||||
|
url: "{{ placement_service_publicurl }}"
|
||||||
|
- interface: "internal"
|
||||||
|
url: "{{ placement_service_internalurl }}"
|
||||||
|
- interface: "admin"
|
||||||
|
url: "{{ placement_service_adminurl }}"
|
|
@ -0,0 +1,27 @@
|
||||||
|
# {{ ansible_managed }}
|
||||||
|
[uwsgi]
|
||||||
|
uid = {{ placement_system_user_name }}
|
||||||
|
gid = {{ placement_system_group_name }}
|
||||||
|
|
||||||
|
{% if placement_install_method == 'source' %}
|
||||||
|
virtualenv = /openstack/venvs/placement-{{ placement_venv_tag }}
|
||||||
|
{% endif %}
|
||||||
|
wsgi-file = {{ placement_bin }}/{{ item.wsgi_name }}
|
||||||
|
http = {{ item.uwsgi_bind_address }}:{{ item.uwsgi_port }}
|
||||||
|
|
||||||
|
master = true
|
||||||
|
enable-threads = true
|
||||||
|
processes = {{ placement_wsgi_processes }}
|
||||||
|
threads = {{ placement_wsgi_threads }}
|
||||||
|
exit-on-reload = false
|
||||||
|
die-on-term = true
|
||||||
|
lazy-apps = true
|
||||||
|
add-header = Connection: close
|
||||||
|
buffer-size = {{ placement_wsgi_buffer_size }}
|
||||||
|
thunder-lock = true
|
||||||
|
logfile-chmod = 644
|
||||||
|
pidfile = /var/run/{{ item.service_name }}/{{ item.service_name }}.pid
|
||||||
|
|
||||||
|
# Avoid filling up the logs with health check requests from haproxy.
|
||||||
|
route-user-agent = ^osa-haproxy-healthcheck$ donotlog:
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
# {{ ansible_managed }}
|
||||||
|
|
||||||
|
[DEFAULT]
|
||||||
|
log_dir = /var/log/placement
|
||||||
|
|
||||||
|
[keystone_authtoken]
|
||||||
|
auth_type = {{ placement_keystone_auth_type }}
|
||||||
|
insecure = {{ keystone_service_internaluri_insecure | bool }}
|
||||||
|
auth_url = {{ keystone_service_adminuri }}
|
||||||
|
www_authenticate_uri = {{ keystone_service_publicuri }}
|
||||||
|
project_domain_id = {{ placement_service_project_domain_id }}
|
||||||
|
user_domain_id = {{ placement_service_user_domain_id }}
|
||||||
|
project_name = {{ placement_service_project_name }}
|
||||||
|
username = {{ placement_service_user_name }}
|
||||||
|
password = {{ placement_service_password }}
|
||||||
|
region_name = {{ keystone_service_region }}
|
||||||
|
memcached_servers = {{ memcached_servers }}
|
||||||
|
memcache_security_strategy = ENCRYPT
|
||||||
|
memcache_secret_key = {{ memcached_encryption_key }}
|
||||||
|
|
||||||
|
[placement_database]
|
||||||
|
connection = mysql+pymysql://{{ placement_galera_user }}:{{ placement_galera_password }}@{{ placement_galera_address }}/{{ placement_galera_database }}?charset=utf8{% if placement_galera_use_ssl | bool %}&ssl_ca={{ placement_galera_ssl_ca_cert }}{% endif %}
|
|
@ -0,0 +1,61 @@
|
||||||
|
---
|
||||||
|
- name: apt_package_pinning
|
||||||
|
src: https://git.openstack.org/openstack/openstack-ansible-apt_package_pinning
|
||||||
|
scm: git
|
||||||
|
version: master
|
||||||
|
- name: pip_install
|
||||||
|
src: https://git.openstack.org/openstack/openstack-ansible-pip_install
|
||||||
|
scm: git
|
||||||
|
version: master
|
||||||
|
- name: openstack_hosts
|
||||||
|
src: https://git.openstack.org/openstack/openstack-ansible-openstack_hosts
|
||||||
|
scm: git
|
||||||
|
version: master
|
||||||
|
- name: lxc_hosts
|
||||||
|
src: https://git.openstack.org/openstack/openstack-ansible-lxc_hosts
|
||||||
|
scm: git
|
||||||
|
version: master
|
||||||
|
- name: lxc_container_create
|
||||||
|
src: https://git.openstack.org/openstack/openstack-ansible-lxc_container_create
|
||||||
|
scm: git
|
||||||
|
version: master
|
||||||
|
- name: galera_client
|
||||||
|
src: https://git.openstack.org/openstack/openstack-ansible-galera_client
|
||||||
|
scm: git
|
||||||
|
version: master
|
||||||
|
- name: galera_server
|
||||||
|
src: https://git.openstack.org/openstack/openstack-ansible-galera_server
|
||||||
|
scm: git
|
||||||
|
version: master
|
||||||
|
- name: memcached_server
|
||||||
|
src: https://git.openstack.org/openstack/openstack-ansible-memcached_server
|
||||||
|
scm: git
|
||||||
|
version: master
|
||||||
|
- name: rabbitmq_server
|
||||||
|
src: https://git.openstack.org/openstack/openstack-ansible-rabbitmq_server
|
||||||
|
scm: git
|
||||||
|
version: master
|
||||||
|
- name: os_keystone
|
||||||
|
src: https://git.openstack.org/openstack/openstack-ansible-os_keystone
|
||||||
|
scm: git
|
||||||
|
version: master
|
||||||
|
- name: openstack_openrc
|
||||||
|
src: https://git.openstack.org/openstack/openstack-ansible-openstack_openrc
|
||||||
|
scm: git
|
||||||
|
version: master
|
||||||
|
- name: os_tempest
|
||||||
|
src: https://git.openstack.org/openstack/openstack-ansible-os_tempest
|
||||||
|
scm: git
|
||||||
|
version: master
|
||||||
|
- name: systemd_service
|
||||||
|
src: https://git.openstack.org/openstack/ansible-role-systemd_service
|
||||||
|
scm: git
|
||||||
|
version: master
|
||||||
|
- name: systemd_mount
|
||||||
|
src: https://git.openstack.org/openstack/ansible-role-systemd_mount
|
||||||
|
scm: git
|
||||||
|
version: master
|
||||||
|
- name: python_venv_build
|
||||||
|
src: https://git.openstack.org/openstack/ansible-role-python_venv_build
|
||||||
|
scm: git
|
||||||
|
version: master
|
|
@ -0,0 +1,35 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
container_networks:
|
||||||
|
management_address:
|
||||||
|
address: "{{ ansible_host }}"
|
||||||
|
bridge: "br-mgmt"
|
||||||
|
interface: "eth1"
|
||||||
|
netmask: "255.255.252.0"
|
||||||
|
type: "veth"
|
||||||
|
physical_host: localhost
|
||||||
|
properties:
|
||||||
|
service_name: "{{ inventory_hostname }}"
|
||||||
|
|
||||||
|
# NOTE(cloudnull): The lxc-openstack AA profile for is used to ensure general
|
||||||
|
# container functionality typical to the integrated build.
|
||||||
|
lxc2_container_config_list:
|
||||||
|
- 'lxc.aa_profile=lxc-openstack'
|
||||||
|
|
||||||
|
lxc3_container_config_list:
|
||||||
|
- 'lxc.apparmor.profile=lxc-openstack'
|
||||||
|
|
||||||
|
lxc_container_config_list: "{{ lookup('pipe', 'lxc-info --version || echo 2.0.0') is version_compare('3.0.0', 'lt') | ternary(lxc2_container_config_list, lxc3_container_config_list) }}"
|
|
@ -0,0 +1,19 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
ansible_host: 10.1.0.2
|
||||||
|
ansible_become: True
|
||||||
|
ansible_user: root
|
||||||
|
container_name: infra1
|
|
@ -0,0 +1,18 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
bridges:
|
||||||
|
- name: "br-mgmt"
|
||||||
|
ip_addr: "10.1.0.1"
|
|
@ -0,0 +1,19 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
ansible_host: 10.1.0.3
|
||||||
|
ansible_become: True
|
||||||
|
ansible_user: root
|
||||||
|
container_name: openstack1
|
|
@ -0,0 +1,36 @@
|
||||||
|
[all]
|
||||||
|
localhost
|
||||||
|
infra1
|
||||||
|
openstack1
|
||||||
|
|
||||||
|
[all_containers]
|
||||||
|
infra1
|
||||||
|
openstack1
|
||||||
|
|
||||||
|
[oslomsg_rpc_all]
|
||||||
|
infra1
|
||||||
|
|
||||||
|
[oslomsg_notify_all]
|
||||||
|
infra1
|
||||||
|
|
||||||
|
[rabbitmq_all]
|
||||||
|
infra1
|
||||||
|
|
||||||
|
[galera_all]
|
||||||
|
infra1
|
||||||
|
|
||||||
|
[service_all:children]
|
||||||
|
rabbitmq_all
|
||||||
|
galera_all
|
||||||
|
|
||||||
|
[keystone_all]
|
||||||
|
openstack1
|
||||||
|
|
||||||
|
[utility_all]
|
||||||
|
openstack1
|
||||||
|
|
||||||
|
[placement_all:children]
|
||||||
|
placement_api
|
||||||
|
|
||||||
|
[placement_api]
|
||||||
|
openstack1
|
|
@ -0,0 +1,21 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
placement_galera_password: secret
|
||||||
|
placement_service_password: secret
|
||||||
|
placement_developer_mode: true
|
||||||
|
placement_service_publicurl: "{{ placement_service_proto }}://{{ hostvars[groups['placement_api'][0]]['ansible_host'] }}:{{ placement_service_port }}"
|
||||||
|
placement_service_internalurl: "{{ placement_service_publicurl }}"
|
||||||
|
placement_service_adminurl: "{{ placement_service_publicurl }}"
|
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
- name: Install placement
|
||||||
|
hosts: placement_all
|
||||||
|
remote_user: root
|
||||||
|
gather_facts: true
|
||||||
|
any_errors_fatal: true
|
||||||
|
vars_files:
|
||||||
|
- common/test-vars.yml
|
||||||
|
roles:
|
||||||
|
- role: "os_placement"
|
|
@ -0,0 +1,45 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
- hosts: localhost
|
||||||
|
gather_facts: false
|
||||||
|
tasks:
|
||||||
|
- name: Get authentication token
|
||||||
|
os_auth:
|
||||||
|
cloud: default
|
||||||
|
|
||||||
|
- name: Set facts for placement URL
|
||||||
|
set_fact:
|
||||||
|
placement_token: "{{ auth_token }}"
|
||||||
|
placement_url: "{{ service_catalog | json_query('[?name==`placement`].endpoints | [0][?interface==`public`].url | [0]') }}"
|
||||||
|
|
||||||
|
- name: Run simple placement request
|
||||||
|
register: placement_request
|
||||||
|
uri:
|
||||||
|
url: "{{ placement_url }}/resource_providers"
|
||||||
|
headers:
|
||||||
|
X-Auth-Token: "{{ placement_token }}"
|
||||||
|
|
||||||
|
- name: Log the HTTP request
|
||||||
|
debug:
|
||||||
|
var: placement_request
|
||||||
|
|
||||||
|
- name: Assert response is valid
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- placement_request.status == 200
|
||||||
|
- placement_request.json.resource_providers == []
|
||||||
|
vars:
|
||||||
|
ansible_python_interpreter: "{{ ansible_playbook_python }}"
|
|
@ -0,0 +1,29 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
# Setup the host
|
||||||
|
- import_playbook: common/test-setup-host.yml
|
||||||
|
|
||||||
|
# Install RabbitMQ/MariaDB
|
||||||
|
- import_playbook: common/test-install-infra.yml
|
||||||
|
|
||||||
|
# Install Keystone
|
||||||
|
- import_playbook: common/test-install-keystone.yml
|
||||||
|
|
||||||
|
# Install Placement
|
||||||
|
- import_playbook: test-install-placement.yml
|
||||||
|
|
||||||
|
# Test Placement
|
||||||
|
- import_playbook: test-placement-functional.yml
|
11
tox.ini
11
tox.ini
|
@ -95,3 +95,14 @@ commands =
|
||||||
{[testenv:bashate]commands}
|
{[testenv:bashate]commands}
|
||||||
{[testenv:ansible-lint]commands}
|
{[testenv:ansible-lint]commands}
|
||||||
{[testenv:ansible-syntax]commands}
|
{[testenv:ansible-syntax]commands}
|
||||||
|
|
||||||
|
[testenv:functional]
|
||||||
|
commands =
|
||||||
|
bash -c "{toxinidir}/tests/common/test-ansible-functional.sh"
|
||||||
|
|
||||||
|
[testenv:distro_install]
|
||||||
|
setenv =
|
||||||
|
{[testenv]setenv}
|
||||||
|
ANSIBLE_PARAMETERS=-e @{toxinidir}/tests/common/test-distro_install-vars.yml
|
||||||
|
commands =
|
||||||
|
bash -c "{toxinidir}/tests/common/test-ansible-functional.sh"
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
placement_package_list: |-
|
||||||
|
{% set packages = (placement_distro_packages + placement_service_distro_packages) %}
|
||||||
|
{{ packages }}
|
||||||
|
|
||||||
|
_placement_bin: "/usr/bin"
|
||||||
|
placement_uwsgi_bin: '/usr/sbin'
|
|
@ -0,0 +1,31 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
|
||||||
|
# Compile a list of the services on a host based on whether
|
||||||
|
# the host is in the host group and the service is enabled.
|
||||||
|
# The service list is provided in the defined start order.
|
||||||
|
|
||||||
|
filtered_placement_services: |-
|
||||||
|
{% set services = [] %}
|
||||||
|
{% for key, value in placement_services.items() %}
|
||||||
|
{% if (value['group'] in group_names) and
|
||||||
|
(('condition' not in value) or
|
||||||
|
('condition' in value and value['condition'])) %}
|
||||||
|
{% set _ = value.update({'service_key': key}) %}
|
||||||
|
{% set _ = services.append(value) %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{{ services | sort(attribute='start_order') }}
|
|
@ -0,0 +1,19 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
placement_distro_packages: []
|
||||||
|
|
||||||
|
placement_service_distro_packages:
|
||||||
|
- openstack-placement-api
|
|
@ -0,0 +1,21 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
placement_package_list: |-
|
||||||
|
{% set packages = placement_distro_packages %}
|
||||||
|
{{ packages }}
|
||||||
|
|
||||||
|
_placement_bin: "/openstack/venvs/placement-{{ placement_venv_tag }}/bin"
|
||||||
|
placement_uwsgi_bin: "{{ _placement_bin }}"
|
|
@ -0,0 +1,18 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
placement_distro_packages: []
|
||||||
|
|
||||||
|
placement_service_distro_packages: []
|
|
@ -0,0 +1,23 @@
|
||||||
|
---
|
||||||
|
# Copyright 2019, 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.
|
||||||
|
|
||||||
|
|
||||||
|
## APT Cache options
|
||||||
|
cache_timeout: 600
|
||||||
|
|
||||||
|
# Common apt packages
|
||||||
|
placement_distro_packages: []
|
||||||
|
|
||||||
|
placement_service_distro_packages: []
|
|
@ -15,5 +15,7 @@
|
||||||
- project:
|
- project:
|
||||||
templates:
|
templates:
|
||||||
- check-requirements
|
- check-requirements
|
||||||
|
- openstack-ansible-role-jobs
|
||||||
|
- openstack-ansible-role-distro_install-jobs
|
||||||
- publish-openstack-docs-pti
|
- publish-openstack-docs-pti
|
||||||
- release-notes-jobs-python3
|
- release-notes-jobs-python3
|
||||||
|
|
Loading…
Reference in New Issue