Per-service deployment implementation

Changing per-repository deployment to
per-service

This change affects "ccp deploy" command:
now -c/--components argument takes services
names instead of repositories names

Change-Id: I236bb957a7b93e21ed05fec9b1cab2a27d87d5f4
This commit is contained in:
Andrey Pavlov 2016-08-18 17:21:45 +03:00
parent 5d3a9daf66
commit b160eb3f95
4 changed files with 46 additions and 34 deletions

View File

@ -6,9 +6,9 @@ from oslo_log import log as logging
from fuel_ccp import build
from fuel_ccp import cleanup
from fuel_ccp import dependencies
from fuel_ccp import deploy
from fuel_ccp import fetch
from fuel_ccp import show_dep
CONF = cfg.CONF
@ -43,7 +43,7 @@ def do_cleanup():
def do_show_dep():
if CONF.repositories.clone:
do_fetch()
show_dep.show_dep(CONF.action.components)
dependencies.show_dep(CONF.action.components)
def signal_handler(signo, frame):

View File

@ -52,3 +52,25 @@ def get_global_parameters(*config_groups):
LOG.debug("\"%s\" not found, skipping", path)
return cfg
def get_deploy_components_info():
components_map = {}
for component in CONF.repositories.names:
service_dir = os.path.join(CONF.repositories.path,
component,
'service')
if not os.path.isdir(service_dir):
continue
for service_file in os.listdir(service_dir):
if service_file.endswith('.yaml'):
LOG.debug("Parse service definition: %s", service_file)
with open(os.path.join(service_dir, service_file), "r") as f:
service_definition = yaml.load(f)
service_name = service_definition['service']['name']
components_map[service_name] = {
'service_dir': service_dir,
'service_content': service_definition
}
return components_map

View File

@ -12,13 +12,13 @@ Example:
ccp --config-file=~/ccp.conf show-dep nova-api nova-compute
"""
import os
import re
import sys
from oslo_config import cfg
from oslo_log import log as logging
import yaml
from fuel_ccp.common import utils
CONF = cfg.CONF
@ -51,30 +51,17 @@ class Node(object):
return self.sort == 'service'
def _get_deps_map():
def get_deps_map(components_map=None):
"""Returns dependencies map."""
components = CONF.repositories.names
component_map_list = []
for component in components:
service_dir = os.path.join(CONF.repositories.path,
component,
'service')
if not os.path.isdir(service_dir):
continue
for service_file in os.listdir(service_dir):
if YAML_FILE_RE.search(service_file):
LOG.debug("Parse role file: %s", service_file)
with open(os.path.join(service_dir, service_file), "r") as f:
component_map_list.append(yaml.load(f))
components_map = components_map or utils.get_deploy_components_info()
deps_map = {}
for service_map in component_map_list:
service_name = service_map['service']['name']
deps_map[service_name] = Node(service_name,
'service',
_parse_service_deps(service_map))
deps_map.update(_parse_pre_and_post_deps(service_map))
for service_name, service_map in components_map.items():
deps_map[service_name] = Node(
service_name, 'service', _parse_service_deps(
service_map['service_content']))
deps_map.update(_parse_pre_and_post_deps(
service_map['service_content']))
return deps_map
@ -135,8 +122,8 @@ def _calculate_service_deps(service_name, deps_map):
return deps, job_parents
def _get_deps(components):
deps_map = _get_deps_map()
def get_deps(components, components_map=None):
deps_map = get_deps_map(components_map)
result_deps = set()
for service_name in components:
@ -154,11 +141,11 @@ def _get_deps(components):
checked.update(job_parents - checked)
job_parents.update(parent_parents)
result_deps.update(deps)
result_deps.add('etcd')
result_deps.update(['etcd'])
return list(result_deps - set(components))
return result_deps - set(components)
def show_dep(components):
deps = _get_deps(components)
deps = get_deps(components)
print(" ".join(deps))

View File

@ -356,8 +356,9 @@ def _create_openrc(config, namespace):
def deploy_components(components=None):
if components is None:
components = CONF.repositories.names
components_map = utils.get_deploy_components_info()
components = set(components) if components else set(components_map.keys())
if CONF.action.export_dir:
os.makedirs(os.path.join(CONF.action.export_dir, 'configmaps'))
@ -372,7 +373,9 @@ def deploy_components(components=None):
_create_start_script_configmap()
for component in components:
deploy_component(component, config)
parse_role(components_map[component]['service_dir'],
components_map[component]['service_content'],
config)
if 'fuel-ccp-keystone' in components:
if 'keystone' in components:
_create_openrc(config['configs'], namespace)