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