Merge "Don't run yum_update.sh inside docker"
[apex-tripleo-heat-templates.git] / puppet / controller-role.yaml
index 3fc691a..9e35af5 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   OpenStack controller node configured by Puppet.
@@ -106,11 +106,20 @@ parameters:
     description: >
       The DNS domain used for the hosts. This should match the dhcp_domain
       configured in the Undercloud neutron. Defaults to localdomain.
+  ControllerServerMetadata:
+    default: {}
+    description: >
+      Extra properties or metadata passed to Nova for the created nodes in
+      the overcloud. It's accessible via the Nova metadata API. This option is
+      role-specific and is merged with the values given to the ServerMetadata
+      parameter.
+    type: json
   ServerMetadata:
     default: {}
     description: >
       Extra properties or metadata passed to Nova for the created nodes in
-      the overcloud. It's accessible via the Nova metadata API.
+      the overcloud. It's accessible via the Nova metadata API. This applies to
+      all roles and is merged with a role-specific metadata parameter.
     type: json
   ControllerSchedulerHints:
     type: json
@@ -125,10 +134,19 @@ parameters:
   MonitoringSubscriptions:
     type: comma_delimited_list
     default: []
+  ServiceMetadataSettings:
+    type: json
+    default: {}
   ConfigCommand:
     type: string
     description: Command which will be run whenever configuration data changes
     default: os-refresh-config --timeout 14400
+  UpgradeInitCommand:
+    type: string
+    description: |
+      Command or script snippet to run on all overcloud nodes to
+      initialize the upgrade process. E.g. a repository switch.
+    default: ''
 
 parameter_groups:
 - label: deprecated
@@ -157,7 +175,11 @@ resources:
             template: {get_param: Hostname}
             params: {get_param: HostnameMap}
       software_config_transport: {get_param: SoftwareConfigTransport}
-      metadata: {get_param: ServerMetadata}
+      metadata:
+        map_merge:
+          - {get_param: ServerMetadata}
+          - {get_param: ControllerServerMetadata}
+          - {get_param: ServiceMetadataSettings}
       scheduler_hints: {get_param: ControllerSchedulerHints}
 
   # Combine the NodeAdminUserData and NodeUserData mime archives
@@ -169,6 +191,8 @@ resources:
         type: multipart
       - config: {get_resource: NodeUserData}
         type: multipart
+      - config: {get_resource: RoleUserData}
+        type: multipart
 
   # Creates the "heat-admin" user if configured via the environment
   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
@@ -180,6 +204,11 @@ resources:
   NodeUserData:
     type: OS::TripleO::NodeUserData
 
+  # For optional operator role-specific userdata
+  # Should return a OS::Heat::MultipartMime reference via OS::stack_id
+  RoleUserData:
+    type: OS::TripleO::Controller::NodeUserData
+
   ExternalPort:
     type: OS::TripleO::Controller::Ports::ExternalPort
     properties:
@@ -245,6 +274,101 @@ resources:
       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
 
+  NetHostMap:
+    type: OS::Heat::Value
+    properties:
+      type: json
+      value:
+        external:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - external
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - external
+        internal_api:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - internalapi
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - internalapi
+        storage:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - storage
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - storage
+        storage_mgmt:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - storagemgmt
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - storagemgmt
+        tenant:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - tenant
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - tenant
+        management:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - management
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - management
+        ctlplane:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - ctlplane
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - ctlplane
+
+  PreNetworkConfig:
+    type: OS::TripleO::Controller::PreNetworkConfig
+    properties:
+      server: {get_resource: Controller}
+
   NetworkConfig:
     type: OS::TripleO::Controller::Net::SoftwareConfig
     properties:
@@ -258,6 +382,7 @@ resources:
 
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
+    depends_on: PreNetworkConfig
     properties:
       name: NetworkDeployment
       config: {get_resource: NetworkConfig}
@@ -282,10 +407,30 @@ resources:
       server: {get_resource: Controller}
       NodeIndex: {get_param: NodeIndex}
 
+  ControllerUpgradeInitConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config:
+        list_join:
+        - ''
+        - - "#!/bin/bash\n\n"
+          - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
+          - get_param: UpgradeInitCommand
+
+  # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
+  # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
+  ControllerUpgradeInitDeployment:
+    type: OS::Heat::SoftwareDeployment
+    depends_on: NetworkDeployment
+    properties:
+      name: ControllerUpgradeInitDeployment
+      server: {get_resource: Controller}
+      config: {get_resource: ControllerUpgradeInitConfig}
 
   ControllerDeployment:
     type: OS::TripleO::SoftwareDeployment
-    depends_on: NetworkDeployment
+    depends_on: ControllerUpgradeInitDeployment
     properties:
       name: ControllerDeployment
       config: {get_resource: ControllerConfig}
@@ -299,57 +444,57 @@ resources:
   ControllerConfig:
     type: OS::Heat::StructuredConfig
     properties:
-      group: os-apply-config
+      group: hiera
       config:
