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