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