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