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