Merge "Ensure CinderStorage nodes use internalURL as catalog_info"
[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   NeutronTunnelIdRanges:
156     description: |
157         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
158         of GRE tunnel IDs that are available for tenant network allocation
159     default: ["1:1000", ]
160     type: comma_delimited_list
161   NeutronVniRanges:
162     description: |
163         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
164         of VXLAN VNI IDs that are available for tenant network allocation
165     default: ["1:1000", ]
166     type: comma_delimited_list
167   NeutronPublicInterfaceRawDevice:
168     default: ''
169     type: string
170   NeutronDVR:
171     default: 'False'
172     type: string
173   NeutronMetadataProxySharedSecret:
174     default: 'unset'
175     description: Shared secret to prevent spoofing
176     type: string
177   NeutronMechanismDrivers:
178     default: 'openvswitch'
179     description: |
180         The mechanism drivers for the Neutron tenant network. To specify multiple
181         values, use a comma separated string, like so: 'openvswitch,l2_population'
182     type: string
183   # Not relevant for Computes, should be removed
184   NeutronAllowL3AgentFailover:
185     default: 'True'
186     description: Allow automatic l3-agent failover
187     type: string
188   # Not relevant for Computes, should be removed
189   NeutronL3HA:
190     default: 'False'
191     description: Whether to enable l3-agent HA
192     type: string
193   NeutronAgentMode:
194     default: 'dvr_snat'
195     description: Agent mode for the neutron-l3-agent on the controller hosts
196     type: string
197   NovaApiHost:
198     type: string
199     default: ''  # Has to be here because of the ignored empty value bug
200   NovaComputeDriver:
201     type: string
202     default: libvirt.LibvirtDriver
203   NovaComputeExtraConfig:
204     default: {}
205     description: |
206       NovaCompute specific configuration to inject into the cluster. Same
207       structure as ExtraConfig.
208     type: json
209   NovaComputeLibvirtType:
210     type: string
211     default: ''
212   NovaEnableRbdBackend:
213     default: false
214     description: Whether to enable or not the Rbd backend for Nova
215     type: boolean
216   NovaPassword:
217     default: unset
218     description: The password for the nova service account, used by nova-api.
219     type: string
220     hidden: true
221   NovaPublicIP:
222     type: string
223     default: ''  # Has to be here because of the ignored empty value bug
224   NtpServer:
225     type: string
226     default: ''
227   RabbitHost:
228     type: string
229     default: ''  # Has to be here because of the ignored empty value bug
230   RabbitPassword:
231     default: guest
232     description: The password for RabbitMQ
233     type: string
234     hidden: true
235   RabbitUserName:
236     default: guest
237     description: The username for RabbitMQ
238     type: string
239   RabbitClientUseSSL:
240     default: false
241     description: >
242         Rabbit client subscriber parameter to specify
243         an SSL connection to the RabbitMQ host.
244     type: string
245   RabbitClientPort:
246     default: 5672
247     description: Set rabbit subscriber port, change this if using SSL
248     type: number
249   SnmpdReadonlyUserName:
250     default: ro_snmp_user
251     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
252     type: string
253   SnmpdReadonlyUserPassword:
254     default: unset
255     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
256     type: string
257     hidden: true
258   EnablePackageInstall:
259     default: 'false'
260     description: Set to true to enable package installation via Puppet
261     type: boolean
262   ServiceNetMap:
263     default: {}
264     description: Mapping of service_name -> network name. Typically set
265                  via parameter_defaults in the resource registry.
266     type: json
267   UpdateIdentifier:
268     default: ''
269     type: string
270     description: >
271       Setting to a previously unused value during stack-update will trigger
272       package update on all nodes
273   Hostname:
274     type: string
275     default: '' # Defaults to Heat created hostname
276
277 resources:
278
279   NovaCompute:
280     type: OS::Nova::Server
281     properties:
282       image:
283         {get_param: Image}
284       image_update_policy:
285         get_param: ImageUpdatePolicy
286       flavor: {get_param: Flavor}
287       key_name: {get_param: KeyName}
288       networks:
289         - network: ctlplane
290       user_data_format: SOFTWARE_CONFIG
291       user_data: {get_resource: NodeUserData}
292       name: {get_param: Hostname}
293
294   NodeUserData:
295     type: OS::TripleO::NodeUserData
296
297   InternalApiPort:
298     type: OS::TripleO::Compute::Ports::InternalApiPort
299     properties:
300       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
301
302   StoragePort:
303     type: OS::TripleO::Compute::Ports::StoragePort
304     properties:
305       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
306
307   TenantPort:
308     type: OS::TripleO::Compute::Ports::TenantPort
309     properties:
310       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
311
312   NetIpMap:
313     type: OS::TripleO::Network::Ports::NetIpMap
314     properties:
315       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
316       StorageIp: {get_attr: [StoragePort, ip_address]}
317       TenantIp: {get_attr: [TenantPort, ip_address]}
318
319   NetworkConfig:
320     type: OS::TripleO::Compute::Net::SoftwareConfig
321     properties:
322       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
323       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
324       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
325
326   NetworkDeployment:
327     type: OS::TripleO::SoftwareDeployment
328     properties:
329       config: {get_resource: NetworkConfig}
330       server: {get_resource: NovaCompute}
331       input_values:
332         bridge_name: {get_param: NeutronPhysicalBridge}
333         interface_name: {get_param: NeutronPublicInterface}
334
335   NovaComputeConfig:
336     type: OS::Heat::StructuredConfig
337     properties:
338       group: os-apply-config
339       config:
340         hiera:
341           hierarchy:
342             - heat_config_%{::deploy_config_name}
343             - compute
344             - ceph_cluster # provided by CephClusterConfig
345             - ceph
346             - all_nodes # provided by allNodesConfig
347             - '"%{::osfamily}"'
348             - common
349           datafiles:
350             common:
351               raw_data: {get_file: hieradata/common.yaml}
352             ceph:
353               raw_data: {get_file: hieradata/ceph.yaml}
354             compute:
355               raw_data: {get_file: hieradata/compute.yaml}
356               mapped_data:
357                 nova::debug: {get_input: debug}
358                 nova::rabbit_userid: {get_input: rabbit_username}
359                 nova::rabbit_password: {get_input: rabbit_password}
360                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
361                 nova::rabbit_port: {get_input: rabbit_client_port}
362                 nova_compute_driver: {get_input: nova_compute_driver}
363                 nova::compute::libvirt::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
364                 nova_api_host: {get_input: nova_api_host}
365                 nova::compute::vncproxy_host: {get_input: nova_public_ip}
366                 nova::compute::rbd::ephemeral_storage: {get_input: nova_enable_rbd_backend}
367                 nova_password: {get_input: nova_password}
368                 nova::compute::vncserver_proxyclient_address: {get_input: nova_vnc_proxyclient_address}
369                 ceilometer::debug: {get_input: debug}
370                 ceilometer::rabbit_userid: {get_input: rabbit_username}
371                 ceilometer::rabbit_password: {get_input: rabbit_password}
372                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
373                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
374                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
375                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
376                 ceilometer::agent::auth::auth_url: {get_input: ceilometer_agent_auth_url}
377                 ceilometer_compute_agent: {get_input: ceilometer_compute_agent}
378                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
379                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
380                 nova::glance_api_servers: {get_input: glance_api_servers}
381                 neutron::debug: {get_input: debug}
382                 neutron::rabbit_password: {get_input: rabbit_password}
383                 neutron::rabbit_user: {get_input: rabbit_user}
384                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
385                 neutron::rabbit_port: {get_input: rabbit_client_port}
386                 neutron_flat_networks: {get_input: neutron_flat_networks}
387                 neutron_host: {get_input: neutron_host}
388                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
389
390                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
391                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
392                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
393                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
394                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
395                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
396                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
397                 neutron_physical_bridge: {get_input: neutron_physical_bridge}
398                 neutron_public_interface: {get_input: neutron_public_interface}
399                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
400                 nova::network::neutron::neutron_url: {get_input: neutron_url}
401                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
402                 neutron_router_distributed: {get_input: neutron_router_distributed}
403                 neutron_agent_mode: {get_input: neutron_agent_mode}
404                 neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
405                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
406                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
407                 admin_password: {get_input: admin_password}
408                 ntp::servers: {get_input: ntp_servers}
409                 enable_package_install: {get_input: enable_package_install}
410
411   NovaComputeDeployment:
412     type: OS::TripleO::SoftwareDeployment
413     depends_on: NetworkDeployment
414     properties:
415       config: {get_resource: NovaComputeConfig}
416       server: {get_resource: NovaCompute}
417       input_values:
418         debug: {get_param: Debug}
419         nova_compute_driver: {get_param: NovaComputeDriver}
420         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
421         nova_public_ip: {get_param: NovaPublicIP}
422         nova_api_host: {get_param: NovaApiHost}
423         nova_password: {get_param: NovaPassword}
424         nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
425         nova_vnc_proxyclient_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaVncProxyNetwork]}]}
426         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
427         ceilometer_password: {get_param: CeilometerPassword}
428         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
429         ceilometer_agent_auth_url:
430           list_join:
431             - ''
432             - - 'http://'
433               - {get_param: KeystoneHost}
434               - ':5000/v2.0'
435         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
436         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
437         glance_api_servers:
438           list_join:
439             - ''
440             - - {get_param: GlanceProtocol}
441               - '://'
442               - {get_param: GlanceHost}
443               - ':'
444               - {get_param: GlancePort}
445         neutron_flat_networks: {get_param: NeutronFlatNetworks}
446         neutron_host: {get_param: NeutronHost}
447         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
448         neutron_tenant_network_type: {get_param: NeutronNetworkType}
449         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
450         neutron_tunnel_id_ranges:
451           str_replace:
452             template: "['RANGES']"
453             params:
454               RANGES:
455                 list_join:
456                 - "','"
457                 - {get_param: NeutronTunnelIdRanges}
458         neutron_vni_ranges:
459           str_replace:
460             template: "['RANGES']"
461             params:
462               RANGES:
463                 list_join:
464                 - "','"
465                 - {get_param: NeutronVniRanges}
466         neutron_network_vlan_ranges:
467           str_replace:
468             template: "['RANGES']"
469             params:
470               RANGES:
471                 list_join:
472                 - "','"
473                 - {get_param: NeutronNetworkVLANRanges}
474         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
475         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
476         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
477         neutron_public_interface: {get_param: NeutronPublicInterface}
478         neutron_password: {get_param: NeutronPassword}
479         neutron_agent_mode: {get_param: NeutronAgentMode}
480         neutron_router_distributed: {get_param: NeutronDVR}
481         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
482         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
483         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
484         neutron_url:
485           list_join:
486             - ''
487             - - 'http://'
488               - {get_param: NeutronHost}
489               - ':9696'
490         neutron_admin_auth_url:
491           list_join:
492             - ''
493             - - 'http://'
494               - {get_param: NeutronHost}
495               - ':35357/v2.0'
496         admin_password: {get_param: AdminPassword}
497         rabbit_username: {get_param: RabbitUserName}
498         rabbit_password: {get_param: RabbitPassword}
499         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
500         rabbit_client_port: {get_param: RabbitClientPort}
501         ntp_servers:
502           str_replace:
503             template: '["server"]'
504             params:
505               server: {get_param: NtpServer}
506         enable_package_install: {get_param: EnablePackageInstall}
507
508   UpdateConfig:
509     type: OS::TripleO::Tasks::PackageUpdate
510
511   UpdateDeployment:
512     type: OS::Heat::SoftwareDeployment
513     properties:
514       config: {get_resource: UpdateConfig}
515       server: {get_resource: NovaCompute}
516       input_values:
517         update_identifier:
518           get_param: UpdateIdentifier
519
520 outputs:
521   ip_address:
522     description: IP address of the server in the ctlplane network
523     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
524   internal_api_ip_address:
525     description: IP address of the server in the internal_api network
526     value: {get_attr: [InternalApiPort, ip_address]}
527   storage_ip_address:
528     description: IP address of the server in the storage network
529     value: {get_attr: [StoragePort, ip_address]}
530   tenant_ip_address:
531     description: IP address of the server in the tenant network
532     value: {get_attr: [TenantPort, ip_address]}
533   hostname:
534     description: Hostname of the server
535     value: {get_attr: [NovaCompute, name]}
536   hosts_entry:
537     description: >
538       Server's IP address and hostname in the /etc/hosts format
539     value:
540       str_replace:
541         template: "IP HOST.localdomain HOST"
542         params:
543           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
544           HOST: {get_attr: [NovaCompute, name]}
545   nova_server_resource:
546     description: Heat resource handle for the Nova compute server
547     value:
548       {get_resource: NovaCompute}
549   config_identifier:
550     description: identifier which changes if the node configuration may need re-applying
551     value: {get_attr: [NovaComputeDeployment, deploy_stdout]}