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