From: Jiri Stransky Date: Thu, 9 Mar 2017 13:47:12 +0000 (+0100) Subject: Tasks hook for preparing BM host for deploying containerized services X-Git-Tag: opnfv-6.0.0~911^2 X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=commitdiff_plain;h=6050809e5741842714167276bd4d3b6b3414609e;p=apex-tripleo-heat-templates.git Tasks hook for preparing BM host for deploying containerized services This implements a host_prep_tasks hook where we can specify Ansible tasks to perform on the host before deploying containerized services. The hook runs in a single step, the assumption is that we will mostly use the hook for creating per-service directories on the host to ensure we are able to mount them into the containers. (We cannot do this operation via Puppet because all containerized services run their Puppet within a config container, so Puppet doesn't have access to host's filesystem.) Change-Id: I7d8bac39e0cd422fd651eefe29f7d10941ab4a1a --- diff --git a/docker/docker-steps.j2 b/docker/docker-steps.j2 index 2f5953d3..301d838f 100644 --- a/docker/docker-steps.j2 +++ b/docker/docker-steps.j2 @@ -123,6 +123,32 @@ resources: servers: {get_param: [servers, {{role.name}}]} config: {get_resource: {{role.name}}CreateConfigDir} + {{role.name}}HostPrepAnsible: + type: OS::Heat::Value + properties: + value: + str_replace: + template: CONFIG + params: + CONFIG: + - hosts: localhost + connection: local + tasks: {get_param: [role_data, {{role.name}}, host_prep_tasks]} + + {{role.name}}HostPrepConfig: + type: OS::Heat::SoftwareConfig + properties: + group: ansible + options: + modulepath: /usr/share/ansible-modules + config: {get_attr: [{{role.name}}HostPrepAnsible, value]} + + {{role.name}}HostPrepDeployment: + type: OS::Heat::SoftwareDeploymentGroup + properties: + servers: {get_param: [servers, {{role.name}}]} + config: {get_resource: {{role.name}}HostPrepConfig} + # this creates a JSON config file for our docker-puppet.py script {{role.name}}GenPuppetConfig: type: OS::Heat::StructuredConfig @@ -146,7 +172,7 @@ resources: {{role.name}}GenerateConfigDeployment: type: OS::Heat::SoftwareDeploymentGroup - depends_on: [{{role.name}}GenPuppetDeployment, {{role.name}}ArtifactsDeploy, {{role.name}}CreateConfigDirDeployment] + depends_on: [{{role.name}}GenPuppetDeployment, {{role.name}}ArtifactsDeploy, {{role.name}}CreateConfigDirDeployment, {{role.name}}HostPrepDeployment] properties: name: {{role.name}}GenerateConfigDeployment servers: {get_param: [servers, {{role.name}}]} diff --git a/docker/services/services.yaml b/docker/services/services.yaml index 892da77c..84c56b5b 100644 --- a/docker/services/services.yaml +++ b/docker/services/services.yaml @@ -74,6 +74,11 @@ outputs: {get_attr: [ServiceChain, role_data, docker_config]} docker_puppet_tasks: {get_attr: [ServiceChain, role_data, docker_puppet_tasks]} + host_prep_tasks: + yaql: + # Note we use distinct() here to filter any identical tasks + expression: $.data.where($ != null).select($.get('host_prep_tasks')).where($ != null).flatten().distinct() + data: {get_attr: [ServiceChain, role_data]} upgrade_tasks: yaql: # Note we use distinct() here to filter any identical tasks, e.g yum update for all services diff --git a/tools/yaml-validate.py b/tools/yaml-validate.py index 5bd6dcdd..7c04954a 100755 --- a/tools/yaml-validate.py +++ b/tools/yaml-validate.py @@ -26,7 +26,7 @@ ENDPOINT_MAP_FILE = 'endpoint_map.yaml' REQUIRED_DOCKER_SECTIONS = ['service_name', 'docker_config', 'kolla_config', 'puppet_config', 'config_settings', 'step_config'] OPTIONAL_DOCKER_SECTIONS = ['docker_puppet_tasks', 'upgrade_tasks', - 'service_config_settings'] + 'service_config_settings', 'host_prep_tasks'] DOCKER_PUPPET_CONFIG_SECTIONS = ['config_volume', 'puppet_tags', 'step_config', 'config_image']