Merge "Remove ::nova::cron::archive_deleted_rows"
[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     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 Nova key pair 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   NeutronPassword:
73     description: The password for the neutron service account, used by neutron agents.
74     type: string
75     hidden: true
76   NeutronPhysicalBridge:
77     default: 'br-ex'
78     description: An OVS bridge to create for accessing external networks.
79     type: string
80   NeutronPublicInterface:
81     default: nic1
82     description: A port to add to the NeutronPhysicalBridge.
83     type: string
84   NodeIndex:
85     type: number
86     default: 0
87   NovaApiHost:
88     type: string
89     default: ''  # Has to be here because of the ignored empty value bug
90   NovaComputeDriver:
91     type: string
92     default: libvirt.LibvirtDriver
93   NovaComputeExtraConfig:
94     default: {}
95     description: |
96       NovaCompute specific configuration to inject into the cluster. Same
97       structure as ExtraConfig.
98     type: json
99   NovaComputeIPs:
100     default: {}
101     type: json
102   NovaComputeLibvirtType:
103     type: string
104     default: kvm
105   NovaComputeLibvirtVifDriver:
106     default: ''
107     description: Libvirt VIF driver configuration for the network
108     type: string
109   NovaEnableRbdBackend:
110     default: false
111     description: Whether to enable or not the Rbd backend for Nova
112     type: boolean
113   NovaIPv6:
114     default: false
115     description: Enable IPv6 features in Nova
116     type: boolean
117   NovaPassword:
118     description: The password for the nova service account, used by nova-api.
119     type: string
120     hidden: true
121   NovaPublicIP:
122     type: string
123     default: ''  # Has to be here because of the ignored empty value bug
124   NovaOVSBridge:
125     default: 'br-int'
126     description: Name of integration bridge used by Open vSwitch
127     type: string
128   NovaSecurityGroupAPI:
129     default: 'neutron'
130     description: The full class name of the security API class
131     type: string
132   RabbitHost:
133     type: string
134     default: ''  # Has to be here because of the ignored empty value bug
135   RabbitPassword:
136     description: The password for RabbitMQ
137     type: string
138     hidden: true
139   RabbitUserName:
140     default: guest
141     description: The username for RabbitMQ
142     type: string
143   RabbitClientUseSSL:
144     default: false
145     description: >
146         Rabbit client subscriber parameter to specify
147         an SSL connection to the RabbitMQ host.
148     type: string
149   RabbitClientPort:
150     default: 5672
151     description: Set rabbit subscriber port, change this if using SSL
152     type: number
153   UpgradeLevelNovaCompute:
154     type: string
155     description: Nova Compute upgrade level
156     default: ''
157   EnablePackageInstall:
158     default: 'false'
159     description: Set to true to enable package installation via Puppet
160     type: boolean
161   ServiceNetMap:
162     default: {}
163     description: Mapping of service_name -> network name. Typically set
164                  via parameter_defaults in the resource registry.
165     type: json
166   EndpointMap:
167     default: {}
168     description: Mapping of service endpoint -> protocol. Typically set
169                  via parameter_defaults in the resource registry.
170     type: json
171   UpdateIdentifier:
172     default: ''
173     type: string
174     description: >
175       Setting to a previously unused value during stack-update will trigger
176       package update on all nodes
177   Hostname:
178     type: string
179     default: '' # Defaults to Heat created hostname
180   HostnameMap:
181     type: json
182     default: {}
183     description: Optional mapping to override hostnames
184   NetworkDeploymentActions:
185     type: comma_delimited_list
186     description: >
187       Heat action when to apply network configuration changes
188     default: ['CREATE']
189   SoftwareConfigTransport:
190     default: POLL_SERVER_CFN
191     description: |
192       How the server should receive the metadata required for software configuration.
193     type: string
194     constraints:
195     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
196   CloudDomain:
197     default: ''
198     type: string
199     description: >
200       The DNS domain used for the hosts. This should match the dhcp_domain
201       configured in the Undercloud neutron. Defaults to localdomain.
202   ServerMetadata:
203     default: {}
204     description: >
205       Extra properties or metadata passed to Nova for the created nodes in
206       the overcloud. It's accessible via the Nova metadata API.
207     type: json
208   SchedulerHints:
209     type: json
210     description: Optional scheduler hints to pass to nova
211     default: {}
212   ServiceConfigSettings:
213     type: json
214     default: {}
215   ConfigCommand:
216     type: string
217     description: Command which will be run whenever configuration data changes
218     default: os-refresh-config --timeout 14400
219
220 resources:
221
222   NovaCompute:
223     type: OS::TripleO::Server
224     metadata:
225       os-collect-config:
226         command: {get_param: ConfigCommand}
227     properties:
228       image:
229         {get_param: Image}
230       image_update_policy:
231         get_param: ImageUpdatePolicy
232       flavor: {get_param: Flavor}
233       key_name: {get_param: KeyName}
234       networks:
235         - network: ctlplane
236       user_data_format: SOFTWARE_CONFIG
237       user_data: {get_resource: UserData}
238       name:
239         str_replace:
240             template: {get_param: Hostname}
241             params: {get_param: HostnameMap}
242       software_config_transport: {get_param: SoftwareConfigTransport}
243       metadata: {get_param: ServerMetadata}
244       scheduler_hints: {get_param: SchedulerHints}
245
246   # Combine the NodeAdminUserData and NodeUserData mime archives
247   UserData:
248     type: OS::Heat::MultipartMime
249     properties:
250       parts:
251       - config: {get_resource: NodeAdminUserData}
252         type: multipart
253       - config: {get_resource: NodeUserData}
254         type: multipart
255
256   # Creates the "heat-admin" user if configured via the environment
257   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
258   NodeAdminUserData:
259     type: OS::TripleO::NodeAdminUserData
260
261   # For optional operator additional userdata
262   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
263   NodeUserData:
264     type: OS::TripleO::NodeUserData
265
266   ExternalPort:
267     type: OS::TripleO::Compute::Ports::ExternalPort
268     properties:
269       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
270       IPPool: {get_param: NovaComputeIPs}
271       NodeIndex: {get_param: NodeIndex}
272
273   InternalApiPort:
274     type: OS::TripleO::Compute::Ports::InternalApiPort
275     properties:
276       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
277       IPPool: {get_param: NovaComputeIPs}
278       NodeIndex: {get_param: NodeIndex}
279
280   StoragePort:
281     type: OS::TripleO::Compute::Ports::StoragePort
282     properties:
283       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
284       IPPool: {get_param: NovaComputeIPs}
285       NodeIndex: {get_param: NodeIndex}
286
287   StorageMgmtPort:
288     type: OS::TripleO::Compute::Ports::StorageMgmtPort
289     properties:
290       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
291       IPPool: {get_param: NovaComputeIPs}
292       NodeIndex: {get_param: NodeIndex}
293
294   TenantPort:
295     type: OS::TripleO::Compute::Ports::TenantPort
296     properties:
297       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
298       IPPool: {get_param: NovaComputeIPs}
299       NodeIndex: {get_param: NodeIndex}
300
301   ManagementPort:
302     type: OS::TripleO::Compute::Ports::ManagementPort
303     properties:
304       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
305       IPPool: {get_param: NovaComputeIPs}
306       NodeIndex: {get_param: NodeIndex}
307
308   NetIpMap:
309     type: OS::TripleO::Network::Ports::NetIpMap
310     properties:
311       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
312       ExternalIp: {get_attr: [ExternalPort, ip_address]}
313       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
314       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
315       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
316       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
317       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
318       StorageIp: {get_attr: [StoragePort, ip_address]}
319       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
320       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
321       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
322       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
323       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
324       TenantIp: {get_attr: [TenantPort, ip_address]}
325       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
326       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
327       ManagementIp: {get_attr: [ManagementPort, ip_address]}
328       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
329       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
330
331   NetworkConfig:
332     type: OS::TripleO::Compute::Net::SoftwareConfig
333     properties:
334       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
335       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
336       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
337       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
338       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
339       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
340       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
341
342   NetworkDeployment:
343     type: OS::TripleO::SoftwareDeployment
344     properties:
345       name: NetworkDeployment
346       config: {get_resource: NetworkConfig}
347       server: {get_resource: NovaCompute}
348       actions: {get_param: NetworkDeploymentActions}
349       input_values:
350         bridge_name: {get_param: NeutronPhysicalBridge}
351         interface_name: {get_param: NeutronPublicInterface}
352
353   NovaComputeConfig:
354     type: OS::Heat::StructuredConfig
355     properties:
356       group: os-apply-config
357       config:
358         hiera:
359           hierarchy:
360             - '"%{::uuid}"'
361             - heat_config_%{::deploy_config_name}
362             - compute_extraconfig
363             - extraconfig
364             - service_configs
365             - compute
366             - ceph_cluster # provided by CephClusterConfig
367             - ceph
368             - all_nodes # provided by allNodesConfig
369             - '"%{::osfamily}"'
370             - common
371             - network
372             - neutron_bigswitch_data # Optionally provided by ComputeExtraConfigPre
373             - cisco_n1kv_data  # Optionally provided by ComputeExtraConfigPre
374             - nova_nuage_data  # Optionally provided by ComputeExtraConfigPre
375             - midonet_data # Optionally provided by AllNodesExtraConfig
376             - neutron_opencontrail_data  # Optionally provided by ComputeExtraConfigPre
377           merge_behavior: deeper
378           datafiles:
379             service_configs:
380               mapped_data: {get_param: ServiceConfigSettings}
381             compute_extraconfig:
382               mapped_data: {get_param: NovaComputeExtraConfig}
383             extraconfig:
384               mapped_data: {get_param: ExtraConfig}
385             common:
386               raw_data: {get_file: hieradata/common.yaml}
387             network:
388               mapped_data:
389                 net_ip_map: {get_attr: [NetIpMap, net_ip_map]}
390                 net_ip_subnet_map: {get_attr: [NetIpMap, net_ip_subnet_map]}
391                 net_ip_uri_map: {get_attr: [NetIpMap, net_ip_uri_map]}
392             ceph:
393               raw_data: {get_file: hieradata/ceph.yaml}
394             compute:
395               raw_data: {get_file: hieradata/compute.yaml}
396               mapped_data:
397                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
398                 nova::use_ipv6: {get_input: nova_ipv6}
399                 nova::debug: {get_input: debug}
400                 nova::rabbit_userid: {get_input: rabbit_username}
401                 nova::rabbit_password: {get_input: rabbit_password}
402                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
403                 nova::rabbit_port: {get_input: rabbit_client_port}
404                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
405                 nova_compute_driver: {get_input: nova_compute_driver}
406                 # TODO(emilien): move libvirt & migration parameters in libvirt profile
407                 # used to deploy libvirt/kvm dependencies:
408                 nova::compute::libvirt::services::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
409                 # used to configured nova.conf:
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                 # TUNNELLED mode provides a security enhancement when using shared storage but is not
416                 # supported when not using shared storage.
417                 # See https://bugzilla.redhat.com/show_bug.cgi?id=1301986#c12
418                 # In future versions of QEMU (2.6, mostly), Dan's native encryption
419                 # work will obsolete the need to use TUNNELLED transport mode.
420                 nova::migration::live_migration_tunnelled: {get_input: nova_enable_rbd_backend}
421                 rbd_persistent_storage: {get_input: cinder_enable_rbd_backend}
422                 nova_password: {get_input: nova_password}
423                 nova::compute::vncserver_proxyclient_address: {get_input: nova_vnc_proxyclient_address}
424                 nova::vncproxy::common::vncproxy_protocol: {get_input: nova_vncproxy_protocol}
425                 nova::vncproxy::common::vncproxy_host: {get_input: nova_vncproxy_host}
426                 nova::vncproxy::common::vncproxy_port: {get_input: nova_vncproxy_port}
427                 nova::network::neutron::neutron_ovs_bridge: {get_input: nova_ovs_bridge}
428                 nova::network::neutron::security_group_api: {get_input: nova_security_group_api}
429                 ceilometer::debug: {get_input: debug}
430                 ceilometer::rabbit_userid: {get_input: rabbit_username}
431                 ceilometer::rabbit_password: {get_input: rabbit_password}
432                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
433                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
434                 ceilometer::telemetry_secret: {get_input: ceilometer_metering_secret}
435                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
436                 ceilometer::agent::auth::auth_url: {get_input: ceilometer_agent_auth_url}
437                 nova::glance_api_servers: {get_input: glance_api_servers}
438                 neutron::debug: {get_input: debug}
439                 neutron::rabbit_password: {get_input: rabbit_password}
440                 neutron::rabbit_user: {get_input: rabbit_username}
441                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
442                 neutron::rabbit_port: {get_input: rabbit_client_port}
443                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
444
445                 nova::network::neutron::neutron_password: {get_input: neutron_password}
446                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
447                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
448                 keystone_public_api_virtual_ip: {get_input: keystone_vip}
449                 admin_password: {get_input: admin_password}
450                 tripleo::packages::enable_install: {get_input: enable_package_install}
451                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
452
453   NovaComputeDeployment:
454     type: OS::TripleO::SoftwareDeployment
455     depends_on: NetworkDeployment
456     properties:
457       name: NovaComputeDeployment
458       config: {get_resource: NovaComputeConfig}
459       server: {get_resource: NovaCompute}
460       input_values:
461         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
462         debug: {get_param: Debug}
463         nova_compute_driver: {get_param: NovaComputeDriver}
464         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
465         nova_compute_libvirt_vif_driver: {get_param: NovaComputeLibvirtVifDriver}
466         nova_public_ip: {get_param: NovaPublicIP}
467         nova_api_host: {get_param: NovaApiHost}
468         nova_password: {get_param: NovaPassword}
469         nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
470         nova_ipv6: {get_param: NovaIPv6}
471         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
472         nova_vnc_proxyclient_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaVncProxyNetwork]}]}
473         nova_vncproxy_protocol: {get_param: [EndpointMap, NovaVNCProxyPublic, protocol]}
474         # Remove brackets that may come if the IP address is IPv6.
475         # For DNS names and IPv4, this will just get the NovaVNCProxyPublic value
476         nova_vncproxy_host:
477           str_replace:
478             template: {get_param: [EndpointMap, NovaVNCProxyPublic, host]}
479             params:
480               '[': ''
481               ']': ''
482         nova_vncproxy_port: {get_param: [EndpointMap, NovaVNCProxyPublic, port]}
483         nova_ovs_bridge: {get_param: NovaOVSBridge}
484         nova_security_group_api: {get_param: NovaSecurityGroupAPI}
485         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
486         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
487         ceilometer_password: {get_param: CeilometerPassword}
488         ceilometer_agent_auth_url: {get_param: [EndpointMap, KeystoneInternal, uri_no_suffix]}
489         glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
490         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
491         neutron_password: {get_param: NeutronPassword}
492         neutron_internal_url: {get_param: [EndpointMap, NeutronInternal, uri]}
493         neutron_auth_url: {get_param: [EndpointMap, KeystoneV3Admin, uri]}
494         keystone_vip: {get_param: KeystonePublicApiVirtualIP}
495         admin_password: {get_param: AdminPassword}
496         rabbit_username: {get_param: RabbitUserName}
497         rabbit_password: {get_param: RabbitPassword}
498         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
499         rabbit_client_port: {get_param: RabbitClientPort}
500         enable_package_install: {get_param: EnablePackageInstall}
501         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
502
503   # Resource for site-specific injection of root certificate
504   NodeTLSCAData:
505     depends_on: NovaComputeDeployment
506     type: OS::TripleO::NodeTLSCAData
507     properties:
508       server: {get_resource: NovaCompute}
509
510   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
511   ComputeExtraConfigPre:
512     depends_on: NovaComputeDeployment
513     type: OS::TripleO::ComputeExtraConfigPre
514     properties:
515         server: {get_resource: NovaCompute}
516
517   # Hook for site-specific additional pre-deployment config,
518   # applying to all nodes, e.g node registration/unregistration
519   NodeExtraConfig:
520     depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
521     type: OS::TripleO::NodeExtraConfig
522     properties:
523         server: {get_resource: NovaCompute}
524
525   UpdateConfig:
526     type: OS::TripleO::Tasks::PackageUpdate
527
528   UpdateDeployment:
529     type: OS::Heat::SoftwareDeployment
530     properties:
531       name: UpdateDeployment
532       config: {get_resource: UpdateConfig}
533       server: {get_resource: NovaCompute}
534       input_values:
535         update_identifier:
536           get_param: UpdateIdentifier
537
538 outputs:
539   ip_address:
540     description: IP address of the server in the ctlplane network
541     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
542   external_ip_address:
543     description: IP address of the server in the external network
544     value: {get_attr: [ExternalPort, ip_address]}
545   internal_api_ip_address:
546     description: IP address of the server in the internal_api network
547     value: {get_attr: [InternalApiPort, ip_address]}
548   storage_ip_address:
549     description: IP address of the server in the storage network
550     value: {get_attr: [StoragePort, ip_address]}
551   storage_mgmt_ip_address:
552     description: IP address of the server in the storage_mgmt network
553     value: {get_attr: [StorageMgmtPort, ip_address]}
554   tenant_ip_address:
555     description: IP address of the server in the tenant network
556     value: {get_attr: [TenantPort, ip_address]}
557   management_ip_address:
558     description: IP address of the server in the management network
559     value: {get_attr: [ManagementPort, ip_address]}
560   hostname:
561     description: Hostname of the server
562     value: {get_attr: [NovaCompute, name]}
563   hosts_entry:
564     description: >
565       Server's IP address and hostname in the /etc/hosts format
566     value:
567       str_replace:
568         template: |
569           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
570           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
571           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
572           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
573           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
574           TENANTIP TENANTHOST.DOMAIN TENANTHOST
575           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
576         params:
577           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
578           DOMAIN: {get_param: CloudDomain}
579           PRIMARYHOST: {get_attr: [NovaCompute, name]}
580           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
581           EXTERNALHOST:
582             list_join:
583             - '.'
584             - - {get_attr: [NovaCompute, name]}
585               - external
586           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
587           INTERNAL_APIHOST:
588             list_join:
589             - '.'
590             - - {get_attr: [NovaCompute, name]}
591               - internalapi
592           STORAGEIP: {get_attr: [StoragePort, ip_address]}
593           STORAGEHOST:
594             list_join:
595             - '.'
596             - - {get_attr: [NovaCompute, name]}
597               - storage
598           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
599           STORAGE_MGMTHOST:
600             list_join:
601             - '.'
602             - - {get_attr: [NovaCompute, name]}
603               - storagemgmt
604           TENANTIP: {get_attr: [TenantPort, ip_address]}
605           TENANTHOST:
606             list_join:
607             - '.'
608             - - {get_attr: [NovaCompute, name]}
609               - tenant
610           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
611           MANAGEMENTHOST:
612             list_join:
613             - '.'
614             - - {get_attr: [NovaCompute, name]}
615               - management
616   nova_server_resource:
617     description: Heat resource handle for the Nova compute server
618     value:
619       {get_resource: NovaCompute}