diff options
author | Jiri Stransky <jistr@redhat.com> | 2017-03-09 14:47:12 +0100 |
---|---|---|
committer | Jiri Stransky <jistr@redhat.com> | 2017-03-13 11:01:06 +0100 |
commit | 6050809e5741842714167276bd4d3b6b3414609e (patch) | |
tree | b1e6cdf394f9332f5d3293b726f6d398cb47d702 | |
parent | 5fb25c2c4a633638731f5725ddf5b6a397aabbf8 (diff) |
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
-rw-r--r-- | docker/docker-steps.j2 | 28 | ||||
-rw-r--r-- | docker/services/services.yaml | 5 | ||||
-rwxr-xr-x | tools/yaml-validate.py | 2 |
3 files changed, 33 insertions, 2 deletions
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'] |