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