Untangle configuration of kolla and kolla-ansible

Kolla (container images) and kolla-ansible (container deployment) are
separate concerns, and should be treated as such. Configuration
variables have been added for kolla-ansible which were previously shared
between the two projects:

kolla_venv -> kolla_ansible_venv
kolla_ctl_install_type -> kolla_ansible_ctl_install_type

Also, we introduce specific variables for the source code repository
checkout paths, which were previously both based on
source_checkout_path:

kolla_source_path
kolla_ansible_source_path

These changes help us to cleanly separate the configuration of paths on
the local (Ansible control) host, from those on the managed (target)
hosts. This is important because the local paths may be specific to the
environment in which the user is running kayobe, but the remote paths
are relatively fixed and specific to the cluster.
This commit is contained in:
Mark Goddard 2017-09-15 10:40:13 +01:00
parent 02aca93440
commit 4acbf52867
12 changed files with 105 additions and 45 deletions

View File

@ -5,6 +5,9 @@
# Type of Kolla control installation. One of 'binary' or 'source'.
kolla_ctl_install_type: source
# Path to directory for kolla source code checkout.
kolla_source_path: "{{ source_checkout_path ~ '/kolla' }}"
# URL of Kolla source code repository if type is 'source'.
kolla_source_url: "https://github.com/stackhpc/kolla"
@ -12,6 +15,18 @@ kolla_source_url: "https://github.com/stackhpc/kolla"
# 'source'.
kolla_source_version: "stackhpc-{{ kolla_openstack_release }}"
# Path to virtualenv in which to install kolla.
kolla_venv: "{{ virtualenv_path ~ '/kolla' }}"
###############################################################################
# Kolla-ansible installation.
# Type of Kolla-ansible control installation. One of 'binary' or 'source'.
kolla_ansible_ctl_install_type: source
# Path to directory for kolla-ansible source code checkout.
kolla_ansible_source_path: "{{ lookup('env', 'KOLLA_SOURCE_PATH') | default(lookup('env', 'PWD') ~ '/src/kolla-ansible', true) }}"
# URL of Kolla Ansible source code repository if type is 'source'.
kolla_ansible_source_url: "https://github.com/stackhpc/kolla-ansible"
@ -19,11 +34,11 @@ kolla_ansible_source_url: "https://github.com/stackhpc/kolla-ansible"
# is 'source'.
kolla_ansible_source_version: "stackhpc-{{ kolla_openstack_release }}"
# Path to virtualenv in which to install kolla.
kolla_venv: "{{ virtualenv_path ~ '/kolla' }}"
# Path to virtualenv in which to install kolla-ansible.
kolla_ansible_venv: "{{ lookup('env', 'KOLLA_VENV_PATH') | default(lookup('env', 'PWD') ~ '/venvs/kolla-ansible', true) }}"
###############################################################################
# Kolla configuration.
# Kolla & kolla-ansible configuration.
# Path to Kolla configuration directory.
kolla_config_path: "{{ lookup('env', 'KOLLA_CONFIG_PATH') | default('/etc/kolla', true) }}"

View File

@ -1,9 +1,9 @@
---
# Path to directory for source code checkouts.
source_checkout_path:
# Path to directory for kolla-ansible source code checkout.
kolla_ansible_source_path:
# Type of Kolla control installation. One of 'binary' or 'source'.
kolla_ctl_install_type:
# Type of Kolla-ansible control installation. One of 'binary' or 'source'.
kolla_ansible_ctl_install_type:
# URL of Kolla Ansible source code repository if type is 'source'.
kolla_ansible_source_url:
@ -13,7 +13,7 @@ kolla_ansible_source_url:
kolla_ansible_source_version:
# Virtualenv directory where Kolla-ansible will be installed.
kolla_venv: "{{ ansible_env['PWD'] }}/kolla-venv"
kolla_ansible_venv: "{{ ansible_env['PWD'] }}/kolla-venv"
# Password to use to encrypt the passwords.yml file.
kolla_ansible_vault_password:

View File

