Merge "puppet: tidy up the Nova glance API server config"
[apex-tripleo-heat-templates.git] / puppet / compute-puppet.yaml
1 heat_template_version: 2014-10-16
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: ""
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: #FIXME this isn't wired in
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   SnmpdReadonlyUserName:
226     default: ro_snmp_user
227     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
228     type: string
229   SnmpdReadonlyUserPassword:
230     default: unset
231     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
232     type: string
233     hidden: true
234   EnablePackageInstall:
235     default: 'false'
236     description: Set to true to enable package installation via Puppet
237     type: boolean
238
239 resources:
240
241   NovaCompute:
242     type: OS::Nova::Server
243     properties:
244       image:
245         {get_param: Image}
246       image_update_policy:
247         get_param: ImageUpdatePolicy
248       flavor: {get_param: Flavor}
249       key_name: {get_param: KeyName}
250       networks:
251         - network: ctlplane
252       user_data_format: SOFTWARE_CONFIG
253
254   NetworkConfig:
255     type: OS::TripleO::Net::SoftwareConfig
256
257   NetworkDeployment:
258     type: OS::TripleO::SoftwareDeployment
259     properties:
260       signal_transport: NO_SIGNAL
261       config: {get_attr: [NetworkConfig, config_id]}
262       server: {get_resource: NovaCompute}
263       input_values:
264         bridge_name: {get_param: NeutronPhysicalBridge}
265         interface_name: {get_param: NeutronPublicInterface}
266
267   NovaComputeConfig:
268     type: OS::Heat::StructuredConfig
269     properties:
270       group: os-apply-config
271       config:
272         hiera:
273           hierarchy:
274             - heat_config_%{::deploy_config_name}
275             - compute
276             - ceph_cluster # provided by CephClusterConfig
277             - ceph
278             - common
279           datafiles:
280             common:
281               raw_data: {get_file: hieradata/common.yaml}
282             ceph:
283               raw_data: {get_file: hieradata/ceph.yaml}
284             compute:
285               raw_data: {get_file: hieradata/compute.yaml}
286               oac_data:
287                 nova::compute::vncserver_proxyclient_address: local-ipv4
288               mapped_data:
289                 #nova::debug: {get_input: debug}
290                 nova_compute_driver: {get_input: nova_compute_driver}
291                 nova::compute::libvirt::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
292                 nova_api_host: {get_input: nova_api_host}
293                 nova::compute::vncproxy_host: {get_input: nova_public_ip}
294                 nova_enable_rbd_backend: {get_input: nova_enable_rbd_backend}
295                 nova_password: {get_input: nova_password}
296                 #ceilometer::debug: {get_input: debug}
297                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
298                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
299                 ceilometer_compute_agent: {get_input: ceilometer_compute_agent}
300                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
301                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
302                 nova::glance_api_servers: {get_input: glance_api_servers}
303                 keystone_host: {get_input: keystone_host}
304                 #neutron::debug: {get_input: debug}
305                 neutron_flat_networks: {get_input: neutron_flat_networks}
306                 neutron_host: {get_input: neutron_host}
307                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
308                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
309                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
310                 neutron::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
311                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
312                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
313                 neutron_physical_bridge: {get_input: neutron_physical_bridge}
314                 neutron_public_interface: {get_input: neutron_public_interface}
315                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
316                 nova::network::neutron::neutron_url: {get_input: neutron_url}
317                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
318                 neutron_router_distributed: {get_input: neutron_router_distributed}
319                 neutron_agent_mode: {get_input: neutron_agent_mode}
320                 neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
321                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
322                 neutron_allow_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
323                 neutron_allow_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
324                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
325                 admin_password: {get_input: admin_password}
326                 nova::rabbit_host: {get_input: rabbit_host}
327                 neutron::rabbit_host: {get_input: rabbit_host}
328                 ceilometer::rabbit_host: {get_input: rabbit_host}
329                 nova::rabbit_userid: {get_input: rabbit_username}
330                 neutron::rabbit_user: {get_input: rabbit_username}
331                 ceilometer::rabbit_userid: {get_input: rabbit_username}
332                 nova::rabbit_password: {get_input: rabbit_password}
333                 neutron::rabbit_password: {get_input: rabbit_password}
334                 ceilometer::rabbit_password: {get_input: rabbit_password}
335                 ntp::servers: {get_input: ntp_servers}
336                 enable_package_install: {get_input: enable_package_install}
337
338   NovaComputeDeployment:
339     type: OS::TripleO::SoftwareDeployment
340     properties:
341       signal_transport: NO_SIGNAL
342       config: {get_resource: NovaComputeConfig}
343       server: {get_resource: NovaCompute}
344       input_values:
345         debug: {get_param: Debug}
346         nova_compute_driver: {get_param: NovaComputeDriver}
347         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
348         nova_public_ip: {get_param: NovaPublicIP}
349         nova_api_host: {get_param: NovaApiHost}
350         nova_password: {get_param: NovaPassword}
351         nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
352         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
353         ceilometer_password: {get_param: CeilometerPassword}
354         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
355         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
356         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
357         glance_api_servers:
358           list_join:
359             - ''
360             - - {get_param: GlanceProtocol}
361               - '://'
362               - {get_param: GlanceHost}
363               - ':'
364               - {get_param: GlancePort}
365         keystone_host: {get_param: KeystoneHost}
366         neutron_flat_networks: {get_param: NeutronFlatNetworks}
367         neutron_host: {get_param: NeutronHost}
368         neutron_local_ip: {get_attr: [NovaCompute, networks, ctlplane, 0]}
369         neutron_tenant_network_type: {get_param: NeutronNetworkType}
370         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
371         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
372         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
373         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
374         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
375         neutron_public_interface: {get_param: NeutronPublicInterface}
376         neutron_password: {get_param: NeutronPassword}
377         neutron_agent_mode: {get_param: NeutronAgentMode}
378         neutron_router_distributed: {get_param: NeutronDVR}
379         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
380         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
381         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
382         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
383         neutron_url:
384           list_join:
385             - ''
386             - - 'http://'
387               - {get_param: NeutronHost}
388               - ':9696'
389         neutron_admin_auth_url:
390           list_join:
391             - ''
392             - - 'http://'
393               - {get_param: NeutronHost}
394               - ':35357/v2.0'
395         admin_password: {get_param: AdminPassword}
396         rabbit_host: {get_param: RabbitHost}
397         rabbit_username: {get_param: RabbitUserName}
398         rabbit_password: {get_param: RabbitPassword}
399         ntp_servers:
400           str_replace:
401             template: '["server"]'
402             params:
403               server: {get_param: NtpServer}
404         enable_package_install: {get_param: EnablePackageInstall}
405
406 outputs:
407   ip_address:
408     description: IP address of the server in the ctlplane network
409     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
410   hostname:
411     description: Hostname of the server
412     value: {get_attr: [NovaCompute, name]}
413   hosts_entry:
414     description: >
415       Server's IP address and hostname in the /etc/hosts format
416     value:
417       str_replace:
418         template: "IP HOST HOST.novalocal"
419         params:
420           IP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
421           HOST: {get_attr: [NovaCompute, name]}
422   nova_server_resource:
423     description: Heat resource handle for the Nova compute server
424     value:
425       {get_resource: NovaCompute}