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