@ -41,7 +41,7 @@
sample: "{{ kolla_ansible_install_dir }}/etc_examples/kolla/passwords.yml"
overrides: "{{ kolla_ansible_custom_passwords }}"
vault_password: "{{ kolla_ansible_vault_password }}"
virtualenv: "{{ kolla_venv or omit }}"
virtualenv: "{{ kolla_ansible_venv or omit }}"
- name: Ensure the Kolla passwords file is copied into place
copy:

View File

@ -16,27 +16,27 @@
become: True
with_items: "{{ kolla_ansible_package_dependencies }}"
- name: Ensure source code checkout path exists
- name: Ensure source code checkout parent directory exists
file:
path: "{{ source_checkout_path }}"
path: "{{ kolla_ansible_source_path | dirname }}"
state: directory
owner: "{{ ansible_user }}"
group: "{{ ansible_user }}"
become: True
when: "{{ kolla_ctl_install_type == 'source' }}"
when: "{{ kolla_ansible_ctl_install_type == 'source' }}"
- name: Ensure Kolla Ansible source code checkout exists
git:
repo: "{{ kolla_ansible_source_url }}"
dest: "{{ source_checkout_path }}/kolla-ansible"
dest: "{{ kolla_ansible_source_path }}"
version: "{{ kolla_ansible_source_version }}"
when: "{{ kolla_ctl_install_type == 'source' }}"
when: "{{ kolla_ansible_ctl_install_type == 'source' }}"
- name: Ensure the latest version of pip is installed
pip:
name: "{{ item.name }}"
state: latest
virtualenv: "{{ kolla_venv }}"
virtualenv: "{{ kolla_ansible_venv }}"
with_items:
- { name: pip }
@ -45,15 +45,15 @@
name: "{{ item.name }}"
version: "{{ item.version | default(omit) }}"
state: present
virtualenv: "{{ kolla_venv }}"
virtualenv: "{{ kolla_ansible_venv }}"
with_items:
# Intall Kolla Ansible from source.
- name: "{{ source_checkout_path }}/kolla-ansible"
install: "{{ kolla_ctl_install_type == 'source' }}"
- name: "{{ kolla_ansible_source_path }}"
install: "{{ kolla_ansible_ctl_install_type == 'source' }}"
# Intall Kolla Ansible from PyPI.
- name: "kolla-ansible"
version: "{{ kolla_openstack_release }}"
install: "{{ kolla_ctl_install_type == 'binary' }}"
install: "{{ kolla_ansible_ctl_install_type == 'binary' }}"
# On CentOS 7.3 Jinja2==2.7, but kolla-ansible requires 2.8. Install
# Ansible to ensure we pull in and use a later Jinja2.
- name: "ansible"
@ -70,7 +70,7 @@
- name: Ensure selinux Python package is linked into the virtualenv
file:
src: "/usr/lib64/python2.7/site-packages/selinux"
dest: "{{ kolla_venv }}/lib/python2.7/site-packages/selinux"
dest: "{{ kolla_ansible_venv }}/lib/python2.7/site-packages/selinux"
state: link
when:
- ansible_selinux != False

View File

@ -6,7 +6,7 @@ kolla_ansible_is_standalone: "{{ kolla_ansible_source_version | version_compare(
kolla_ansible_module: "{% if kolla_ansible_is_standalone | bool %}kolla-ansible{% else %}kolla{% endif %}"
# Path to Kolla Ansible installation directory.
kolla_ansible_install_dir: "{{ kolla_venv }}/share/{{ kolla_ansible_module }}"
kolla_ansible_install_dir: "{{ kolla_ansible_venv }}/share/{{ kolla_ansible_module }}"
###############################################################################
# Inventory configuration.

View File

@ -1,6 +1,6 @@
---
# Path to directory for source code checkouts.
source_checkout_path:
# Path to directory for kolla source code checkout.
kolla_source_path:
# Type of Kolla control installation. One of 'binary' or 'source'.
kolla_ctl_install_type:

View File

