Wire in hieradata overrides via ExtraConfig for BlockStorage
[apex-tripleo-heat-templates.git] / puppet / compute-puppet.yaml
index d2cca8f..aa0d26a 100644 (file)
@@ -32,40 +32,8 @@ parameters:
   ExtraConfig:
     default: {}
     description: |
-      Additional configuration to inject into the cluster. The JSON should have
-      the following structure:
-        {"FILEKEY":
-          {"config":
-            [{"section": "SECTIONNAME",
-              "values":
-                [{"option": "OPTIONNAME",
-                  "value": "VALUENAME"
-                 }
-                ]
-             }
-            ]
-          }
-        }
-      For instance:
-        {"nova":
-          {"config":
-            [{"section": "default",
-              "values":
-                [{"option": "force_config_drive",
-                  "value": "always"
-                 }
-                ]
-             },
-             {"section": "cells",
-              "values":
-                [{"option": "driver",
-                  "value": "nova.cells.rpc_driver.CellsRPCDriver"
-                 }
-                ]
-             }
-            ]
-          }
-        }
+      Additional hiera configuration to inject into the cluster. Note
+      that NovaComputeExtraConfig takes precedence over ExtraConfig.
     type: json
   Flavor:
     description: Flavor for the nova compute node
@@ -132,7 +100,7 @@ parameters:
       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
       Neutron documentation for permitted values. Defaults to permitting any
       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
-    type: string
+    type: comma_delimited_list
   NeutronPassword:
     default: unset
     description: The password for the neutron service account, used by neutron agents.
@@ -152,6 +120,18 @@ parameters:
         The tunnel types for the Neutron tenant network. To specify multiple
         values, use a comma separated string, like so: 'gre,vxlan'
     default: 'gre'
+  NeutronTunnelIdRanges:
+    description: |
+        Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
+        of GRE tunnel IDs that are available for tenant network allocation
+    default: ["1:1000", ]
+    type: comma_delimited_list
+  NeutronVniRanges:
+    description: |
+        Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
+        of VXLAN VNI IDs that are available for tenant network allocation
+    default: ["1:1000", ]
+    type: comma_delimited_list
   NeutronPublicInterfaceRawDevice:
     default: ''
     type: string
@@ -252,6 +232,15 @@ parameters:
     description: Mapping of service_name -> network name. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  UpdateIdentifier:
+    default: ''
+    type: string
+    description: >
+      Setting to a previously unused value during stack-update will trigger
+      package update on all nodes
+  Hostname:
+    type: string
+    default: '' # Defaults to Heat created hostname
 
 resources:
 
@@ -268,6 +257,7 @@ resources:
         - network: ctlplane
       user_data_format: SOFTWARE_CONFIG
       user_data: {get_resource: NodeUserData}
+      name: {get_param: Hostname}
 
   NodeUserData:
     type: OS::TripleO::NodeUserData
@@ -304,7 +294,6 @@ resources:
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
     properties:
-      signal_transport: NO_SIGNAL
       config: {get_resource: NetworkConfig}
       server: {get_resource: NovaCompute}
       input_values:
@@ -319,6 +308,8 @@ resources:
         hiera:
           hierarchy:
             - heat_config_%{::deploy_config_name}
+            - compute_extraconfig
+            - extraconfig
             - compute
             - ceph_cluster # provided by CephClusterConfig
             - ceph
@@ -326,14 +317,16 @@ resources:
             - '"%{::osfamily}"'
             - common
           datafiles:
+            compute_extraconfig:
+              mapped_data: {get_param: NovaComputeExtraConfig}
+            extraconfig:
+              mapped_data: {get_param: ExtraConfig}
             common:
               raw_data: {get_file: hieradata/common.yaml}
             ceph:
               raw_data: {get_file: hieradata/ceph.yaml}
             compute:
               raw_data: {get_file: hieradata/compute.yaml}
