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