@ -20,7 +20,7 @@
- name: Ensure source code checkout path exists
file:
path: "{{ source_checkout_path }}"
path: "{{ kolla_source_path | dirname }}"
state: directory
owner: "{{ ansible_user }}"
group: "{{ ansible_user }}"
@ -30,7 +30,7 @@
- name: Ensure Kolla source code checkout exists
git:
repo: "{{ kolla_source_url }}"
dest: "{{ source_checkout_path }}/kolla"
dest: "{{ kolla_source_path }}"
version: "{{ kolla_source_version }}"
when: "{{ kolla_ctl_install_type == 'source' }}"
@ -50,7 +50,7 @@
virtualenv: "{{ kolla_venv }}"
with_items:
# Intall Kolla from source.
- name: "{{ source_checkout_path }}/kolla"
- name: "{{ kolla_source_path }}"
install: "{{ kolla_ctl_install_type == 'source' }}"
# Intall Kolla from PyPI.
- name: "kolla"

View File

@ -0,0 +1,27 @@
===========================
Kolla-ansible Configuration
===========================
Kayobe relies heavily on kolla-ansible for deployment of the OpenStack control
plane. Kolla-ansible is installed locally on the ansible control host (the host
from which kayobe commands are executed), and kolla-ansible commands are
executed from there.
Local Environment
=================
Environment variables are used to configure the environment in which
kolla-ansible is installed and executed.
.. table:: Kolla-ansible environment variables
====================== ================================================== ============================
Variable Purpose Default
====================== ================================================== ============================
``$KOLLA_CONFIG_PATH`` Path on the ansible control host in which ``/etc/kolla``
the kolla-ansible configuration will be generated.
``$KOLLA_SOURCE_PATH`` Path on the ansible control host in which ``$PWD/src/kolla-ansible``
the kolla-ansible source code will be cloned.
``$KOLLA_VENV_PATH`` Path on the ansible control host in which ``$PWD/venvs/kolla-ansible``
the kolla-ansible virtualenv will be created.
====================== ================================================== ============================

View File

@ -25,6 +25,7 @@ Documentation
usage
configuration/kayobe
configuration/network
configuration/kolla-ansible
deployment
upgrading
administration

View File

@ -7,6 +7,9 @@
# Type of Kolla control installation. One of 'binary' or 'source'.
#kolla_ctl_install_type:
# Path to directory for kolla source code checkout.
#kolla_source_path:
# URL of Kolla source code repository if type is 'source'.
#kolla_source_url:
@ -14,6 +17,18 @@
# 'source'.
#kolla_source_version:
# Path to virtualenv in which to install kolla.
#kolla_venv:
###############################################################################
# Kolla-ansible installation.
# Type of Kolla-ansible control installation. One of 'binary' or 'source'.
#kolla_ansible_ctl_install_type:
# Path to directory for kolla-ansible source code checkout.
#kolla_ansible_source_path:
# URL of Kolla Ansible source code repository if type is 'source'.
#kolla_ansible_source_url:
@ -21,12 +36,18 @@
# is 'source'.
#kolla_ansible_source_version:
# Path to virtualenv in which to install kolla-ansible.
#kolla_ansible_venv:
###############################################################################
# Kolla configuration.
# Kolla & kolla-ansible configuration.
# Path to Kolla configuration directory.
#kolla_config_path:
# Path to Kolla node custom configuration directory.
#kolla_node_custom_config_path:
# Kolla base container image distribution.
#kolla_base_distro:

View File

@ -25,24 +25,20 @@ DEFAULT_CONFIG_PATH = "/etc/kolla"
CONFIG_PATH_ENV = "KOLLA_CONFIG_PATH"
DEFAULT_BASE_PATH = "/opt/kayobe"
DEFAULT_VENV_PATH = "venvs/kolla-ansible"
BASE_PATH_ENV = "KAYOBE_BASE_PATH"
DEFAULT_VENV_PATH = "venvs/kolla"
VENV_PATH_ENV = "KOLLA_VENV"
VENV_PATH_ENV = "KOLLA_VENV_PATH"
LOG = logging.getLogger(__name__)
def add_args(parser):
"""Add arguments required for running Kolla Ansible to a parser."""
# $KOLLA_CONFIG_PATH or /etc/kolla.
default_config_path = os.getenv(CONFIG_PATH_ENV, DEFAULT_CONFIG_PATH)
# $KOLLA_VENV_PATH or $PWD/venvs/kolla-ansible
default_venv = os.getenv(VENV_PATH_ENV,
os.path.join(os.getenv(BASE_PATH_ENV,
DEFAULT_BASE_PATH),
DEFAULT_VENV_PATH))
os.path.join(os.getcwd(), DEFAULT_VENV_PATH))
parser.add_argument("--kolla-config-path", default=default_config_path,
help="path to Kolla configuration. "
"(default=$%s or %s)" %
@ -64,9 +60,8 @@ def add_args(parser):
"values in Kolla Ansible")
parser.add_argument("--kolla-venv", metavar="VENV", default=default_venv,
help="path to virtualenv where Kolla Ansible is "
"installed (default=$%s or $%s/%s, or %s/%s)" %
(VENV_PATH_ENV, BASE_PATH_ENV, DEFAULT_VENV_PATH,
DEFAULT_BASE_PATH, DEFAULT_VENV_PATH))
"installed (default=$%s or $PWD/%s)" %
(VENV_PATH_ENV, DEFAULT_VENV_PATH))
def _get_inventory_path(parsed_args, inventory_filename):

