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