diff --git a/docker/docker-steps.j2 b/docker/docker-steps.j2 index 2f5953d361..301d838f76 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 892da77c27..84c56b5b97 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 5bd6dcdd09..7c04954a8d 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']