Split out hosts config deployment
authorDan Prince <dprince@redhat.com>
Tue, 11 Oct 2016 01:03:12 +0000 (21:03 -0400)
committerDan Prince <dprince@redhat.com>
Thu, 13 Oct 2016 18:15:54 +0000 (14:15 -0400)
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

hosts-config.yaml [new file with mode: 0644]
overcloud-resource-registry-puppet.j2.yaml
overcloud.j2.yaml
puppet/all-nodes-config.yaml

diff --git a/hosts-config.yaml b/hosts-config.yaml
new file mode 100644 (file)
index 0000000..df0addf
--- /dev/null
@@ -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]}
index c7f1510..1fb2812 100644 (file)
@@ -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)
index db1a78b..7e1f496 100644 (file)
@@ -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
index d64f70d..cc5e4ea 100644 (file)
@@ -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:
@@ -75,10 +73,6 @@ resources:
     properties:
       group: os-apply-config
       config:
-        hosts:
-          list_join:
-          - "\n"
-          - {get_param: hosts}
         hiera:
           datafiles:
             bootstrap_node:
@@ -217,9 +211,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]}