Changed way we handle global properties (from /etc/kolla/globals.yml to

/usr/share/kolla/ansible/group_vars/__GLOBAL).

Jira-Issue: OPENSTACK-742
This commit is contained in:
Borne Mace 2016-03-14 13:13:24 -07:00
parent 9298bd1969
commit 2ed4290add
6 changed files with 25 additions and 28 deletions

View File

@ -106,10 +106,11 @@ DEFAULT_OVERRIDES = {
# these groups cannot be deleted, they are required by kolla # these groups cannot be deleted, they are required by kolla
PROTECTED_GROUPS = [COMPUTE_GRP_NAME] PROTECTED_GROUPS = [COMPUTE_GRP_NAME]
LOG = logging.getLogger(__name__)
class Host(object): class Host(object):
class_version = 1 class_version = 1
log = logging.getLogger(__name__)
def __init__(self, hostname): def __init__(self, hostname):
self.name = hostname self.name = hostname
@ -257,8 +258,6 @@ class SubService(object):
class Inventory(object): class Inventory(object):
class_version = 2 class_version = 2
log = logging.getLogger(__name__)
"""class version history """class version history
1: initial release 1: initial release
@ -482,11 +481,11 @@ class Inventory(object):
u._('Not all hosts were set up. : {reasons}') u._('Not all hosts were set up. : {reasons}')
.format(reasons=summary)) .format(reasons=summary))
else: else:
self.log.info(u._LI('All hosts were successfully set up.')) LOG.info(u._LI('All hosts were successfully set up.'))
def setup_host(self, hostname, password, uname=None): def setup_host(self, hostname, password, uname=None):
try: try:
self.log.info( LOG.info(
u._LI('Starting setup of host ({host}).') u._LI('Starting setup of host ({host}).')
.format(host=hostname)) .format(host=hostname))
ssh_setup_host(hostname, password, uname) ssh_setup_host(hostname, password, uname)
@ -494,8 +493,8 @@ class Inventory(object):
if not check_ok: if not check_ok:
raise Exception(u._('Post-setup ssh check failed. {err}') raise Exception(u._('Post-setup ssh check failed. {err}')
.format(err=msg)) .format(err=msg))
self.log.info(u._LI('Host ({host}) setup succeeded.') LOG.info(u._LI('Host ({host}) setup succeeded.')
.format(host=hostname)) .format(host=hostname))
except Exception as e: except Exception as e:
raise CommandError( raise CommandError(
u._('Host ({host}) setup failed : {error}') u._('Host ({host}) setup failed : {error}')
@ -576,7 +575,7 @@ class Inventory(object):
subservice.remove_groupname(groupname) subservice.remove_groupname(groupname)
group_vars = os.path.join(get_group_vars_dir(), groupname) group_vars = os.path.join(get_group_vars_dir(), groupname)
if os.path.exists(group_vars) and groupname != '__RESERVED__': if os.path.exists(group_vars) and groupname != '__GLOBAL__':
os.remove(group_vars) os.remove(group_vars)
if groupname in self._groups: if groupname in self._groups:
@ -822,7 +821,7 @@ class Inventory(object):
# temporarily create group containing all hosts. this is needed for # temporarily create group containing all hosts. this is needed for
# ansible commands that are performed on hosts not yet in groups. # ansible commands that are performed on hosts not yet in groups.
group = self.add_group('__RESERVED__') group = self.add_group('__GLOBAL__')
jdict[group.name] = {} jdict[group.name] = {}
jdict[group.name]['hosts'] = deploy_hostnames jdict[group.name]['hosts'] = deploy_hostnames
jdict[group.name]['vars'] = group.get_vars() jdict[group.name]['vars'] = group.get_vars()

View File

@ -22,7 +22,6 @@ from kollacli.common.inventory import Inventory
from kollacli.common.utils import change_property from kollacli.common.utils import change_property
from kollacli.common.utils import get_group_vars_dir from kollacli.common.utils import get_group_vars_dir
from kollacli.common.utils import get_host_vars_dir from kollacli.common.utils import get_host_vars_dir
from kollacli.common.utils import get_kolla_etc
from kollacli.common.utils import get_kolla_home from kollacli.common.utils import get_kolla_home
from kollacli.common.utils import sync_read_file from kollacli.common.utils import sync_read_file
from kollacli.exceptions import CommandError from kollacli.exceptions import CommandError
@ -30,7 +29,7 @@ from kollacli.exceptions import CommandError
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
ALLVARS_PATH = 'ansible/group_vars/all.yml' ALLVARS_PATH = 'ansible/group_vars/all.yml'
GLOBALS_FILENAME = 'globals.yml' GLOBALS_PATH = 'ansible/group_vars/__GLOBAL__'
ANSIBLE_ROLES_PATH = 'ansible/roles' ANSIBLE_ROLES_PATH = 'ansible/roles'
ANSIBLE_DEFAULTS_PATH = 'defaults/main.yml' ANSIBLE_DEFAULTS_PATH = 'defaults/main.yml'
@ -41,11 +40,14 @@ class AnsibleProperties(object):
load_hosts=True): load_hosts=True):
"""initialize ansible property information """initialize ansible property information
property information is pulled from the following files: property information is pulled from the following files
KOLLA_ETC/globals.yml (from lowest to highest priority):
KOLLA_ETC/passwords.yml
KOLLA_HOME/group_vars/all.yml
KOLLA_HOME/ansible/roles/<service>/default/main.yml KOLLA_HOME/ansible/roles/<service>/default/main.yml
KOLLA_HOME/ansible/group_vars/all.yml
KOLLA_HOME/ansible/group_vars/__GLOBAL__
KOLLA_HOME/ansible/group_vars/*
KOLLA_HOME/ansible/host_vars/*
KOLLA_ETC/passwords.yml
""" """
self.globals_path = '' self.globals_path = ''
self.global_props = [] self.global_props = []
@ -93,7 +95,7 @@ class AnsibleProperties(object):
self.unique_global_props[key] = ansible_prop self.unique_global_props[key] = ansible_prop
def _load_properties_global(self): def _load_properties_global(self):
self.globals_path = os.path.join(get_kolla_etc(), GLOBALS_FILENAME) self.globals_path = os.path.join(get_kolla_home(), GLOBALS_PATH)
globals_data = sync_read_file(self.globals_path) globals_data = sync_read_file(self.globals_path)
globals_contents = yaml.safe_load(globals_data) globals_contents = yaml.safe_load(globals_data)
for key, value in globals_contents.items(): for key, value in globals_contents.items():
@ -105,7 +107,7 @@ class AnsibleProperties(object):
override_flags.ovr_global = True override_flags.ovr_global = True
orig_value = self.unique_global_props[key].value orig_value = self.unique_global_props[key].value
ansible_prop = AnsibleProperty(key, value, ansible_prop = AnsibleProperty(key, value,
GLOBALS_FILENAME, 'group_vars/__GLOBAL',
overrides, orig_value) overrides, orig_value)
ansible_prop.override_flags = override_flags ansible_prop.override_flags = override_flags
self.global_props.append(ansible_prop) self.global_props.append(ansible_prop)
@ -145,8 +147,8 @@ class AnsibleProperties(object):
if (groupfile == 'all.yml'): if (groupfile == 'all.yml'):
continue continue
self.group_props[groupfile] = [] self.group_props[groupfile] = []
# don't load __RESERVED__ as a group property list as it is globals # don't load __GLOBAL__ as a group property list as it is globals
if groupfile == '__RESERVED__': if groupfile == '__GLOBAL__':
continue continue
with open(os.path.join(group_dir, groupfile)) as group_data: with open(os.path.join(group_dir, groupfile)) as group_data:
group_contents = yaml.safe_load(group_data) group_contents = yaml.safe_load(group_data)

View File

@ -47,7 +47,6 @@ def dump():
kolla_docs = os.path.join(kolla_home, 'docs') kolla_docs = os.path.join(kolla_home, 'docs')
kolla_etc = get_kolla_etc() kolla_etc = get_kolla_etc()
kolla_config = os.path.join(kolla_etc, 'config') kolla_config = os.path.join(kolla_etc, 'config')
kolla_globals = os.path.join(kolla_etc, 'globals.yml')
kollacli_etc = get_kollacli_etc().rstrip('/') kollacli_etc = get_kollacli_etc().rstrip('/')
ketc = 'kolla/etc/' ketc = 'kolla/etc/'
kshare = 'kolla/share/' kshare = 'kolla/share/'
@ -66,8 +65,6 @@ def dump():
# file is accessible by the kolla user only (not kolla group) # file is accessible by the kolla user only (not kolla group)
tar.add(kolla_config, tar.add(kolla_config,
arcname=ketc + os.path.basename(kolla_config)) arcname=ketc + os.path.basename(kolla_config))
tar.add(kolla_globals,
arcname=ketc + os.path.basename(kolla_globals))
tar.add(kollacli_etc, tar.add(kollacli_etc,
arcname=ketc + os.path.basename(kollacli_etc)) arcname=ketc + os.path.basename(kollacli_etc))

View File

@ -269,7 +269,7 @@ def safe_decode(text):
"""Convert bytes or string to unicode string""" """Convert bytes or string to unicode string"""
try: try:
text = text.decode('utf-8') text = text.decode('utf-8')
except AttributeError: except AttributeError: # nosec
# py3 will raise if text is already a string # py3 will raise if text is already a string
pass pass
return text return text

View File

@ -20,7 +20,6 @@ import unittest
from kollacli.common.utils import get_group_vars_dir from kollacli.common.utils import get_group_vars_dir
from kollacli.common.utils import get_host_vars_dir from kollacli.common.utils import get_host_vars_dir
from kollacli.common.utils import get_kolla_etc
from kollacli.common.utils import get_kolla_home from kollacli.common.utils import get_kolla_home
from kollacli.common.inventory import Inventory from kollacli.common.inventory import Inventory
@ -29,7 +28,7 @@ from kollacli.common.inventory import Inventory
class TestFunctional(KollaCliTest): class TestFunctional(KollaCliTest):
def test_properties(self): def test_properties(self):
# test globals.yml properties # test global properties
self._properties_test() self._properties_test()
# test single group vars # test single group vars
@ -146,7 +145,8 @@ class TestFunctional(KollaCliTest):
sizes[path] = [os.path.getsize(path)] sizes[path] = [os.path.getsize(path)]
if not switch: if not switch:
self.run_cli_cmd('property clear %s' % key) self.run_cli_cmd('property clear %s' % key)
path = os.path.join(get_kolla_etc(), 'globals.yml') path = os.path.join(get_kolla_home(),
'ansible/group_vars/__GLOBAL__')
sizes[path] = [os.path.getsize(path)] sizes[path] = [os.path.getsize(path)]
# test append # test append
@ -211,7 +211,7 @@ class TestFunctional(KollaCliTest):
prop['Property Value'] == value): prop['Property Value'] == value):
ok = True ok = True
if not ok: if not ok:
error_msg = '%s:%s is missing in globals.yml' error_msg = '%s:%s is missing in __GLOBAL__'
else: else:
target_map = {} target_map = {}
for target in targets: for target in targets:

View File

@ -46,7 +46,6 @@ class TestFunctional(KollaCliTest):
def test_dump(self): def test_dump(self):
check_files = [ check_files = [
'var/log/kolla/kolla.log', 'var/log/kolla/kolla.log',
'kolla/etc/globals.yml',
'kolla/etc/config/nova/nova-api.conf', 'kolla/etc/config/nova/nova-api.conf',
'kolla/etc/kollacli/ansible/inventory.json', 'kolla/etc/kollacli/ansible/inventory.json',
'kolla/share/ansible/site.yml', 'kolla/share/ansible/site.yml',