Merge "controller: enable HTTP Glance backend"
[apex-tripleo-heat-templates.git] / puppet / compute-puppet.yaml
1 heat_template_version: 2015-04-30
2
3 description: >
4   OpenStack hypervisor node configured via Puppet.
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: 'br-ex'
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   EnablePackageInstall:
247     default: 'false'
248     description: Set to true to enable package installation via Puppet
249     type: boolean
250   ServiceNetMap:
251     default: {}
252     description: Mapping of service_name -> network name. Typically set
253                  via parameter_defaults in the resource registry.
254     type: json
255   UpdateIdentifier:
256     default: ''
257     type: string
258     description: >
259       Setting to a previously unused value during stack-update will trigger
260       package update on all nodes
261   Hostname:
262     type: string
263     default: '' # Defaults to Heat created hostname
264
265 resources:
266
267   NovaCompute:
268     type: OS::Nova::Server
269     properties:
270       image:
271         {get_param: Image}
272       image_update_policy:
273         get_param: ImageUpdatePolicy
274       flavor: {get_param: Flavor}
275       key_name: {get_param: KeyName}
276       networks:
277         - network: ctlplane
278       user_data_format: SOFTWARE_CONFIG
279       user_data: {get_resource: NodeUserData}
280       name: {get_param: Hostname}
281
282   NodeUserData:
283     type: OS::TripleO::NodeUserData
284
285   InternalApiPort:
286     type: OS::TripleO::Compute::Ports::InternalApiPort
287     properties:
288       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
289
290   StoragePort:
291     type: OS::TripleO::Compute::Ports::StoragePort
292     properties:
293       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
294
295   TenantPort:
296     type: OS::TripleO::Compute::Ports::TenantPort
297     properties:
298       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
299
300   NetIpMap:
301     type: OS::TripleO::Network::Ports::NetIpMap
302     properties:
303       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
304       StorageIp: {get_attr: [StoragePort, ip_address]}
305       TenantIp: {get_attr: [TenantPort, ip_address]}
306
307   NetworkConfig:
308     type: OS::TripleO::Compute::Net::SoftwareConfig
309     properties:
310       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
311       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
312       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
313
314   NetworkDeployment:
315     type: OS::TripleO::SoftwareDeployment
316     properties:
317       config: {get_resource: NetworkConfig}
318       server: {get_resource: NovaCompute}
319       input_values:
320         bridge_name: {get_param: NeutronPhysicalBridge}
321         interface_name: {get_param: NeutronPublicInterface}
322
323   NovaComputeConfig:
324     type: OS::Heat::StructuredConfig
325     properties:
326       group: os-apply-config
327       config:
328         hiera:
329           hierarchy:
330             - heat_config_%{::deploy_config_name}
331             - compute
332             - ceph_cluster # provided by CephClusterConfig
333             - ceph
334             - all_nodes # provided by allNodesConfig
335             - '"%{::osfamily}"'
336             - common
337           datafiles:
338             common:
339               raw_data: {get_file: hieradata/common.yaml}
340             ceph:
341               raw_data: {get_file: hieradata/ceph.yaml}
342             compute:
343               raw_data: {get_file: hieradata/compute.yaml}
344               mapped_data:
345                 nova::debug: {get_input: debug}
346                 nova::rabbit_userid: {get_input: rabbit_username}
347                 nova::rabbit_password: {get_input: rabbit_password}
348                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
349                 nova::rabbit_port: {get_input: rabbit_client_port}
350                 nova_compute_driver: {get_input: nova_compute_driver}
351                 nova::compute::libvirt::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
352                 nova_api_host: {get_input: nova_api_host}
353                 nova::compute::vncproxy_host: {get_input: nova_public_ip}
354                 nova::compute::rbd::ephemeral_storage: {get_input: nova_enable_rbd_backend}
355                 nova_password: {get_input: nova_password}
356                 nova::compute::vncserver_proxyclient_address: {get_input: nova_vnc_proxyclient_address}
357                 ceilometer::debug: {get_input: debug}
358                 ceilometer::rabbit_userid: {get_input: rabbit_username}
359                 ceilometer::rabbit_password: {get_input: rabbit_password}
360                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
361                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
362                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
363                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
364                 ceilometer::agent::auth::auth_url: {get_input: ceilometer_agent_auth_url}
365                 ceilometer_compute_agent: {get_input: ceilometer_compute_agent}
366                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
367                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
368                 nova::glance_api_servers: {get_input: glance_api_servers}
369                 neutron::debug: {get_input: debug}
370                 neutron::rabbit_password: {get_input: rabbit_password}
371                 neutron::rabbit_user: {get_input: rabbit_user}
372                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
373                 neutron::rabbit_port: {get_input: rabbit_client_port}
374                 neutron_flat_networks: {get_input: neutron_flat_networks}
375                 neutron_host: {get_input: neutron_host}
376                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
377
378                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
379                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
380                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
381                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
382                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
383                 neutron_physical_bridge: {get_input: neutron_physical_bridge}
384                 neutron_public_interface: {get_input: neutron_public_interface}
385                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
386                 nova::network::neutron::neutron_url: {get_input: neutron_url}
387                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
388                 neutron_router_distributed: {get_input: neutron_router_distributed}
389                 neutron_agent_mode: {get_input: neutron_agent_mode}
390                 neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
391                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
392                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
393                 admin_password: {get_input: admin_password}
394                 ntp::servers: {get_input: ntp_servers}
395                 enable_package_install: {get_input: enable_package_install}
396
397   NovaComputeDeployment:
398     type: OS::TripleO::SoftwareDeployment
399     depends_on: NetworkDeployment
400     properties:
401       config: {get_resource: NovaComputeConfig}
402       server: {get_resource: NovaCompute}
403       input_values:
404         debug: {get_param: Debug}
405         nova_compute_driver: {get_param: NovaComputeDriver}
406         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
407         nova_public_ip: {get_param: NovaPublicIP}
408         nova_api_host: {get_param: NovaApiHost}
409         nova_password: {get_param: NovaPassword}
410         nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
411         nova_vnc_proxyclient_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaVncProxyNetwork]}]}
412         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
413         ceilometer_password: {get_param: CeilometerPassword}
414         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
415         ceilometer_agent_auth_url:
416           list_join:
417             - ''
418             - - 'http://'
419               - {get_param: KeystoneHost}
420               - ':5000/v2.0'
421         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
422         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
423         glance_api_servers:
424           list_join:
425             - ''
426             - - {get_param: GlanceProtocol}
427               - '://'
428               - {get_param: GlanceHost}
429               - ':'
430               - {get_param: GlancePort}
431         neutron_flat_networks: {get_param: NeutronFlatNetworks}
432         neutron_host: {get_param: NeutronHost}
433         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
434         neutron_tenant_network_type: {get_param: NeutronNetworkType}
435         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
436         neutron_network_vlan_ranges:
437           str_replace:
438             template: "['RANGES']"
439             params:
440               RANGES:
441                 list_join:
442                 - "','"
443                 - {get_param: NeutronNetworkVLANRanges}
444         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
445         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
446         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
447         neutron_public_interface: {get_param: NeutronPublicInterface}
448         neutron_password: {get_param: NeutronPassword}
449         neutron_agent_mode: {get_param: NeutronAgentMode}
450         neutron_router_distributed: {get_param: NeutronDVR}
451         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
452         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
453         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
454         neutron_url:
455           list_join:
456             - ''
457             - - 'http://'
458               - {get_param: NeutronHost}
459               - ':9696'
460         neutron_admin_auth_url:
461           list_join:
462             - ''
463             - - 'http://'
464               - {get_param: NeutronHost}
465               - ':35357/v2.0'
466         admin_password: {get_param: AdminPassword}
467         rabbit_username: {get_param: RabbitUserName}
468         rabbit_password: {get_param: RabbitPassword}
469         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
470         rabbit_client_port: {get_param: RabbitClientPort}
471         ntp_servers:
472           str_replace:
473             template: '["server"]'
474             params:
475               server: {get_param: NtpServer}
476         enable_package_install: {get_param: EnablePackageInstall}
477
478   UpdateConfig:
479     type: OS::TripleO::Tasks::PackageUpdate
480
481   UpdateDeployment:
482     type: OS::Heat::SoftwareDeployment
483     properties:
484       config: {get_resource: UpdateConfig}
485       server: {get_resource: NovaCompute}
486       input_values:
487         update_identifier:
488           get_param: UpdateIdentifier
489
490 outputs:
491   ip_address:
492     description: IP address of the server in the ctlplane network
493     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
494   internal_api_ip_address:
495     description: IP address of the server in the internal_api network
496     value: {get_attr: [InternalApiPort, ip_address]}
497   storage_ip_address:
498     description: IP address of the server in the storage network
499     value: {get_attr: [StoragePort, ip_address]}
500   tenant_ip_address:
501     description: IP address of the server in the tenant network
502     value: {get_attr: [TenantPort, ip_address]}
503   hostname:
504     description: Hostname of the server
505     value: {get_attr: [NovaCompute, name]}
506   hosts_entry:
507     description: >
508       Server's IP address and hostname in the /etc/hosts format
509     value:
510       str_replace:
511         template: "IP HOST.localdomain HOST"
512         params:
513           IP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
514           HOST: {get_attr: [NovaCompute, name]}
515   nova_server_resource:
516     description: Heat resource handle for the Nova compute server
517     value:
518       {get_resource: NovaCompute}
519   config_identifier:
520     description: identifier which changes if the node configuration may need re-applying
521     value: {get_attr: [NovaComputeDeployment, deploy_stdout]}
522