Merge "Add management network to list of networks to ping"
[apex-tripleo-heat-templates.git] / puppet / controller.yaml
1 heat_template_version: 2016-10-14
2
3 description: >
4   OpenStack controller node configured by Puppet.
5
6 parameters:
7   AdminPassword:
8     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
9     type: string
10     hidden: true
11   AodhPassword:
12     description: The password for the aodh services.
13     type: string
14     hidden: true
15   controllerExtraConfig:
16     default: {}
17     description: |
18       Deprecated. Use ControllerExtraConfig via parameter_defaults instead.
19     type: json
20   ControllerExtraConfig:
21     default: {}
22     description: |
23       Controller specific hiera configuration data to inject into the cluster.
24     type: json
25   ControllerIPs:
26     default: {}
27     description: >
28       A network mapped list of IPs to assign to Controllers in the following form:
29       {
30         "internal_api": ["a.b.c.d", "e.f.g.h"],
31         ...
32       }
33     type: json
34   ControlVirtualInterface:
35     default: 'br-ex'
36     description: Interface where virtual ip will be assigned.
37     type: string
38   CorosyncIPv6:
39     default: false
40     description: Enable IPv6 in Corosync
41     type: boolean
42   Debug:
43     default: ''
44     description: Set to True to enable debugging on all services.
45     type: string
46   EnableFencing:
47     default: false
48     description: Whether to enable fencing in Pacemaker or not.
49     type: boolean
50   EnableGalera:
51     default: true
52     description: Whether to use Galera instead of regular MariaDB.
53     type: boolean
54   EnableLoadBalancer:
55     default: true
56     description: Whether to deploy a LoadBalancer on the Controller
57     type: boolean
58   ExtraConfig:
59     default: {}
60     description: |
61       Additional hieradata to inject into the cluster, note that
62       ControllerExtraConfig takes precedence over ExtraConfig.
63     type: json
64   FencingConfig:
65     default: {}
66     description: |
67       Pacemaker fencing configuration. The JSON should have
68       the following structure:
69         {
70           "devices": [
71             {
72               "agent": "AGENT_NAME",
73               "host_mac": "HOST_MAC_ADDRESS",
74               "params": {"PARAM_NAME": "PARAM_VALUE"}
75             }
76           ]
77         }
78       For instance:
79         {
80           "devices": [
81             {
82               "agent": "fence_xvm",
83               "host_mac": "52:54:00:aa:bb:cc",
84               "params": {
85                 "multicast_address": "225.0.0.12",
86                 "port": "baremetal_0",
87                 "manage_fw": true,
88                 "manage_key_file": true,
89                 "key_file": "/etc/fence_xvm.key",
90                 "key_file_password": "abcdef"
91               }
92             }
93           ]
94         }
95     type: json
96   OvercloudControlFlavor:
97     description: Flavor for control nodes to request when deploying.
98     default: baremetal
99     type: string
100     constraints:
101       - custom_constraint: nova.flavor
102   HAProxyStatsPassword:
103     description: Password for HAProxy stats endpoint
104     type: string
105   HAProxyStatsUser:
106     description: User for HAProxy stats endpoint
107     default: admin
108     type: string
109   HAProxySyslogAddress:
110     default: /dev/log
111     description: Syslog address where HAproxy will send its log
112     type: string
113   HeatAuthEncryptionKey:
114     description: Auth encryption key for heat-engine
115     type: string
116     hidden: true
117   HorizonSecret:
118     description: Secret key for Django
119     type: string
120     hidden: true
121   controllerImage:
122     type: string
123     default: overcloud-full
124     constraints:
125       - custom_constraint: glance.image
126   ImageUpdatePolicy:
127     default: 'REBUILD_PRESERVE_EPHEMERAL'
128     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
129     type: string
130   InstanceNameTemplate:
131     default: 'instance-%08x'
132     description: Template string to be used to generate instance names
133     type: string
134   KeyName:
135     default: default
136     description: Name of an existing Nova key pair to enable SSH access to the instances
137     type: string
138     constraints:
139       - custom_constraint: nova.keypair
140   ManageFirewall:
141     default: false
142     description: Whether to manage IPtables rules.
143     type: boolean
144   MemcachedIPv6:
145     default: false
146     description: Enable IPv6 features in Memcached.
147     type: boolean
148   PurgeFirewallRules:
149     default: false
150     description: Whether IPtables rules should be purged before setting up the new ones.
151     type: boolean
152   MysqlClusterUniquePart:
153     description: A unique identifier of the MySQL cluster the controller is in.
154     type: string
155     default: 'unset'  # Has to be here because of the ignored empty value bug
156     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
157     # constraints:
158     # - length: {min: 4, max: 10}
159   MysqlInnodbBufferPoolSize:
160     description: >
161         Specifies the size of the buffer pool in megabytes. Setting to
162         zero should be interpreted as "no value" and will defer to the
163         lower level default.
164     type: number
165     default: 0
166   MysqlMaxConnections:
167     description: Configures MySQL max_connections config setting
168     type: number
169     default: 4096
170   MysqlClustercheckPassword:
171     type: string
172     hidden: true
173   MysqlRootPassword:
174     type: string
175     hidden: true
176     default: ''  # Has to be here because of the ignored empty value bug
177   NeutronMetadataProxySharedSecret:
178     description: Shared secret to prevent spoofing
179     type: string
180     hidden: true
181   NeutronPassword:
182     description: The password for the neutron service and db account, used by neutron agents.
183     type: string
184     hidden: true
185   NeutronPublicInterface:
186     default: nic1
187     description: What interface to bridge onto br-ex for network nodes.
188     type: string
189   NovaEnableDBPurge:
190     default: true
191     description: |
192         Whether to create cron job for purging soft deleted rows in Nova database.
193     type: boolean
194   NovaIPv6:
195     default: false
196     description: Enable IPv6 features in Nova
197     type: boolean
198   NovaPassword:
199     description: The password for the nova service and db account, used by nova-api.
200     type: string
201     hidden: true
202   PcsdPassword:
203     type: string
204     description: The password for the 'pcsd' user.
205     hidden: true
206   PublicVirtualInterface:
207     default: 'br-ex'
208     description: >
209         Specifies the interface where the public-facing virtual ip will be assigned.
210         This should be int_public when a VLAN is being used.
211     type: string
212   RabbitCookie:
213     type: string
214     default: ''  # Has to be here because of the ignored empty value bug
215     hidden: true
216   RabbitPassword:
217     description: The password for RabbitMQ
218     type: string
219     hidden: true
220   RabbitUserName:
221     default: guest
222     description: The username for RabbitMQ
223     type: string
224   RabbitClientUseSSL:
225     default: false
226     description: >
227         Rabbit client subscriber parameter to specify
228         an SSL connection to the RabbitMQ host.
229     type: string
230   RabbitClientPort:
231     default: 5672
232     description: Set rabbit subscriber port, change this if using SSL
233     type: number
234   RedisPassword:
235     description: The password for Redis
236     type: string
237     hidden: true
238   RedisVirtualIP:
239     type: string
240     default: ''  # Has to be here because of the ignored empty value bug
241   RedisVirtualIPUri:
242     type: string
243     default: ''  # Has to be here because of the ignored empty value bug
244     description: An IP address which is wrapped in brackets in case of IPv6
245   SwiftHashSuffix:
246     description: A random string to be used as a salt when hashing to determine mappings
247       in the ring.
248     hidden: true
249     type: string
250   UpgradeLevelNovaCompute:
251     type: string
252     description: Nova Compute upgrade level
253     default: ''
254   MysqlVirtualIP:
255     type: string
256     default: ''
257   ServiceNetMap:
258     default: {}
259     description: Mapping of service_name -> network name. Typically set
260                  via parameter_defaults in the resource registry.
261     type: json
262   EndpointMap:
263     default: {}
264     description: Mapping of service endpoint -> protocol. Typically set
265                  via parameter_defaults in the resource registry.
266     type: json
267   UpdateIdentifier:
268     default: ''
269     type: string
270     description: >
271       Setting to a previously unused value during stack-update will trigger
272       package update on all nodes
273   Hostname:
274     type: string
275     default: '' # Defaults to Heat created hostname
276   HostnameMap:
277     type: json
278     default: {}
279     description: Optional mapping to override hostnames
280   NetworkDeploymentActions:
281     type: comma_delimited_list
282     description: >
283       Heat action when to apply network configuration changes
284     default: ['CREATE']
285   NodeIndex:
286     type: number
287     default: 0
288   SoftwareConfigTransport:
289     default: POLL_SERVER_CFN
290     description: |
291       How the server should receive the metadata required for software configuration.
292     type: string
293     constraints:
294     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
295   CloudDomain:
296     type: string
297     description: >
298       The DNS domain used for the hosts. This should match the dhcp_domain
299       configured in the Undercloud neutron. Defaults to localdomain.
300   ServerMetadata:
301     default: {}
302     description: >
303       Extra properties or metadata passed to Nova for the created nodes in
304       the overcloud. It's accessible via the Nova metadata API.
305     type: json
306   ControllerSchedulerHints:
307     type: json
308     description: Optional scheduler hints to pass to nova
309     default: {}
310   ServiceConfigSettings:
311     type: json
312     default: {}
313   ServiceNames:
314     type: comma_delimited_list
315     default: []
316   ConfigCommand:
317     type: string
318     description: Command which will be run whenever configuration data changes
319     default: os-refresh-config --timeout 14400
320
321 parameter_groups:
322 - label: deprecated
323   description: Do not use deprecated params, they will be removed.
324   parameters:
325   - controllerExtraConfig
326
327 resources:
328
329   Controller:
330     type: OS::TripleO::Server
331     metadata:
332       os-collect-config:
333         command: {get_param: ConfigCommand}
334     properties:
335       image: {get_param: controllerImage}
336       image_update_policy: {get_param: ImageUpdatePolicy}
337       flavor: {get_param: OvercloudControlFlavor}
338       key_name: {get_param: KeyName}
339       networks:
340         - network: ctlplane
341       user_data_format: SOFTWARE_CONFIG
342       user_data: {get_resource: UserData}
343       name:
344         str_replace:
345             template: {get_param: Hostname}
346             params: {get_param: HostnameMap}
347       software_config_transport: {get_param: SoftwareConfigTransport}
348       metadata: {get_param: ServerMetadata}
349       scheduler_hints: {get_param: ControllerSchedulerHints}
350
351   # Combine the NodeAdminUserData and NodeUserData mime archives
352   UserData:
353     type: OS::Heat::MultipartMime
354     properties:
355       parts:
356       - config: {get_resource: NodeAdminUserData}
357         type: multipart
358       - config: {get_resource: NodeUserData}
359         type: multipart
360
361   # Creates the "heat-admin" user if configured via the environment
362   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
363   NodeAdminUserData:
364     type: OS::TripleO::NodeAdminUserData
365
366   # For optional operator additional userdata
367   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
368   NodeUserData:
369     type: OS::TripleO::NodeUserData
370
371   ExternalPort:
372     type: OS::TripleO::Controller::Ports::ExternalPort
373     properties:
374       IPPool: {get_param: ControllerIPs}
375       NodeIndex: {get_param: NodeIndex}
376       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
377
378   InternalApiPort:
379     type: OS::TripleO::Controller::Ports::InternalApiPort
380     properties:
381       IPPool: {get_param: ControllerIPs}
382       NodeIndex: {get_param: NodeIndex}
383       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
384
385   StoragePort:
386     type: OS::TripleO::Controller::Ports::StoragePort
387     properties:
388       IPPool: {get_param: ControllerIPs}
389       NodeIndex: {get_param: NodeIndex}
390       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
391
392   StorageMgmtPort:
393     type: OS::TripleO::Controller::Ports::StorageMgmtPort
394     properties:
395       IPPool: {get_param: ControllerIPs}
396       NodeIndex: {get_param: NodeIndex}
397       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
398
399   TenantPort:
400     type: OS::TripleO::Controller::Ports::TenantPort
401     properties:
402       IPPool: {get_param: ControllerIPs}
403       NodeIndex: {get_param: NodeIndex}
404       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
405
406   ManagementPort:
407     type: OS::TripleO::Controller::Ports::ManagementPort
408     properties:
409       IPPool: {get_param: ControllerIPs}
410       NodeIndex: {get_param: NodeIndex}
411       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
412
413   NetIpMap:
414     type: OS::TripleO::Network::Ports::NetIpMap
415     properties:
416       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
417       ExternalIp: {get_attr: [ExternalPort, ip_address]}
418       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
419       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
420       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
421       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
422       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
423       StorageIp: {get_attr: [StoragePort, ip_address]}
424       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
425       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
426       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
427       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
428       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
429       TenantIp: {get_attr: [TenantPort, ip_address]}
430       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
431       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
432       ManagementIp: {get_attr: [ManagementPort, ip_address]}
433       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
434       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
435
436   NetworkConfig:
437     type: OS::TripleO::Controller::Net::SoftwareConfig
438     properties:
439       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
440       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
441       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
442       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
443       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
444       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
445       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
446
447   NetworkDeployment:
448     type: OS::TripleO::SoftwareDeployment
449     properties:
450       name: NetworkDeployment
451       config: {get_resource: NetworkConfig}
452       server: {get_resource: Controller}
453       actions: {get_param: NetworkDeploymentActions}
454       input_values:
455         bridge_name: br-ex
456         interface_name: {get_param: NeutronPublicInterface}
457
458   # Resource for site-specific injection of root certificate
459   NodeTLSCAData:
460     depends_on: NetworkDeployment
461     type: OS::TripleO::NodeTLSCAData
462     properties:
463       server: {get_resource: Controller}
464
465   # Resource for site-specific passing of private keys/certificates
466   NodeTLSData:
467     depends_on: NodeTLSCAData
468     type: OS::TripleO::NodeTLSData
469     properties:
470       server: {get_resource: Controller}
471       NodeIndex: {get_param: NodeIndex}
472
473
474   ControllerDeployment:
475     type: OS::TripleO::SoftwareDeployment
476     depends_on: NetworkDeployment
477     properties:
478       name: ControllerDeployment
479       config: {get_resource: ControllerConfig}
480       server: {get_resource: Controller}
481       input_values:
482         bootstack_nodeid: {get_attr: [Controller, name]}
483         haproxy_log_address: {get_param: HAProxySyslogAddress}
484         haproxy_stats_password: {get_param: HAProxyStatsPassword}
485         haproxy_stats_user: {get_param: HAProxyStatsUser}
486         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
487         horizon_secret: {get_param: HorizonSecret}
488         admin_password: {get_param: AdminPassword}
489         debug: {get_param: Debug}
490         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
491         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
492         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
493         enable_fencing: {get_param: EnableFencing}
494         enable_galera: {get_param: EnableGalera}
495         enable_load_balancer: {get_param: EnableLoadBalancer}
496         manage_firewall: {get_param: ManageFirewall}
497         purge_firewall_rules: {get_param: PurgeFirewallRules}
498         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
499         mysql_max_connections: {get_param: MysqlMaxConnections}
500         mysql_root_password: {get_param: MysqlRootPassword}
501         mysql_clustercheck_password: {get_param: MysqlClustercheckPassword}
502         mysql_cluster_name:
503           str_replace:
504             template: tripleo-CLUSTER
505             params:
506               CLUSTER: {get_param: MysqlClusterUniquePart}
507         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
508         aodh_internal_url: { get_param: [ EndpointMap, AodhInternal, uri ] }
509         aodh_public_url: { get_param: [ EndpointMap, AodhPublic, uri ] }
510         aodh_admin_url: { get_param: [ EndpointMap, AodhAdmin, uri ] }
511         ceilometer_coordination_url:
512           list_join:
513             - ''
514             - - 'redis://:'
515               - {get_param: RedisPassword}
516               - '@'
517               - {get_param: RedisVirtualIPUri}
518               - ':6379/'
519         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
520         nova_ipv6: {get_param: NovaIPv6}
521         corosync_ipv6: {get_param: CorosyncIPv6}
522         memcached_ipv6: {get_param: MemcachedIPv6}
523         nova_password: {get_param: NovaPassword}
524         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
525         instance_name_template: {get_param: InstanceNameTemplate}
526         fencing_config: {get_param: FencingConfig}
527         pcsd_password: {get_param: PcsdPassword}
528         rabbit_username: {get_param: RabbitUserName}
529         rabbit_password: {get_param: RabbitPassword}
530         rabbit_cookie: {get_param: RabbitCookie}
531         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
532         rabbit_client_port: {get_param: RabbitClientPort}
533         control_virtual_interface: {get_param: ControlVirtualInterface}
534         public_virtual_interface: {get_param: PublicVirtualInterface}
535         swift_hash_suffix: {get_param: SwiftHashSuffix}
536         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
537         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
538         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
539         cinder_iscsi_network:
540           str_replace:
541             template: "'IP'"
542             params:
543               IP:
544                 get_attr:
545                   - NetIpMap
546                   - net_ip_map
547                   - str_replace:
548                       template: "NETWORK_uri"
549                       params:
550                         NETWORK: {get_param: [ServiceNetMap, CinderIscsiNetwork]}
551         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
552         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
553         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
554         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
555         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
556         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
557         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
558         manila_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
559         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongodbNetwork]}]}
560         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
561         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
562         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
563         aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
564         gnocchi_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
565         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
566         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
567         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
568         horizon_subnet:
569           str_replace:
570             template: "['SUBNET']"
571             params:
572               SUBNET:
573                 get_attr:
574                   - NetIpMap
575                   - net_ip_map
576                   - str_replace:
577                       template: "NETWORK_subnet"
578                       params:
579                         NETWORK: {get_param: [ServiceNetMap, HorizonNetwork]}
580         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitmqNetwork]}]}
581         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
582         redis_vip: {get_param: RedisVirtualIP}
583         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
584         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
585         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
586         mysql_virtual_ip: {get_param: MysqlVirtualIP}
587         ceph_cluster_network:
588           get_attr:
589             - NetIpMap
590             - net_ip_map
591             - str_replace:
592                 template: "NETWORK_subnet"
593                 params:
594                   NETWORK: {get_param: [ServiceNetMap, CephClusterNetwork]}
595         ceph_public_network:
596           get_attr:
597             - NetIpMap
598             - net_ip_map
599             - str_replace:
600                 template: "NETWORK_subnet"
601                 params:
602                   NETWORK: {get_param: [ServiceNetMap, CephPublicNetwork]}
603         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
604         ironic_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
605
606   # Map heat metadata into hiera datafiles
607   ControllerConfig:
608     type: OS::Heat::StructuredConfig
609     properties:
610       group: os-apply-config
611       config:
612         hiera:
613           hierarchy:
614             - '"%{::uuid}"'
615             - heat_config_%{::deploy_config_name}
616             - controller_extraconfig
617             - extraconfig
618             - service_configs
619             - service_names
620             - controller
621             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
622             - ceph_cluster # provided by CephClusterConfig
623             - ceph
624             - bootstrap_node # provided by BootstrapNodeConfig
625             - all_nodes # provided by allNodesConfig
626             - vip_data # provided by vip-config
627             - '"%{::osfamily}"'
628             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
629             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
630             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
631             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
632             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
633             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
634             - midonet_data #Optionally provided by AllNodesExtraConfig
635           merge_behavior: deeper
636           datafiles:
637             service_names:
638               mapped_data:
639                 service_names: {get_param: ServiceNames}
640             service_configs:
641               mapped_data:
642                 map_replace:
643                   - {get_param: ServiceConfigSettings}
644                   - values: {get_attr: [NetIpMap, net_ip_map]}
645             controller_extraconfig:
646               mapped_data:
647                 map_merge:
648                   - {get_param: controllerExtraConfig}
649                   - {get_param: ControllerExtraConfig}
650             extraconfig:
651               mapped_data: {get_param: ExtraConfig}
652             ceph:
653               mapped_data:
654                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
655                 ceph::profile::params::public_network: {get_input: ceph_public_network}
656                 ceph::profile::params::public_addr: {get_input: ceph_public_ip}
657             controller:
658               mapped_data: # data supplied directly to this deployment configuration, etc
659                 bootstack_nodeid: {get_input: bootstack_nodeid}
660
661                 # Pacemaker
662                 enable_fencing: {get_input: enable_fencing}
663                 enable_load_balancer: {get_input: enable_load_balancer}
664                 hacluster_pwd: {get_input: pcsd_password}
665                 corosync_ipv6: {get_input: corosync_ipv6}
666                 tripleo::fencing::config: {get_input: fencing_config}
667
668                 # Swift
669                 # FIXME: need to move proxy_local_net_ip into swift-proxy.yaml
670                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
671                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
672                 swift::swift_hash_path_suffix: {get_input: swift_hash_suffix}
673
674                 # Cinder
675                 tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_address: {get_input: cinder_iscsi_network}
676                 cinder::api::bind_host: {get_input: cinder_api_network}
677
678                 # Glance
679                 glance::api::bind_host: {get_input: glance_api_network}
680                 glance::registry::bind_host: {get_input: glance_registry_network}
681
682                 # Heat
683                 heat::api::bind_host: {get_input: heat_api_network}
684                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
685                 heat::api_cfn::bind_host: {get_input: heat_api_network}
686                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
687
688                 # Keystone
689                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
690                 keystone::public_bind_host: {get_input: keystone_public_api_network}
691                 keystone::wsgi::apache::bind_host: {get_input: keystone_public_api_network}
692                 keystone::wsgi::apache::admin_bind_host: {get_input: keystone_admin_api_network}
693
694                 # Manila
695                 manila::api::bind_host: {get_input: manila_api_network}
696
697                 # MongoDB
698                 mongodb::server::bind_ip: {get_input: mongo_db_network}
699
700                 # MySQL
701                 admin_password: {get_input: admin_password}
702                 enable_galera: {get_input: enable_galera}
703                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
704                 mysql_max_connections: {get_input: mysql_max_connections}
705                 mysql::server::root_password: {get_input: mysql_root_password}
706                 mysql_clustercheck_password: {get_input: mysql_clustercheck_password}
707                 mysql_cluster_name: {get_input: mysql_cluster_name}
708                 mysql_bind_host: {get_input: mysql_network}
709                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
710
711                 # Neutron
712                 neutron::bind_host: {get_input: neutron_api_network}
713                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
714                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
715
716                 # Aodh
717                 aodh::api::host: {get_input: aodh_api_network}
718                 aodh::wsgi::apache::bind_host: {get_input: aodh_api_network}
719
720                 # Ceilometer
721                 ceilometer::api::host: {get_input: ceilometer_api_network}
722                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
723                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
724
725                 # Gnocchi
726                 gnocchi::wsgi::apache::bind_host: {get_input: gnocchi_api_network}
727                 gnocchi::api::host: {get_input: gnocchi_api_network}
728                 gnocchi::api::keystone_auth_uri: {get_input: keystone_auth_uri}
729                 gnocchi::api::keystone_identity_uri: {get_input: keystone_identity_uri}
730                 gnocchi::storage::swift::swift_authurl: {get_input: keystone_auth_uri}
731
732                 # Nova
733                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
734                 nova::use_ipv6: {get_input: nova_ipv6}
735                 nova::api::auth_uri: {get_input: keystone_auth_uri}
736                 nova::api::identity_uri: {get_input: keystone_identity_uri}
737                 nova::api::api_bind_address: {get_input: nova_api_network}
738                 nova::api::metadata_listen: {get_input: nova_metadata_network}
739                 nova::api::admin_password: {get_input: nova_password}
740                 nova::glance_api_servers: {get_input: glance_api_servers}
741                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
742                 nova::api::instance_name_template: {get_input: instance_name_template}
743                 nova::vncproxy::host: {get_input: nova_api_network}
744                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
745
746                 # Horizon
747                 apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
748                 apache::ip: {get_input: horizon_network}
749                 horizon::django_debug: {get_input: debug}
750                 horizon::secret_key: {get_input: horizon_secret}
751                 horizon::bind_address: {get_input: horizon_network}
752                 horizon::keystone_url: {get_input: keystone_auth_uri}
753
754                 # Sahara
755                 sahara::host: {get_input: sahara_api_network}
756
757                 # RabbitMQ
758                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
759                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
760                 # Redis
761                 redis::bind: {get_input: redis_network}
762                 redis_vip: {get_input: redis_vip}
763                 # Firewall
764                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
765                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
766                 # Misc
767                 memcached_ipv6: {get_input: memcached_ipv6}
768                 memcached::listen_ip: {get_input: memcached_network}
769                 control_virtual_interface: {get_input: control_virtual_interface}
770                 public_virtual_interface: {get_input: public_virtual_interface}
771                 tripleo::keepalived::control_virtual_interface: {get_input: control_virtual_interface}
772                 tripleo::keepalived::public_virtual_interface: {get_input: public_virtual_interface}
773                 tripleo::haproxy::control_virtual_interface: {get_input: control_virtual_interface}
774                 tripleo::haproxy::public_virtual_interface: {get_input: public_virtual_interface}
775                 tripleo::haproxy::haproxy_log_address: {get_input: haproxy_log_address}
776                 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
777                 tripleo::haproxy::haproxy_stats_user: {get_input: haproxy_stats_user}
778                 tripleo::haproxy::haproxy_stats_password: {get_input: haproxy_stats_password}
779                 tripleo::haproxy::redis_password: {get_input: redis_password}
780                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
781
782   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
783   ControllerExtraConfigPre:
784     depends_on: ControllerDeployment
785     type: OS::TripleO::ControllerExtraConfigPre
786     properties:
787         server: {get_resource: Controller}
788
789   # Hook for site-specific additional pre-deployment config,
790   # applying to all nodes, e.g node registration/unregistration
791   NodeExtraConfig:
792     depends_on: [ControllerExtraConfigPre, NodeTLSData]
793     type: OS::TripleO::NodeExtraConfig
794     properties:
795         server: {get_resource: Controller}
796
797   UpdateConfig:
798     type: OS::TripleO::Tasks::PackageUpdate
799
800   UpdateDeployment:
801     type: OS::Heat::SoftwareDeployment
802     properties:
803       name: UpdateDeployment
804       config: {get_resource: UpdateConfig}
805       server: {get_resource: Controller}
806       input_values:
807         update_identifier:
808           get_param: UpdateIdentifier
809
810 outputs:
811   ip_address:
812     description: IP address of the server in the ctlplane network
813     value: {get_attr: [Controller, networks, ctlplane, 0]}
814   external_ip_address:
815     description: IP address of the server in the external network
816     value: {get_attr: [ExternalPort, ip_address]}
817   internal_api_ip_address:
818     description: IP address of the server in the internal_api network
819     value: {get_attr: [InternalApiPort, ip_address]}
820   storage_ip_address:
821     description: IP address of the server in the storage network
822     value: {get_attr: [StoragePort, ip_address]}
823   storage_mgmt_ip_address:
824     description: IP address of the server in the storage_mgmt network
825     value: {get_attr: [StorageMgmtPort, ip_address]}
826   tenant_ip_address:
827     description: IP address of the server in the tenant network
828     value: {get_attr: [TenantPort, ip_address]}
829   management_ip_address:
830     description: IP address of the server in the management network
831     value: {get_attr: [ManagementPort, ip_address]}
832   hostname:
833     description: Hostname of the server
834     value: {get_attr: [Controller, name]}
835   hosts_entry:
836     description: >
837       Server's IP address and hostname in the /etc/hosts format
838     value:
839       str_replace:
840         template: |
841           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
842           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
843           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
844           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
845           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
846           TENANTIP TENANTHOST.DOMAIN TENANTHOST
847           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
848         params:
849           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
850           DOMAIN: {get_param: CloudDomain}
851           PRIMARYHOST: {get_attr: [Controller, name]}
852           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
853           EXTERNALHOST:
854             list_join:
855             - '.'
856             - - {get_attr: [Controller, name]}
857               - external
858           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
859           INTERNAL_APIHOST:
860             list_join:
861             - '.'
862             - - {get_attr: [Controller, name]}
863               - internalapi
864           STORAGEIP: {get_attr: [StoragePort, ip_address]}
865           STORAGEHOST:
866             list_join:
867             - '.'
868             - - {get_attr: [Controller, name]}
869               - storage
870           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
871           STORAGE_MGMTHOST:
872             list_join:
873             - '.'
874             - - {get_attr: [Controller, name]}
875               - storagemgmt
876           TENANTIP: {get_attr: [TenantPort, ip_address]}
877           TENANTHOST:
878             list_join:
879             - '.'
880             - - {get_attr: [Controller, name]}
881               - tenant
882           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
883           MANAGEMENTHOST:
884             list_join:
885             - '.'
886             - - {get_attr: [Controller, name]}
887               - management
888   nova_server_resource:
889     description: Heat resource handle for the Nova compute server
890     value:
891       {get_resource: Controller}
892   swift_device:
893     description: Swift device formatted for swift-ring-builder
894     value:
895       str_replace:
896         template: 'r1z1-IP:%PORT%/d1'
897         params:
898           IP:
899             get_attr:
900               - NetIpMap
901               - net_ip_map
902               - str_replace:
903                   template: "NETWORK_uri"
904                   params:
905                     NETWORK: {get_param: [ServiceNetMap, SwiftMgmtNetwork]}
906   swift_proxy_memcache:
907     description: Swift proxy-memcache value
908     value:
909       str_replace:
910         template: "IP:11211"
911         params:
912           IP:
913             get_attr:
914               - NetIpMap
915               - net_ip_map
916               - str_replace:
917                   template: "NETWORK_uri"
918                   params:
919                     NETWORK: {get_param: [ServiceNetMap, MemcachedNetwork]}
920   tls_key_modulus_md5:
921     description: MD5 checksum of the TLS Key Modulus
922     value: {get_attr: [NodeTLSData, key_modulus_md5]}
923   tls_cert_modulus_md5:
924     description: MD5 checksum of the TLS Certificate Modulus
925     value: {get_attr: [NodeTLSData, cert_modulus_md5]}