Skip to content
Snippets Groups Projects
Commit 4acbf528 authored by Mark Goddard's avatar Mark Goddard
Browse files

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.
parent 02aca934
No related branches found
No related tags found
No related merge requests found
......@@ -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) }}"
......
---
# 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:
......
......@@ -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:
......
......@@ -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
......
......@@ -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.
......
---
# 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:
......
......@@ -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"
......
===========================
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.
====================== ================================================== ============================
......@@ -25,6 +25,7 @@ Documentation
usage
configuration/kayobe
configuration/network
configuration/kolla-ansible
deployment
upgrading
administration
......
......@@ -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:
......
......@@ -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):
......
......@@ -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",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment