puppet+devtest: make compute nodes reachable
[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   # 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   SnmpdReadonlyUserName:
228     default: ro_snmp_user
229     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
230     type: string
231   SnmpdReadonlyUserPassword:
232     default: unset
233     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
234     type: string
235     hidden: true
236
237
238 resources:
239
240   NovaCompute:
241     type: OS::Nova::Server
242     properties:
243       image:
244         {get_param: Image}
245       image_update_policy:
246         get_param: ImageUpdatePolicy
247       flavor: {get_param: Flavor}
248       key_name: {get_param: KeyName}
249       networks:
250         - network: ctlplane
251       user_data_format: SOFTWARE_CONFIG
252
253   NetworkConfig:
254     type: OS::TripleO::Net::SoftwareConfig
255
256   NetworkDeployment:
257     type: OS::TripleO::SoftwareDeployment
258     properties:
259       signal_transport: NO_SIGNAL
260       config: {get_attr: [NetworkConfig, config_id]}
261       server: {get_resource: NovaCompute}
262       input_values:
263         bridge_name: {get_param: NeutronPhysicalBridge}
264         interface_name: {get_param: NeutronPublicInterface}
265
266   NovaComputeConfig:
267     type: OS::Heat::StructuredConfig
268     properties:
269       group: os-apply-config
270       config:
271         nova:
272           compute_driver: { get_input: nova_compute_driver }
273           compute_libvirt_type: { get_input: nova_compute_libvirt_type }
274           debug: {get_input: debug}
275           host: {get_input: nova_api_host}
276           public_ip: {get_input: nova_public_ip}
277           service-password: {get_input: nova_password}
278         ceilometer:
279           debug: {get_input: debug}
280           metering_secret: {get_input: ceilometer_metering_secret}
281           service-password: {get_input: ceilometer_password}
282           compute_agent: {get_input: ceilometer_compute_agent}
283         snmpd:
284           export_MIB: UCD-SNMP-MIB
285           readonly_user_name: {get_input: snmpd_readonly_user_name}
286           readonly_user_password: {get_input: snmpd_readonly_user_password}
287         glance:
288           debug: {get_input: debug}
289           host: {get_input: glance_host}
290           port: {get_input: glance_port}
291           protocol: {get_input: glance_protocol}
292         keystone:
293           debug: {get_input: debug}
294           host: {get_input: keystone_host}
295         neutron:
296           debug: {get_input: debug}
297           flat-networks: {get_input: neutron_flat_networks}
298           host: {get_input: neutron_host}
299           router_distributed: {get_input: neutron_router_distributed}
300           agent_mode: {get_input: neutron_agent_mode}
301           ovs_db: {get_input: neutron_dsn}
302           metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
303           mechanism_drivers: {get_input: neutron_mechanism_drivers}
304           allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
305           l3_ha: {get_input: neutron_l3_ha}
306           ovs:
307             local_ip: {get_input: neutron_local_ip}
308             tenant_network_type: {get_input: neutron_tenant_network_type}
309             tunnel_types: {get_input: neutron_tunnel_types}
310             network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
311             bridge_mappings: {get_input: neutron_bridge_mappings}
312             enable_tunneling: {get_input: neutron_enable_tunneling}
313             physical_bridge: {get_input: neutron_physical_bridge}
314             public_interface: {get_input: neutron_public_interface}
315             public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
316           service-password: {get_input: neutron_password}
317         admin-password: {get_input: admin_password}
318         rabbit:
319           host: {get_input: rabbit_host}
320           username: {get_input: rabbit_username}
321           password: {get_input: rabbit_password}
322         ntp:
323           servers:
324               - {server: {get_input: ntp_server}}
325
326   NovaComputeDeployment:
327     type: OS::TripleO::SoftwareDeployment
328     properties:
329       signal_transport: NO_SIGNAL
330       config: {get_resource: NovaComputeConfig}
331       server: {get_resource: NovaCompute}
332       input_values:
333         debug: {get_param: Debug}
334         nova_compute_driver: {get_param: NovaComputeDriver}
335         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
336         nova_public_ip: {get_param: NovaPublicIP}
337         nova_api_host: {get_param: NovaApiHost}
338         nova_password: {get_param: NovaPassword}
339         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
340         ceilometer_password: {get_param: CeilometerPassword}
341         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
342         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
343         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
344         glance_host: {get_param: GlanceHost}
345         glance_port: {get_param: GlancePort}
346         glance_protocol: {get_param: GlanceProtocol}
347         keystone_host: {get_param: KeystoneHost}
348         neutron_flat_networks: {get_param: NeutronFlatNetworks}
349         neutron_host: {get_param: NeutronHost}
350         neutron_local_ip: {get_attr: [NovaCompute, networks, ctlplane, 0]}
351         neutron_tenant_network_type: {get_param: NeutronNetworkType}
352         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
353         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
354         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
355         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
356         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
357         neutron_public_interface: {get_param: NeutronPublicInterface}
358         neutron_password: {get_param: NeutronPassword}
359         neutron_agent_mode: {get_param: NeutronAgentMode}
360         neutron_router_distributed: {get_param: NeutronDVR}
361         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
362         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
363         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
364         neutron_l3_ha: {get_param: NeutronL3HA}
365         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
366         admin_password: {get_param: AdminPassword}
367         rabbit_host: {get_param: RabbitHost}
368         rabbit_username: {get_param: RabbitUserName}
369         rabbit_password: {get_param: RabbitPassword}
370         ntp_server: {get_param: NtpServer}
371
372   NovaComputePassthrough:
373     type: OS::Heat::StructuredConfig
374     properties:
375       group: os-apply-config
376       config: {get_input: passthrough_config}
377
378   NovaComputePassthroughSpecific:
379     type: OS::Heat::StructuredConfig
380     properties:
381       group: os-apply-config
382       config: {get_input: passthrough_config_specific}
383
384   NovaComputePassthroughDeployment:
385     depends_on: [NovaComputeDeployment]
386     type: OS::Heat::StructuredDeployment
387     properties:
388       config: {get_resource: NovaComputePassthrough}
389       server: {get_resource: NovaCompute}
390       signal_transport: NO_SIGNAL
391       input_values:
392         passthrough_config: {get_param: ExtraConfig}
393
394   NovaComputePassthroughDeploymentSpecific:
395     depends_on: [NovaComputePassthroughDeployment]
396     type: OS::Heat::StructuredDeployment
397     properties:
398       config: {get_resource: NovaComputePassthroughSpecific}
399       server: {get_resource: NovaCompute}
400       signal_transport: NO_SIGNAL
401       input_values:
402         passthrough_config_specific: {get_param: NovaComputeExtraConfig}
403
404 outputs:
405   ip_address:
406     description: IP address of the server in the ctlplane network
407     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
408   hostname:
409     description: Hostname of the server
410     value: {get_attr: [NovaCompute, name]}
411   hosts_entry:
412     description: >
413       Server's IP address and hostname in the /etc/hosts format
414     value:
415       str_replace:
416         template: "IP HOST HOST.novalocal"
417         params:
418           IP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
419           HOST: {get_attr: [NovaCompute, name]}
420   nova_server_resource:
421     description: Heat resource handle for the Nova compute server
422     value:
423       {get_resource: NovaCompute}