-        hiera:
-          hierarchy:
-            - '"%{::uuid}"'
-            - heat_config_%{::deploy_config_name}
-            - controller_extraconfig
-            - extraconfig
-            - service_configs
-            - service_names
-            - controller
-            - bootstrap_node # provided by BootstrapNodeConfig
-            - all_nodes # provided by allNodesConfig
-            - vip_data # provided by allNodesConfig
-            - '"%{::osfamily}"'
-            - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
-            - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
-            - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
-            - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
-            - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
-            - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
-            - midonet_data #Optionally provided by AllNodesExtraConfig
-            - cisco_aci_data # Optionally provided by ControllerExtraConfigPre
-          merge_behavior: deeper
-          datafiles:
-            service_names:
-              mapped_data:
-                service_names: {get_param: ServiceNames}
-                sensu::subscriptions: {get_param: MonitoringSubscriptions}
-            service_configs:
-              mapped_data:
-                map_replace:
-                  - {get_param: ServiceConfigSettings}
-                  - values: {get_attr: [NetIpMap, net_ip_map]}
-            controller_extraconfig:
-              mapped_data:
-                map_merge:
-                  - {get_param: controllerExtraConfig}
-                  - {get_param: ControllerExtraConfig}
-            extraconfig:
-              mapped_data: {get_param: ExtraConfig}
-            controller:
-              mapped_data: # data supplied directly to this deployment configuration, etc
-                bootstack_nodeid: {get_input: bootstack_nodeid}
-
-                # Pacemaker
-                enable_load_balancer: {get_input: enable_load_balancer}
-
-                # Misc
-                tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
-                tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
+        hierarchy:
+          - '"%{::uuid}"'
+          - heat_config_%{::deploy_config_name}
+          - controller_extraconfig
+          extraconfig
+          - service_configs
+          - service_names
+          - controller
+          - bootstrap_node # provided by BootstrapNodeConfig
+          - all_nodes # provided by allNodesConfig
+          - vip_data # provided by allNodesConfig
+          - '"%{::osfamily}"'
+          - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
+          - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
+          - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
+          - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
+          - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
+          - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
+          - midonet_data #Optionally provided by AllNodesExtraConfig
+          - cisco_aci_data # Optionally provided by ControllerExtraConfigPre
+        merge_behavior: deeper
+        datafiles:
+          service_names:
+            service_names: {get_param: ServiceNames}
+            sensu::subscriptions: {get_param: MonitoringSubscriptions}
+          service_configs:
+            map_replace:
+              - {get_param: ServiceConfigSettings}
+              - values: {get_attr: [NetIpMap, net_ip_map]}
+          controller_extraconfig:
+            map_merge:
+              - {get_param: controllerExtraConfig}
+              - {get_param: ControllerExtraConfig}
+          extraconfig: {get_param: ExtraConfig}
+          controller:
+            # data supplied directly to this deployment configuration, etc
+            bootstack_nodeid: {get_input: bootstack_nodeid}
+            # Pacemaker
+            enable_load_balancer: {get_input: enable_load_balancer}
+
+            # Misc
+            tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
+            tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
+            fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
+            fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
+            fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
+            fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
+            fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
+            fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
 
   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
   ControllerExtraConfigPre:
@@ -407,48 +552,13 @@ outputs:
   hostname_map:
     description: Mapping of network names to hostnames
     value:
-      external:
-        list_join:
-        - '.'
-        - - {get_attr: [Controller, name]}
-          - external
-          - {get_param: CloudDomain}
-      internal_api:
-        list_join:
-        - '.'
-        - - {get_attr: [Controller, name]}
-          - internalapi
-          - {get_param: CloudDomain}
-      storage:
-        list_join:
-        - '.'
-        - - {get_attr: [Controller, name]}
-          - storage
-          - {get_param: CloudDomain}
-      storage_mgmt:
-        list_join:
-        - '.'
-        - - {get_attr: [Controller, name]}
-          - storagemgmt
-          - {get_param: CloudDomain}
-      tenant:
-        list_join:
-        - '.'
-        - - {get_attr: [Controller, name]}
-          - tenant
-          - {get_param: CloudDomain}
-      management:
-        list_join:
-        - '.'
-        - - {get_attr: [Controller, name]}
-          - management
-          - {get_param: CloudDomain}
-      ctlplane:
-        list_join:
-        - '.'
-        - - {get_attr: [Controller, name]}
-          - ctlplane
-          - {get_param: CloudDomain}
+      external: {get_attr: [NetHostMap, value, external, fqdn]}
+      internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
+      storage: {get_attr: [NetHostMap, value, storage, fqdn]}
+      storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
+      tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
+      management: {get_attr: [NetHostMap, value, management, fqdn]}
+      ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
   hosts_entry:
     description: >
       Server's IP address and hostname in the /etc/hosts format
@@ -468,47 +578,19 @@ outputs:
           DOMAIN: {get_param: CloudDomain}
           PRIMARYHOST: {get_attr: [Controller, name]}
           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
-          EXTERNALHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [Controller, name]}
-              - external
+          EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
-          INTERNAL_APIHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [Controller, name]}
-              - internalapi
+          INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
           STORAGEIP: {get_attr: [StoragePort, ip_address]}
-          STORAGEHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [Controller, name]}
-              - storage
+          STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
-          STORAGE_MGMTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [Controller, name]}
-              - storagemgmt
+          STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
           TENANTIP: {get_attr: [TenantPort, ip_address]}
-          TENANTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [Controller, name]}
-              - tenant
+          TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
-          MANAGEMENTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [Controller, name]}
-              - management
+          MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
           CTLPLANEIP: {get_attr: [Controller, networks, ctlplane, 0]}
-          CTLPLANEHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [Controller, name]}
-              - ctlplane
+          CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
   nova_server_resource:
     description: Heat resource handle for the Nova compute server
     value: