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