Add support for DeployArtifactURLs
[apex-tripleo-heat-templates.git] / puppet / compute.yaml
1 heat_template_version: 2015-10-15
2
3 description: >
4   OpenStack hypervisor node configured via Puppet.
5
6 parameters:
7   AdminPassword:
8     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
9     type: string
10     hidden: true
11   CeilometerComputeAgent:
12     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
13     type: string
14     default: ''
15     constraints:
16     - allowed_values: ['', Present]
17   CeilometerMeteringSecret:
18     description: Secret shared by the ceilometer services.
19     type: string
20     hidden: true
21   CeilometerPassword:
22     description: The password for the ceilometer service account.
23     type: string
24     hidden: true
25   CinderEnableNfsBackend:
26     default: false
27     description: Whether to enable or not the NFS backend for Cinder
28     type: boolean
29   CinderEnableRbdBackend:
30     default: false
31     description: Whether to enable or not the Rbd backend for Cinder
32     type: boolean
33   Debug:
34     default: ''
35     description: Set to True to enable debugging on all services.
36     type: string
37   ExtraConfig:
38     default: {}
39     description: |
40       Additional hiera configuration to inject into the cluster. Note
41       that NovaComputeExtraConfig takes precedence over ExtraConfig.
42     type: json
43   Flavor:
44     description: Flavor for the nova compute node
45     type: string
46     constraints:
47       - custom_constraint: nova.flavor
48   GlanceHost:
49     type: string
50     default: ''  # Has to be here because of the ignored empty value bug
51   Image:
52     type: string
53     default: overcloud-compute
54     constraints:
55       - custom_constraint: glance.image
56   ImageUpdatePolicy:
57     default: 'REBUILD_PRESERVE_EPHEMERAL'
58     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
59     type: string
60   KeyName:
61     description: Name of an existing Nova key pair to enable SSH access to the instances
62     type: string
63     default: default
64     constraints:
65       - custom_constraint: nova.keypair
66   KeystoneAdminApiVirtualIP:
67     type: string
68     default: ''
69   KeystonePublicApiVirtualIP:
70      type: string
71      default: ''
72   NeutronBridgeMappings:
73     description: >
74       The OVS logical->physical bridge mappings to use. See the Neutron
75       documentation for details. Defaults to mapping br-ex - the external
76       bridge on hosts - to a physical name 'datacentre' which can be used
77       to create provider networks (and we use this for the default floating
78       network) - if changing this either use different post-install network
79       scripts or be sure to keep 'datacentre' as a mapping network name.
80     type: comma_delimited_list
81     default: "datacentre:br-ex"
82   NeutronEnableTunnelling:
83     type: string
84     default: "True"
85   NeutronEnableL2Pop:
86     type: string
87     description: >
88         Enable/disable the L2 population feature in the Neutron agents.
89     default: "False"
90   NeutronFlatNetworks:
91     type: comma_delimited_list
92     default: 'datacentre'
93     description: >
94       If set, flat networks to configure in neutron plugins.
95   NeutronHost:
96     type: string
97     default: ''  # Has to be here because of the ignored empty value bug
98   NeutronNetworkType:
99     type: comma_delimited_list
100     description: The tenant network type for Neutron.
101     default: 'vxlan'
102   NeutronNetworkVLANRanges:
103     default: 'datacentre:1:1000'
104     description: >
105       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
106       Neutron documentation for permitted values. Defaults to permitting any
107       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
108     type: comma_delimited_list
109   NeutronPassword:
110     description: The password for the neutron service account, used by neutron agents.
111     type: string
112     hidden: true
113   NeutronPhysicalBridge:
114     default: 'br-ex'
115     description: An OVS bridge to create for accessing external networks.
116     type: string
117   NeutronPublicInterface:
118     default: nic1
119     description: A port to add to the NeutronPhysicalBridge.
120     type: string
121   NeutronTenantMtu:
122     description: >
123       The default MTU for tenant networks. For VXLAN/GRE tunneling, this should
124       be at least 50 bytes smaller than the MTU on the physical network. This
125       value will be used to set the MTU on the virtual Ethernet device.
126       This number is related to the value of NeutronDnsmasqOptions, since that
127       will determine the MTU that is assigned to the VM host through DHCP.
128     default: 1400
129     type: number
130   NeutronTunnelTypes:
131     type: comma_delimited_list
132     description: |
133         The tunnel types for the Neutron tenant network.
134     default: 'vxlan'
135   NeutronTunnelIdRanges:
136     description: |
137         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
138         of GRE tunnel IDs that are available for tenant network allocation
139     default: ["1:4094", ]
140     type: comma_delimited_list
141   NeutronVniRanges:
142     description: |
143         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
144         of VXLAN VNI IDs that are available for tenant network allocation
145     default: ["1:4094", ]
146     type: comma_delimited_list
147   NeutronPublicInterfaceRawDevice:
148     default: ''
149     type: string
150   NeutronDVR:
151     default: 'False'
152     type: string
153   NeutronMetadataProxySharedSecret:
154     description: Shared secret to prevent spoofing
155     type: string
156     hidden: true
157   NeutronCorePlugin:
158     default: 'ml2'
159     description: |
160         The core plugin for Neutron. The value should be the entrypoint to be loaded
161         from neutron.core_plugins namespace.
162     type: string
163   NeutronServicePlugins:
164     default: "router,qos"
165     description: |
166         Comma-separated list of service plugin entrypoints to be loaded from the
167         neutron.service_plugins namespace.
168     type: comma_delimited_list
169   NeutronTypeDrivers:
170     default: "vxlan,vlan,flat,gre"
171     description: |
172         Comma-separated list of network type driver entrypoints to be loaded.
173     type: comma_delimited_list
174   NeutronMechanismDrivers:
175     default: 'openvswitch'
176     description: |
177         The mechanism drivers for the Neutron tenant network.
178     type: comma_delimited_list
179   NeutronAgentExtensions:
180     default: "qos"
181     description: |
182         Comma-separated list of extensions enabled for the Neutron agents.
183     type: comma_delimited_list
184   # Not relevant for Computes, should be removed
185   NeutronAllowL3AgentFailover:
186     default: 'True'
187     description: Allow automatic l3-agent failover
188     type: string
189   # Not relevant for Computes, should be removed
190   NeutronL3HA:
191     default: 'False'
192     description: Whether to enable l3-agent HA
193     type: string
194   NeutronAgentMode:
195     default: 'dvr_snat'
196     description: Agent mode for the neutron-l3-agent on the controller hosts
197     type: string
198   NovaApiHost:
199     type: string
200     default: ''  # Has to be here because of the ignored empty value bug
201   NovaComputeDriver:
202     type: string
203     default: libvirt.LibvirtDriver
204   NovaComputeExtraConfig:
205     default: {}
206     description: |
207       NovaCompute specific configuration to inject into the cluster. Same
208       structure as ExtraConfig.
209     type: json
210   NovaComputeLibvirtType:
211     type: string
212     default: kvm
213   NovaComputeLibvirtVifDriver:
214     default: ''
215     description: Libvirt VIF driver configuration for the network
216     type: string
217   NovaEnableRbdBackend:
218     default: false
219     description: Whether to enable or not the Rbd backend for Nova
220     type: boolean
221   NovaPassword:
222     description: The password for the nova service account, used by nova-api.
223     type: string
224     hidden: true
225   NovaPublicIP:
226     type: string
227     default: ''  # Has to be here because of the ignored empty value bug
228   NovaOVSBridge:
229     default: 'br-int'
230     description: Name of integration bridge used by Open vSwitch
231     type: string
232   NovaSecurityGroupAPI:
233     default: 'neutron'
234     description: The full class name of the security API class
235     type: string
236   NtpServer:
237     default: ''
238     description: Comma-separated list of ntp servers
239     type: comma_delimited_list
240   RabbitHost:
241     type: string
242     default: ''  # Has to be here because of the ignored empty value bug
243   RabbitPassword:
244     default: guest
245     description: The password for RabbitMQ
246     type: string
247     hidden: true
248   RabbitUserName:
249     default: guest
250     description: The username for RabbitMQ
251     type: string
252   RabbitClientUseSSL:
253     default: false
254     description: >
255         Rabbit client subscriber parameter to specify
256         an SSL connection to the RabbitMQ host.
257     type: string
258   RabbitClientPort:
259     default: 5672
260     description: Set rabbit subscriber port, change this if using SSL
261     type: number
262   SnmpdReadonlyUserName:
263     default: ro_snmp_user
264     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
265     type: string
266   SnmpdReadonlyUserPassword:
267     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
268     type: string
269     hidden: true
270   EnablePackageInstall:
271     default: 'false'
272     description: Set to true to enable package installation via Puppet
273     type: boolean
274   ServiceNetMap:
275     default: {}
276     description: Mapping of service_name -> network name. Typically set
277                  via parameter_defaults in the resource registry.
278     type: json
279   EndpointMap:
280     default: {}
281     description: Mapping of service endpoint -> protocol. Typically set
282                  via parameter_defaults in the resource registry.
283     type: json
284   TimeZone:
285     default: 'UTC'
286     description: The timezone to be set on compute nodes.
287     type: string
288   UpdateIdentifier:
289     default: ''
290     type: string
291     description: >
292       Setting to a previously unused value during stack-update will trigger
293       package update on all nodes
294   Hostname:
295     type: string
296     default: '' # Defaults to Heat created hostname
297   NetworkDeploymentActions:
298     type: comma_delimited_list
299     description: >
300       Heat action when to apply network configuration changes
301     default: ['CREATE']
302   SoftwareConfigTransport:
303     default: POLL_SERVER_CFN
304     description: |
305       How the server should receive the metadata required for software configuration.
306     type: string
307     constraints:
308     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
309   CloudDomain:
310     default: ''
311     type: string
312     description: >
313       The DNS domain used for the hosts. This should match the dhcp_domain
314       configured in the Undercloud neutron. Defaults to localdomain.
315   ServerMetadata:
316     default: {}
317     description: >
318       Extra properties or metadata passed to Nova for the created nodes in
319       the overcloud. It's accessible via the Nova metadata API.
320     type: json
321   SchedulerHints:
322     type: json
323     description: Optional scheduler hints to pass to nova
324     default: {}
325
326 resources:
327
328   NovaCompute:
329     type: OS::Nova::Server
330     properties:
331       image:
332         {get_param: Image}
333       image_update_policy:
334         get_param: ImageUpdatePolicy
335       flavor: {get_param: Flavor}
336       key_name: {get_param: KeyName}
337       networks:
338         - network: ctlplane
339       user_data_format: SOFTWARE_CONFIG
340       user_data: {get_resource: UserData}
341       name: {get_param: Hostname}
342       software_config_transport: {get_param: SoftwareConfigTransport}
343       metadata: {get_param: ServerMetadata}
344       scheduler_hints: {get_param: SchedulerHints}
345
346   # Combine the NodeAdminUserData and NodeUserData mime archives
347   UserData:
348     type: OS::Heat::MultipartMime
349     properties:
350       parts:
351       - config: {get_resource: NodeAdminUserData}
352         type: multipart
353       - config: {get_resource: NodeUserData}
354         type: multipart
355
356   # Creates the "heat-admin" user if configured via the environment
357   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
358   NodeAdminUserData:
359     type: OS::TripleO::NodeAdminUserData
360
361   # For optional operator additional userdata
362   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
363   NodeUserData:
364     type: OS::TripleO::NodeUserData
365
366   ExternalPort:
367     type: OS::TripleO::Compute::Ports::ExternalPort
368     properties:
369       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
370
371   InternalApiPort:
372     type: OS::TripleO::Compute::Ports::InternalApiPort
373     properties:
374       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
375
376   StoragePort:
377     type: OS::TripleO::Compute::Ports::StoragePort
378     properties:
379       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
380
381   StorageMgmtPort:
382     type: OS::TripleO::Compute::Ports::StorageMgmtPort
383     properties:
384       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
385
386   TenantPort:
387     type: OS::TripleO::Compute::Ports::TenantPort
388     properties:
389       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
390
391   ManagementPort:
392     type: OS::TripleO::Compute::Ports::ManagementPort
393     properties:
394       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
395
396   NetIpMap:
397     type: OS::TripleO::Network::Ports::NetIpMap
398     properties:
399       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
400       ExternalIp: {get_attr: [ExternalPort, ip_address]}
401       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
402       StorageIp: {get_attr: [StoragePort, ip_address]}
403       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
404       TenantIp: {get_attr: [TenantPort, ip_address]}
405       ManagementIp: {get_attr: [ManagementPort, ip_address]}
406
407   NetworkConfig:
408     type: OS::TripleO::Compute::Net::SoftwareConfig
409     properties:
410       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
411       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
412       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
413       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
414       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
415       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
416       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
417
418   NetworkDeployment:
419     type: OS::TripleO::SoftwareDeployment
420     properties:
421       name: NetworkDeployment
422       config: {get_resource: NetworkConfig}
423       server: {get_resource: NovaCompute}
424       actions: {get_param: NetworkDeploymentActions}
425       input_values:
426         bridge_name: {get_param: NeutronPhysicalBridge}
427         interface_name: {get_param: NeutronPublicInterface}
428
429   NovaComputeConfig:
430     type: OS::Heat::StructuredConfig
431     properties:
432       group: os-apply-config
433       config:
434         hiera:
435           hierarchy:
436             - '"%{::uuid}"'
437             - heat_config_%{::deploy_config_name}
438             - compute_extraconfig
439             - extraconfig
440             - compute
441             - ceph_cluster # provided by CephClusterConfig
442             - ceph
443             - all_nodes # provided by allNodesConfig
444             - '"%{::osfamily}"'
445             - common
446             - neutron_bigswitch_data # Optionally provided by ComputeExtraConfigPre
447             - cisco_n1kv_data  # Optionally provided by ComputeExtraConfigPre
448             - nova_nuage_data  # Optionally provided by ComputeExtraConfigPre
449             - midonet_data # Optionally provided by AllNodesExtraConfig
450           datafiles:
451             compute_extraconfig:
452               mapped_data: {get_param: NovaComputeExtraConfig}
453             extraconfig:
454               mapped_data: {get_param: ExtraConfig}
455             common:
456               raw_data: {get_file: hieradata/common.yaml}
457             ceph:
458               raw_data: {get_file: hieradata/ceph.yaml}
459             compute:
460               raw_data: {get_file: hieradata/compute.yaml}
461               mapped_data:
462                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
463                 nova::debug: {get_input: debug}
464                 nova::rabbit_userid: {get_input: rabbit_username}
465                 nova::rabbit_password: {get_input: rabbit_password}
466                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
467                 nova::rabbit_port: {get_input: rabbit_client_port}
468                 nova_compute_driver: {get_input: nova_compute_driver}
469                 nova::compute::libvirt::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
470                 nova::compute::neutron::libvirt_vif_driver: {get_input: nova_compute_libvirt_vif_driver}
471                 nova_api_host: {get_input: nova_api_host}
472                 nova::compute::vncproxy_host: {get_input: nova_public_ip}
473                 nova::compute::rbd::ephemeral_storage: {get_input: nova_enable_rbd_backend}
474                 rbd_persistent_storage: {get_input: cinder_enable_rbd_backend}
475                 nova_password: {get_input: nova_password}
476                 nova::compute::network_device_mtu: {get_input: neutron_tenant_mtu}
477                 nova::compute::vncserver_proxyclient_address: {get_input: nova_vnc_proxyclient_address}
478                 nova::vncproxy::common::vncproxy_protocol: {get_input: nova_vncproxy_protocol}
479                 nova::vncproxy::common::vncproxy_host: {get_input: nova_vncproxy_host}
480                 nova::vncproxy::common::vncproxy_port: {get_input: nova_vncproxy_port}
481                 nova::network::neutron::neutron_ovs_bridge: {get_input: nova_ovs_bridge}
482                 nova::network::neutron::security_group_api: {get_input: nova_security_group_api}
483                 ceilometer::debug: {get_input: debug}
484                 ceilometer::rabbit_userid: {get_input: rabbit_username}
485                 ceilometer::rabbit_password: {get_input: rabbit_password}
486                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
487                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
488                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
489                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
490                 ceilometer::agent::auth::auth_url: {get_input: ceilometer_agent_auth_url}
491                 ceilometer_compute_agent: {get_input: ceilometer_compute_agent}
492                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
493                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
494                 nova::glance_api_servers: {get_input: glance_api_servers}
495                 neutron::debug: {get_input: debug}
496                 neutron::rabbit_password: {get_input: rabbit_password}
497                 neutron::rabbit_user: {get_input: rabbit_username}
498                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
499                 neutron::rabbit_port: {get_input: rabbit_client_port}
500                 neutron::plugins::ml2::flat_networks: {get_input: neutron_flat_networks}
501                 neutron_host: {get_input: neutron_host}
502                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
503
504                 neutron::network_device_mtu: {get_input: neutron_tenant_mtu}
505                 neutron::plugins::ml2::tenant_network_types: {get_input: neutron_tenant_network_types}
506                 neutron::agents::ml2::ovs::tunnel_types: {get_input: neutron_tunnel_types}
507                 neutron::agents::ml2::ovs::extensions: {get_input: neutron_agent_extensions}
508                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
509                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
510                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
511                 neutron::agents::ml2::ovs::bridge_mappings: {get_input: neutron_bridge_mappings}
512                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
513                 neutron::agents::ml2::ovs::l2_population: {get_input: neutron_enable_l2pop}
514                 neutron_physical_bridge: {get_input: neutron_physical_bridge}
515                 neutron_public_interface: {get_input: neutron_public_interface}
516                 nova::network::neutron::neutron_password: {get_input: neutron_password}
517                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
518                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
519                 neutron_router_distributed: {get_input: neutron_router_distributed}
520                 neutron_agent_mode: {get_input: neutron_agent_mode}
521                 neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
522                 neutron::core_plugin: {get_input: neutron_core_plugin}
523                 neutron::service_plugins: {get_input: neutron_service_plugins}
524                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
525                 neutron::plugins::ml2::mechanism_drivers: {get_input: neutron_mechanism_drivers}
526                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
527                 keystone_public_api_virtual_ip: {get_input: keystone_vip}
528                 admin_password: {get_input: admin_password}
529                 ntp::servers: {get_input: ntp_servers}
530                 timezone::timezone: {get_input: timezone}
531                 tripleo::packages::enable_install: {get_input: enable_package_install}
532                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
533
534   NovaComputeDeployment:
535     type: OS::TripleO::SoftwareDeployment
536     depends_on: NetworkDeployment
537     properties:
538       name: NovaComputeDeployment
539       config: {get_resource: NovaComputeConfig}
540       server: {get_resource: NovaCompute}
541       input_values:
542         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
543         debug: {get_param: Debug}
544         nova_compute_driver: {get_param: NovaComputeDriver}
545         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
546         nova_compute_libvirt_vif_driver: {get_param: NovaComputeLibvirtVifDriver}
547         nova_public_ip: {get_param: NovaPublicIP}
548         nova_api_host: {get_param: NovaApiHost}
549         nova_password: {get_param: NovaPassword}
550         nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
551         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
552         nova_vnc_proxyclient_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaVncProxyNetwork]}]}
553         nova_vncproxy_protocol: {get_param: [EndpointMap, NovaVNCProxyPublic, protocol]}
554         nova_vncproxy_host: {get_param: [EndpointMap, NovaVNCProxyPublic, host]}
555         nova_vncproxy_port: {get_param: [EndpointMap, NovaVNCProxyPublic, port]}
556         nova_ovs_bridge: {get_param: NovaOVSBridge}
557         nova_security_group_api: {get_param: NovaSecurityGroupAPI}
558         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
559         ceilometer_password: {get_param: CeilometerPassword}
560         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
561         ceilometer_agent_auth_url: {get_param: [EndpointMap, KeystoneInternal, uri]}
562         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
563         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
564         glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
565         neutron_flat_networks:
566           str_replace:
567             template: NETWORKS
568             params:
569               NETWORKS: {get_param: NeutronFlatNetworks}
570         neutron_host: {get_param: NeutronHost}
571         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
572         neutron_tunnel_id_ranges:
573           str_replace:
574             template: RANGES
575             params:
576               RANGES: {get_param: NeutronTunnelIdRanges}
577         neutron_vni_ranges:
578           str_replace:
579             template: RANGES
580             params:
581               RANGES: {get_param: NeutronVniRanges}
582         neutron_tenant_network_types:
583           str_replace:
584             template: TYPES
585             params:
586               TYPES: {get_param: NeutronNetworkType}
587         neutron_tunnel_types:
588           str_replace:
589             template: TYPES
590             params:
591               TYPES: {get_param: NeutronTunnelTypes}
592         neutron_network_vlan_ranges:
593           str_replace:
594             template: RANGES
595             params:
596               RANGES: {get_param: NeutronNetworkVLANRanges}
597         neutron_bridge_mappings:
598           str_replace:
599             template: MAPPINGS
600             params:
601               MAPPINGS: {get_param: NeutronBridgeMappings}
602         neutron_tenant_mtu: {get_param: NeutronTenantMtu}
603         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
604         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
605         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
606         neutron_public_interface: {get_param: NeutronPublicInterface}
607         neutron_password: {get_param: NeutronPassword}
608         neutron_agent_mode: {get_param: NeutronAgentMode}
609         neutron_router_distributed: {get_param: NeutronDVR}
610         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
611         neutron_core_plugin: {get_param: NeutronCorePlugin}
612         neutron_service_plugins:
613           str_replace:
614             template: PLUGINS
615             params:
616               PLUGINS: {get_param: NeutronServicePlugins}
617         neutron_type_drivers:
618           str_replace:
619             template: DRIVERS
620             params:
621               DRIVERS: {get_param: NeutronTypeDrivers}
622         neutron_mechanism_drivers:
623           str_replace:
624             template: MECHANISMS
625             params:
626               MECHANISMS: {get_param: NeutronMechanismDrivers}
627         neutron_agent_extensions:
628           str_replace:
629             template: AGENT_EXTENSIONS
630             params:
631               AGENT_EXTENSIONS: {get_param: NeutronAgentExtensions}
632         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
633         neutron_internal_url: {get_param: [EndpointMap, NeutronInternal, uri]}
634         neutron_auth_url: {get_param: [EndpointMap, KeystoneV3Admin, uri]}
635         keystone_vip: {get_param: KeystonePublicApiVirtualIP}
636         admin_password: {get_param: AdminPassword}
637         rabbit_username: {get_param: RabbitUserName}
638         rabbit_password: {get_param: RabbitPassword}
639         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
640         rabbit_client_port: {get_param: RabbitClientPort}
641         ntp_servers: {get_param: NtpServer}
642         timezone: {get_param: TimeZone}
643         enable_package_install: {get_param: EnablePackageInstall}
644         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
645
646   # Resource for site-specific injection of root certificate
647   NodeTLSCAData:
648     depends_on: NovaComputeDeployment
649     type: OS::TripleO::NodeTLSCAData
650     properties:
651       server: {get_resource: NovaCompute}
652
653   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
654   ComputeExtraConfigPre:
655     depends_on: NovaComputeDeployment
656     type: OS::TripleO::ComputeExtraConfigPre
657     properties:
658         server: {get_resource: NovaCompute}
659
660   # Hook for site-specific additional pre-deployment config,
661   # applying to all nodes, e.g node registration/unregistration
662   NodeExtraConfig:
663     depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
664     type: OS::TripleO::NodeExtraConfig
665     properties:
666         server: {get_resource: NovaCompute}
667
668   UpdateConfig:
669     type: OS::TripleO::Tasks::PackageUpdate
670
671   UpdateDeployment:
672     type: OS::Heat::SoftwareDeployment
673     properties:
674       name: UpdateDeployment
675       config: {get_resource: UpdateConfig}
676       server: {get_resource: NovaCompute}
677       input_values:
678         update_identifier:
679           get_param: UpdateIdentifier
680
681 outputs:
682   ip_address:
683     description: IP address of the server in the ctlplane network
684     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
685   external_ip_address:
686     description: IP address of the server in the external network
687     value: {get_attr: [ExternalPort, ip_address]}
688   internal_api_ip_address:
689     description: IP address of the server in the internal_api network
690     value: {get_attr: [InternalApiPort, ip_address]}
691   storage_ip_address:
692     description: IP address of the server in the storage network
693     value: {get_attr: [StoragePort, ip_address]}
694   storage_mgmt_ip_address:
695     description: IP address of the server in the storage_mgmt network
696     value: {get_attr: [StorageMgmtPort, ip_address]}
697   tenant_ip_address:
698     description: IP address of the server in the tenant network
699     value: {get_attr: [TenantPort, ip_address]}
700   management_ip_address:
701     description: IP address of the server in the management network
702     value: {get_attr: [ManagementPort, ip_address]}
703   hostname:
704     description: Hostname of the server
705     value: {get_attr: [NovaCompute, name]}
706   hosts_entry:
707     description: >
708       Server's IP address and hostname in the /etc/hosts format
709     value:
710       str_replace:
711         template: "IP HOST.DOMAIN HOST"
712         params:
713           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
714           DOMAIN: {get_param: CloudDomain}
715           HOST: {get_attr: [NovaCompute, name]}
716   nova_server_resource:
717     description: Heat resource handle for the Nova compute server
718     value:
719       {get_resource: NovaCompute}
720   config_identifier:
721     description: identifier which changes if the node configuration may need re-applying
722     value:
723       list_join:
724       - ','
725       - - {get_attr: [NovaComputeDeployment, deploy_stdout]}
726         - {get_attr: [NodeTLSCAData, deploy_stdout]}
727         - {get_attr: [ComputeExtraConfigPre, deploy_stdout]}
728         - {get_param: UpdateIdentifier}