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