-              oac_data:
-                nova::compute::vncserver_proxyclient_address: local-ipv4
               mapped_data:
                 nova::debug: {get_input: debug}
                 nova::rabbit_userid: {get_input: rabbit_username}
@@ -344,8 +337,9 @@ resources:
                 nova::compute::libvirt::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
                 nova_api_host: {get_input: nova_api_host}
                 nova::compute::vncproxy_host: {get_input: nova_public_ip}
-                nova_enable_rbd_backend: {get_input: nova_enable_rbd_backend}
+                nova::compute::rbd::ephemeral_storage: {get_input: nova_enable_rbd_backend}
                 nova_password: {get_input: nova_password}
+                nova::compute::vncserver_proxyclient_address: {get_input: nova_vnc_proxyclient_address}
                 ceilometer::debug: {get_input: debug}
                 ceilometer::rabbit_userid: {get_input: rabbit_username}
                 ceilometer::rabbit_password: {get_input: rabbit_password}
@@ -369,7 +363,9 @@ resources:
 
                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
-                neutron::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
+                neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
+                neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
+                neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
                 neutron_physical_bridge: {get_input: neutron_physical_bridge}
@@ -388,8 +384,8 @@ resources:
 
   NovaComputeDeployment:
     type: OS::TripleO::SoftwareDeployment
+    depends_on: NetworkDeployment
     properties:
-      signal_transport: NO_SIGNAL
       config: {get_resource: NovaComputeConfig}
       server: {get_resource: NovaCompute}
       input_values:
@@ -400,6 +396,7 @@ resources:
         nova_api_host: {get_param: NovaApiHost}
         nova_password: {get_param: NovaPassword}
         nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
+        nova_vnc_proxyclient_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaVncProxyNetwork]}]}
         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
         ceilometer_password: {get_param: CeilometerPassword}
         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
@@ -421,10 +418,33 @@ resources:
               - {get_param: GlancePort}
         neutron_flat_networks: {get_param: NeutronFlatNetworks}
         neutron_host: {get_param: NeutronHost}
-        neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronLocalIp]}]}
+        neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
         neutron_tenant_network_type: {get_param: NeutronNetworkType}
         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
-        neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
+        neutron_tunnel_id_ranges:
+          str_replace:
+            template: "['RANGES']"
+            params:
+              RANGES:
+                list_join:
+                - "','"
+                - {get_param: NeutronTunnelIdRanges}
+        neutron_vni_ranges:
+          str_replace:
+            template: "['RANGES']"
+            params:
+              RANGES:
+                list_join:
+                - "','"
+                - {get_param: NeutronVniRanges}
+        neutron_network_vlan_ranges:
+          str_replace:
+            template: "['RANGES']"
+            params:
+              RANGES:
+                list_join:
+                - "','"
+                - {get_param: NeutronNetworkVLANRanges}
         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
@@ -459,6 +479,18 @@ resources:
               server: {get_param: NtpServer}
         enable_package_install: {get_param: EnablePackageInstall}
 
+  UpdateConfig:
+    type: OS::TripleO::Tasks::PackageUpdate
+
+  UpdateDeployment:
+    type: OS::Heat::SoftwareDeployment
+    properties:
+      config: {get_resource: UpdateConfig}
+      server: {get_resource: NovaCompute}
+      input_values:
+        update_identifier:
+          get_param: UpdateIdentifier
+
 outputs:
   ip_address:
     description: IP address of the server in the ctlplane network
@@ -480,11 +512,14 @@ outputs:
       Server's IP address and hostname in the /etc/hosts format
     value:
       str_replace:
-        template: "IP HOST"
+        template: "IP HOST.localdomain HOST"
         params:
-          IP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
+          IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
           HOST: {get_attr: [NovaCompute, name]}
   nova_server_resource:
     description: Heat resource handle for the Nova compute server
     value:
       {get_resource: NovaCompute}
+  config_identifier:
+    description: identifier which changes if the node configuration may need re-applying
+    value: {get_attr: [NovaComputeDeployment, deploy_stdout]}