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