From 232e62762eca2257d9e359e15cb3508c82c0c38d Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Mon, 10 Oct 2016 21:03:12 -0400 Subject: [PATCH] Split out hosts config deployment This patch moves the hosts configuration into its own deployment. It will continue to use os-apply-config as something that is required early on in the bootstrapping (it needs to be configured before puppet runs for example). The motivation here is so we can refactor all-nodes-config.yaml to use a new hiera hook that that avoids os-apply-config entirely. Change-Id: Ib3e4380f205358b27d22a1102b663cf300b1ed86 Partial-bug: #1596373 (cherry picked from commit 9f8944111c280de877326471899be23caca9bb94) --- hosts-config.yaml | 30 ++++++++++++++++++++++ overcloud-resource-registry-puppet.j2.yaml | 1 + overcloud.j2.yaml | 30 +++++++++++++++++----- puppet/all-nodes-config.yaml | 12 --------- 4 files changed, 54 insertions(+), 19 deletions(-) create mode 100644 hosts-config.yaml diff --git a/hosts-config.yaml b/hosts-config.yaml new file mode 100644 index 0000000000..df0addfd61 --- /dev/null +++ b/hosts-config.yaml @@ -0,0 +1,30 @@ +heat_template_version: 2016-10-14 +description: 'All Hosts Config' + +parameters: + hosts: + type: comma_delimited_list + +resources: + + hostsConfigImpl: + type: OS::Heat::StructuredConfig + properties: + group: os-apply-config + config: + hosts: + list_join: + - "\n" + - {get_param: hosts} + +outputs: + config_id: + description: The ID of the hostsConfigImpl resource. + value: + {get_resource: hostsConfigImpl} + hosts_entries: + description: | + The content that should be appended to your /etc/hosts if you want to get + hostname-based access to the deployed nodes (useful for testing without + setting up a DNS). + value: {get_attr: [hostsConfigImpl, config, hosts]} diff --git a/overcloud-resource-registry-puppet.j2.yaml b/overcloud-resource-registry-puppet.j2.yaml index 65cc9e337c..93734eb4f9 100644 --- a/overcloud-resource-registry-puppet.j2.yaml +++ b/overcloud-resource-registry-puppet.j2.yaml @@ -3,6 +3,7 @@ resource_registry: OS::TripleO::SoftwareDeployment: OS::Heat::StructuredDeployment OS::TripleO::PostDeploySteps: puppet/post.yaml OS::TripleO::AllNodes::SoftwareConfig: puppet/all-nodes-config.yaml + OS::TripleO::Hosts::SoftwareConfig: hosts-config.yaml OS::TripleO::DefaultPasswords: default_passwords.yaml # Tasks (for internal TripleO usage) diff --git a/overcloud.j2.yaml b/overcloud.j2.yaml index db1a78bfed..7e1f496c35 100644 --- a/overcloud.j2.yaml +++ b/overcloud.j2.yaml @@ -214,8 +214,16 @@ resources: EndpointMap: {get_attr: [EndpointMap, endpoint_map]} DefaultPasswords: {get_attr: [DefaultPasswords, passwords]} + {{role.name}}HostsDeployment: + type: OS::Heat::StructuredDeployments + properties: + name: {{role.name}}HostsDeployment + config: {get_attr: [hostsConfig, config_id]} + servers: {get_attr: [{{role.name}}, attributes, nova_server_resource]} + {{role.name}}AllNodesDeployment: type: OS::Heat::StructuredDeployments + depends_on: {{role.name}}HostsDeployment properties: name: {{role.name}}AllNodesDeployment config: {get_attr: [allNodesConfig, config_id]} @@ -303,6 +311,16 @@ resources: MonitoringSubscriptions: {get_attr: [{{role.name}}ServiceChain, role_data, monitoring_subscriptions]} {% endfor %} + hostsConfig: + type: OS::TripleO::Hosts::SoftwareConfig + properties: + hosts: +{% for role in roles %} + - list_join: + - '\n' + - {get_attr: [{{role.name}}, hosts_entry]} +{% endfor %} + allNodesConfig: type: OS::TripleO::AllNodes::SoftwareConfig properties: @@ -311,12 +329,6 @@ resources: cloud_name_storage: {get_param: CloudNameStorage} cloud_name_storage_mgmt: {get_param: CloudNameStorageManagement} cloud_name_ctlplane: {get_param: CloudNameCtlplane} - hosts: -{% for role in roles %} - - list_join: - - '\n' - - {get_attr: [{{role.name}}, hosts_entry]} -{% endfor %} enabled_services: list_join: - ',' @@ -517,6 +529,10 @@ resources: # Post deployment steps for all roles AllNodesDeploySteps: type: OS::TripleO::PostDeploySteps +{% for role in roles %} + depends_on: + - {{role.name}}AllNodesDeployment +{% endfor %} properties: servers: {% for role in roles %} @@ -599,7 +615,7 @@ outputs: value: list_join: - "\n" - - - {get_attr: [allNodesConfig, hosts_entries]} + - - {get_attr: [hostsConfig, hosts_entries]} - - str_replace: template: IP HOST diff --git a/puppet/all-nodes-config.yaml b/puppet/all-nodes-config.yaml index 27648de6da..ba0064517e 100644 --- a/puppet/all-nodes-config.yaml +++ b/puppet/all-nodes-config.yaml @@ -12,8 +12,6 @@ parameters: type: string cloud_name_ctlplane: type: string - hosts: - type: comma_delimited_list # FIXME(shardy) this can be comma_delimited_list when # https://bugs.launchpad.net/heat/+bug/1617019 is fixed enabled_services: @@ -66,10 +64,6 @@ resources: properties: group: os-apply-config config: - hosts: - list_join: - - "\n" - - {get_param: hosts} hiera: datafiles: bootstrap_node: @@ -205,9 +199,3 @@ outputs: description: The ID of the allNodesConfigImpl resource. value: {get_resource: allNodesConfigImpl} - hosts_entries: - description: | - The content that should be appended to your /etc/hosts if you want to get - hostname-based access to the deployed nodes (useful for testing without - setting up a DNS). - value: {get_attr: [allNodesConfigImpl, config, hosts]}