Merge "Added libvirt_vif_driver, ovs_bridge and security_group_api parameters"
[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   NovaComputeLibvirtVifDriver:
207     default: ''
208     description: Libvirt VIF driver configuration for the network
209     type: string
210   NovaEnableRbdBackend:
211     default: false
212     description: Whether to enable or not the Rbd backend for Nova
213     type: boolean
214   NovaPassword:
215     default: unset
216     description: The password for the nova service account, used by nova-api.
217     type: string
218     hidden: true
219   NovaPublicIP:
220     type: string
221     default: ''  # Has to be here because of the ignored empty value bug
222   NovaOVSBridge:
223     default: 'br-int'
224     description: Name of integration bridge used by Open vSwitch
225     type: string
226   NovaSecurityGroupAPI:
227     default: 'neutron'
228     description: The full class name of the security API class
229     type: string
230   NtpServer:
231     default: ''
232     description: Comma-separated list of ntp servers
233     type: comma_delimited_list
234   RabbitHost:
235     type: string
236     default: ''  # Has to be here because of the ignored empty value bug
237   RabbitPassword:
238     default: guest
239     description: The password for RabbitMQ
240     type: string
241     hidden: true
242   RabbitUserName:
243     default: guest
244     description: The username for RabbitMQ
245     type: string
246   RabbitClientUseSSL:
247     default: false
248     description: >
249         Rabbit client subscriber parameter to specify
250         an SSL connection to the RabbitMQ host.
251     type: string
252   RabbitClientPort:
253     default: 5672
254     description: Set rabbit subscriber port, change this if using SSL
255     type: number
256   SnmpdReadonlyUserName:
257     default: ro_snmp_user
258     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
259     type: string
260   SnmpdReadonlyUserPassword:
261     default: unset
262     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
263     type: string
264     hidden: true
265   EnablePackageInstall:
266     default: 'false'
267     description: Set to true to enable package installation via Puppet
268     type: boolean
269   ServiceNetMap:
270     default: {}
271     description: Mapping of service_name -> network name. Typically set
272                  via parameter_defaults in the resource registry.
273     type: json
274   EndpointMap:
275     default: {}
276     description: Mapping of service endpoint -> protocol. Typically set
277                  via parameter_defaults in the resource registry.
278     type: json
279   UpdateIdentifier:
280     default: ''
281     type: string
282     description: >
283       Setting to a previously unused value during stack-update will trigger
284       package update on all nodes
285   Hostname:
286     type: string
287     default: '' # Defaults to Heat created hostname
288   NetworkDeploymentActions:
289     type: comma_delimited_list
290     description: >
291       Heat action when to apply network configuration changes
292     default: ['CREATE']
293
294 resources:
295
296   NovaCompute:
297     type: OS::Nova::Server
298     properties:
299       image:
300         {get_param: Image}
301       image_update_policy:
302         get_param: ImageUpdatePolicy
303       flavor: {get_param: Flavor}
304       key_name: {get_param: KeyName}
305       networks:
306         - network: ctlplane
307       user_data_format: SOFTWARE_CONFIG
308       user_data: {get_resource: UserData}
309       name: {get_param: Hostname}
310
311   # Combine the NodeAdminUserData and NodeUserData mime archives
312   UserData:
313     type: OS::Heat::MultipartMime
314     properties:
315       parts:
316       - config: {get_resource: NodeAdminUserData}
317         type: multipart
318       - config: {get_resource: NodeUserData}
319         type: multipart
320
321   # Creates the "heat-admin" user if configured via the environment
322   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
323   NodeAdminUserData:
324     type: OS::TripleO::NodeAdminUserData
325
326   # For optional operator additional userdata
327   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
328   NodeUserData:
329     type: OS::TripleO::NodeUserData
330
331   InternalApiPort:
332     type: OS::TripleO::Compute::Ports::InternalApiPort
333     properties:
334       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
335
336   StoragePort:
337     type: OS::TripleO::Compute::Ports::StoragePort
338     properties:
339       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
340
341   TenantPort:
342     type: OS::TripleO::Compute::Ports::TenantPort
343     properties:
344       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
345
346   NetIpMap:
347     type: OS::TripleO::Network::Ports::NetIpMap
348     properties:
349       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
350       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
351       StorageIp: {get_attr: [StoragePort, ip_address]}
352       TenantIp: {get_attr: [TenantPort, ip_address]}
353
354   NetworkConfig:
355     type: OS::TripleO::Compute::Net::SoftwareConfig
356     properties:
357       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
358       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
359       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
360       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
361
362   NetworkDeployment:
363     type: OS::TripleO::SoftwareDeployment
364     properties:
365       config: {get_resource: NetworkConfig}
366       server: {get_resource: NovaCompute}
367       actions: {get_param: NetworkDeploymentActions}
368       input_values:
369         bridge_name: {get_param: NeutronPhysicalBridge}
370         interface_name: {get_param: NeutronPublicInterface}
371
372   NovaComputeConfig:
373     type: OS::Heat::StructuredConfig
374     properties:
375       group: os-apply-config
376       config:
377         hiera:
378           hierarchy:
379             - '"%{::uuid}"'
380             - heat_config_%{::deploy_config_name}
381             - compute_extraconfig
382             - extraconfig
383             - compute
384             - ceph_cluster # provided by CephClusterConfig
385             - ceph
386             - all_nodes # provided by allNodesConfig
387             - '"%{::osfamily}"'
388             - common
389             - cisco_n1kv_data  # Optionally provided by ComputeExtraConfigPre
390             - nova_nuage_data  # Optionally provided by ComputeExtraConfigPre
391           datafiles:
392             compute_extraconfig:
393               mapped_data: {get_param: NovaComputeExtraConfig}
394             extraconfig:
395               mapped_data: {get_param: ExtraConfig}
396             common:
397               raw_data: {get_file: hieradata/common.yaml}
398             ceph:
399               raw_data: {get_file: hieradata/ceph.yaml}
400             compute:
401               raw_data: {get_file: hieradata/compute.yaml}
402               mapped_data:
403                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
404                 nova::debug: {get_input: debug}
405                 nova::rabbit_userid: {get_input: rabbit_username}
406                 nova::rabbit_password: {get_input: rabbit_password}
407                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
408                 nova::rabbit_port: {get_input: rabbit_client_port}
409                 nova_compute_driver: {get_input: nova_compute_driver}
410                 nova::compute::libvirt::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
411                 nova::compute::neutron::libvirt_vif_driver: {get_input: nova_compute_libvirt_vif_driver}
412                 nova_api_host: {get_input: nova_api_host}
413                 nova::compute::vncproxy_host: {get_input: nova_public_ip}
414                 nova::compute::rbd::ephemeral_storage: {get_input: nova_enable_rbd_backend}
415                 rbd_persistent_storage: {get_input: cinder_enable_rbd_backend}
416                 nova_password: {get_input: nova_password}
417                 nova::compute::vncserver_proxyclient_address: {get_input: nova_vnc_proxyclient_address}
418                 nova::network::neutron::neutron_ovs_bridge: {get_input: nova_ovs_bridge}
419                 nova::network::neutron::security_group_api: {get_input: nova_security_group_api}
420                 ceilometer::debug: {get_input: debug}
421                 ceilometer::rabbit_userid: {get_input: rabbit_username}
422                 ceilometer::rabbit_password: {get_input: rabbit_password}
423                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
424                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
425                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
426                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
427                 ceilometer::agent::auth::auth_url: {get_input: ceilometer_agent_auth_url}
428                 ceilometer_compute_agent: {get_input: ceilometer_compute_agent}
429                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
430                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
431                 nova::glance_api_servers: {get_input: glance_api_servers}
432                 neutron::debug: {get_input: debug}
433                 neutron::rabbit_password: {get_input: rabbit_password}
434                 neutron::rabbit_user: {get_input: rabbit_username}
435                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
436                 neutron::rabbit_port: {get_input: rabbit_client_port}
437                 neutron_flat_networks: {get_input: neutron_flat_networks}
438                 neutron_host: {get_input: neutron_host}
439                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
440
441                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
442                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
443                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
444                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
445                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
446                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
447                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
448                 neutron::agents::ml2::ovs::l2_population: {get_input: neutron_enable_l2pop}
449                 neutron_physical_bridge: {get_input: neutron_physical_bridge}
450                 neutron_public_interface: {get_input: neutron_public_interface}
451                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
452                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
453                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
454                 neutron_router_distributed: {get_input: neutron_router_distributed}
455                 neutron_agent_mode: {get_input: neutron_agent_mode}
456                 neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
457                 neutron::core_plugin: {get_input: neutron_core_plugin}
458                 neutron::service_plugins: {get_input: neutron_service_plugins}
459                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
460                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
461                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
462                 admin_password: {get_input: admin_password}
463                 ntp::servers: {get_input: ntp_servers}
464                 tripleo::packages::enable_install: {get_input: enable_package_install}
465                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
466
467   NovaComputeDeployment:
468     type: OS::TripleO::SoftwareDeployment
469     depends_on: NetworkDeployment
470     properties:
471       config: {get_resource: NovaComputeConfig}
472       server: {get_resource: NovaCompute}
473       input_values:
474         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
475         debug: {get_param: Debug}
476         nova_compute_driver: {get_param: NovaComputeDriver}
477         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
478         nova_compute_libvirt_vif_driver: {get_param: NovaComputeLibvirtVifDriver}
479         nova_public_ip: {get_param: NovaPublicIP}
480         nova_api_host: {get_param: NovaApiHost}
481         nova_password: {get_param: NovaPassword}
482         nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
483         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
484         nova_vnc_proxyclient_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaVncProxyNetwork]}]}
485         nova_ovs_bridge: {get_param: NovaOVSBridge}
486         nova_security_group_api: {get_param: NovaSecurityGroupAPI}
487         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
488         ceilometer_password: {get_param: CeilometerPassword}
489         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
490         ceilometer_agent_auth_url: {get_param: [EndpointMap, KeystoneInternal, uri]}
491         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
492         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
493         glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
494         neutron_flat_networks: {get_param: NeutronFlatNetworks}
495         neutron_host: {get_param: NeutronHost}
496         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
497         neutron_tenant_network_type: {get_param: NeutronNetworkType}
498         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
499         neutron_tunnel_id_ranges:
500           str_replace:
501             template: "['RANGES']"
502             params:
503               RANGES:
504                 list_join:
505                 - "','"
506                 - {get_param: NeutronTunnelIdRanges}
507         neutron_vni_ranges:
508           str_replace:
509             template: "['RANGES']"
510             params:
511               RANGES:
512                 list_join:
513                 - "','"
514                 - {get_param: NeutronVniRanges}
515         neutron_network_vlan_ranges:
516           str_replace:
517             template: "['RANGES']"
518             params:
519               RANGES:
520                 list_join:
521                 - "','"
522                 - {get_param: NeutronNetworkVLANRanges}
523         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
524         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
525         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
526         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
527         neutron_public_interface: {get_param: NeutronPublicInterface}
528         neutron_password: {get_param: NeutronPassword}
529         neutron_agent_mode: {get_param: NeutronAgentMode}
530         neutron_router_distributed: {get_param: NeutronDVR}
531         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
532         neutron_core_plugin: {get_param: NeutronCorePlugin}
533         neutron_service_plugins:
534           str_replace:
535             template: "['PLUGINS']"
536             params:
537               PLUGINS:
538                 list_join:
539                 - "','"
540                 - {get_param: NeutronServicePlugins}
541         neutron_type_drivers:
542           str_replace:
543             template: "['DRIVERS']"
544             params:
545               DRIVERS:
546                 list_join:
547                 - "','"
548                 - {get_param: NeutronTypeDrivers}
549         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
550         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
551         neutron_internal_url: {get_param: [EndpointMap, NeutronInternal, uri]}
552         neutron_admin_auth_url: {get_param: [EndpointMap, KeystoneAdmin, uri]}
553         admin_password: {get_param: AdminPassword}
554         rabbit_username: {get_param: RabbitUserName}
555         rabbit_password: {get_param: RabbitPassword}
556         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
557         rabbit_client_port: {get_param: RabbitClientPort}
558         ntp_servers: {get_param: NtpServer}
559         enable_package_install: {get_param: EnablePackageInstall}
560         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
561
562   # Resource for site-specific injection of root certificate
563   NodeTLSCAData:
564     depends_on: NovaComputeDeployment
565     type: OS::TripleO::NodeTLSCAData
566     properties:
567       server: {get_resource: NovaCompute}
568
569   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
570   ComputeExtraConfigPre:
571     depends_on: NovaComputeDeployment
572     type: OS::TripleO::ComputeExtraConfigPre
573     properties:
574         server: {get_resource: NovaCompute}
575
576   # Hook for site-specific additional pre-deployment config,
577   # applying to all nodes, e.g node registration/unregistration
578   NodeExtraConfig:
579     depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
580     type: OS::TripleO::NodeExtraConfig
581     properties:
582         server: {get_resource: NovaCompute}
583
584   UpdateConfig:
585     type: OS::TripleO::Tasks::PackageUpdate
586
587   UpdateDeployment:
588     type: OS::Heat::SoftwareDeployment
589     properties:
590       config: {get_resource: UpdateConfig}
591       server: {get_resource: NovaCompute}
592       input_values:
593         update_identifier:
594           get_param: UpdateIdentifier
595
596 outputs:
597   ip_address:
598     description: IP address of the server in the ctlplane network
599     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
600   internal_api_ip_address:
601     description: IP address of the server in the internal_api network
602     value: {get_attr: [InternalApiPort, ip_address]}
603   storage_ip_address:
604     description: IP address of the server in the storage network
605     value: {get_attr: [StoragePort, ip_address]}
606   tenant_ip_address:
607     description: IP address of the server in the tenant network
608     value: {get_attr: [TenantPort, ip_address]}
609   hostname:
610     description: Hostname of the server
611     value: {get_attr: [NovaCompute, name]}
612   hosts_entry:
613     description: >
614       Server's IP address and hostname in the /etc/hosts format
615     value:
616       str_replace:
617         template: "IP HOST.localdomain HOST"
618         params:
619           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
620           HOST: {get_attr: [NovaCompute, name]}
621   nova_server_resource:
622     description: Heat resource handle for the Nova compute server
623     value:
624       {get_resource: NovaCompute}
625   config_identifier:
626     description: identifier which changes if the node configuration may need re-applying
627     value:
628       list_join:
629       - ','
630       - - {get_attr: [NovaComputeDeployment, deploy_stdout]}
631         - {get_attr: [NodeTLSCAData, deploy_stdout]}
632         - {get_attr: [ComputeExtraConfigPre, deploy_stdout]}
633         - {get_param: UpdateIdentifier}