From ccb508799a03ae53541d7aca1f1168d7afef4ce3 Mon Sep 17 00:00:00 2001 From: Borne Mace Date: Fri, 1 Jun 2018 14:55:56 -0700 Subject: [PATCH] Add setup script for kolla-cli / kolla-ansible Created new cli-setup.py script that automates the previously manual process to create the directories needed for the kolla-cli and kolla-ansible. It also improves on the process by leaving the globals.yml file in place in /etc/kolla and just creating a link to the group_vars/__GLOBALS__ so that both the kolla-ansible and kolla-cli commands will work correctly, rather than having their functioning being mutually exclusive. Due to kolla-ansible still expecting to be run as root for most actions the cli_setup.py script should also be run via sudo. Change-Id: I5b59317b2c22d10dd82623a548b64f387b6bc9d3 --- README.rst | 23 +++++----- cli_setup.py | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+), 10 deletions(-) create mode 100755 cli_setup.py diff --git a/README.rst b/README.rst index c5e56ed..e3010a6 100644 --- a/README.rst +++ b/README.rst @@ -19,6 +19,18 @@ deployments and perform upgrades. Installing ========== +The installation process below assumes that the kolla-ansible repository +exists at the same level as the kolla-cli repository. This is made clear +in the cli-setup.py script which makes a relative '../' reference to +the kolla-ansible repository. If your kolla-ansible directory is somewhere +else then that location can be passed as an argument to the cli-setup.py +script. The location on the system where the kolla-cli expects the +kolla-ansible files to be and installs them to can be tweaked by setting +the KOLLA_HOME and KOLLA_ETC environment variables before running the +cli-setup.py script, and while running the kolla-cli command itself. The +default value for KOLLA_HOME is /usr/share/kolla-ansible and the default +value for KOLLA_ETC is /etc/kolla. + The following steps can be used to build / run the kolla-cli * install ansible and docker @@ -26,16 +38,7 @@ The following steps can be used to build / run the kolla-cli * . .venv/bin/activate * pip install -r requirements.txt * python setup.py install -* mkdir /usr/share/kolla-ansible -* cp -r kolla-ansible/ansible to /usr/share/kolla -* mkdir -p /etc/kolla/kolla-cli/ansible -* touch /etc/kolla/kolla-cli/ansible/inventory.json -* mkdir -p /usr/share/kolla-ansible/kolla-cli/tools -* mkdir /usr/share/kolla-ansible/kolla-cli/ansible -* touch /usr/share/kolla-ansible/kolla-cli/ansible.lock -* cp kolla-cli/tools /usr/share/kolla-ansible/kolla-cli/tools -* mkdir /usr/share/kolla-ansible/ansible/host_vars -* cp /etc/kolla/globals.yml /usr/share/kolla-ansible/ansible/group_vars/__GLOBAL__ +* python ./cli-setup.py * kolla-cli At that point you will be dropped into the kollacli shell where diff --git a/cli_setup.py b/cli_setup.py new file mode 100755 index 0000000..b68af15 --- /dev/null +++ b/cli_setup.py @@ -0,0 +1,120 @@ +# Copyright 2018 OpenStack Foundation +# All Rights Reserved. +# +# 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. +import os +import sys + +from kolla_cli.common import utils + +kolla_ansible_source_base = '../kolla-ansible' +kolla_ansible_home_target = utils.get_kolla_ansible_home() +kolla_ansible_etc_target = utils.get_kolla_etc() +ansible = 'ansible' +kolla = 'kolla' +kolla_cli = 'kolla-cli' +tools = 'tools' + + +def setup_ansible_etc(): + # if the kolla-cli directory for the inventory doesn't exist + # already then make it. this will also create the directory the + # globals and password file goes into + cli_etc_dir = os.path.join(kolla_ansible_etc_target, + kolla_cli, ansible) + if not os.path.exists(cli_etc_dir): + make_cli_etc_dir_cmd = ('mkdir -p %s' % cli_etc_dir) + _command_exec(make_cli_etc_dir_cmd) + + inventory_file_path = os.path.join(cli_etc_dir, 'inventory.json') + if not os.path.exists(inventory_file_path): + touch_inventory_file_cmd = ('touch %s' % inventory_file_path) + _command_exec(touch_inventory_file_cmd) + + # copy over all kolla ansible etc files + kolla_ansible_etc_source = os.path.join(kolla_ansible_source_base, + 'etc', kolla) + copy_kolla_etc_files_cmd = ('cp -a %s %s' % (kolla_ansible_etc_source, + kolla_ansible_etc_target)) + _command_exec(copy_kolla_etc_files_cmd) + + +def setup_ansible_home(): + # make cli home ansible directory + cli_ansible_dir = os.path.join(kolla_ansible_home_target, + kolla_cli, ansible) + if not os.path.exists(cli_ansible_dir): + make_cli_ansible_dir_cmd = ('mkdir -p %s' % cli_ansible_dir) + _command_exec(make_cli_ansible_dir_cmd) + + # make cli home tools directory + cli_tools_dir = os.path.join(kolla_ansible_home_target, + kolla_cli, tools) + if not os.path.exists(cli_tools_dir): + make_cli_tools_dir_cmd = ('mkdir -p %s' % cli_tools_dir) + _command_exec(make_cli_tools_dir_cmd) + + # move cli tools files to tools directory + copy_cli_tools_files_cmd = ('cp -a %s %s' % ('./tools/*', cli_tools_dir)) + _command_exec(copy_cli_tools_files_cmd) + + # create cli ansible lock file + lock_file_path = os.path.join(kolla_ansible_home_target, + kolla_cli, 'ansible.lock') + if not os.path.exists(lock_file_path): + touch_ansible_lock_file_cmd = ('touch %s' % lock_file_path) + _command_exec(touch_ansible_lock_file_cmd) + + # copy over all kolla ansible home files + kolla_ansible_home_source = os.path.join(kolla_ansible_source_base, + ansible) + copy_kolla_home_files_cmd = ('cp -a %s %s' % (kolla_ansible_home_source, + kolla_ansible_home_target)) + _command_exec(copy_kolla_home_files_cmd) + + # create the host_vars directory if it doesn't exist already + host_vars_path = os.path.join(kolla_ansible_home_target, + ansible, 'host_vars') + if not os.path.exists(host_vars_path): + make_kolla_host_vars_dir_cmd = ('mkdir %s' % host_vars_path) + _command_exec(make_kolla_host_vars_dir_cmd) + + # make link from etc globals to home globals + target_etc_path = os.path.join(kolla_ansible_etc_target, 'globals.yml') + target_home_link = os.path.join(kolla_ansible_home_target, + ansible, 'group_vars', '__GLOBAL__') + if not os.path.exists(target_home_link): + link_globals_file_cmd = ('ln -s %s %s' % (target_etc_path, + target_home_link)) + _command_exec(link_globals_file_cmd) + + +def _command_exec(command): + print('running - %s' % command) + error, _ = utils.run_cmd(command) + if error: + print('error - %s' % error) + + +def main(): + """make sure kolla-ansible and cli files are in the right places""" + + if len(sys.argv) >= 2: + global kolla_ansible_source_base + kolla_ansible_source_base = sys.argv[1] + + setup_ansible_etc() + setup_ansible_home() + +if __name__ == '__main__': + main()