Merge "Add Redis as a Pacemaker resource"
[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   NeutronPublicInterfaceRawDevice:
156     default: ''
157     type: string
158   NeutronDVR:
159     default: 'False'
160     type: string
161   NeutronMetadataProxySharedSecret:
162     default: 'unset'
163     description: Shared secret to prevent spoofing
164     type: string
165   NeutronMechanismDrivers:
166     default: 'openvswitch'
167     description: |
168         The mechanism drivers for the Neutron tenant network. To specify multiple
169         values, use a comma separated string, like so: 'openvswitch,l2_population'
170     type: string
171   # Not relevant for Computes, should be removed
172   NeutronAllowL3AgentFailover:
173     default: 'True'
174     description: Allow automatic l3-agent failover
175     type: string
176   # Not relevant for Computes, should be removed
177   NeutronL3HA:
178     default: 'False'
179     description: Whether to enable l3-agent HA
180     type: string
181   NeutronAgentMode:
182     default: 'dvr_snat'
183     description: Agent mode for the neutron-l3-agent on the controller hosts
184     type: string
185   NovaApiHost:
186     type: string
187     default: ''  # Has to be here because of the ignored empty value bug
188   NovaComputeDriver:
189     type: string
190     default: libvirt.LibvirtDriver
191   NovaComputeExtraConfig:
192     default: {}
193     description: |
194       NovaCompute specific configuration to inject into the cluster. Same
195       structure as ExtraConfig.
196     type: json
197   NovaComputeLibvirtType:
198     type: string
199     default: ''
200   NovaEnableRbdBackend:
201     default: false
202     description: Whether to enable or not the Rbd backend for Nova
203     type: boolean
204   NovaPassword:
205     default: unset
206     description: The password for the nova service account, used by nova-api.
207     type: string
208     hidden: true
209   NovaPublicIP:
210     type: string
211     default: ''  # Has to be here because of the ignored empty value bug
212   NtpServer:
213     type: string
214     default: ''
215   RabbitHost:
216     type: string
217     default: ''  # Has to be here because of the ignored empty value bug
218   RabbitPassword:
219     default: guest
220     description: The password for RabbitMQ
221     type: string
222     hidden: true
223   RabbitUserName:
224     default: guest
225     description: The username for RabbitMQ
226     type: string
227   RabbitClientUseSSL:
228     default: false
229     description: >
230         Rabbit client subscriber parameter to specify
231         an SSL connection to the RabbitMQ host.
232     type: string
233   RabbitClientPort:
234     default: 5672
235     description: Set rabbit subscriber port, change this if using SSL
236     type: number
237   SnmpdReadonlyUserName:
238     default: ro_snmp_user
239     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
240     type: string
241   SnmpdReadonlyUserPassword:
242     default: unset
243     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
244     type: string
245     hidden: true
246   ServiceNetMap:
247     default: {}
248     description: Mapping of service_name -> network name. Typically set
249                  via parameter_defaults in the resource registry.
250     type: json
251   UpdateIdentifier:
252     default: ''
253     type: string
254     description: >
255       Setting to a previously unused value during stack-update will trigger
256       package update on all nodes
257
258 resources:
259
260   NovaCompute:
261     type: OS::Nova::Server
262     properties:
263       image:
264         {get_param: Image}
265       image_update_policy:
266         get_param: ImageUpdatePolicy
267       flavor: {get_param: Flavor}
268       key_name: {get_param: KeyName}
269       networks:
270         - network: ctlplane
271       user_data_format: SOFTWARE_CONFIG
272       user_data: {get_resource: NodeUserData}
273
274   NodeUserData:
275     type: OS::TripleO::NodeUserData
276
277   InternalApiPort:
278     type: OS::TripleO::Compute::Ports::InternalApiPort
279     properties:
280       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
281
282   StoragePort:
283     type: OS::TripleO::Compute::Ports::StoragePort
284     properties:
285       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
286
287   TenantPort:
288     type: OS::TripleO::Compute::Ports::TenantPort
289     properties:
290       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
291
292   NetworkConfig:
293     type: OS::TripleO::Compute::Net::SoftwareConfig
294     properties:
295       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
296       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
297       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
298
299   NetworkDeployment:
300     type: OS::TripleO::SoftwareDeployment
301     properties:
302       signal_transport: NO_SIGNAL
303       config: {get_resource: NetworkConfig}
304       server: {get_resource: NovaCompute}
305       input_values:
306         bridge_name: {get_param: NeutronPhysicalBridge}
307         interface_name: {get_param: NeutronPublicInterface}
308
309   NovaComputeConfig:
310     type: OS::Heat::StructuredConfig
311     properties:
312       group: os-apply-config
313       config:
314         nova:
315           compute_driver: { get_input: nova_compute_driver }
316           compute_libvirt_type: { get_input: nova_compute_libvirt_type }
317           debug: {get_input: debug}
318           host: {get_input: nova_api_host}
319           public_ip: {get_input: nova_public_ip}
320           service-password: {get_input: nova_password}
321         ceilometer:
322           debug: {get_input: debug}
323           metering_secret: {get_input: ceilometer_metering_secret}
324           service-password: {get_input: ceilometer_password}
325           compute_agent: {get_input: ceilometer_compute_agent}
326         snmpd:
327           export_MIB: UCD-SNMP-MIB
328           readonly_user_name: {get_input: snmpd_readonly_user_name}
329           readonly_user_password: {get_input: snmpd_readonly_user_password}
330         glance:
331           debug: {get_input: debug}
332           host: {get_input: glance_host}
333           port: {get_input: glance_port}
334           protocol: {get_input: glance_protocol}
335         keystone:
336           debug: {get_input: debug}
337           host: {get_input: keystone_host}
338         neutron:
339           debug: {get_input: debug}
340           flat-networks: {get_input: neutron_flat_networks}
341           host: {get_input: neutron_host}
342           router_distributed: {get_input: neutron_router_distributed}
343           agent_mode: {get_input: neutron_agent_mode}
344           ovs_db: {get_input: neutron_dsn}
345           metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
346           mechanism_drivers: {get_input: neutron_mechanism_drivers}
347           allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
348           l3_ha: {get_input: neutron_l3_ha}
349           ovs:
350             local_ip: {get_input: neutron_local_ip}
351             tenant_network_type: {get_input: neutron_tenant_network_type}
352             tunnel_types: {get_input: neutron_tunnel_types}
353             network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
354             bridge_mappings: {get_input: neutron_bridge_mappings}
355             enable_tunneling: {get_input: neutron_enable_tunneling}
356             physical_bridge: {get_input: neutron_physical_bridge}
357             public_interface: {get_input: neutron_public_interface}
358             public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
359           service-password: {get_input: neutron_password}
360         admin-password: {get_input: admin_password}
361         rabbit:
362           host: {get_input: rabbit_host}
363           username: {get_input: rabbit_username}
364           password: {get_input: rabbit_password}
365         ntp:
366           servers:
367               - {server: {get_input: ntp_server}}
368
369   NovaComputeDeployment:
370     type: OS::TripleO::SoftwareDeployment
371     properties:
372       signal_transport: NO_SIGNAL
373       config: {get_resource: NovaComputeConfig}
374       server: {get_resource: NovaCompute}
375       input_values:
376         debug: {get_param: Debug}
377         nova_compute_driver: {get_param: NovaComputeDriver}
378         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
379         nova_public_ip: {get_param: NovaPublicIP}
380         nova_api_host: {get_param: NovaApiHost}
381         nova_password: {get_param: NovaPassword}
382         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
383         ceilometer_password: {get_param: CeilometerPassword}
384         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
385         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
386         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
387         glance_host: {get_param: GlanceHost}
388         glance_port: {get_param: GlancePort}
389         glance_protocol: {get_param: GlanceProtocol}
390         keystone_host: {get_param: KeystoneHost}
391         neutron_flat_networks: {get_param: NeutronFlatNetworks}
392         neutron_host: {get_param: NeutronHost}
393         neutron_local_ip: {get_attr: [NovaCompute, networks, ctlplane, 0]}
394         neutron_tenant_network_type: {get_param: NeutronNetworkType}
395         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
396         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
397         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
398         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
399         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
400         neutron_public_interface: {get_param: NeutronPublicInterface}
401         neutron_password: {get_param: NeutronPassword}
402         neutron_agent_mode: {get_param: NeutronAgentMode}
403         neutron_router_distributed: {get_param: NeutronDVR}
404         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
405         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
406         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
407         neutron_l3_ha: {get_param: NeutronL3HA}
408         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
409         admin_password: {get_param: AdminPassword}
410         rabbit_host: {get_param: RabbitHost}
411         rabbit_username: {get_param: RabbitUserName}
412         rabbit_password: {get_param: RabbitPassword}
413         ntp_server: {get_param: NtpServer}
414
415   NovaComputePassthrough:
416     type: OS::Heat::StructuredConfig
417     properties:
418       group: os-apply-config
419       config: {get_input: passthrough_config}
420
421   NovaComputePassthroughSpecific:
422     type: OS::Heat::StructuredConfig
423     properties:
424       group: os-apply-config
425       config: {get_input: passthrough_config_specific}
426
427   NovaComputePassthroughDeployment:
428     depends_on: [NovaComputeDeployment]
429     type: OS::Heat::StructuredDeployment
430     properties:
431       config: {get_resource: NovaComputePassthrough}
432       server: {get_resource: NovaCompute}
433       signal_transport: NO_SIGNAL
434       input_values:
435         passthrough_config: {get_param: ExtraConfig}
436
437   NovaComputePassthroughDeploymentSpecific:
438     depends_on: [NovaComputePassthroughDeployment]
439     type: OS::Heat::StructuredDeployment
440     properties:
441       config: {get_resource: NovaComputePassthroughSpecific}
442       server: {get_resource: NovaCompute}
443       signal_transport: NO_SIGNAL
444       input_values:
445         passthrough_config_specific: {get_param: NovaComputeExtraConfig}
446
447 outputs:
448   ip_address:
449     description: IP address of the server in the ctlplane network
450     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
451   internal_api_ip_address:
452     description: IP address of the server in the internal_api network
453     value: {get_attr: [InternalApiPort, ip_address]}
454   storage_ip_address:
455     description: IP address of the server in the storage network
456     value: {get_attr: [StoragePort, ip_address]}
457   tenant_ip_address:
458     description: IP address of the server in the tenant network
459     value: {get_attr: [TenantPort, ip_address]}
460   hostname:
461     description: Hostname of the server
462     value: {get_attr: [NovaCompute, name]}
463   hosts_entry:
464     description: >
465       Server's IP address and hostname in the /etc/hosts format
466     value:
467       str_replace:
468         template: "IP HOST"
469         params:
470           IP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
471           HOST: {get_attr: [NovaCompute, name]}
472   nova_server_resource:
473     description: Heat resource handle for the Nova compute server
474     value:
475       {get_resource: NovaCompute}