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