View File

@ -24,6 +24,7 @@ from kayobe import utils
from kayobe import vault
@mock.patch.object(os, "getcwd", new=lambda: "/path/to/cwd")
class TestCase(unittest.TestCase):
@mock.patch.object(utils, "run_command")
@ -35,7 +36,7 @@ class TestCase(unittest.TestCase):
parsed_args = parser.parse_args([])
kolla_ansible.run(parsed_args, "command", "overcloud")
expected_cmd = [
".", "/opt/kayobe/venvs/kolla/bin/activate", "&&",
".", "/path/to/cwd/venvs/kolla-ansible/bin/activate", "&&",
"kolla-ansible", "command",
"--inventory", "/etc/kolla/inventory/overcloud",
]
@ -58,7 +59,7 @@ class TestCase(unittest.TestCase):
parsed_args = parser.parse_args(args)
kolla_ansible.run(parsed_args, "command", "overcloud")
expected_cmd = [
".", "/opt/kayobe/venvs/kolla/bin/activate", "&&",
".", "/path/to/cwd/venvs/kolla-ansible/bin/activate", "&&",
"kolla-ansible", "command",
"--inventory", "/path/to/inventory",
"--configdir", "/path/to/config",
@ -87,7 +88,7 @@ class TestCase(unittest.TestCase):
parsed_args = parser.parse_args(args)
kolla_ansible.run(parsed_args, "command", "overcloud")
expected_cmd = [
".", "/opt/kayobe/venvs/kolla/bin/activate", "&&",
".", "/path/to/cwd/venvs/kolla-ansible/bin/activate", "&&",
"kolla-ansible", "command",
"--inventory", "/path/to/inventory",
"--configdir", "/path/to/config",
@ -111,7 +112,7 @@ class TestCase(unittest.TestCase):
parsed_args = parser.parse_args(args)
kolla_ansible.run(parsed_args, "command", "overcloud")
expected_cmd = [
".", "/opt/kayobe/venvs/kolla/bin/activate", "&&",
".", "/path/to/cwd/venvs/kolla-ansible/bin/activate", "&&",
"kolla-ansible", "command",
"--key", "/path/to/vault/pw",
"--inventory", "/etc/kolla/inventory/overcloud",
@ -134,7 +135,7 @@ class TestCase(unittest.TestCase):
parsed_args = parser.parse_args([])
kolla_ansible.run(parsed_args, "command", "overcloud")
expected_cmd = [
".", "/opt/kayobe/venvs/kolla/bin/activate", "&&",
".", "/path/to/cwd/venvs/kolla-ansible/bin/activate", "&&",
"kolla-ansible", "command",
"--key", "/path/to/kayobe-vault-password-helper",
"--inventory", "/etc/kolla/inventory/overcloud",
@ -161,7 +162,7 @@ class TestCase(unittest.TestCase):
}
kolla_ansible.run(parsed_args, "command", "overcloud", **kwargs)
expected_cmd = [
".", "/opt/kayobe/venvs/kolla/bin/activate", "&&",
".", "/path/to/cwd/venvs/kolla-ansible/bin/activate", "&&",
"kolla-ansible", "command",
"-v",
"--inventory", "/etc/kolla/inventory/overcloud",