Merge "Wire in hieradata overrides via ExtraConfig for CephStorage"
[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 hiera configuration to inject into the cluster. Note
36       that NovaComputeExtraConfig takes precedence over ExtraConfig.
37     type: json
38   Flavor:
39     description: Flavor for the nova compute node
40     type: string
41     constraints:
42       - custom_constraint: nova.flavor
43   GlanceHost:
44     type: string
45     default: ''  # Has to be here because of the ignored empty value bug
46   GlancePort:
47     default: "9292"
48     description: Glance port.
49     type: string
50   GlanceProtocol:
51     default: http
52     description: Protocol to use when connecting to glance, set to https for SSL.
53     type: string
54   Image:
55     type: string
56     default: overcloud-compute
57     constraints:
58       - custom_constraint: glance.image
59   ImageUpdatePolicy:
60     default: 'REBUILD_PRESERVE_EPHEMERAL'
61     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
62     type: string
63   KeyName:
64     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
65     type: string
66     default: default
67     constraints:
68       - custom_constraint: nova.keypair
69   KeystoneHost:
70     type: string
71     default: ''
72   NeutronBridgeMappings:
73     description: >
74       The OVS logical->physical bridge mappings to use. See the Neutron
75       documentation for details. Defaults to mapping br-ex - the external
76       bridge on hosts - to a physical name 'datacentre' which can be used
77       to create provider networks (and we use this for the default floating
78       network) - if changing this either use different post-install network
79       scripts or be sure to keep 'datacentre' as a mapping network name.
80     type: string
81     default: "datacentre:br-ex"
82   NeutronEnableTunnelling:
83     type: string
84     default: "True"
85   NeutronFlatNetworks:
86     type: string
87     default: 'datacentre'
88     description: >
89       If set, flat networks to configure in neutron plugins.
90   NeutronHost:
91     type: string
92     default: ''  # Has to be here because of the ignored empty value bug
93   NeutronNetworkType:
94     type: string
95     description: The tenant network type for Neutron, either gre or vxlan.
96     default: 'gre'
97   NeutronNetworkVLANRanges:
98     default: 'datacentre'
99     description: >
100       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
101       Neutron documentation for permitted values. Defaults to permitting any
102       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
103     type: comma_delimited_list
104   NeutronPassword:
105     default: unset
106     description: The password for the neutron service account, used by neutron agents.
107     type: string
108     hidden: true
109   NeutronPhysicalBridge:
110     default: 'br-ex'
111     description: An OVS bridge to create for accessing external networks.
112     type: string
113   NeutronPublicInterface:
114     default: nic1
115     description: A port to add to the NeutronPhysicalBridge.
116     type: string
117   NeutronTunnelTypes:
118     type: string
119     description: |
120         The tunnel types for the Neutron tenant network. To specify multiple
121         values, use a comma separated string, like so: 'gre,vxlan'
122     default: 'gre'
123   NeutronTunnelIdRanges:
124     description: |
125         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
126         of GRE tunnel IDs that are available for tenant network allocation
127     default: ["1:1000", ]
128     type: comma_delimited_list
129   NeutronVniRanges:
130     description: |
131         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
132         of VXLAN VNI IDs that are available for tenant network allocation
133     default: ["1:1000", ]
134     type: comma_delimited_list
135   NeutronPublicInterfaceRawDevice:
136     default: ''
137     type: string
138   NeutronDVR:
139     default: 'False'
140     type: string
141   NeutronMetadataProxySharedSecret:
142     default: 'unset'
143     description: Shared secret to prevent spoofing
144     type: string
145   NeutronMechanismDrivers:
146     default: 'openvswitch'
147     description: |
148         The mechanism drivers for the Neutron tenant network. To specify multiple
149         values, use a comma separated string, like so: 'openvswitch,l2_population'
150     type: string
151   # Not relevant for Computes, should be removed
152   NeutronAllowL3AgentFailover:
153     default: 'True'
154     description: Allow automatic l3-agent failover
155     type: string
156   # Not relevant for Computes, should be removed
157   NeutronL3HA:
158     default: 'False'
159     description: Whether to enable l3-agent HA
160     type: string
161   NeutronAgentMode:
162     default: 'dvr_snat'
163     description: Agent mode for the neutron-l3-agent on the controller hosts
164     type: string
165   NovaApiHost:
166     type: string
167     default: ''  # Has to be here because of the ignored empty value bug
168   NovaComputeDriver:
169     type: string
170     default: libvirt.LibvirtDriver
171   NovaComputeExtraConfig:
172     default: {}
173     description: |
174       NovaCompute specific configuration to inject into the cluster. Same
175       structure as ExtraConfig.
176     type: json
177   NovaComputeLibvirtType:
178     type: string
179     default: ''
180   NovaEnableRbdBackend:
181     default: false
182     description: Whether to enable or not the Rbd backend for Nova
183     type: boolean
184   NovaPassword:
185     default: unset
186     description: The password for the nova service account, used by nova-api.
187     type: string
188     hidden: true
189   NovaPublicIP:
190     type: string
191     default: ''  # Has to be here because of the ignored empty value bug
192   NtpServer:
193     type: string
194     default: ''
195   RabbitHost:
196     type: string
197     default: ''  # Has to be here because of the ignored empty value bug
198   RabbitPassword:
199     default: guest
200     description: The password for RabbitMQ
201     type: string
202     hidden: true
203   RabbitUserName:
204     default: guest
205     description: The username for RabbitMQ
206     type: string
207   RabbitClientUseSSL:
208     default: false
209     description: >
210         Rabbit client subscriber parameter to specify
211         an SSL connection to the RabbitMQ host.
212     type: string
213   RabbitClientPort:
214     default: 5672
215     description: Set rabbit subscriber port, change this if using SSL
216     type: number
217   SnmpdReadonlyUserName:
218     default: ro_snmp_user
219     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
220     type: string
221   SnmpdReadonlyUserPassword:
222     default: unset
223     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
224     type: string
225     hidden: true
226   EnablePackageInstall:
227     default: 'false'
228     description: Set to true to enable package installation via Puppet
229     type: boolean
230   ServiceNetMap:
231     default: {}
232     description: Mapping of service_name -> network name. Typically set
233                  via parameter_defaults in the resource registry.
234     type: json
235   UpdateIdentifier:
236     default: ''
237     type: string
238     description: >
239       Setting to a previously unused value during stack-update will trigger
240       package update on all nodes
241   Hostname:
242     type: string
243     default: '' # Defaults to Heat created hostname
244
245 resources:
246
247   NovaCompute:
248     type: OS::Nova::Server
249     properties:
250       image:
251         {get_param: Image}
252       image_update_policy:
253         get_param: ImageUpdatePolicy
254       flavor: {get_param: Flavor}
255       key_name: {get_param: KeyName}
256       networks:
257         - network: ctlplane
258       user_data_format: SOFTWARE_CONFIG
259       user_data: {get_resource: NodeUserData}
260       name: {get_param: Hostname}
261
262   NodeUserData:
263     type: OS::TripleO::NodeUserData
264
265   InternalApiPort:
266     type: OS::TripleO::Compute::Ports::InternalApiPort
267     properties:
268       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
269
270   StoragePort:
271     type: OS::TripleO::Compute::Ports::StoragePort
272     properties:
273       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
274
275   TenantPort:
276     type: OS::TripleO::Compute::Ports::TenantPort
277     properties:
278       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
279
280   NetIpMap:
281     type: OS::TripleO::Network::Ports::NetIpMap
282     properties:
283       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
284       StorageIp: {get_attr: [StoragePort, ip_address]}
285       TenantIp: {get_attr: [TenantPort, ip_address]}
286
287   NetworkConfig:
288     type: OS::TripleO::Compute::Net::SoftwareConfig
289     properties:
290       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
291       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
292       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
293
294   NetworkDeployment:
295     type: OS::TripleO::SoftwareDeployment
296     properties:
297       config: {get_resource: NetworkConfig}
298       server: {get_resource: NovaCompute}
299       input_values:
300         bridge_name: {get_param: NeutronPhysicalBridge}
301         interface_name: {get_param: NeutronPublicInterface}
302
303   NovaComputeConfig:
304     type: OS::Heat::StructuredConfig
305     properties:
306       group: os-apply-config
307       config:
308         hiera:
309           hierarchy:
310             - heat_config_%{::deploy_config_name}
311             - compute_extraconfig
312             - extraconfig
313             - compute
314             - ceph_cluster # provided by CephClusterConfig
315             - ceph
316             - all_nodes # provided by allNodesConfig
317             - '"%{::osfamily}"'
318             - common
319           datafiles:
320             compute_extraconfig:
321               mapped_data: {get_param: NovaComputeExtraConfig}
322             extraconfig:
323               mapped_data: {get_param: ExtraConfig}
324             common:
325               raw_data: {get_file: hieradata/common.yaml}
326             ceph:
327               raw_data: {get_file: hieradata/ceph.yaml}
328             compute:
329               raw_data: {get_file: hieradata/compute.yaml}
330               mapped_data:
331                 nova::debug: {get_input: debug}
332                 nova::rabbit_userid: {get_input: rabbit_username}
333                 nova::rabbit_password: {get_input: rabbit_password}
334                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
335                 nova::rabbit_port: {get_input: rabbit_client_port}
336                 nova_compute_driver: {get_input: nova_compute_driver}
337                 nova::compute::libvirt::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
338                 nova_api_host: {get_input: nova_api_host}
339                 nova::compute::vncproxy_host: {get_input: nova_public_ip}
340                 nova::compute::rbd::ephemeral_storage: {get_input: nova_enable_rbd_backend}
341                 nova_password: {get_input: nova_password}
342                 nova::compute::vncserver_proxyclient_address: {get_input: nova_vnc_proxyclient_address}
343                 ceilometer::debug: {get_input: debug}
344                 ceilometer::rabbit_userid: {get_input: rabbit_username}
345                 ceilometer::rabbit_password: {get_input: rabbit_password}
346                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
347                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
348                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
349                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
350                 ceilometer::agent::auth::auth_url: {get_input: ceilometer_agent_auth_url}
351                 ceilometer_compute_agent: {get_input: ceilometer_compute_agent}
352                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
353                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
354                 nova::glance_api_servers: {get_input: glance_api_servers}
355                 neutron::debug: {get_input: debug}
356                 neutron::rabbit_password: {get_input: rabbit_password}
357                 neutron::rabbit_user: {get_input: rabbit_user}
358                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
359                 neutron::rabbit_port: {get_input: rabbit_client_port}
360                 neutron_flat_networks: {get_input: neutron_flat_networks}
361                 neutron_host: {get_input: neutron_host}
362                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
363
364                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
365                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
366                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
367                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
368                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
369                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
370                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
371                 neutron_physical_bridge: {get_input: neutron_physical_bridge}
372                 neutron_public_interface: {get_input: neutron_public_interface}
373                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
374                 nova::network::neutron::neutron_url: {get_input: neutron_url}
375                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
376                 neutron_router_distributed: {get_input: neutron_router_distributed}
377                 neutron_agent_mode: {get_input: neutron_agent_mode}
378                 neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
379                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
380                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
381                 admin_password: {get_input: admin_password}
382                 ntp::servers: {get_input: ntp_servers}
383                 tripleo::packages::enable_install: {get_input: enable_package_install}
384
385   NovaComputeDeployment:
386     type: OS::TripleO::SoftwareDeployment
387     depends_on: NetworkDeployment
388     properties:
389       config: {get_resource: NovaComputeConfig}
390       server: {get_resource: NovaCompute}
391       input_values:
392         debug: {get_param: Debug}
393         nova_compute_driver: {get_param: NovaComputeDriver}
394         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
395         nova_public_ip: {get_param: NovaPublicIP}
396         nova_api_host: {get_param: NovaApiHost}
397         nova_password: {get_param: NovaPassword}
398         nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
399         nova_vnc_proxyclient_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaVncProxyNetwork]}]}
400         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
401         ceilometer_password: {get_param: CeilometerPassword}
402         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
403         ceilometer_agent_auth_url:
404           list_join:
405             - ''
406             - - 'http://'
407               - {get_param: KeystoneHost}
408               - ':5000/v2.0'
409         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
410         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
411         glance_api_servers:
412           list_join:
413             - ''
414             - - {get_param: GlanceProtocol}
415               - '://'
416               - {get_param: GlanceHost}
417               - ':'
418               - {get_param: GlancePort}
419         neutron_flat_networks: {get_param: NeutronFlatNetworks}
420         neutron_host: {get_param: NeutronHost}
421         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
422         neutron_tenant_network_type: {get_param: NeutronNetworkType}
423         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
424         neutron_tunnel_id_ranges:
425           str_replace:
426             template: "['RANGES']"
427             params:
428               RANGES:
429                 list_join:
430                 - "','"
431                 - {get_param: NeutronTunnelIdRanges}
432         neutron_vni_ranges:
433           str_replace:
434             template: "['RANGES']"
435             params:
436               RANGES:
437                 list_join:
438                 - "','"
439                 - {get_param: NeutronVniRanges}
440         neutron_network_vlan_ranges:
441           str_replace:
442             template: "['RANGES']"
443             params:
444               RANGES:
445                 list_join:
446                 - "','"
447                 - {get_param: NeutronNetworkVLANRanges}
448         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
449         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
450         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
451         neutron_public_interface: {get_param: NeutronPublicInterface}
452         neutron_password: {get_param: NeutronPassword}
453         neutron_agent_mode: {get_param: NeutronAgentMode}
454         neutron_router_distributed: {get_param: NeutronDVR}
455         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
456         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
457         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
458         neutron_url:
459           list_join:
460             - ''
461             - - 'http://'
462               - {get_param: NeutronHost}
463               - ':9696'
464         neutron_admin_auth_url:
465           list_join:
466             - ''
467             - - 'http://'
468               - {get_param: NeutronHost}
469               - ':35357/v2.0'
470         admin_password: {get_param: AdminPassword}
471         rabbit_username: {get_param: RabbitUserName}
472         rabbit_password: {get_param: RabbitPassword}
473         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
474         rabbit_client_port: {get_param: RabbitClientPort}
475         ntp_servers:
476           str_replace:
477             template: '["server"]'
478             params:
479               server: {get_param: NtpServer}
480         enable_package_install: {get_param: EnablePackageInstall}
481
482   UpdateConfig:
483     type: OS::TripleO::Tasks::PackageUpdate
484
485   UpdateDeployment:
486     type: OS::Heat::SoftwareDeployment
487     properties:
488       config: {get_resource: UpdateConfig}
489       server: {get_resource: NovaCompute}
490       input_values:
491         update_identifier:
492           get_param: UpdateIdentifier
493
494 outputs:
495   ip_address:
496     description: IP address of the server in the ctlplane network
497     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
498   internal_api_ip_address:
499     description: IP address of the server in the internal_api network
500     value: {get_attr: [InternalApiPort, ip_address]}
501   storage_ip_address:
502     description: IP address of the server in the storage network
503     value: {get_attr: [StoragePort, ip_address]}
504   tenant_ip_address:
505     description: IP address of the server in the tenant network
506     value: {get_attr: [TenantPort, ip_address]}
507   hostname:
508     description: Hostname of the server
509     value: {get_attr: [NovaCompute, name]}
510   hosts_entry:
511     description: >
512       Server's IP address and hostname in the /etc/hosts format
513     value:
514       str_replace:
515         template: "IP HOST.localdomain HOST"
516         params:
517           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
518           HOST: {get_attr: [NovaCompute, name]}
519   nova_server_resource:
520     description: Heat resource handle for the Nova compute server
521     value:
522       {get_resource: NovaCompute}
523   config_identifier:
524     description: identifier which changes if the node configuration may need re-applying
525     value: {get_attr: [NovaComputeDeployment, deploy_stdout]}