Composable Timezone service - ObjectStorage
[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   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: comma_delimited_list
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: comma_delimited_list
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: comma_delimited_list
100     description: The tenant network type for Neutron.
101     default: 'vxlan'
102   NeutronNetworkVLANRanges:
103     default: 'datacentre:1:1000'
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   NeutronTenantMtu:
122     description: >
123       The default MTU for tenant networks. For VXLAN/GRE tunneling, this should
124       be at least 50 bytes smaller than the MTU on the physical network. This
125       value will be used to set the MTU on the virtual Ethernet device.
126       This number is related to the value of NeutronDnsmasqOptions, since that
127       will determine the MTU that is assigned to the VM host through DHCP.
128     default: 1400
129     type: number
130   NeutronTunnelTypes:
131     type: comma_delimited_list
132     description: |
133         The tunnel types for the Neutron tenant network.
134     default: 'vxlan'
135   NeutronTunnelIdRanges:
136     description: |
137         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
138         of GRE tunnel IDs that are available for tenant network allocation
139     default: ["1:4094", ]
140     type: comma_delimited_list
141   NeutronVniRanges:
142     description: |
143         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
144         of VXLAN VNI IDs that are available for tenant network allocation
145     default: ["1:4094", ]
146     type: comma_delimited_list
147   NeutronMetadataProxySharedSecret:
148     description: Shared secret to prevent spoofing
149     type: string
150     hidden: true
151   NeutronCorePlugin:
152     default: 'ml2'
153     description: |
154         The core plugin for Neutron. The value should be the entrypoint to be loaded
155         from neutron.core_plugins namespace.
156     type: string
157   NeutronServicePlugins:
158     default: "router,qos"
159     description: |
160         Comma-separated list of service plugin entrypoints to be loaded from the
161         neutron.service_plugins namespace.
162     type: comma_delimited_list
163   NeutronTypeDrivers:
164     default: "vxlan,vlan,flat,gre"
165     description: |
166         Comma-separated list of network type driver entrypoints to be loaded.
167     type: comma_delimited_list
168   NeutronMechanismDrivers:
169     default: 'openvswitch'
170     description: |
171         The mechanism drivers for the Neutron tenant network.
172     type: comma_delimited_list
173   NeutronAgentExtensions:
174     default: "qos"
175     description: |
176         Comma-separated list of extensions enabled for the Neutron agents.
177     type: comma_delimited_list
178   # Not relevant for Computes, should be removed
179   NeutronAllowL3AgentFailover:
180     default: 'True'
181     description: Allow automatic l3-agent failover
182     type: string
183   # Not relevant for Computes, should be removed
184   NeutronL3HA:
185     default: 'False'
186     description: Whether to enable l3-agent HA
187     type: string
188   NodeIndex:
189     type: number
190     default: 0
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   NovaComputeIPs:
204     default: {}
205     type: json
206   NovaComputeLibvirtType:
207     type: string
208     default: kvm
209   NovaComputeLibvirtVifDriver:
210     default: ''
211     description: Libvirt VIF driver configuration for the network
212     type: string
213   NovaEnableRbdBackend:
214     default: false
215     description: Whether to enable or not the Rbd backend for Nova
216     type: boolean
217   NovaIPv6:
218     default: false
219     description: Enable IPv6 features in Nova
220     type: boolean
221   NovaPassword:
222     description: The password for the nova service account, used by nova-api.
223     type: string
224     hidden: true
225   NovaPublicIP:
226     type: string
227     default: ''  # Has to be here because of the ignored empty value bug
228   NovaOVSBridge:
229     default: 'br-int'
230     description: Name of integration bridge used by Open vSwitch
231     type: string
232   NovaSecurityGroupAPI:
233     default: 'neutron'
234     description: The full class name of the security API class
235     type: string
236   RabbitHost:
237     type: string
238     default: ''  # Has to be here because of the ignored empty value bug
239   RabbitPassword:
240     description: The password for RabbitMQ
241     type: string
242     hidden: true
243   RabbitUserName:
244     default: guest
245     description: The username for RabbitMQ
246     type: string
247   RabbitClientUseSSL:
248     default: false
249     description: >
250         Rabbit client subscriber parameter to specify
251         an SSL connection to the RabbitMQ host.
252     type: string
253   RabbitClientPort:
254     default: 5672
255     description: Set rabbit subscriber port, change this if using SSL
256     type: number
257   UpgradeLevelNovaCompute:
258     type: string
259     description: Nova Compute upgrade level
260     default: ''
261   EnablePackageInstall:
262     default: 'false'
263     description: Set to true to enable package installation via Puppet
264     type: boolean
265   ServiceNetMap:
266     default: {}
267     description: Mapping of service_name -> network name. Typically set
268                  via parameter_defaults in the resource registry.
269     type: json
270   EndpointMap:
271     default: {}
272     description: Mapping of service endpoint -> protocol. Typically set
273                  via parameter_defaults in the resource registry.
274     type: json
275   UpdateIdentifier:
276     default: ''
277     type: string
278     description: >
279       Setting to a previously unused value during stack-update will trigger
280       package update on all nodes
281   Hostname:
282     type: string
283     default: '' # Defaults to Heat created hostname
284   HostnameMap:
285     type: json
286     default: {}
287     description: Optional mapping to override hostnames
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   ServerMetadata:
307     default: {}
308     description: >
309       Extra properties or metadata passed to Nova for the created nodes in
310       the overcloud. It's accessible via the Nova metadata API.
311     type: json
312   SchedulerHints:
313     type: json
314     description: Optional scheduler hints to pass to nova
315     default: {}
316   ServiceConfigSettings:
317     type: json
318     default: {}
319
320 resources:
321
322   NovaCompute:
323     type: OS::Nova::Server
324     properties:
325       image:
326         {get_param: Image}
327       image_update_policy:
328         get_param: ImageUpdatePolicy
329       flavor: {get_param: Flavor}
330       key_name: {get_param: KeyName}
331       networks:
332         - network: ctlplane
333       user_data_format: SOFTWARE_CONFIG
334       user_data: {get_resource: UserData}
335       name:
336         str_replace:
337             template: {get_param: Hostname}
338             params: {get_param: HostnameMap}
339       software_config_transport: {get_param: SoftwareConfigTransport}
340       metadata: {get_param: ServerMetadata}
341       scheduler_hints: {get_param: SchedulerHints}
342
343   # Combine the NodeAdminUserData and NodeUserData mime archives
344   UserData:
345     type: OS::Heat::MultipartMime
346     properties:
347       parts:
348       - config: {get_resource: NodeAdminUserData}
349         type: multipart
350       - config: {get_resource: NodeUserData}
351         type: multipart
352
353   # Creates the "heat-admin" user if configured via the environment
354   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
355   NodeAdminUserData:
356     type: OS::TripleO::NodeAdminUserData
357
358   # For optional operator additional userdata
359   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
360   NodeUserData:
361     type: OS::TripleO::NodeUserData
362
363   ExternalPort:
364     type: OS::TripleO::Compute::Ports::ExternalPort
365     properties:
366       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
367       IPPool: {get_param: NovaComputeIPs}
368       NodeIndex: {get_param: NodeIndex}
369
370   InternalApiPort:
371     type: OS::TripleO::Compute::Ports::InternalApiPort
372     properties:
373       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
374       IPPool: {get_param: NovaComputeIPs}
375       NodeIndex: {get_param: NodeIndex}
376
377   StoragePort:
378     type: OS::TripleO::Compute::Ports::StoragePort
379     properties:
380       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
381       IPPool: {get_param: NovaComputeIPs}
382       NodeIndex: {get_param: NodeIndex}
383
384   StorageMgmtPort:
385     type: OS::TripleO::Compute::Ports::StorageMgmtPort
386     properties:
387       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
388       IPPool: {get_param: NovaComputeIPs}
389       NodeIndex: {get_param: NodeIndex}
390
391   TenantPort:
392     type: OS::TripleO::Compute::Ports::TenantPort
393     properties:
394       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
395       IPPool: {get_param: NovaComputeIPs}
396       NodeIndex: {get_param: NodeIndex}
397
398   ManagementPort:
399     type: OS::TripleO::Compute::Ports::ManagementPort
400     properties:
401       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
402       IPPool: {get_param: NovaComputeIPs}
403       NodeIndex: {get_param: NodeIndex}
404
405   NetIpMap:
406     type: OS::TripleO::Network::Ports::NetIpMap
407     properties:
408       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
409       ExternalIp: {get_attr: [ExternalPort, ip_address]}
410       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
411       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
412       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
413       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
414       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
415       StorageIp: {get_attr: [StoragePort, ip_address]}
416       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
417       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
418       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
419       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
420       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
421       TenantIp: {get_attr: [TenantPort, ip_address]}
422       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
423       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
424       ManagementIp: {get_attr: [ManagementPort, ip_address]}
425       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
426       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
427
428   NetworkConfig:
429     type: OS::TripleO::Compute::Net::SoftwareConfig
430     properties:
431       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
432       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
433       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
434       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
435       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
436       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
437       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
438
439   NetworkDeployment:
440     type: OS::TripleO::SoftwareDeployment
441     properties:
442       name: NetworkDeployment
443       config: {get_resource: NetworkConfig}
444       server: {get_resource: NovaCompute}
445       actions: {get_param: NetworkDeploymentActions}
446       input_values:
447         bridge_name: {get_param: NeutronPhysicalBridge}
448         interface_name: {get_param: NeutronPublicInterface}
449
450   NovaComputeConfig:
451     type: OS::Heat::StructuredConfig
452     properties:
453       group: os-apply-config
454       config:
455         hiera:
456           hierarchy:
457             - '"%{::uuid}"'
458             - heat_config_%{::deploy_config_name}
459             - compute_extraconfig
460             - extraconfig
461             - service_configs
462             - compute
463             - ceph_cluster # provided by CephClusterConfig
464             - ceph
465             - all_nodes # provided by allNodesConfig
466             - '"%{::osfamily}"'
467             - common
468             - network
469             - neutron_bigswitch_data # Optionally provided by ComputeExtraConfigPre
470             - cisco_n1kv_data  # Optionally provided by ComputeExtraConfigPre
471             - nova_nuage_data  # Optionally provided by ComputeExtraConfigPre
472             - midonet_data # Optionally provided by AllNodesExtraConfig
473             - neutron_opencontrail_data  # Optionally provided by ComputeExtraConfigPre
474           merge_behavior: deeper
475           datafiles:
476             service_configs:
477               mapped_data: {get_param: ServiceConfigSettings}
478             compute_extraconfig:
479               mapped_data: {get_param: NovaComputeExtraConfig}
480             extraconfig:
481               mapped_data: {get_param: ExtraConfig}
482             common:
483               raw_data: {get_file: hieradata/common.yaml}
484             network:
485               mapped_data:
486                 net_ip_map: {get_attr: [NetIpMap, net_ip_map]}
487                 net_ip_subnet_map: {get_attr: [NetIpMap, net_ip_subnet_map]}
488                 net_ip_uri_map: {get_attr: [NetIpMap, net_ip_uri_map]}
489             ceph:
490               raw_data: {get_file: hieradata/ceph.yaml}
491             compute:
492               raw_data: {get_file: hieradata/compute.yaml}
493               mapped_data:
494                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
495                 nova::use_ipv6: {get_input: nova_ipv6}
496                 nova::debug: {get_input: debug}
497                 nova::rabbit_userid: {get_input: rabbit_username}
498                 nova::rabbit_password: {get_input: rabbit_password}
499                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
500                 nova::rabbit_port: {get_input: rabbit_client_port}
501                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
502                 nova_compute_driver: {get_input: nova_compute_driver}
503                 nova::compute::libvirt::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
504                 nova::compute::neutron::libvirt_vif_driver: {get_input: nova_compute_libvirt_vif_driver}
505                 nova_api_host: {get_input: nova_api_host}
506                 nova::compute::vncproxy_host: {get_input: nova_public_ip}
507                 nova::compute::rbd::ephemeral_storage: {get_input: nova_enable_rbd_backend}
508                 # TUNNELLED mode provides a security enhancement when using shared storage but is not
509                 # supported when not using shared storage.
510                 # See https://bugzilla.redhat.com/show_bug.cgi?id=1301986#c12
511                 # In future versions of QEMU (2.6, mostly), Dan's native encryption
512                 # work will obsolete the need to use TUNNELLED transport mode.
513                 nova::migration::live_migration_tunnelled: {get_input: nova_enable_rbd_backend}
514                 rbd_persistent_storage: {get_input: cinder_enable_rbd_backend}
515                 nova_password: {get_input: nova_password}
516                 nova::compute::network_device_mtu: {get_input: neutron_tenant_mtu}
517                 nova::compute::vncserver_proxyclient_address: {get_input: nova_vnc_proxyclient_address}
518                 nova::vncproxy::common::vncproxy_protocol: {get_input: nova_vncproxy_protocol}
519                 nova::vncproxy::common::vncproxy_host: {get_input: nova_vncproxy_host}
520                 nova::vncproxy::common::vncproxy_port: {get_input: nova_vncproxy_port}
521                 nova::network::neutron::neutron_ovs_bridge: {get_input: nova_ovs_bridge}
522                 nova::network::neutron::security_group_api: {get_input: nova_security_group_api}
523                 ceilometer::debug: {get_input: debug}
524                 ceilometer::rabbit_userid: {get_input: rabbit_username}
525                 ceilometer::rabbit_password: {get_input: rabbit_password}
526                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
527                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
528                 ceilometer::telemetry_secret: {get_input: ceilometer_metering_secret}
529                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
530                 ceilometer::agent::auth::auth_url: {get_input: ceilometer_agent_auth_url}
531                 ceilometer_compute_agent: {get_input: ceilometer_compute_agent}
532                 nova::glance_api_servers: {get_input: glance_api_servers}
533                 neutron::debug: {get_input: debug}
534                 neutron::rabbit_password: {get_input: rabbit_password}
535                 neutron::rabbit_user: {get_input: rabbit_username}
536                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
537                 neutron::rabbit_port: {get_input: rabbit_client_port}
538                 neutron::plugins::ml2::flat_networks: {get_input: neutron_flat_networks}
539                 neutron_host: {get_input: neutron_host}
540                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
541
542                 neutron::network_device_mtu: {get_input: neutron_tenant_mtu}
543                 neutron::plugins::ml2::tenant_network_types: {get_input: neutron_tenant_network_types}
544                 neutron::agents::ml2::ovs::tunnel_types: {get_input: neutron_tunnel_types}
545                 neutron::agents::ml2::ovs::extensions: {get_input: neutron_agent_extensions}
546                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
547                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
548                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
549                 neutron::agents::ml2::ovs::bridge_mappings: {get_input: neutron_bridge_mappings}
550                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
551                 neutron::agents::ml2::ovs::l2_population: {get_input: neutron_enable_l2pop}
552                 neutron_physical_bridge: {get_input: neutron_physical_bridge}
553                 neutron_public_interface: {get_input: neutron_public_interface}
554                 nova::network::neutron::neutron_password: {get_input: neutron_password}
555                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
556                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
557                 neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
558                 neutron::core_plugin: {get_input: neutron_core_plugin}
559                 neutron::service_plugins: {get_input: neutron_service_plugins}
560                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
561                 neutron::plugins::ml2::mechanism_drivers: {get_input: neutron_mechanism_drivers}
562                 keystone_public_api_virtual_ip: {get_input: keystone_vip}
563                 admin_password: {get_input: admin_password}
564                 tripleo::packages::enable_install: {get_input: enable_package_install}
565                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
566
567   NovaComputeDeployment:
568     type: OS::TripleO::SoftwareDeployment
569     depends_on: NetworkDeployment
570     properties:
571       name: NovaComputeDeployment
572       config: {get_resource: NovaComputeConfig}
573       server: {get_resource: NovaCompute}
574       input_values:
575         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
576         debug: {get_param: Debug}
577         nova_compute_driver: {get_param: NovaComputeDriver}
578         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
579         nova_compute_libvirt_vif_driver: {get_param: NovaComputeLibvirtVifDriver}
580         nova_public_ip: {get_param: NovaPublicIP}
581         nova_api_host: {get_param: NovaApiHost}
582         nova_password: {get_param: NovaPassword}
583         nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
584         nova_ipv6: {get_param: NovaIPv6}
585         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
586         nova_vnc_proxyclient_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaVncProxyNetwork]}]}
587         nova_vncproxy_protocol: {get_param: [EndpointMap, NovaVNCProxyPublic, protocol]}
588         # Remove brackets that may come if the IP address is IPv6.
589         # For DNS names and IPv4, this will just get the NovaVNCProxyPublic value
590         nova_vncproxy_host:
591           str_replace:
592             template: {get_param: [EndpointMap, NovaVNCProxyPublic, host]}
593             params:
594               '[': ''
595               ']': ''
596         nova_vncproxy_port: {get_param: [EndpointMap, NovaVNCProxyPublic, port]}
597         nova_ovs_bridge: {get_param: NovaOVSBridge}
598         nova_security_group_api: {get_param: NovaSecurityGroupAPI}
599         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
600         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
601         ceilometer_password: {get_param: CeilometerPassword}
602         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
603         ceilometer_agent_auth_url: {get_param: [EndpointMap, KeystoneInternal, uri]}
604         glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
605         neutron_flat_networks:
606           str_replace:
607             template: NETWORKS
608             params:
609               NETWORKS: {get_param: NeutronFlatNetworks}
610         neutron_host: {get_param: NeutronHost}
611         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
612         neutron_tunnel_id_ranges:
613           str_replace:
614             template: RANGES
615             params:
616               RANGES: {get_param: NeutronTunnelIdRanges}
617         neutron_vni_ranges:
618           str_replace:
619             template: RANGES
620             params:
621               RANGES: {get_param: NeutronVniRanges}
622         neutron_tenant_network_types:
623           str_replace:
624             template: TYPES
625             params:
626               TYPES: {get_param: NeutronNetworkType}
627         neutron_tunnel_types:
628           str_replace:
629             template: TYPES
630             params:
631               TYPES: {get_param: NeutronTunnelTypes}
632         neutron_network_vlan_ranges:
633           str_replace:
634             template: RANGES
635             params:
636               RANGES: {get_param: NeutronNetworkVLANRanges}
637         neutron_bridge_mappings:
638           str_replace:
639             template: MAPPINGS
640             params:
641               MAPPINGS: {get_param: NeutronBridgeMappings}
642         neutron_tenant_mtu: {get_param: NeutronTenantMtu}
643         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
644         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
645         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
646         neutron_public_interface: {get_param: NeutronPublicInterface}
647         neutron_password: {get_param: NeutronPassword}
648         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
649         neutron_core_plugin: {get_param: NeutronCorePlugin}
650         neutron_service_plugins:
651           str_replace:
652             template: PLUGINS
653             params:
654               PLUGINS: {get_param: NeutronServicePlugins}
655         neutron_type_drivers:
656           str_replace:
657             template: DRIVERS
658             params:
659               DRIVERS: {get_param: NeutronTypeDrivers}
660         neutron_mechanism_drivers:
661           str_replace:
662             template: MECHANISMS
663             params:
664               MECHANISMS: {get_param: NeutronMechanismDrivers}
665         neutron_agent_extensions:
666           str_replace:
667             template: AGENT_EXTENSIONS
668             params:
669               AGENT_EXTENSIONS: {get_param: NeutronAgentExtensions}
670         neutron_internal_url: {get_param: [EndpointMap, NeutronInternal, uri]}
671         neutron_auth_url: {get_param: [EndpointMap, KeystoneV3Admin, uri]}
672         keystone_vip: {get_param: KeystonePublicApiVirtualIP}
673         admin_password: {get_param: AdminPassword}
674         rabbit_username: {get_param: RabbitUserName}
675         rabbit_password: {get_param: RabbitPassword}
676         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
677         rabbit_client_port: {get_param: RabbitClientPort}
678         enable_package_install: {get_param: EnablePackageInstall}
679         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
680
681   # Resource for site-specific injection of root certificate
682   NodeTLSCAData:
683     depends_on: NovaComputeDeployment
684     type: OS::TripleO::NodeTLSCAData
685     properties:
686       server: {get_resource: NovaCompute}
687
688   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
689   ComputeExtraConfigPre:
690     depends_on: NovaComputeDeployment
691     type: OS::TripleO::ComputeExtraConfigPre
692     properties:
693         server: {get_resource: NovaCompute}
694
695   # Hook for site-specific additional pre-deployment config,
696   # applying to all nodes, e.g node registration/unregistration
697   NodeExtraConfig:
698     depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
699     type: OS::TripleO::NodeExtraConfig
700     properties:
701         server: {get_resource: NovaCompute}
702
703   UpdateConfig:
704     type: OS::TripleO::Tasks::PackageUpdate
705
706   UpdateDeployment:
707     type: OS::Heat::SoftwareDeployment
708     properties:
709       name: UpdateDeployment
710       config: {get_resource: UpdateConfig}
711       server: {get_resource: NovaCompute}
712       input_values:
713         update_identifier:
714           get_param: UpdateIdentifier
715
716 outputs:
717   ip_address:
718     description: IP address of the server in the ctlplane network
719     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
720   external_ip_address:
721     description: IP address of the server in the external network
722     value: {get_attr: [ExternalPort, ip_address]}
723   internal_api_ip_address:
724     description: IP address of the server in the internal_api network
725     value: {get_attr: [InternalApiPort, ip_address]}
726   storage_ip_address:
727     description: IP address of the server in the storage network
728     value: {get_attr: [StoragePort, ip_address]}
729   storage_mgmt_ip_address:
730     description: IP address of the server in the storage_mgmt network
731     value: {get_attr: [StorageMgmtPort, ip_address]}
732   tenant_ip_address:
733     description: IP address of the server in the tenant network
734     value: {get_attr: [TenantPort, ip_address]}
735   management_ip_address:
736     description: IP address of the server in the management network
737     value: {get_attr: [ManagementPort, ip_address]}
738   hostname:
739     description: Hostname of the server
740     value: {get_attr: [NovaCompute, name]}
741   hosts_entry:
742     description: >
743       Server's IP address and hostname in the /etc/hosts format
744     value:
745       str_replace:
746         template: |
747           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
748           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
749           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
750           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
751           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
752           TENANTIP TENANTHOST.DOMAIN TENANTHOST
753           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
754         params:
755           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
756           DOMAIN: {get_param: CloudDomain}
757           PRIMARYHOST: {get_attr: [NovaCompute, name]}
758           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
759           EXTERNALHOST:
760             list_join:
761             - '.'
762             - - {get_attr: [NovaCompute, name]}
763               - external
764           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
765           INTERNAL_APIHOST:
766             list_join:
767             - '.'
768             - - {get_attr: [NovaCompute, name]}
769               - internalapi
770           STORAGEIP: {get_attr: [StoragePort, ip_address]}
771           STORAGEHOST:
772             list_join:
773             - '.'
774             - - {get_attr: [NovaCompute, name]}
775               - storage
776           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
777           STORAGE_MGMTHOST:
778             list_join:
779             - '.'
780             - - {get_attr: [NovaCompute, name]}
781               - storagemgmt
782           TENANTIP: {get_attr: [TenantPort, ip_address]}
783           TENANTHOST:
784             list_join:
785             - '.'
786             - - {get_attr: [NovaCompute, name]}
787               - tenant
788           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
789           MANAGEMENTHOST:
790             list_join:
791             - '.'
792             - - {get_attr: [NovaCompute, name]}
793               - management
794   nova_server_resource:
795     description: Heat resource handle for the Nova compute server
796     value:
797       {get_resource: NovaCompute}
798   config_identifier:
799     description: identifier which changes if the node configuration may need re-applying
800     value:
801       list_join:
802       - ','
803       - - {get_attr: [NovaComputeDeployment, deploy_stdout]}
804         - {get_attr: [NodeTLSCAData, deploy_stdout]}
805         - {get_attr: [ComputeExtraConfigPre, deploy_stdout]}
806         - {get_param: UpdateIdentifier}