Ensure all Rabbit params are propagated to interested nodes.
[apex-tripleo-heat-templates.git] / compute.yaml
1 heat_template_version: 2014-10-16
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: ""
114   NeutronEnableTunnelling:
115     type: string
116     default: "True"
117   NeutronFlatNetworks:
118     type: string
119     default: ''
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: string
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   NeutronAllowL3AgentFailover:
172     default: 'True'
173     description: Allow automatic l3-agent failover
174     type: string
175   NeutronL3HA:
176     default: 'False'
177     description: Whether to enable l3-agent HA
178     type: string
179   NeutronAgentMode:
180     default: 'dvr_snat'
181     description: Agent mode for the neutron-l3-agent on the controller hosts
182     type: string
183   NovaApiHost:
184     type: string
185     default: ''  # Has to be here because of the ignored empty value bug
186   NovaComputeDriver:
187     type: string
188     default: libvirt.LibvirtDriver
189   NovaComputeExtraConfig:
190     default: {}
191     description: |
192       NovaCompute specific configuration to inject into the cluster. Same
193       structure as ExtraConfig.
194     type: json
195   NovaComputeLibvirtType:
196     type: string
197     default: ''
198   NovaEnableRbdBackend:
199     default: false
200     description: Whether to enable or not the Rbd backend for Nova
201     type: boolean
202   NovaPassword:
203     default: unset
204     description: The password for the nova service account, used by nova-api.
205     type: string
206     hidden: true
207   NovaPublicIP:
208     type: string
209     default: ''  # Has to be here because of the ignored empty value bug
210   NtpServer:
211     type: string
212     default: ''
213   RabbitHost:
214     type: string
215     default: ''  # Has to be here because of the ignored empty value bug
216   RabbitPassword:
217     default: guest
218     description: The password for RabbitMQ
219     type: string
220     hidden: true
221   RabbitUserName:
222     default: guest
223     description: The username for RabbitMQ
224     type: string
225   RabbitClientUseSSL:
226     default: false
227     description: >
228         Rabbit client subscriber parameter to specify
229         an SSL connection to the RabbitMQ host.
230     type: string
231   RabbitClientPort:
232     default: 5672
233     description: Set rabbit subscriber port, change this if using SSL
234     type: number
235   SnmpdReadonlyUserName:
236     default: ro_snmp_user
237     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
238     type: string
239   SnmpdReadonlyUserPassword:
240     default: unset
241     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
242     type: string
243     hidden: true
244
245
246 resources:
247
248   NovaCompute:
249     type: OS::Nova::Server
250     properties:
251       image:
252         {get_param: Image}
253       image_update_policy:
254         get_param: ImageUpdatePolicy
255       flavor: {get_param: Flavor}
256       key_name: {get_param: KeyName}
257       networks:
258         - network: ctlplane
259       user_data_format: SOFTWARE_CONFIG
260
261   NetworkConfig:
262     type: OS::TripleO::Net::SoftwareConfig
263
264   NetworkDeployment:
265     type: OS::TripleO::SoftwareDeployment
266     properties:
267       signal_transport: NO_SIGNAL
268       config: {get_attr: [NetworkConfig, config_id]}
269       server: {get_resource: NovaCompute}
270       input_values:
271         bridge_name: {get_param: NeutronPhysicalBridge}
272         interface_name: {get_param: NeutronPublicInterface}
273
274   NovaComputeConfig:
275     type: OS::Heat::StructuredConfig
276     properties:
277       group: os-apply-config
278       config:
279         nova:
280           compute_driver: { get_input: nova_compute_driver }
281           compute_libvirt_type: { get_input: nova_compute_libvirt_type }
282           debug: {get_input: debug}
283           host: {get_input: nova_api_host}
284           public_ip: {get_input: nova_public_ip}
285           service-password: {get_input: nova_password}
286         ceilometer:
287           debug: {get_input: debug}
288           metering_secret: {get_input: ceilometer_metering_secret}
289           service-password: {get_input: ceilometer_password}
290           compute_agent: {get_input: ceilometer_compute_agent}
291         snmpd:
292           export_MIB: UCD-SNMP-MIB
293           readonly_user_name: {get_input: snmpd_readonly_user_name}
294           readonly_user_password: {get_input: snmpd_readonly_user_password}
295         glance:
296           debug: {get_input: debug}
297           host: {get_input: glance_host}
298           port: {get_input: glance_port}
299           protocol: {get_input: glance_protocol}
300         keystone:
301           debug: {get_input: debug}
302           host: {get_input: keystone_host}
303         neutron:
304           debug: {get_input: debug}
305           flat-networks: {get_input: neutron_flat_networks}
306           host: {get_input: neutron_host}
307           router_distributed: {get_input: neutron_router_distributed}
308           agent_mode: {get_input: neutron_agent_mode}
309           ovs_db: {get_input: neutron_dsn}
310           metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
311           mechanism_drivers: {get_input: neutron_mechanism_drivers}
312           allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
313           l3_ha: {get_input: neutron_l3_ha}
314           ovs:
315             local_ip: {get_input: neutron_local_ip}
316             tenant_network_type: {get_input: neutron_tenant_network_type}
317             tunnel_types: {get_input: neutron_tunnel_types}
318             network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
319             bridge_mappings: {get_input: neutron_bridge_mappings}
320             enable_tunneling: {get_input: neutron_enable_tunneling}
321             physical_bridge: {get_input: neutron_physical_bridge}
322             public_interface: {get_input: neutron_public_interface}
323             public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
324           service-password: {get_input: neutron_password}
325         admin-password: {get_input: admin_password}
326         rabbit:
327           host: {get_input: rabbit_host}
328           username: {get_input: rabbit_username}
329           password: {get_input: rabbit_password}
330         ntp:
331           servers:
332               - {server: {get_input: ntp_server}}
333
334   NovaComputeDeployment:
335     type: OS::TripleO::SoftwareDeployment
336     properties:
337       signal_transport: NO_SIGNAL
338       config: {get_resource: NovaComputeConfig}
339       server: {get_resource: NovaCompute}
340       input_values:
341         debug: {get_param: Debug}
342         nova_compute_driver: {get_param: NovaComputeDriver}
343         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
344         nova_public_ip: {get_param: NovaPublicIP}
345         nova_api_host: {get_param: NovaApiHost}
346         nova_password: {get_param: NovaPassword}
347         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
348         ceilometer_password: {get_param: CeilometerPassword}
349         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
350         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
351         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
352         glance_host: {get_param: GlanceHost}
353         glance_port: {get_param: GlancePort}
354         glance_protocol: {get_param: GlanceProtocol}
355         keystone_host: {get_param: KeystoneHost}
356         neutron_flat_networks: {get_param: NeutronFlatNetworks}
357         neutron_host: {get_param: NeutronHost}
358         neutron_local_ip: {get_attr: [NovaCompute, networks, ctlplane, 0]}
359         neutron_tenant_network_type: {get_param: NeutronNetworkType}
360         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
361         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
362         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
363         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
364         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
365         neutron_public_interface: {get_param: NeutronPublicInterface}
366         neutron_password: {get_param: NeutronPassword}
367         neutron_agent_mode: {get_param: NeutronAgentMode}
368         neutron_router_distributed: {get_param: NeutronDVR}
369         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
370         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
371         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
372         neutron_l3_ha: {get_param: NeutronL3HA}
373         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
374         admin_password: {get_param: AdminPassword}
375         rabbit_host: {get_param: RabbitHost}
376         rabbit_username: {get_param: RabbitUserName}
377         rabbit_password: {get_param: RabbitPassword}
378         ntp_server: {get_param: NtpServer}
379
380   NovaComputePassthrough:
381     type: OS::Heat::StructuredConfig
382     properties:
383       group: os-apply-config
384       config: {get_input: passthrough_config}
385
386   NovaComputePassthroughSpecific:
387     type: OS::Heat::StructuredConfig
388     properties:
389       group: os-apply-config
390       config: {get_input: passthrough_config_specific}
391
392   NovaComputePassthroughDeployment:
393     depends_on: [NovaComputeDeployment]
394     type: OS::Heat::StructuredDeployment
395     properties:
396       config: {get_resource: NovaComputePassthrough}
397       server: {get_resource: NovaCompute}
398       signal_transport: NO_SIGNAL
399       input_values:
400         passthrough_config: {get_param: ExtraConfig}
401
402   NovaComputePassthroughDeploymentSpecific:
403     depends_on: [NovaComputePassthroughDeployment]
404     type: OS::Heat::StructuredDeployment
405     properties:
406       config: {get_resource: NovaComputePassthroughSpecific}
407       server: {get_resource: NovaCompute}
408       signal_transport: NO_SIGNAL
409       input_values:
410         passthrough_config_specific: {get_param: NovaComputeExtraConfig}
411
412 outputs:
413   ip_address:
414     description: IP address of the server in the ctlplane network
415     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
416   hostname:
417     description: Hostname of the server
418     value: {get_attr: [NovaCompute, name]}
419   hosts_entry:
420     description: >
421       Server's IP address and hostname in the /etc/hosts format
422     value:
423       str_replace:
424         template: "IP HOST HOST.novalocal"
425         params:
426           IP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
427           HOST: {get_attr: [NovaCompute, name]}
428   nova_server_resource:
429     description: Heat resource handle for the Nova compute server
430     value:
431       {get_resource: NovaCompute}