Set rabbitmq heatbeat timeout threshold to 60
[apex-tripleo-heat-templates.git] / compute.yaml
1 heat_template_version: 2015-04-30
2
3 description: >
4   OpenStack hypervisor node. Can be wrapped in a ResourceGroup for scaling.
5
6 parameters:
7   AdminPassword:
8     default: unset
9     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
10     type: string
11     hidden: true
12   CeilometerComputeAgent:
13     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
14     type: string
15     default: ''
16     constraints:
17     - allowed_values: ['', Present]
18   CeilometerMeteringSecret:
19     default: unset
20     description: Secret shared by the ceilometer services.
21     type: string
22     hidden: true
23   CeilometerPassword:
24     default: unset
25     description: The password for the ceilometer service account.
26     type: string
27     hidden: true
28   Debug:
29     default: ''
30     description: Set to True to enable debugging on all services.
31     type: string
32   ExtraConfig:
33     default: {}
34     description: |
35       Additional configuration to inject into the cluster. The JSON should have
36       the following structure:
37         {"FILEKEY":
38           {"config":
39             [{"section": "SECTIONNAME",
40               "values":
41                 [{"option": "OPTIONNAME",
42                   "value": "VALUENAME"
43                  }
44                 ]
45              }
46             ]
47           }
48         }
49       For instance:
50         {"nova":
51           {"config":
52             [{"section": "default",
53               "values":
54                 [{"option": "force_config_drive",
55                   "value": "always"
56                  }
57                 ]
58              },
59              {"section": "cells",
60               "values":
61                 [{"option": "driver",
62                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
63                  }
64                 ]
65              }
66             ]
67           }
68         }
69     type: json
70   Flavor:
71     description: Flavor for the nova compute node
72     type: string
73     constraints:
74       - custom_constraint: nova.flavor
75   GlanceHost:
76     type: string
77     default: ''  # Has to be here because of the ignored empty value bug
78   GlancePort:
79     default: "9292"
80     description: Glance port.
81     type: string
82   GlanceProtocol:
83     default: http
84     description: Protocol to use when connecting to glance, set to https for SSL.
85     type: string
86   Image:
87     type: string
88     default: overcloud-compute
89     constraints:
90       - custom_constraint: glance.image
91   ImageUpdatePolicy:
92     default: 'REBUILD_PRESERVE_EPHEMERAL'
93     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
94     type: string
95   KeyName:
96     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
97     type: string
98     default: default
99     constraints:
100       - custom_constraint: nova.keypair
101   KeystoneHost:
102     type: string
103     default: ''
104   NeutronBridgeMappings:
105     description: >
106       The OVS logical->physical bridge mappings to use. See the Neutron
107       documentation for details. Defaults to mapping br-ex - the external
108       bridge on hosts - to a physical name 'datacentre' which can be used
109       to create provider networks (and we use this for the default floating
110       network) - if changing this either use different post-install network
111       scripts or be sure to keep 'datacentre' as a mapping network name.
112     type: string
113     default: "datacentre:br-ex"
114   NeutronEnableTunnelling:
115     type: string
116     default: "True"
117   NeutronFlatNetworks:
118     type: string
119     default: 'datacentre'
120     description: >
121       If set, flat networks to configure in neutron plugins.
122   NeutronHost:
123     type: string
124     default: ''  # Has to be here because of the ignored empty value bug
125   NeutronNetworkType:
126     type: string
127     description: The tenant network type for Neutron, either gre or vxlan.
128     default: 'gre'
129   NeutronNetworkVLANRanges:
130     default: 'datacentre'
131     description: >
132       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
133       Neutron documentation for permitted values. Defaults to permitting any
134       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
135     type: comma_delimited_list
136   NeutronPassword:
137     default: unset
138     description: The password for the neutron service account, used by neutron agents.
139     type: string
140     hidden: true
141   NeutronPhysicalBridge:
142     default: ''
143     description: An OVS bridge to create for accessing external networks.
144     type: string
145   NeutronPublicInterface:
146     default: nic1
147     description: A port to add to the NeutronPhysicalBridge.
148     type: string
149   NeutronTunnelTypes:
150     type: string
151     description: |
152         The tunnel types for the Neutron tenant network. To specify multiple
153         values, use a comma separated string, like so: 'gre,vxlan'
154     default: 'gre'
155   NeutronTunnelIdRanges:
156     description: |
157         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
158         of GRE tunnel IDs that are available for tenant network allocation
159     default: ["1:1000", ]
160     type: comma_delimited_list
161   NeutronVniRanges:
162     description: |
163         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
164         of VXLAN VNI IDs that are available for tenant network allocation
165     default: ["1:1000", ]
166     type: comma_delimited_list
167   NeutronPublicInterfaceRawDevice:
168     default: ''
169     type: string
170   NeutronDVR:
171     default: 'False'
172     type: string
173   NeutronMetadataProxySharedSecret:
174     default: 'unset'
175     description: Shared secret to prevent spoofing
176     type: string
177   NeutronMechanismDrivers:
178     default: 'openvswitch'
179     description: |
180         The mechanism drivers for the Neutron tenant network. To specify multiple
181         values, use a comma separated string, like so: 'openvswitch,l2_population'
182     type: string
183   # Not relevant for Computes, should be removed
184   NeutronAllowL3AgentFailover:
185     default: 'True'
186     description: Allow automatic l3-agent failover
187     type: string
188   # Not relevant for Computes, should be removed
189   NeutronL3HA:
190     default: 'False'
191     description: Whether to enable l3-agent HA
192     type: string
193   NeutronAgentMode:
194     default: 'dvr_snat'
195     description: Agent mode for the neutron-l3-agent on the controller hosts
196     type: string
197   NovaApiHost:
198     type: string
199     default: ''  # Has to be here because of the ignored empty value bug
200   NovaComputeDriver:
201     type: string
202     default: libvirt.LibvirtDriver
203   NovaComputeExtraConfig:
204     default: {}
205     description: |
206       NovaCompute specific configuration to inject into the cluster. Same
207       structure as ExtraConfig.
208     type: json
209   NovaComputeLibvirtType:
210     type: string
211     default: ''
212   NovaEnableRbdBackend:
213     default: false
214     description: Whether to enable or not the Rbd backend for Nova
215     type: boolean
216   NovaPassword:
217     default: unset
218     description: The password for the nova service account, used by nova-api.
219     type: string
220     hidden: true
221   NovaPublicIP:
222     type: string
223     default: ''  # Has to be here because of the ignored empty value bug
224   NtpServer:
225     type: string
226     default: ''
227   RabbitHost:
228     type: string
229     default: ''  # Has to be here because of the ignored empty value bug
230   RabbitPassword:
231     default: guest
232     description: The password for RabbitMQ
233     type: string
234     hidden: true
235   RabbitUserName:
236     default: guest
237     description: The username for RabbitMQ
238     type: string
239   RabbitClientUseSSL:
240     default: false
241     description: >
242         Rabbit client subscriber parameter to specify
243         an SSL connection to the RabbitMQ host.
244     type: string
245   RabbitClientPort:
246     default: 5672
247     description: Set rabbit subscriber port, change this if using SSL
248     type: number
249   SnmpdReadonlyUserName:
250     default: ro_snmp_user
251     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
252     type: string
253   SnmpdReadonlyUserPassword:
254     default: unset
255     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
256     type: string
257     hidden: true
258   ServiceNetMap:
259     default: {}
260     description: Mapping of service_name -> network name. Typically set
261                  via parameter_defaults in the resource registry.
262     type: json
263   UpdateIdentifier:
264     default: ''
265     type: string
266     description: >
267       Setting to a previously unused value during stack-update will trigger
268       package update on all nodes
269   Hostname:
270     type: string
271     default: '' # Defaults to Heat created hostname
272
273 resources:
274
275   NovaCompute:
276     type: OS::Nova::Server
277     properties:
278       image:
279         {get_param: Image}
280       image_update_policy:
281         get_param: ImageUpdatePolicy
282       flavor: {get_param: Flavor}
283       key_name: {get_param: KeyName}
284       networks:
285         - network: ctlplane
286       user_data_format: SOFTWARE_CONFIG
287       user_data: {get_resource: NodeUserData}
288       name: {get_param: Hostname}
289
290   NodeUserData:
291     type: OS::TripleO::NodeUserData
292
293   InternalApiPort:
294     type: OS::TripleO::Compute::Ports::InternalApiPort
295     properties:
296       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
297
298   StoragePort:
299     type: OS::TripleO::Compute::Ports::StoragePort
300     properties:
301       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
302
303   TenantPort:
304     type: OS::TripleO::Compute::Ports::TenantPort
305     properties:
306       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
307
308   NetworkConfig:
309     type: OS::TripleO::Compute::Net::SoftwareConfig
310     properties:
311       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
312       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
313       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
314
315   NetworkDeployment:
316     type: OS::TripleO::SoftwareDeployment
317     properties:
318       signal_transport: NO_SIGNAL
319       config: {get_resource: NetworkConfig}
320       server: {get_resource: NovaCompute}
321       input_values:
322         bridge_name: {get_param: NeutronPhysicalBridge}
323         interface_name: {get_param: NeutronPublicInterface}
324
325   NovaComputeConfig:
326     type: OS::Heat::StructuredConfig
327     properties:
328       group: os-apply-config
329       config:
330         nova:
331           compute_driver: { get_input: nova_compute_driver }
332           compute_libvirt_type: { get_input: nova_compute_libvirt_type }
333           debug: {get_input: debug}
334           host: {get_input: nova_api_host}
335           public_ip: {get_input: nova_public_ip}
336           service-password: {get_input: nova_password}
337         ceilometer:
338           debug: {get_input: debug}
339           metering_secret: {get_input: ceilometer_metering_secret}
340           service-password: {get_input: ceilometer_password}
341           compute_agent: {get_input: ceilometer_compute_agent}
342         snmpd:
343           export_MIB: UCD-SNMP-MIB
344           readonly_user_name: {get_input: snmpd_readonly_user_name}
345           readonly_user_password: {get_input: snmpd_readonly_user_password}
346         glance:
347           debug: {get_input: debug}
348           host: {get_input: glance_host}
349           port: {get_input: glance_port}
350           protocol: {get_input: glance_protocol}
351         keystone:
352           debug: {get_input: debug}
353           host: {get_input: keystone_host}
354         neutron:
355           debug: {get_input: debug}
356           flat-networks: {get_input: neutron_flat_networks}
357           host: {get_input: neutron_host}
358           router_distributed: {get_input: neutron_router_distributed}
359           agent_mode: {get_input: neutron_agent_mode}
360           ovs_db: {get_input: neutron_dsn}
361           metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
362           mechanism_drivers: {get_input: neutron_mechanism_drivers}
363           allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
364           l3_ha: {get_input: neutron_l3_ha}
365           ovs:
366             local_ip: {get_input: neutron_local_ip}
367             tenant_network_type: {get_input: neutron_tenant_network_type}
368             tunnel_types: {get_input: neutron_tunnel_types}
369             network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
370             tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
371             vni_ranges: {get_input: neutron_vni_ranges}
372             bridge_mappings: {get_input: neutron_bridge_mappings}
373             enable_tunneling: {get_input: neutron_enable_tunneling}
374             physical_bridge: {get_input: neutron_physical_bridge}
375             public_interface: {get_input: neutron_public_interface}
376             public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
377           service-password: {get_input: neutron_password}
378         admin-password: {get_input: admin_password}
379         rabbit:
380           host: {get_input: rabbit_host}
381           username: {get_input: rabbit_username}
382           password: {get_input: rabbit_password}
383         ntp:
384           servers:
385               - {server: {get_input: ntp_server}}
386
387   NovaComputeDeployment:
388     type: OS::TripleO::SoftwareDeployment
389     properties:
390       signal_transport: NO_SIGNAL
391       config: {get_resource: NovaComputeConfig}
392       server: {get_resource: NovaCompute}
393       input_values:
394         debug: {get_param: Debug}
395         nova_compute_driver: {get_param: NovaComputeDriver}
396         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
397         nova_public_ip: {get_param: NovaPublicIP}
398         nova_api_host: {get_param: NovaApiHost}
399         nova_password: {get_param: NovaPassword}
400         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
401         ceilometer_password: {get_param: CeilometerPassword}
402         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
403         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
404         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
405         glance_host: {get_param: GlanceHost}
406         glance_port: {get_param: GlancePort}
407         glance_protocol: {get_param: GlanceProtocol}
408         keystone_host: {get_param: KeystoneHost}
409         neutron_flat_networks: {get_param: NeutronFlatNetworks}
410         neutron_host: {get_param: NeutronHost}
411         neutron_local_ip: {get_attr: [NovaCompute, networks, ctlplane, 0]}
412         neutron_tenant_network_type: {get_param: NeutronNetworkType}
413         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
414         neutron_tunnel_id_ranges:
415           str_replace:
416             template: "['RANGES']"
417             params:
418               RANGES:
419                 list_join:
420                 - "','"
421                 - {get_param: NeutronTunnelIdRanges}
422         neutron_vni_ranges:
423           str_replace:
424             template: "['RANGES']"
425             params:
426               RANGES:
427                 list_join:
428                 - "','"
429                 - {get_param: NeutronVniRanges}
430         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
431         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
432         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
433         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
434         neutron_public_interface: {get_param: NeutronPublicInterface}
435         neutron_password: {get_param: NeutronPassword}
436         neutron_agent_mode: {get_param: NeutronAgentMode}
437         neutron_router_distributed: {get_param: NeutronDVR}
438         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
439         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
440         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
441         neutron_l3_ha: {get_param: NeutronL3HA}
442         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
443         admin_password: {get_param: AdminPassword}
444         rabbit_host: {get_param: RabbitHost}
445         rabbit_username: {get_param: RabbitUserName}
446         rabbit_password: {get_param: RabbitPassword}
447         ntp_server: {get_param: NtpServer}
448
449   NovaComputePassthrough:
450     type: OS::Heat::StructuredConfig
451     properties:
452       group: os-apply-config
453       config: {get_input: passthrough_config}
454
455   NovaComputePassthroughSpecific:
456     type: OS::Heat::StructuredConfig
457     properties:
458       group: os-apply-config
459       config: {get_input: passthrough_config_specific}
460
461   NovaComputePassthroughDeployment:
462     depends_on: [NovaComputeDeployment]
463     type: OS::Heat::StructuredDeployment
464     properties:
465       config: {get_resource: NovaComputePassthrough}
466       server: {get_resource: NovaCompute}
467       signal_transport: NO_SIGNAL
468       input_values:
469         passthrough_config: {get_param: ExtraConfig}
470
471   NovaComputePassthroughDeploymentSpecific:
472     depends_on: [NovaComputePassthroughDeployment]
473     type: OS::Heat::StructuredDeployment
474     properties:
475       config: {get_resource: NovaComputePassthroughSpecific}
476       server: {get_resource: NovaCompute}
477       signal_transport: NO_SIGNAL
478       input_values:
479         passthrough_config_specific: {get_param: NovaComputeExtraConfig}
480
481 outputs:
482   ip_address:
483     description: IP address of the server in the ctlplane network
484     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
485   internal_api_ip_address:
486     description: IP address of the server in the internal_api network
487     value: {get_attr: [InternalApiPort, ip_address]}
488   storage_ip_address:
489     description: IP address of the server in the storage network
490     value: {get_attr: [StoragePort, ip_address]}
491   tenant_ip_address:
492     description: IP address of the server in the tenant network
493     value: {get_attr: [TenantPort, ip_address]}
494   hostname:
495     description: Hostname of the server
496     value: {get_attr: [NovaCompute, name]}
497   hosts_entry:
498     description: >
499       Server's IP address and hostname in the /etc/hosts format
500     value:
501       str_replace:
502         template: "IP HOST"
503         params:
504           IP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
505           HOST: {get_attr: [NovaCompute, name]}
506   nova_server_resource:
507     description: Heat resource handle for the Nova compute server
508     value:
509       {get_resource: NovaCompute}
510   config_identifier:
511     description: identifier which changes if the node configuration may need re-applying
512     value: "None - NO_SIGNAL"