Wire Neutron VLAN ranges param as array to puppet
[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
252 resources:
253
254   NovaCompute:
255     type: OS::Nova::Server
256     properties:
257       image:
258         {get_param: Image}
259       image_update_policy:
260         get_param: ImageUpdatePolicy
261       flavor: {get_param: Flavor}
262       key_name: {get_param: KeyName}
263       networks:
264         - network: ctlplane
265       user_data_format: SOFTWARE_CONFIG
266       user_data: {get_resource: NodeUserData}
267
268   NodeUserData:
269     type: OS::TripleO::NodeUserData
270
271   InternalApiPort:
272     type: OS::TripleO::Compute::Ports::InternalApiPort
273     properties:
274       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
275
276   StoragePort:
277     type: OS::TripleO::Compute::Ports::StoragePort
278     properties:
279       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
280
281   TenantPort:
282     type: OS::TripleO::Compute::Ports::TenantPort
283     properties:
284       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
285
286   NetworkConfig:
287     type: OS::TripleO::Compute::Net::SoftwareConfig
288     properties:
289       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
290       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
291       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
292
293   NetworkDeployment:
294     type: OS::TripleO::SoftwareDeployment
295     properties:
296       signal_transport: NO_SIGNAL
297       config: {get_resource: NetworkConfig}
298       server: {get_resource: NovaCompute}
299       input_values:
300         bridge_name: {get_param: NeutronPhysicalBridge}
301         interface_name: {get_param: NeutronPublicInterface}
302
303   NovaComputeConfig:
304     type: OS::Heat::StructuredConfig
305     properties:
306       group: os-apply-config
307       config:
308         nova:
309           compute_driver: { get_input: nova_compute_driver }
310           compute_libvirt_type: { get_input: nova_compute_libvirt_type }
311           debug: {get_input: debug}
312           host: {get_input: nova_api_host}
313           public_ip: {get_input: nova_public_ip}
314           service-password: {get_input: nova_password}
315         ceilometer:
316           debug: {get_input: debug}
317           metering_secret: {get_input: ceilometer_metering_secret}
318           service-password: {get_input: ceilometer_password}
319           compute_agent: {get_input: ceilometer_compute_agent}
320         snmpd:
321           export_MIB: UCD-SNMP-MIB
322           readonly_user_name: {get_input: snmpd_readonly_user_name}
323           readonly_user_password: {get_input: snmpd_readonly_user_password}
324         glance:
325           debug: {get_input: debug}
326           host: {get_input: glance_host}
327           port: {get_input: glance_port}
328           protocol: {get_input: glance_protocol}
329         keystone:
330           debug: {get_input: debug}
331           host: {get_input: keystone_host}
332         neutron:
333           debug: {get_input: debug}
334           flat-networks: {get_input: neutron_flat_networks}
335           host: {get_input: neutron_host}
336           router_distributed: {get_input: neutron_router_distributed}
337           agent_mode: {get_input: neutron_agent_mode}
338           ovs_db: {get_input: neutron_dsn}
339           metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
340           mechanism_drivers: {get_input: neutron_mechanism_drivers}
341           allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
342           l3_ha: {get_input: neutron_l3_ha}
343           ovs:
344             local_ip: {get_input: neutron_local_ip}
345             tenant_network_type: {get_input: neutron_tenant_network_type}
346             tunnel_types: {get_input: neutron_tunnel_types}
347             network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
348             bridge_mappings: {get_input: neutron_bridge_mappings}
349             enable_tunneling: {get_input: neutron_enable_tunneling}
350             physical_bridge: {get_input: neutron_physical_bridge}
351             public_interface: {get_input: neutron_public_interface}
352             public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
353           service-password: {get_input: neutron_password}
354         admin-password: {get_input: admin_password}
355         rabbit:
356           host: {get_input: rabbit_host}
357           username: {get_input: rabbit_username}
358           password: {get_input: rabbit_password}
359         ntp:
360           servers:
361               - {server: {get_input: ntp_server}}
362
363   NovaComputeDeployment:
364     type: OS::TripleO::SoftwareDeployment
365     properties:
366       signal_transport: NO_SIGNAL
367       config: {get_resource: NovaComputeConfig}
368       server: {get_resource: NovaCompute}
369       input_values:
370         debug: {get_param: Debug}
371         nova_compute_driver: {get_param: NovaComputeDriver}
372         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
373         nova_public_ip: {get_param: NovaPublicIP}
374         nova_api_host: {get_param: NovaApiHost}
375         nova_password: {get_param: NovaPassword}
376         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
377         ceilometer_password: {get_param: CeilometerPassword}
378         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
379         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
380         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
381         glance_host: {get_param: GlanceHost}
382         glance_port: {get_param: GlancePort}
383         glance_protocol: {get_param: GlanceProtocol}
384         keystone_host: {get_param: KeystoneHost}
385         neutron_flat_networks: {get_param: NeutronFlatNetworks}
386         neutron_host: {get_param: NeutronHost}
387         neutron_local_ip: {get_attr: [NovaCompute, networks, ctlplane, 0]}
388         neutron_tenant_network_type: {get_param: NeutronNetworkType}
389         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
390         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
391         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
392         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
393         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
394         neutron_public_interface: {get_param: NeutronPublicInterface}
395         neutron_password: {get_param: NeutronPassword}
396         neutron_agent_mode: {get_param: NeutronAgentMode}
397         neutron_router_distributed: {get_param: NeutronDVR}
398         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
399         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
400         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
401         neutron_l3_ha: {get_param: NeutronL3HA}
402         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
403         admin_password: {get_param: AdminPassword}
404         rabbit_host: {get_param: RabbitHost}
405         rabbit_username: {get_param: RabbitUserName}
406         rabbit_password: {get_param: RabbitPassword}
407         ntp_server: {get_param: NtpServer}
408
409   NovaComputePassthrough:
410     type: OS::Heat::StructuredConfig
411     properties:
412       group: os-apply-config
413       config: {get_input: passthrough_config}
414
415   NovaComputePassthroughSpecific:
416     type: OS::Heat::StructuredConfig
417     properties:
418       group: os-apply-config
419       config: {get_input: passthrough_config_specific}
420
421   NovaComputePassthroughDeployment:
422     depends_on: [NovaComputeDeployment]
423     type: OS::Heat::StructuredDeployment
424     properties:
425       config: {get_resource: NovaComputePassthrough}
426       server: {get_resource: NovaCompute}
427       signal_transport: NO_SIGNAL
428       input_values:
429         passthrough_config: {get_param: ExtraConfig}
430
431   NovaComputePassthroughDeploymentSpecific:
432     depends_on: [NovaComputePassthroughDeployment]
433     type: OS::Heat::StructuredDeployment
434     properties:
435       config: {get_resource: NovaComputePassthroughSpecific}
436       server: {get_resource: NovaCompute}
437       signal_transport: NO_SIGNAL
438       input_values:
439         passthrough_config_specific: {get_param: NovaComputeExtraConfig}
440
441 outputs:
442   ip_address:
443     description: IP address of the server in the ctlplane network
444     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
445   internal_api_ip_address:
446     description: IP address of the server in the internal_api network
447     value: {get_attr: [InternalApiPort, ip_address]}
448   storage_ip_address:
449     description: IP address of the server in the storage network
450     value: {get_attr: [StoragePort, ip_address]}
451   tenant_ip_address:
452     description: IP address of the server in the tenant network
453     value: {get_attr: [TenantPort, ip_address]}
454   hostname:
455     description: Hostname of the server
456     value: {get_attr: [NovaCompute, name]}
457   hosts_entry:
458     description: >
459       Server's IP address and hostname in the /etc/hosts format
460     value:
461       str_replace:
462         template: "IP HOST"
463         params:
464           IP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
465           HOST: {get_attr: [NovaCompute, name]}
466   nova_server_resource:
467     description: Heat resource handle for the Nova compute server
468     value:
469       {get_resource: NovaCompute}