Merge "Enable heat-manage purge_deleted cron job"
[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   UpgradeLevelNovaCompute:
271     type: string
272     description: Nova Compute upgrade level
273     default: ''
274   EnablePackageInstall:
275     default: 'false'
276     description: Set to true to enable package installation via Puppet
277     type: boolean
278   ServiceNetMap:
279     default: {}
280     description: Mapping of service_name -> network name. Typically set
281                  via parameter_defaults in the resource registry.
282     type: json
283   EndpointMap:
284     default: {}
285     description: Mapping of service endpoint -> protocol. Typically set
286                  via parameter_defaults in the resource registry.
287     type: json
288   TimeZone:
289     default: 'UTC'
290     description: The timezone to be set on compute nodes.
291     type: string
292   UpdateIdentifier:
293     default: ''
294     type: string
295     description: >
296       Setting to a previously unused value during stack-update will trigger
297       package update on all nodes
298   Hostname:
299     type: string
300     default: '' # Defaults to Heat created hostname
301   NetworkDeploymentActions:
302     type: comma_delimited_list
303     description: >
304       Heat action when to apply network configuration changes
305     default: ['CREATE']
306   SoftwareConfigTransport:
307     default: POLL_SERVER_CFN
308     description: |
309       How the server should receive the metadata required for software configuration.
310     type: string
311     constraints:
312     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
313   CloudDomain:
314     default: ''
315     type: string
316     description: >
317       The DNS domain used for the hosts. This should match the dhcp_domain
318       configured in the Undercloud neutron. Defaults to localdomain.
319   ServerMetadata:
320     default: {}
321     description: >
322       Extra properties or metadata passed to Nova for the created nodes in
323       the overcloud. It's accessible via the Nova metadata API.
324     type: json
325   SchedulerHints:
326     type: json
327     description: Optional scheduler hints to pass to nova
328     default: {}
329
330 resources:
331
332   NovaCompute:
333     type: OS::Nova::Server
334     properties:
335       image:
336         {get_param: Image}
337       image_update_policy:
338         get_param: ImageUpdatePolicy
339       flavor: {get_param: Flavor}
340       key_name: {get_param: KeyName}
341       networks:
342         - network: ctlplane
343       user_data_format: SOFTWARE_CONFIG
344       user_data: {get_resource: UserData}
345       name: {get_param: Hostname}
346       software_config_transport: {get_param: SoftwareConfigTransport}
347       metadata: {get_param: ServerMetadata}
348       scheduler_hints: {get_param: SchedulerHints}
349
350   # Combine the NodeAdminUserData and NodeUserData mime archives
351   UserData:
352     type: OS::Heat::MultipartMime
353     properties:
354       parts:
355       - config: {get_resource: NodeAdminUserData}
356         type: multipart
357       - config: {get_resource: NodeUserData}
358         type: multipart
359
360   # Creates the "heat-admin" user if configured via the environment
361   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
362   NodeAdminUserData:
363     type: OS::TripleO::NodeAdminUserData
364
365   # For optional operator additional userdata
366   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
367   NodeUserData:
368     type: OS::TripleO::NodeUserData
369
370   ExternalPort:
371     type: OS::TripleO::Compute::Ports::ExternalPort
372     properties:
373       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
374
375   InternalApiPort:
376     type: OS::TripleO::Compute::Ports::InternalApiPort
377     properties:
378       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
379
380   StoragePort:
381     type: OS::TripleO::Compute::Ports::StoragePort
382     properties:
383       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
384
385   StorageMgmtPort:
386     type: OS::TripleO::Compute::Ports::StorageMgmtPort
387     properties:
388       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
389
390   TenantPort:
391     type: OS::TripleO::Compute::Ports::TenantPort
392     properties:
393       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
394
395   ManagementPort:
396     type: OS::TripleO::Compute::Ports::ManagementPort
397     properties:
398       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
399
400   NetIpMap:
401     type: OS::TripleO::Network::Ports::NetIpMap
402     properties:
403       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
404       ExternalIp: {get_attr: [ExternalPort, ip_address]}
405       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
406       StorageIp: {get_attr: [StoragePort, ip_address]}
407       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
408       TenantIp: {get_attr: [TenantPort, ip_address]}
409       ManagementIp: {get_attr: [ManagementPort, ip_address]}
410
411   NetworkConfig:
412     type: OS::TripleO::Compute::Net::SoftwareConfig
413     properties:
414       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
415       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
416       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
417       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
418       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
419       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
420       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
421
422   NetworkDeployment:
423     type: OS::TripleO::SoftwareDeployment
424     properties:
425       name: NetworkDeployment
426       config: {get_resource: NetworkConfig}
427       server: {get_resource: NovaCompute}
428       actions: {get_param: NetworkDeploymentActions}
429       input_values:
430         bridge_name: {get_param: NeutronPhysicalBridge}
431         interface_name: {get_param: NeutronPublicInterface}
432
433   NovaComputeConfig:
434     type: OS::Heat::StructuredConfig
435     properties:
436       group: os-apply-config
437       config:
438         hiera:
439           hierarchy:
440             - '"%{::uuid}"'
441             - heat_config_%{::deploy_config_name}
442             - compute_extraconfig
443             - extraconfig
444             - compute
445             - ceph_cluster # provided by CephClusterConfig
446             - ceph
447             - all_nodes # provided by allNodesConfig
448             - '"%{::osfamily}"'
449             - common
450             - neutron_bigswitch_data # Optionally provided by ComputeExtraConfigPre
451             - cisco_n1kv_data  # Optionally provided by ComputeExtraConfigPre
452             - nova_nuage_data  # Optionally provided by ComputeExtraConfigPre
453             - midonet_data # Optionally provided by AllNodesExtraConfig
454             - neutron_opencontrail_data  # Optionally provided by ComputeExtraConfigPre
455           datafiles:
456             compute_extraconfig:
457               mapped_data: {get_param: NovaComputeExtraConfig}
458             extraconfig:
459               mapped_data: {get_param: ExtraConfig}
460             common:
461               raw_data: {get_file: hieradata/common.yaml}
462             ceph:
463               raw_data: {get_file: hieradata/ceph.yaml}
464             compute:
465               raw_data: {get_file: hieradata/compute.yaml}
466               mapped_data:
467                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
468                 nova::debug: {get_input: debug}
469                 nova::rabbit_userid: {get_input: rabbit_username}
470                 nova::rabbit_password: {get_input: rabbit_password}
471                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
472                 nova::rabbit_port: {get_input: rabbit_client_port}
473                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
474                 nova_compute_driver: {get_input: nova_compute_driver}
475                 nova::compute::libvirt::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
476                 nova::compute::neutron::libvirt_vif_driver: {get_input: nova_compute_libvirt_vif_driver}
477                 nova_api_host: {get_input: nova_api_host}
478                 nova::compute::vncproxy_host: {get_input: nova_public_ip}
479                 nova::compute::rbd::ephemeral_storage: {get_input: nova_enable_rbd_backend}
480                 rbd_persistent_storage: {get_input: cinder_enable_rbd_backend}
481                 nova_password: {get_input: nova_password}
482                 nova::compute::network_device_mtu: {get_input: neutron_tenant_mtu}
483                 nova::compute::vncserver_proxyclient_address: {get_input: nova_vnc_proxyclient_address}
484                 nova::vncproxy::common::vncproxy_protocol: {get_input: nova_vncproxy_protocol}
485                 nova::vncproxy::common::vncproxy_host: {get_input: nova_vncproxy_host}
486                 nova::vncproxy::common::vncproxy_port: {get_input: nova_vncproxy_port}
487                 nova::network::neutron::neutron_ovs_bridge: {get_input: nova_ovs_bridge}
488                 nova::network::neutron::security_group_api: {get_input: nova_security_group_api}
489                 ceilometer::debug: {get_input: debug}
490                 ceilometer::rabbit_userid: {get_input: rabbit_username}
491                 ceilometer::rabbit_password: {get_input: rabbit_password}
492                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
493                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
494                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
495                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
496                 ceilometer::agent::auth::auth_url: {get_input: ceilometer_agent_auth_url}
497                 ceilometer_compute_agent: {get_input: ceilometer_compute_agent}
498                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
499                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
500                 nova::glance_api_servers: {get_input: glance_api_servers}
501                 neutron::debug: {get_input: debug}
502                 neutron::rabbit_password: {get_input: rabbit_password}
503                 neutron::rabbit_user: {get_input: rabbit_username}
504                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
505                 neutron::rabbit_port: {get_input: rabbit_client_port}
506                 neutron::plugins::ml2::flat_networks: {get_input: neutron_flat_networks}
507                 neutron_host: {get_input: neutron_host}
508                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
509
510                 neutron::network_device_mtu: {get_input: neutron_tenant_mtu}
511                 neutron::plugins::ml2::tenant_network_types: {get_input: neutron_tenant_network_types}
512                 neutron::agents::ml2::ovs::tunnel_types: {get_input: neutron_tunnel_types}
513                 neutron::agents::ml2::ovs::extensions: {get_input: neutron_agent_extensions}
514                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
515                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
516                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
517                 neutron::agents::ml2::ovs::bridge_mappings: {get_input: neutron_bridge_mappings}
518                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
519                 neutron::agents::ml2::ovs::l2_population: {get_input: neutron_enable_l2pop}
520                 neutron_physical_bridge: {get_input: neutron_physical_bridge}
521                 neutron_public_interface: {get_input: neutron_public_interface}
522                 nova::network::neutron::neutron_password: {get_input: neutron_password}
523                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
524                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
525                 neutron_router_distributed: {get_input: neutron_router_distributed}
526                 neutron_agent_mode: {get_input: neutron_agent_mode}
527                 neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
528                 neutron::core_plugin: {get_input: neutron_core_plugin}
529                 neutron::service_plugins: {get_input: neutron_service_plugins}
530                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
531                 neutron::plugins::ml2::mechanism_drivers: {get_input: neutron_mechanism_drivers}
532                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
533                 keystone_public_api_virtual_ip: {get_input: keystone_vip}
534                 admin_password: {get_input: admin_password}
535                 ntp::servers: {get_input: ntp_servers}
536                 timezone::timezone: {get_input: timezone}
537                 tripleo::packages::enable_install: {get_input: enable_package_install}
538                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
539
540   NovaComputeDeployment:
541     type: OS::TripleO::SoftwareDeployment
542     depends_on: NetworkDeployment
543     properties:
544       name: NovaComputeDeployment
545       config: {get_resource: NovaComputeConfig}
546       server: {get_resource: NovaCompute}
547       input_values:
548         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
549         debug: {get_param: Debug}
550         nova_compute_driver: {get_param: NovaComputeDriver}
551         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
552         nova_compute_libvirt_vif_driver: {get_param: NovaComputeLibvirtVifDriver}
553         nova_public_ip: {get_param: NovaPublicIP}
554         nova_api_host: {get_param: NovaApiHost}
555         nova_password: {get_param: NovaPassword}
556         nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
557         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
558         nova_vnc_proxyclient_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaVncProxyNetwork]}]}
559         nova_vncproxy_protocol: {get_param: [EndpointMap, NovaVNCProxyPublic, protocol]}
560         nova_vncproxy_host: {get_param: [EndpointMap, NovaVNCProxyPublic, host]}
561         nova_vncproxy_port: {get_param: [EndpointMap, NovaVNCProxyPublic, port]}
562         nova_ovs_bridge: {get_param: NovaOVSBridge}
563         nova_security_group_api: {get_param: NovaSecurityGroupAPI}
564         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
565         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
566         ceilometer_password: {get_param: CeilometerPassword}
567         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
568         ceilometer_agent_auth_url: {get_param: [EndpointMap, KeystoneInternal, uri]}
569         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
570         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
571         glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
572         neutron_flat_networks:
573           str_replace:
574             template: NETWORKS
575             params:
576               NETWORKS: {get_param: NeutronFlatNetworks}
577         neutron_host: {get_param: NeutronHost}
578         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
579         neutron_tunnel_id_ranges:
580           str_replace:
581             template: RANGES
582             params:
583               RANGES: {get_param: NeutronTunnelIdRanges}
584         neutron_vni_ranges:
585           str_replace:
586             template: RANGES
587             params:
588               RANGES: {get_param: NeutronVniRanges}
589         neutron_tenant_network_types:
590           str_replace:
591             template: TYPES
592             params:
593               TYPES: {get_param: NeutronNetworkType}
594         neutron_tunnel_types:
595           str_replace:
596             template: TYPES
597             params:
598               TYPES: {get_param: NeutronTunnelTypes}
599         neutron_network_vlan_ranges:
600           str_replace:
601             template: RANGES
602             params:
603               RANGES: {get_param: NeutronNetworkVLANRanges}
604         neutron_bridge_mappings:
605           str_replace:
606             template: MAPPINGS
607             params:
608               MAPPINGS: {get_param: NeutronBridgeMappings}
609         neutron_tenant_mtu: {get_param: NeutronTenantMtu}
610         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
611         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
612         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
613         neutron_public_interface: {get_param: NeutronPublicInterface}
614         neutron_password: {get_param: NeutronPassword}
615         neutron_agent_mode: {get_param: NeutronAgentMode}
616         neutron_router_distributed: {get_param: NeutronDVR}
617         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
618         neutron_core_plugin: {get_param: NeutronCorePlugin}
619         neutron_service_plugins:
620           str_replace:
621             template: PLUGINS
622             params:
623               PLUGINS: {get_param: NeutronServicePlugins}
624         neutron_type_drivers:
625           str_replace:
626             template: DRIVERS
627             params:
628               DRIVERS: {get_param: NeutronTypeDrivers}
629         neutron_mechanism_drivers:
630           str_replace:
631             template: MECHANISMS
632             params:
633               MECHANISMS: {get_param: NeutronMechanismDrivers}
634         neutron_agent_extensions:
635           str_replace:
636             template: AGENT_EXTENSIONS
637             params:
638               AGENT_EXTENSIONS: {get_param: NeutronAgentExtensions}
639         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
640         neutron_internal_url: {get_param: [EndpointMap, NeutronInternal, uri]}
641         neutron_auth_url: {get_param: [EndpointMap, KeystoneV3Admin, uri]}
642         keystone_vip: {get_param: KeystonePublicApiVirtualIP}
643         admin_password: {get_param: AdminPassword}
644         rabbit_username: {get_param: RabbitUserName}
645         rabbit_password: {get_param: RabbitPassword}
646         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
647         rabbit_client_port: {get_param: RabbitClientPort}
648         ntp_servers: {get_param: NtpServer}
649         timezone: {get_param: TimeZone}
650         enable_package_install: {get_param: EnablePackageInstall}
651         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
652
653   # Resource for site-specific injection of root certificate
654   NodeTLSCAData:
655     depends_on: NovaComputeDeployment
656     type: OS::TripleO::NodeTLSCAData
657     properties:
658       server: {get_resource: NovaCompute}
659
660   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
661   ComputeExtraConfigPre:
662     depends_on: NovaComputeDeployment
663     type: OS::TripleO::ComputeExtraConfigPre
664     properties:
665         server: {get_resource: NovaCompute}
666
667   # Hook for site-specific additional pre-deployment config,
668   # applying to all nodes, e.g node registration/unregistration
669   NodeExtraConfig:
670     depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
671     type: OS::TripleO::NodeExtraConfig
672     properties:
673         server: {get_resource: NovaCompute}
674
675   UpdateConfig:
676     type: OS::TripleO::Tasks::PackageUpdate
677
678   UpdateDeployment:
679     type: OS::Heat::SoftwareDeployment
680     properties:
681       name: UpdateDeployment
682       config: {get_resource: UpdateConfig}
683       server: {get_resource: NovaCompute}
684       input_values:
685         update_identifier:
686           get_param: UpdateIdentifier
687
688 outputs:
689   ip_address:
690     description: IP address of the server in the ctlplane network
691     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
692   external_ip_address:
693     description: IP address of the server in the external network
694     value: {get_attr: [ExternalPort, ip_address]}
695   internal_api_ip_address:
696     description: IP address of the server in the internal_api network
697     value: {get_attr: [InternalApiPort, ip_address]}
698   storage_ip_address:
699     description: IP address of the server in the storage network
700     value: {get_attr: [StoragePort, ip_address]}
701   storage_mgmt_ip_address:
702     description: IP address of the server in the storage_mgmt network
703     value: {get_attr: [StorageMgmtPort, ip_address]}
704   tenant_ip_address:
705     description: IP address of the server in the tenant network
706     value: {get_attr: [TenantPort, ip_address]}
707   management_ip_address:
708     description: IP address of the server in the management network
709     value: {get_attr: [ManagementPort, ip_address]}
710   hostname:
711     description: Hostname of the server
712     value: {get_attr: [NovaCompute, name]}
713   hosts_entry:
714     description: >
715       Server's IP address and hostname in the /etc/hosts format
716     value:
717       str_replace:
718         template: |
719           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
720           EXTERNALIP EXTERNALHOST
721           INTERNAL_APIIP INTERNAL_APIHOST
722           STORAGEIP STORAGEHOST
723           STORAGE_MGMTIP STORAGE_MGMTHOST
724           TENANTIP TENANTHOST
725           MANAGEMENTIP MANAGEMENTHOST
726         params:
727           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
728           DOMAIN: {get_param: CloudDomain}
729           PRIMARYHOST: {get_attr: [NovaCompute, name]}
730           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
731           EXTERNALHOST:
732             list_join:
733             - '-'
734             - - {get_attr: [NovaCompute, name]}
735               - external
736           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
737           INTERNAL_APIHOST:
738             list_join:
739             - '-'
740             - - {get_attr: [NovaCompute, name]}
741               - internalapi
742           STORAGEIP: {get_attr: [StoragePort, ip_address]}
743           STORAGEHOST:
744             list_join:
745             - '-'
746             - - {get_attr: [NovaCompute, name]}
747               - storage
748           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
749           STORAGE_MGMTHOST:
750             list_join:
751             - '-'
752             - - {get_attr: [NovaCompute, name]}
753               - storagemgmt
754           TENANTIP: {get_attr: [TenantPort, ip_address]}
755           TENANTHOST:
756             list_join:
757             - '-'
758             - - {get_attr: [NovaCompute, name]}
759               - tenant
760           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
761           MANAGEMENTHOST:
762             list_join:
763             - '-'
764             - - {get_attr: [NovaCompute, name]}
765               - management
766   nova_server_resource:
767     description: Heat resource handle for the Nova compute server
768     value:
769       {get_resource: NovaCompute}
770   config_identifier:
771     description: identifier which changes if the node configuration may need re-applying
772     value:
773       list_join:
774       - ','
775       - - {get_attr: [NovaComputeDeployment, deploy_stdout]}
776         - {get_attr: [NodeTLSCAData, deploy_stdout]}
777         - {get_attr: [ComputeExtraConfigPre, deploy_stdout]}
778         - {get_param: UpdateIdentifier}