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