Introduce domain configuration through parameter
[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   CloudDomain:
282     default: ''
283     type: string
284     description: >
285       The DNS domain used for the hosts. This should match the dhcp_domain
286       configured in the Undercloud neutron. Defaults to localdomain.
287
288
289 resources:
290
291   NovaCompute:
292     type: OS::Nova::Server
293     properties:
294       image:
295         {get_param: Image}
296       image_update_policy:
297         get_param: ImageUpdatePolicy
298       flavor: {get_param: Flavor}
299       key_name: {get_param: KeyName}
300       networks:
301         - network: ctlplane
302       user_data_format: SOFTWARE_CONFIG
303       user_data: {get_resource: UserData}
304       name: {get_param: Hostname}
305
306   # Combine the NodeAdminUserData and NodeUserData mime archives
307   UserData:
308     type: OS::Heat::MultipartMime
309     properties:
310       parts:
311       - config: {get_resource: NodeAdminUserData}
312         type: multipart
313       - config: {get_resource: NodeUserData}
314         type: multipart
315
316   # Creates the "heat-admin" user if configured via the environment
317   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
318   NodeAdminUserData:
319     type: OS::TripleO::NodeAdminUserData
320
321   # For optional operator additional userdata
322   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
323   NodeUserData:
324     type: OS::TripleO::NodeUserData
325
326   InternalApiPort:
327     type: OS::TripleO::Compute::Ports::InternalApiPort
328     properties:
329       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
330
331   StoragePort:
332     type: OS::TripleO::Compute::Ports::StoragePort
333     properties:
334       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
335
336   TenantPort:
337     type: OS::TripleO::Compute::Ports::TenantPort
338     properties:
339       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
340
341   NetIpMap:
342     type: OS::TripleO::Network::Ports::NetIpMap
343     properties:
344       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
345       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
346       StorageIp: {get_attr: [StoragePort, ip_address]}
347       TenantIp: {get_attr: [TenantPort, ip_address]}
348
349   NetworkConfig:
350     type: OS::TripleO::Compute::Net::SoftwareConfig
351     properties:
352       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
353       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
354       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
355       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
356
357   NetworkDeployment:
358     type: OS::TripleO::SoftwareDeployment
359     properties:
360       config: {get_resource: NetworkConfig}
361       server: {get_resource: NovaCompute}
362       actions: {get_param: NetworkDeploymentActions}
363       input_values:
364         bridge_name: {get_param: NeutronPhysicalBridge}
365         interface_name: {get_param: NeutronPublicInterface}
366
367   NovaComputeConfig:
368     type: OS::Heat::StructuredConfig
369     properties:
370       group: os-apply-config
371       config:
372         hiera:
373           hierarchy:
374             - '"%{::uuid}"'
375             - heat_config_%{::deploy_config_name}
376             - compute_extraconfig
377             - extraconfig
378             - compute
379             - ceph_cluster # provided by CephClusterConfig
380             - ceph
381             - all_nodes # provided by allNodesConfig
382             - '"%{::osfamily}"'
383             - common
384             - cisco_n1kv_data  # Optionally provided by ComputeExtraConfigPre
385           datafiles:
386             compute_extraconfig:
387               mapped_data: {get_param: NovaComputeExtraConfig}
388             extraconfig:
389               mapped_data: {get_param: ExtraConfig}
390             common:
391               raw_data: {get_file: hieradata/common.yaml}
392             ceph:
393               raw_data: {get_file: hieradata/ceph.yaml}
394             compute:
395               raw_data: {get_file: hieradata/compute.yaml}
396               mapped_data:
397                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
398                 nova::debug: {get_input: debug}
399                 nova::rabbit_userid: {get_input: rabbit_username}
400                 nova::rabbit_password: {get_input: rabbit_password}
401                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
402                 nova::rabbit_port: {get_input: rabbit_client_port}
403                 nova_compute_driver: {get_input: nova_compute_driver}
404                 nova::compute::libvirt::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
405                 nova_api_host: {get_input: nova_api_host}
406                 nova::compute::vncproxy_host: {get_input: nova_public_ip}
407                 nova::compute::rbd::ephemeral_storage: {get_input: nova_enable_rbd_backend}
408                 rbd_persistent_storage: {get_input: cinder_enable_rbd_backend}
409                 nova_password: {get_input: nova_password}
410                 nova::compute::vncserver_proxyclient_address: {get_input: nova_vnc_proxyclient_address}
411                 ceilometer::debug: {get_input: debug}
412                 ceilometer::rabbit_userid: {get_input: rabbit_username}
413                 ceilometer::rabbit_password: {get_input: rabbit_password}
414                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
415                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
416                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
417                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
418                 ceilometer::agent::auth::auth_url: {get_input: ceilometer_agent_auth_url}
419                 ceilometer_compute_agent: {get_input: ceilometer_compute_agent}
420                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
421                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
422                 nova::glance_api_servers: {get_input: glance_api_servers}
423                 neutron::debug: {get_input: debug}
424                 neutron::rabbit_password: {get_input: rabbit_password}
425                 neutron::rabbit_user: {get_input: rabbit_username}
426                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
427                 neutron::rabbit_port: {get_input: rabbit_client_port}
428                 neutron_flat_networks: {get_input: neutron_flat_networks}
429                 neutron_host: {get_input: neutron_host}
430                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
431
432                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
433                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
434                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
435                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
436                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
437                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
438                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
439                 neutron::agents::ml2::ovs::l2_population: {get_input: neutron_enable_l2pop}
440                 neutron_physical_bridge: {get_input: neutron_physical_bridge}
441                 neutron_public_interface: {get_input: neutron_public_interface}
442                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
443                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
444                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
445                 neutron_router_distributed: {get_input: neutron_router_distributed}
446                 neutron_agent_mode: {get_input: neutron_agent_mode}
447                 neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
448                 neutron::core_plugin: {get_input: neutron_core_plugin}
449                 neutron::service_plugins: {get_input: neutron_service_plugins}
450                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
451                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
452                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
453                 admin_password: {get_input: admin_password}
454                 ntp::servers: {get_input: ntp_servers}
455                 tripleo::packages::enable_install: {get_input: enable_package_install}
456                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
457
458   NovaComputeDeployment:
459     type: OS::TripleO::SoftwareDeployment
460     depends_on: NetworkDeployment
461     properties:
462       config: {get_resource: NovaComputeConfig}
463       server: {get_resource: NovaCompute}
464       input_values:
465         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
466         debug: {get_param: Debug}
467         nova_compute_driver: {get_param: NovaComputeDriver}
468         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
469         nova_public_ip: {get_param: NovaPublicIP}
470         nova_api_host: {get_param: NovaApiHost}
471         nova_password: {get_param: NovaPassword}
472         nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
473         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
474         nova_vnc_proxyclient_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaVncProxyNetwork]}]}
475         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
476         ceilometer_password: {get_param: CeilometerPassword}
477         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
478         ceilometer_agent_auth_url: {get_param: [EndpointMap, KeystoneInternal, uri]}
479         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
480         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
481         glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
482         neutron_flat_networks: {get_param: NeutronFlatNetworks}
483         neutron_host: {get_param: NeutronHost}
484         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
485         neutron_tenant_network_type: {get_param: NeutronNetworkType}
486         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
487         neutron_tunnel_id_ranges:
488           str_replace:
489             template: "['RANGES']"
490             params:
491               RANGES:
492                 list_join:
493                 - "','"
494                 - {get_param: NeutronTunnelIdRanges}
495         neutron_vni_ranges:
496           str_replace:
497             template: "['RANGES']"
498             params:
499               RANGES:
500                 list_join:
501                 - "','"
502                 - {get_param: NeutronVniRanges}
503         neutron_network_vlan_ranges:
504           str_replace:
505             template: "['RANGES']"
506             params:
507               RANGES:
508                 list_join:
509                 - "','"
510                 - {get_param: NeutronNetworkVLANRanges}
511         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
512         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
513         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
514         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
515         neutron_public_interface: {get_param: NeutronPublicInterface}
516         neutron_password: {get_param: NeutronPassword}
517         neutron_agent_mode: {get_param: NeutronAgentMode}
518         neutron_router_distributed: {get_param: NeutronDVR}
519         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
520         neutron_core_plugin: {get_param: NeutronCorePlugin}
521         neutron_service_plugins:
522           str_replace:
523             template: "['PLUGINS']"
524             params:
525               PLUGINS:
526                 list_join:
527                 - "','"
528                 - {get_param: NeutronServicePlugins}
529         neutron_type_drivers:
530           str_replace:
531             template: "['DRIVERS']"
532             params:
533               DRIVERS:
534                 list_join:
535                 - "','"
536                 - {get_param: NeutronTypeDrivers}
537         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
538         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
539         neutron_internal_url: {get_param: [EndpointMap, NeutronInternal, uri]}
540         neutron_admin_auth_url: {get_param: [EndpointMap, KeystoneAdmin, uri]}
541         admin_password: {get_param: AdminPassword}
542         rabbit_username: {get_param: RabbitUserName}
543         rabbit_password: {get_param: RabbitPassword}
544         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
545         rabbit_client_port: {get_param: RabbitClientPort}
546         ntp_servers: {get_param: NtpServer}
547         enable_package_install: {get_param: EnablePackageInstall}
548         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
549
550   # Resource for site-specific injection of root certificate
551   NodeTLSCAData:
552     depends_on: NovaComputeDeployment
553     type: OS::TripleO::NodeTLSCAData
554     properties:
555       server: {get_resource: NovaCompute}
556
557   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
558   ComputeExtraConfigPre:
559     depends_on: NovaComputeDeployment
560     type: OS::TripleO::ComputeExtraConfigPre
561     properties:
562         server: {get_resource: NovaCompute}
563
564   # Hook for site-specific additional pre-deployment config,
565   # applying to all nodes, e.g node registration/unregistration
566   NodeExtraConfig:
567     depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
568     type: OS::TripleO::NodeExtraConfig
569     properties:
570         server: {get_resource: NovaCompute}
571
572   UpdateConfig:
573     type: OS::TripleO::Tasks::PackageUpdate
574
575   UpdateDeployment:
576     type: OS::Heat::SoftwareDeployment
577     properties:
578       config: {get_resource: UpdateConfig}
579       server: {get_resource: NovaCompute}
580       input_values:
581         update_identifier:
582           get_param: UpdateIdentifier
583
584 outputs:
585   ip_address:
586     description: IP address of the server in the ctlplane network
587     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
588   internal_api_ip_address:
589     description: IP address of the server in the internal_api network
590     value: {get_attr: [InternalApiPort, ip_address]}
591   storage_ip_address:
592     description: IP address of the server in the storage network
593     value: {get_attr: [StoragePort, ip_address]}
594   tenant_ip_address:
595     description: IP address of the server in the tenant network
596     value: {get_attr: [TenantPort, ip_address]}
597   hostname:
598     description: Hostname of the server
599     value: {get_attr: [NovaCompute, name]}
600   hosts_entry:
601     description: >
602       Server's IP address and hostname in the /etc/hosts format
603     value:
604       str_replace:
605         template: "IP HOST.DOMAIN HOST"
606         params:
607           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
608           DOMAIN: {get_param: CloudDomain}
609           HOST: {get_attr: [NovaCompute, name]}
610   nova_server_resource:
611     description: Heat resource handle for the Nova compute server
612     value:
613       {get_resource: NovaCompute}
614   config_identifier:
615     description: identifier which changes if the node configuration may need re-applying
616     value:
617       list_join:
618       - ','
619       - - {get_attr: [NovaComputeDeployment, deploy_stdout]}
620         - {get_attr: [NodeTLSCAData, deploy_stdout]}
621         - {get_attr: [ComputeExtraConfigPre, deploy_stdout]}
622         - {get_param: UpdateIdentifier}