Merge "Adjust UpgradeLevelNovaCompute rpc messaging pin to mitaka"
[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   ServiceConfigSettings:
343     type: json
344     default: {}
345
346 resources:
347
348   NovaCompute:
349     type: OS::Nova::Server
350     properties:
351       image:
352         {get_param: Image}
353       image_update_policy:
354         get_param: ImageUpdatePolicy
355       flavor: {get_param: Flavor}
356       key_name: {get_param: KeyName}
357       networks:
358         - network: ctlplane
359       user_data_format: SOFTWARE_CONFIG
360       user_data: {get_resource: UserData}
361       name:
362         str_replace:
363             template: {get_param: Hostname}
364             params: {get_param: HostnameMap}
365       software_config_transport: {get_param: SoftwareConfigTransport}
366       metadata: {get_param: ServerMetadata}
367       scheduler_hints: {get_param: SchedulerHints}
368
369   # Combine the NodeAdminUserData and NodeUserData mime archives
370   UserData:
371     type: OS::Heat::MultipartMime
372     properties:
373       parts:
374       - config: {get_resource: NodeAdminUserData}
375         type: multipart
376       - config: {get_resource: NodeUserData}
377         type: multipart
378
379   # Creates the "heat-admin" user if configured via the environment
380   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
381   NodeAdminUserData:
382     type: OS::TripleO::NodeAdminUserData
383
384   # For optional operator additional userdata
385   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
386   NodeUserData:
387     type: OS::TripleO::NodeUserData
388
389   ExternalPort:
390     type: OS::TripleO::Compute::Ports::ExternalPort
391     properties:
392       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
393       IPPool: {get_param: NovaComputeIPs}
394       NodeIndex: {get_param: NodeIndex}
395
396   InternalApiPort:
397     type: OS::TripleO::Compute::Ports::InternalApiPort
398     properties:
399       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
400       IPPool: {get_param: NovaComputeIPs}
401       NodeIndex: {get_param: NodeIndex}
402
403   StoragePort:
404     type: OS::TripleO::Compute::Ports::StoragePort
405     properties:
406       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
407       IPPool: {get_param: NovaComputeIPs}
408       NodeIndex: {get_param: NodeIndex}
409
410   StorageMgmtPort:
411     type: OS::TripleO::Compute::Ports::StorageMgmtPort
412     properties:
413       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
414       IPPool: {get_param: NovaComputeIPs}
415       NodeIndex: {get_param: NodeIndex}
416
417   TenantPort:
418     type: OS::TripleO::Compute::Ports::TenantPort
419     properties:
420       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
421       IPPool: {get_param: NovaComputeIPs}
422       NodeIndex: {get_param: NodeIndex}
423
424   ManagementPort:
425     type: OS::TripleO::Compute::Ports::ManagementPort
426     properties:
427       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
428       IPPool: {get_param: NovaComputeIPs}
429       NodeIndex: {get_param: NodeIndex}
430
431   NetIpMap:
432     type: OS::TripleO::Network::Ports::NetIpMap
433     properties:
434       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
435       ExternalIp: {get_attr: [ExternalPort, ip_address]}
436       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
437       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
438       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
439       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
440       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
441       StorageIp: {get_attr: [StoragePort, ip_address]}
442       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
443       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
444       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
445       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
446       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
447       TenantIp: {get_attr: [TenantPort, ip_address]}
448       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
449       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
450       ManagementIp: {get_attr: [ManagementPort, ip_address]}
451       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
452       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
453
454   NetworkConfig:
455     type: OS::TripleO::Compute::Net::SoftwareConfig
456     properties:
457       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
458       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
459       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
460       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
461       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
462       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
463       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
464
465   NetworkDeployment:
466     type: OS::TripleO::SoftwareDeployment
467     properties:
468       name: NetworkDeployment
469       config: {get_resource: NetworkConfig}
470       server: {get_resource: NovaCompute}
471       actions: {get_param: NetworkDeploymentActions}
472       input_values:
473         bridge_name: {get_param: NeutronPhysicalBridge}
474         interface_name: {get_param: NeutronPublicInterface}
475
476   NovaComputeConfig:
477     type: OS::Heat::StructuredConfig
478     properties:
479       group: os-apply-config
480       config:
481         hiera:
482           hierarchy:
483             - '"%{::uuid}"'
484             - heat_config_%{::deploy_config_name}
485             - compute_extraconfig
486             - extraconfig
487             - service_configs
488             - compute
489             - ceph_cluster # provided by CephClusterConfig
490             - ceph
491             - all_nodes # provided by allNodesConfig
492             - '"%{::osfamily}"'
493             - common
494             - network
495             - neutron_bigswitch_data # Optionally provided by ComputeExtraConfigPre
496             - cisco_n1kv_data  # Optionally provided by ComputeExtraConfigPre
497             - nova_nuage_data  # Optionally provided by ComputeExtraConfigPre
498             - midonet_data # Optionally provided by AllNodesExtraConfig
499             - neutron_opencontrail_data  # Optionally provided by ComputeExtraConfigPre
500           merge_behavior: deeper
501           datafiles:
502             service_configs:
503               mapped_data: {get_param: ServiceConfigSettings}
504             compute_extraconfig:
505               mapped_data: {get_param: NovaComputeExtraConfig}
506             extraconfig:
507               mapped_data: {get_param: ExtraConfig}
508             common:
509               raw_data: {get_file: hieradata/common.yaml}
510             network:
511               mapped_data:
512                 net_ip_map: {get_attr: [NetIpMap, net_ip_map]}
513                 net_ip_subnet_map: {get_attr: [NetIpMap, net_ip_subnet_map]}
514                 net_ip_uri_map: {get_attr: [NetIpMap, net_ip_uri_map]}
515             ceph:
516               raw_data: {get_file: hieradata/ceph.yaml}
517             compute:
518               raw_data: {get_file: hieradata/compute.yaml}
519               mapped_data:
520                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
521                 nova::use_ipv6: {get_input: nova_ipv6}
522                 nova::debug: {get_input: debug}
523                 nova::rabbit_userid: {get_input: rabbit_username}
524                 nova::rabbit_password: {get_input: rabbit_password}
525                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
526                 nova::rabbit_port: {get_input: rabbit_client_port}
527                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
528                 nova_compute_driver: {get_input: nova_compute_driver}
529                 nova::compute::libvirt::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
530                 nova::compute::neutron::libvirt_vif_driver: {get_input: nova_compute_libvirt_vif_driver}
531                 nova_api_host: {get_input: nova_api_host}
532                 nova::compute::vncproxy_host: {get_input: nova_public_ip}
533                 nova::compute::rbd::ephemeral_storage: {get_input: nova_enable_rbd_backend}
534                 # TUNNELLED mode provides a security enhancement when using shared storage but is not
535                 # supported when not using shared storage.
536                 # See https://bugzilla.redhat.com/show_bug.cgi?id=1301986#c12
537                 # In future versions of QEMU (2.6, mostly), Dan's native encryption
538                 # work will obsolete the need to use TUNNELLED transport mode.
539                 nova::migration::live_migration_tunnelled: {get_input: nova_enable_rbd_backend}
540                 rbd_persistent_storage: {get_input: cinder_enable_rbd_backend}
541                 nova_password: {get_input: nova_password}
542                 nova::compute::network_device_mtu: {get_input: neutron_tenant_mtu}
543                 nova::compute::vncserver_proxyclient_address: {get_input: nova_vnc_proxyclient_address}
544                 nova::vncproxy::common::vncproxy_protocol: {get_input: nova_vncproxy_protocol}
545                 nova::vncproxy::common::vncproxy_host: {get_input: nova_vncproxy_host}
546                 nova::vncproxy::common::vncproxy_port: {get_input: nova_vncproxy_port}
547                 nova::network::neutron::neutron_ovs_bridge: {get_input: nova_ovs_bridge}
548                 nova::network::neutron::security_group_api: {get_input: nova_security_group_api}
549                 ceilometer::debug: {get_input: debug}
550                 ceilometer::rabbit_userid: {get_input: rabbit_username}
551                 ceilometer::rabbit_password: {get_input: rabbit_password}
552                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
553                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
554                 ceilometer::telemetry_secret: {get_input: ceilometer_metering_secret}
555                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
556                 ceilometer::agent::auth::auth_url: {get_input: ceilometer_agent_auth_url}
557                 ceilometer_compute_agent: {get_input: ceilometer_compute_agent}
558                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
559                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
560                 nova::glance_api_servers: {get_input: glance_api_servers}
561                 neutron::debug: {get_input: debug}
562                 neutron::rabbit_password: {get_input: rabbit_password}
563                 neutron::rabbit_user: {get_input: rabbit_username}
564                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
565                 neutron::rabbit_port: {get_input: rabbit_client_port}
566                 neutron::plugins::ml2::flat_networks: {get_input: neutron_flat_networks}
567                 neutron_host: {get_input: neutron_host}
568                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
569
570                 neutron::network_device_mtu: {get_input: neutron_tenant_mtu}
571                 neutron::plugins::ml2::tenant_network_types: {get_input: neutron_tenant_network_types}
572                 neutron::agents::ml2::ovs::tunnel_types: {get_input: neutron_tunnel_types}
573                 neutron::agents::ml2::ovs::extensions: {get_input: neutron_agent_extensions}
574                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
575                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
576                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
577                 neutron::agents::ml2::ovs::bridge_mappings: {get_input: neutron_bridge_mappings}
578                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
579                 neutron::agents::ml2::ovs::l2_population: {get_input: neutron_enable_l2pop}
580                 neutron_physical_bridge: {get_input: neutron_physical_bridge}
581                 neutron_public_interface: {get_input: neutron_public_interface}
582                 nova::network::neutron::neutron_password: {get_input: neutron_password}
583                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
584                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
585                 neutron_router_distributed: {get_input: neutron_router_distributed}
586                 neutron_agent_mode: {get_input: neutron_agent_mode}
587                 neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
588                 neutron::core_plugin: {get_input: neutron_core_plugin}
589                 neutron::service_plugins: {get_input: neutron_service_plugins}
590                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
591                 neutron::plugins::ml2::mechanism_drivers: {get_input: neutron_mechanism_drivers}
592                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
593                 keystone_public_api_virtual_ip: {get_input: keystone_vip}
594                 admin_password: {get_input: admin_password}
595                 ntp::servers: {get_input: ntp_servers}
596                 timezone::timezone: {get_input: timezone}
597                 tripleo::packages::enable_install: {get_input: enable_package_install}
598                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
599
600   NovaComputeDeployment:
601     type: OS::TripleO::SoftwareDeployment
602     depends_on: NetworkDeployment
603     properties:
604       name: NovaComputeDeployment
605       config: {get_resource: NovaComputeConfig}
606       server: {get_resource: NovaCompute}
607       input_values:
608         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
609         debug: {get_param: Debug}
610         nova_compute_driver: {get_param: NovaComputeDriver}
611         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
612         nova_compute_libvirt_vif_driver: {get_param: NovaComputeLibvirtVifDriver}
613         nova_public_ip: {get_param: NovaPublicIP}
614         nova_api_host: {get_param: NovaApiHost}
615         nova_password: {get_param: NovaPassword}
616         nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
617         nova_ipv6: {get_param: NovaIPv6}
618         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
619         nova_vnc_proxyclient_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaVncProxyNetwork]}]}
620         nova_vncproxy_protocol: {get_param: [EndpointMap, NovaVNCProxyPublic, protocol]}
621         # Remove brackets that may come if the IP address is IPv6.
622         # For DNS names and IPv4, this will just get the NovaVNCProxyPublic value
623         nova_vncproxy_host:
624           str_replace:
625             template: {get_param: [EndpointMap, NovaVNCProxyPublic, host]}
626             params:
627               '[': ''
628               ']': ''
629         nova_vncproxy_port: {get_param: [EndpointMap, NovaVNCProxyPublic, port]}
630         nova_ovs_bridge: {get_param: NovaOVSBridge}
631         nova_security_group_api: {get_param: NovaSecurityGroupAPI}
632         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
633         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
634         ceilometer_password: {get_param: CeilometerPassword}
635         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
636         ceilometer_agent_auth_url: {get_param: [EndpointMap, KeystoneInternal, uri]}
637         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
638         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
639         glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
640         neutron_flat_networks:
641           str_replace:
642             template: NETWORKS
643             params:
644               NETWORKS: {get_param: NeutronFlatNetworks}
645         neutron_host: {get_param: NeutronHost}
646         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
647         neutron_tunnel_id_ranges:
648           str_replace:
649             template: RANGES
650             params:
651               RANGES: {get_param: NeutronTunnelIdRanges}
652         neutron_vni_ranges:
653           str_replace:
654             template: RANGES
655             params:
656               RANGES: {get_param: NeutronVniRanges}
657         neutron_tenant_network_types:
658           str_replace:
659             template: TYPES
660             params:
661               TYPES: {get_param: NeutronNetworkType}
662         neutron_tunnel_types:
663           str_replace:
664             template: TYPES
665             params:
666               TYPES: {get_param: NeutronTunnelTypes}
667         neutron_network_vlan_ranges:
668           str_replace:
669             template: RANGES
670             params:
671               RANGES: {get_param: NeutronNetworkVLANRanges}
672         neutron_bridge_mappings:
673           str_replace:
674             template: MAPPINGS
675             params:
676               MAPPINGS: {get_param: NeutronBridgeMappings}
677         neutron_tenant_mtu: {get_param: NeutronTenantMtu}
678         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
679         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
680         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
681         neutron_public_interface: {get_param: NeutronPublicInterface}
682         neutron_password: {get_param: NeutronPassword}
683         neutron_agent_mode: {get_param: NeutronAgentMode}
684         neutron_router_distributed: {get_param: NeutronDVR}
685         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
686         neutron_core_plugin: {get_param: NeutronCorePlugin}
687         neutron_service_plugins:
688           str_replace:
689             template: PLUGINS
690             params:
691               PLUGINS: {get_param: NeutronServicePlugins}
692         neutron_type_drivers:
693           str_replace:
694             template: DRIVERS
695             params:
696               DRIVERS: {get_param: NeutronTypeDrivers}
697         neutron_mechanism_drivers:
698           str_replace:
699             template: MECHANISMS
700             params:
701               MECHANISMS: {get_param: NeutronMechanismDrivers}
702         neutron_agent_extensions:
703           str_replace:
704             template: AGENT_EXTENSIONS
705             params:
706               AGENT_EXTENSIONS: {get_param: NeutronAgentExtensions}
707         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
708         neutron_internal_url: {get_param: [EndpointMap, NeutronInternal, uri]}
709         neutron_auth_url: {get_param: [EndpointMap, KeystoneV3Admin, uri]}
710         keystone_vip: {get_param: KeystonePublicApiVirtualIP}
711         admin_password: {get_param: AdminPassword}
712         rabbit_username: {get_param: RabbitUserName}
713         rabbit_password: {get_param: RabbitPassword}
714         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
715         rabbit_client_port: {get_param: RabbitClientPort}
716         ntp_servers: {get_param: NtpServer}
717         timezone: {get_param: TimeZone}
718         enable_package_install: {get_param: EnablePackageInstall}
719         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
720
721   # Resource for site-specific injection of root certificate
722   NodeTLSCAData:
723     depends_on: NovaComputeDeployment
724     type: OS::TripleO::NodeTLSCAData
725     properties:
726       server: {get_resource: NovaCompute}
727
728   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
729   ComputeExtraConfigPre:
730     depends_on: NovaComputeDeployment
731     type: OS::TripleO::ComputeExtraConfigPre
732     properties:
733         server: {get_resource: NovaCompute}
734
735   # Hook for site-specific additional pre-deployment config,
736   # applying to all nodes, e.g node registration/unregistration
737   NodeExtraConfig:
738     depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
739     type: OS::TripleO::NodeExtraConfig
740     properties:
741         server: {get_resource: NovaCompute}
742
743   UpdateConfig:
744     type: OS::TripleO::Tasks::PackageUpdate
745
746   UpdateDeployment:
747     type: OS::Heat::SoftwareDeployment
748     properties:
749       name: UpdateDeployment
750       config: {get_resource: UpdateConfig}
751       server: {get_resource: NovaCompute}
752       input_values:
753         update_identifier:
754           get_param: UpdateIdentifier
755
756 outputs:
757   ip_address:
758     description: IP address of the server in the ctlplane network
759     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
760   external_ip_address:
761     description: IP address of the server in the external network
762     value: {get_attr: [ExternalPort, ip_address]}
763   internal_api_ip_address:
764     description: IP address of the server in the internal_api network
765     value: {get_attr: [InternalApiPort, ip_address]}
766   storage_ip_address:
767     description: IP address of the server in the storage network
768     value: {get_attr: [StoragePort, ip_address]}
769   storage_mgmt_ip_address:
770     description: IP address of the server in the storage_mgmt network
771     value: {get_attr: [StorageMgmtPort, ip_address]}
772   tenant_ip_address:
773     description: IP address of the server in the tenant network
774     value: {get_attr: [TenantPort, ip_address]}
775   management_ip_address:
776     description: IP address of the server in the management network
777     value: {get_attr: [ManagementPort, ip_address]}
778   hostname:
779     description: Hostname of the server
780     value: {get_attr: [NovaCompute, name]}
781   hosts_entry:
782     description: >
783       Server's IP address and hostname in the /etc/hosts format
784     value:
785       str_replace:
786         template: |
787           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
788           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
789           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
790           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
791           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
792           TENANTIP TENANTHOST.DOMAIN TENANTHOST
793           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
794         params:
795           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
796           DOMAIN: {get_param: CloudDomain}
797           PRIMARYHOST: {get_attr: [NovaCompute, name]}
798           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
799           EXTERNALHOST:
800             list_join:
801             - '.'
802             - - {get_attr: [NovaCompute, name]}
803               - external
804           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
805           INTERNAL_APIHOST:
806             list_join:
807             - '.'
808             - - {get_attr: [NovaCompute, name]}
809               - internalapi
810           STORAGEIP: {get_attr: [StoragePort, ip_address]}
811           STORAGEHOST:
812             list_join:
813             - '.'
814             - - {get_attr: [NovaCompute, name]}
815               - storage
816           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
817           STORAGE_MGMTHOST:
818             list_join:
819             - '.'
820             - - {get_attr: [NovaCompute, name]}
821               - storagemgmt
822           TENANTIP: {get_attr: [TenantPort, ip_address]}
823           TENANTHOST:
824             list_join:
825             - '.'
826             - - {get_attr: [NovaCompute, name]}
827               - tenant
828           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
829           MANAGEMENTHOST:
830             list_join:
831             - '.'
832             - - {get_attr: [NovaCompute, name]}
833               - management
834   nova_server_resource:
835     description: Heat resource handle for the Nova compute server
836     value:
837       {get_resource: NovaCompute}
838   config_identifier:
839     description: identifier which changes if the node configuration may need re-applying
840     value:
841       list_join:
842       - ','
843       - - {get_attr: [NovaComputeDeployment, deploy_stdout]}
844         - {get_attr: [NodeTLSCAData, deploy_stdout]}
845         - {get_attr: [ComputeExtraConfigPre, deploy_stdout]}
846         - {get_param: UpdateIdentifier}