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