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