Drop extraconfig for neutron-plumgrid.yaml
[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   AodhApiVirtualIP:
12     type: string
13     default: ''
14   AodhPassword:
15     description: The password for the aodh services.
16     type: string
17     hidden: true
18   #TODO(composable Redis): Remove the Redis password param
19   #As is used by ceilometer
20   CeilometerApiVirtualIP:
21     type: string
22     default: ''
23   CeilometerBackend:
24     default: 'mongodb'
25     description: The ceilometer backend type.
26     type: string
27   CeilometerMeteringSecret:
28     description: Secret shared by the ceilometer services.
29     type: string
30     hidden: true
31   CeilometerPassword:
32     description: The password for the ceilometer service  and db account.
33     type: string
34     hidden: true
35   CeilometerStoreEvents:
36     default: false
37     description: Whether to store events in ceilometer.
38     type: boolean
39   CeilometerMeterDispatcher:
40     default: 'database'
41     description: Dispatcher to process meter data
42     type: string
43     constraints:
44     - allowed_values: ['gnocchi', 'database']
45   CinderApiVirtualIP:
46     type: string
47     default: ''
48   CeilometerWorkers:
49     default: 0
50     description: Number of workers for Ceilometer service.
51     type: number
52   controllerExtraConfig:
53     default: {}
54     description: |
55       Deprecated. Use ControllerExtraConfig via parameter_defaults instead.
56     type: json
57   ControllerExtraConfig:
58     default: {}
59     description: |
60       Controller specific hiera configuration data to inject into the cluster.
61     type: json
62   ControllerIPs:
63     default: {}
64     description: >
65       A network mapped list of IPs to assign to Controllers in the following form:
66       {
67         "internal_api": ["a.b.c.d", "e.f.g.h"],
68         ...
69       }
70     type: json
71   ControlVirtualInterface:
72     default: 'br-ex'
73     description: Interface where virtual ip will be assigned.
74     type: string
75   CorosyncIPv6:
76     default: false
77     description: Enable IPv6 in Corosync
78     type: boolean
79   Debug:
80     default: ''
81     description: Set to True to enable debugging on all services.
82     type: string
83   EnableFencing:
84     default: false
85     description: Whether to enable fencing in Pacemaker or not.
86     type: boolean
87   EnableGalera:
88     default: true
89     description: Whether to use Galera instead of regular MariaDB.
90     type: boolean
91   EnableLoadBalancer:
92     default: true
93     description: Whether to deploy a LoadBalancer on the Controller
94     type: boolean
95   EnableCephStorage:
96     default: false
97     description: Whether to deploy Ceph Storage (OSD) on the Controller
98     type: boolean
99   EnableSwiftStorage:
100     default: true
101     description: Whether to enable Swift Storage on the Controller
102     type: boolean
103   ExtraConfig:
104     default: {}
105     description: |
106       Additional hieradata to inject into the cluster, note that
107       ControllerExtraConfig takes precedence over ExtraConfig.
108     type: json
109   FencingConfig:
110     default: {}
111     description: |
112       Pacemaker fencing configuration. The JSON should have
113       the following structure:
114         {
115           "devices": [
116             {
117               "agent": "AGENT_NAME",
118               "host_mac": "HOST_MAC_ADDRESS",
119               "params": {"PARAM_NAME": "PARAM_VALUE"}
120             }
121           ]
122         }
123       For instance:
124         {
125           "devices": [
126             {
127               "agent": "fence_xvm",
128               "host_mac": "52:54:00:aa:bb:cc",
129               "params": {
130                 "multicast_address": "225.0.0.12",
131                 "port": "baremetal_0",
132                 "manage_fw": true,
133                 "manage_key_file": true,
134                 "key_file": "/etc/fence_xvm.key",
135                 "key_file_password": "abcdef"
136               }
137             }
138           ]
139         }
140     type: json
141   Flavor:
142     description: Flavor for control nodes to request when deploying.
143     type: string
144     constraints:
145       - custom_constraint: nova.flavor
146   GnocchiBackend:
147     default: file
148     description: The short name of the Gnocchi backend to use. Should be one
149       of swift, rbd, or file
150     type: string
151     constraints:
152     - allowed_values: ['swift', 'file', 'rbd']
153   GnocchiIndexerBackend:
154     default: 'mysql'
155     description: The short name of the Gnocchi indexer backend to use.
156     type: string
157   GnocchiApiVirtualIP:
158     type: string
159     default: ''
160   GnocchiPassword:
161     description: The password for the gnocchi service and db account.
162     type: string
163     hidden: true
164   HAProxyStatsPassword:
165     description: Password for HAProxy stats endpoint
166     type: string
167   HAProxyStatsUser:
168     description: User for HAProxy stats endpoint
169     default: admin
170     type: string
171   HAProxySyslogAddress:
172     default: /dev/log
173     description: Syslog address where HAproxy will send its log
174     type: string
175   HeatAuthEncryptionKey:
176     description: Auth encryption key for heat-engine
177     type: string
178     hidden: true
179   HorizonAllowedHosts:
180     default: '*'
181     description: A list of IP/Hostname allowed to connect to horizon
182     type: comma_delimited_list
183   HorizonSecret:
184     description: Secret key for Django
185     type: string
186     hidden: true
187   Image:
188     type: string
189     default: overcloud-control
190     constraints:
191       - custom_constraint: glance.image
192   ImageUpdatePolicy:
193     default: 'REBUILD_PRESERVE_EPHEMERAL'
194     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
195     type: string
196   InstanceNameTemplate:
197     default: 'instance-%08x'
198     description: Template string to be used to generate instance names
199     type: string
200   KeyName:
201     default: default
202     description: Name of an existing Nova key pair to enable SSH access to the instances
203     type: string
204     constraints:
205       - custom_constraint: nova.keypair
206   KeystoneRegion:
207     type: string
208     default: 'regionOne'
209     description: Keystone region for endpoint
210   ManageFirewall:
211     default: false
212     description: Whether to manage IPtables rules.
213     type: boolean
214   MemcachedIPv6:
215     default: false
216     description: Enable IPv6 features in Memcached.
217     type: boolean
218   PurgeFirewallRules:
219     default: false
220     description: Whether IPtables rules should be purged before setting up the new ones.
221     type: boolean
222   SaharaApiVirtualIP:
223     type: string
224     default: ''
225   MysqlClusterUniquePart:
226     description: A unique identifier of the MySQL cluster the controller is in.
227     type: string
228     default: 'unset'  # Has to be here because of the ignored empty value bug
229     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
230     # constraints:
231     # - length: {min: 4, max: 10}
232   MysqlInnodbBufferPoolSize:
233     description: >
234         Specifies the size of the buffer pool in megabytes. Setting to
235         zero should be interpreted as "no value" and will defer to the
236         lower level default.
237     type: number
238     default: 0
239   MysqlMaxConnections:
240     description: Configures MySQL max_connections config setting
241     type: number
242     default: 4096
243   MysqlClustercheckPassword:
244     type: string
245     hidden: true
246   MysqlRootPassword:
247     type: string
248     hidden: true
249     default: ''  # Has to be here because of the ignored empty value bug
250   NeutronMetadataProxySharedSecret:
251     description: Shared secret to prevent spoofing
252     type: string
253     hidden: true
254   NeutronPassword:
255     description: The password for the neutron service and db account, used by neutron agents.
256     type: string
257     hidden: true
258   NeutronPublicInterface:
259     default: nic1
260     description: What interface to bridge onto br-ex for network nodes.
261     type: string
262   NeutronTenantMtu:
263     description: >
264       The default MTU for tenant networks. For VXLAN/GRE tunneling, this should
265       be at least 50 bytes smaller than the MTU on the physical network. This
266       value will be used to set the MTU on the virtual Ethernet device.
267       This number is related to the value of NeutronDnsmasqOptions, since that
268       will determine the MTU that is assigned to the VM host through DHCP.
269     default: 1400
270     type: number
271   NovaApiVirtualIP:
272     type: string
273     default: ''
274   NovaEnableDBPurge:
275     default: true
276     description: |
277         Whether to create cron job for purging soft deleted rows in Nova database.
278     type: boolean
279   NovaIPv6:
280     default: false
281     description: Enable IPv6 features in Nova
282     type: boolean
283   NovaPassword:
284     description: The password for the nova service and db account, used by nova-api.
285     type: string
286     hidden: true
287   NovaWorkers:
288     default: 0
289     description: Number of workers for Nova service.
290     type: number
291   MongoDbNoJournal:
292     default: false
293     description: Should MongoDb journaling be disabled
294     type: boolean
295   MongoDbIPv6:
296     default: false
297     description: Enable IPv6 if Mongo DB VIP is IPv6
298     type: boolean
299   NtpServer:
300     default: ''
301     description: Comma-separated list of ntp servers
302     type: comma_delimited_list
303   PcsdPassword:
304     type: string
305     description: The password for the 'pcsd' user.
306     hidden: true
307   PublicVirtualInterface:
308     default: 'br-ex'
309     description: >
310         Specifies the interface where the public-facing virtual ip will be assigned.
311         This should be int_public when a VLAN is being used.
312     type: string
313   PublicVirtualIP:
314     type: string
315     default: ''  # Has to be here because of the ignored empty value bug
316   RabbitCookie:
317     type: string
318     default: ''  # Has to be here because of the ignored empty value bug
319     hidden: true
320   RabbitPassword:
321     description: The password for RabbitMQ
322     type: string
323     hidden: true
324   RabbitUserName:
325     default: guest
326     description: The username for RabbitMQ
327     type: string
328   RabbitClientUseSSL:
329     default: false
330     description: >
331         Rabbit client subscriber parameter to specify
332         an SSL connection to the RabbitMQ host.
333     type: string
334   RabbitClientPort:
335     default: 5672
336     description: Set rabbit subscriber port, change this if using SSL
337     type: number
338   RedisPassword:
339     description: The password for Redis
340     type: string
341     hidden: true
342   RedisVirtualIP:
343     type: string
344     default: ''  # Has to be here because of the ignored empty value bug
345   RedisVirtualIPUri:
346     type: string
347     default: ''  # Has to be here because of the ignored empty value bug
348     description: An IP address which is wrapped in brackets in case of IPv6
349   SnmpdReadonlyUserName:
350     default: ro_snmp_user
351     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
352     type: string
353   SnmpdReadonlyUserPassword:
354     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
355     type: string
356     hidden: true
357   SwiftHashSuffix:
358     description: A random string to be used as a salt when hashing to determine mappings
359       in the ring.
360     hidden: true
361     type: string
362   SwiftMountCheck:
363     default: 'false'
364     description: Value of mount_check in Swift account/container/object -server.conf
365     type: boolean
366   SwiftMinPartHours:
367     type: number
368     default: 1
369     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
370   SwiftPartPower:
371     default: 10
372     description: Partition Power to use when building Swift rings
373     type: number
374   SwiftRingBuild:
375     default: true
376     description: Whether to manage Swift rings or not
377     type: boolean
378   SwiftProxyVirtualIP:
379     type: string
380     default: ''
381   SwiftReplicas:
382     type: number
383     default: 3
384     description: How many replicas to use in the swift rings.
385   TimeZone:
386     default: 'UTC'
387     description: The timezone to be set on controller nodes.
388     type: string
389   UpgradeLevelNovaCompute:
390     type: string
391     description: Nova Compute upgrade level
392     default: ''
393   VirtualIP: # DEPRECATED: use per service settings instead
394     type: string
395     default: ''  # Has to be here because of the ignored empty value bug
396   HeatApiVirtualIP:
397     type: string
398     default: ''
399   HeatApiVirtualIPUri:
400     type: string
401     default: ''
402   MysqlVirtualIP:
403     type: string
404     default: ''
405   NeutronApiVirtualIP:
406     type: string
407     default: ''
408   EnablePackageInstall:
409     default: 'false'
410     description: Set to true to enable package installation via Puppet
411     type: boolean
412   ServiceNetMap:
413     default: {}
414     description: Mapping of service_name -> network name. Typically set
415                  via parameter_defaults in the resource registry.
416     type: json
417   EndpointMap:
418     default: {}
419     description: Mapping of service endpoint -> protocol. Typically set
420                  via parameter_defaults in the resource registry.
421     type: json
422   UpdateIdentifier:
423     default: ''
424     type: string
425     description: >
426       Setting to a previously unused value during stack-update will trigger
427       package update on all nodes
428   Hostname:
429     type: string
430     default: '' # Defaults to Heat created hostname
431   HostnameMap:
432     type: json
433     default: {}
434     description: Optional mapping to override hostnames
435   NetworkDeploymentActions:
436     type: comma_delimited_list
437     description: >
438       Heat action when to apply network configuration changes
439     default: ['CREATE']
440   NodeIndex:
441     type: number
442     default: 0
443   SoftwareConfigTransport:
444     default: POLL_SERVER_CFN
445     description: |
446       How the server should receive the metadata required for software configuration.
447     type: string
448     constraints:
449     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
450   CloudDomain:
451     default: ''
452     type: string
453     description: >
454       The DNS domain used for the hosts. This should match the dhcp_domain
455       configured in the Undercloud neutron. Defaults to localdomain.
456   ServerMetadata:
457     default: {}
458     description: >
459       Extra properties or metadata passed to Nova for the created nodes in
460       the overcloud. It's accessible via the Nova metadata API.
461     type: json
462   SchedulerHints:
463     type: json
464     description: Optional scheduler hints to pass to nova
465     default: {}
466   ServiceConfigSettings:
467     type: json
468     default: {}
469
470 parameter_groups:
471 - label: deprecated
472   description: Do not use deprecated params, they will be removed.
473   parameters:
474   - controllerExtraConfig
475
476 resources:
477
478   Controller:
479     type: OS::Nova::Server
480     properties:
481       image: {get_param: Image}
482       image_update_policy: {get_param: ImageUpdatePolicy}
483       flavor: {get_param: Flavor}
484       key_name: {get_param: KeyName}
485       networks:
486         - network: ctlplane
487       user_data_format: SOFTWARE_CONFIG
488       user_data: {get_resource: UserData}
489       name:
490         str_replace:
491             template: {get_param: Hostname}
492             params: {get_param: HostnameMap}
493       software_config_transport: {get_param: SoftwareConfigTransport}
494       metadata: {get_param: ServerMetadata}
495       scheduler_hints: {get_param: SchedulerHints}
496
497   # Combine the NodeAdminUserData and NodeUserData mime archives
498   UserData:
499     type: OS::Heat::MultipartMime
500     properties:
501       parts:
502       - config: {get_resource: NodeAdminUserData}
503         type: multipart
504       - config: {get_resource: NodeUserData}
505         type: multipart
506
507   # Creates the "heat-admin" user if configured via the environment
508   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
509   NodeAdminUserData:
510     type: OS::TripleO::NodeAdminUserData
511
512   # For optional operator additional userdata
513   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
514   NodeUserData:
515     type: OS::TripleO::NodeUserData
516
517   ExternalPort:
518     type: OS::TripleO::Controller::Ports::ExternalPort
519     properties:
520       IPPool: {get_param: ControllerIPs}
521       NodeIndex: {get_param: NodeIndex}
522       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
523
524   InternalApiPort:
525     type: OS::TripleO::Controller::Ports::InternalApiPort
526     properties:
527       IPPool: {get_param: ControllerIPs}
528       NodeIndex: {get_param: NodeIndex}
529       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
530
531   StoragePort:
532     type: OS::TripleO::Controller::Ports::StoragePort
533     properties:
534       IPPool: {get_param: ControllerIPs}
535       NodeIndex: {get_param: NodeIndex}
536       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
537
538   StorageMgmtPort:
539     type: OS::TripleO::Controller::Ports::StorageMgmtPort
540     properties:
541       IPPool: {get_param: ControllerIPs}
542       NodeIndex: {get_param: NodeIndex}
543       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
544
545   TenantPort:
546     type: OS::TripleO::Controller::Ports::TenantPort
547     properties:
548       IPPool: {get_param: ControllerIPs}
549       NodeIndex: {get_param: NodeIndex}
550       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
551
552   ManagementPort:
553     type: OS::TripleO::Controller::Ports::ManagementPort
554     properties:
555       IPPool: {get_param: ControllerIPs}
556       NodeIndex: {get_param: NodeIndex}
557       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
558
559   NetIpMap:
560     type: OS::TripleO::Network::Ports::NetIpMap
561     properties:
562       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
563       ExternalIp: {get_attr: [ExternalPort, ip_address]}
564       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
565       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
566       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
567       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
568       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
569       StorageIp: {get_attr: [StoragePort, ip_address]}
570       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
571       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
572       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
573       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
574       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
575       TenantIp: {get_attr: [TenantPort, ip_address]}
576       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
577       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
578       ManagementIp: {get_attr: [ManagementPort, ip_address]}
579       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
580       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
581
582   NetworkConfig:
583     type: OS::TripleO::Controller::Net::SoftwareConfig
584     properties:
585       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
586       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
587       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
588       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
589       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
590       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
591       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
592
593   NetworkDeployment:
594     type: OS::TripleO::SoftwareDeployment
595     properties:
596       name: NetworkDeployment
597       config: {get_resource: NetworkConfig}
598       server: {get_resource: Controller}
599       actions: {get_param: NetworkDeploymentActions}
600       input_values:
601         bridge_name: br-ex
602         interface_name: {get_param: NeutronPublicInterface}
603
604   # Resource for site-specific injection of root certificate
605   NodeTLSCAData:
606     depends_on: NetworkDeployment
607     type: OS::TripleO::NodeTLSCAData
608     properties:
609       server: {get_resource: Controller}
610
611   # Resource for site-specific passing of private keys/certificates
612   NodeTLSData:
613     depends_on: NodeTLSCAData
614     type: OS::TripleO::NodeTLSData
615     properties:
616       server: {get_resource: Controller}
617       NodeIndex: {get_param: NodeIndex}
618
619
620   ControllerDeployment:
621     type: OS::TripleO::SoftwareDeployment
622     depends_on: NetworkDeployment
623     properties:
624       name: ControllerDeployment
625       config: {get_resource: ControllerConfig}
626       server: {get_resource: Controller}
627       input_values:
628         bootstack_nodeid: {get_attr: [Controller, name]}
629         ceilometer_workers: {get_param: CeilometerWorkers}
630         nova_workers: {get_param: NovaWorkers}
631         haproxy_log_address: {get_param: HAProxySyslogAddress}
632         haproxy_stats_password: {get_param: HAProxyStatsPassword}
633         haproxy_stats_user: {get_param: HAProxyStatsUser}
634         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
635         horizon_allowed_hosts: {get_param: HorizonAllowedHosts}
636         horizon_secret: {get_param: HorizonSecret}
637         admin_password: {get_param: AdminPassword}
638         debug: {get_param: Debug}
639         cinder_public_url: {get_param: [EndpointMap, CinderPublic, uri]}
640         cinder_internal_url: {get_param: [EndpointMap, CinderInternal, uri]}
641         cinder_admin_url: {get_param: [EndpointMap, CinderAdmin, uri]}
642         cinder_public_url_v2: {get_param: [EndpointMap, CinderV2Public, uri]}
643         cinder_internal_url_v2: {get_param: [EndpointMap, CinderV2Internal, uri]}
644         cinder_admin_url_v2: {get_param: [EndpointMap, CinderV2Admin, uri]}
645         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
646         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
647         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
648         enable_fencing: {get_param: EnableFencing}
649         enable_galera: {get_param: EnableGalera}
650         enable_load_balancer: {get_param: EnableLoadBalancer}
651         enable_ceph_storage: {get_param: EnableCephStorage}
652         enable_swift_storage: {get_param: EnableSwiftStorage}
653         manage_firewall: {get_param: ManageFirewall}
654         purge_firewall_rules: {get_param: PurgeFirewallRules}
655         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
656         mysql_max_connections: {get_param: MysqlMaxConnections}
657         mysql_root_password: {get_param: MysqlRootPassword}
658         mysql_clustercheck_password: {get_param: MysqlClustercheckPassword}
659         mysql_cluster_name:
660           str_replace:
661             template: tripleo-CLUSTER
662             params:
663               CLUSTER: {get_param: MysqlClusterUniquePart}
664         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
665         neutron_password: {get_param: NeutronPassword}
666         neutron_tenant_mtu: {get_param: NeutronTenantMtu}
667         neutron_internal_url: { get_param: [ EndpointMap, NeutronInternal, uri ] }
668         neutron_public_url: { get_param: [ EndpointMap, NeutronPublic, uri ] }
669         neutron_admin_url: { get_param: [ EndpointMap, NeutronAdmin, uri ] }
670         neutron_auth_url: { get_param: [ EndpointMap, KeystoneV3Admin, uri ] }
671         nova_internal_url: { get_param: [ EndpointMap, NovaInternal, uri ] }
672         ceilometer_backend: {get_param: CeilometerBackend}
673         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
674         ceilometer_password: {get_param: CeilometerPassword}
675         ceilometer_store_events: {get_param: CeilometerStoreEvents}
676         aodh_password: {get_param: AodhPassword}
677         aodh_internal_url: { get_param: [ EndpointMap, AodhInternal, uri ] }
678         aodh_public_url: { get_param: [ EndpointMap, AodhPublic, uri ] }
679         aodh_admin_url: { get_param: [ EndpointMap, AodhAdmin, uri ] }
680         ceilometer_meter_dispatcher: {get_param: CeilometerMeterDispatcher}
681         gnocchi_password: {get_param: GnocchiPassword}
682         gnocchi_backend: {get_param: GnocchiBackend}
683         gnocchi_indexer_backend: {get_param: GnocchiIndexerBackend}
684         ceilometer_coordination_url:
685           list_join:
686             - ''
687             - - 'redis://:'
688               - {get_param: RedisPassword}
689               - '@'
690               - {get_param: RedisVirtualIPUri}
691               - ':6379/'
692         ceilometer_dsn:
693           list_join:
694             - ''
695             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
696               - '://ceilometer:'
697               - {get_param: CeilometerPassword}
698               - '@'
699               - {get_param: [EndpointMap, MysqlInternal, host]}
700               - '/ceilometer'
701         gnocchi_dsn:
702           list_join:
703             - ''
704             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
705               - '://gnocchi:'
706               - {get_param: GnocchiPassword}
707               - '@'
708               - {get_param: [EndpointMap, MysqlInternal, host]}
709               - '/gnocchi'
710         gnocchi_internal_url: {get_param: [EndpointMap, GnocchiInternal, uri]}
711         gnocchi_public_url: { get_param: [ EndpointMap, GnocchiPublic, uri ] }
712         gnocchi_admin_url: { get_param: [ EndpointMap, GnocchiAdmin, uri ] }
713         ceilometer_public_url: {get_param: [EndpointMap, CeilometerPublic, uri]}
714         ceilometer_internal_url: {get_param: [EndpointMap, CeilometerInternal, uri]}
715         ceilometer_admin_url: {get_param: [EndpointMap, CeilometerAdmin, uri]}
716         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
717         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
718         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
719         nova_ipv6: {get_param: NovaIPv6}
720         corosync_ipv6: {get_param: CorosyncIPv6}
721         memcached_ipv6: {get_param: MemcachedIPv6}
722         nova_password: {get_param: NovaPassword}
723         nova_dsn:
724           list_join:
725             - ''
726             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
727               - '://nova:'
728               - {get_param: NovaPassword}
729               - '@'
730               - {get_param: [EndpointMap, MysqlInternal, host]}
731               - '/nova'
732         nova_api_dsn:
733           list_join:
734             - ''
735             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
736               - '://nova_api:'
737               - {get_param: NovaPassword}
738               - '@'
739               - {get_param: [EndpointMap, MysqlInternal, host]}
740               - '/nova_api'
741         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
742         instance_name_template: {get_param: InstanceNameTemplate}
743         nova_public_url: {get_param: [EndpointMap, NovaPublic, uri]}
744         nova_internal_url: {get_param: [EndpointMap, NovaInternal, uri]}
745         nova_admin_url: {get_param: [EndpointMap, NovaAdmin, uri]}
746         fencing_config: {get_param: FencingConfig}
747         pcsd_password: {get_param: PcsdPassword}
748         rabbit_username: {get_param: RabbitUserName}
749         rabbit_password: {get_param: RabbitPassword}
750         rabbit_cookie: {get_param: RabbitCookie}
751         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
752         rabbit_client_port: {get_param: RabbitClientPort}
753         mongodb_no_journal: {get_param: MongoDbNoJournal}
754         mongodb_ipv6: {get_param: MongoDbIPv6}
755         ntp_servers: {get_param: NtpServer}
756         timezone: {get_param: TimeZone}
757         control_virtual_interface: {get_param: ControlVirtualInterface}
758         public_virtual_interface: {get_param: PublicVirtualInterface}
759         swift_hash_suffix: {get_param: SwiftHashSuffix}
760         swift_part_power: {get_param: SwiftPartPower}
761         swift_ring_build: {get_param: SwiftRingBuild}
762         swift_replicas: {get_param: SwiftReplicas}
763         swift_min_part_hours: {get_param: SwiftMinPartHours}
764         swift_mount_check: {get_param: SwiftMountCheck}
765         enable_package_install: {get_param: EnablePackageInstall}
766         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
767         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
768         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
769         cinder_iscsi_network:
770           str_replace:
771             template: "'IP'"
772             params:
773               IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
774         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
775         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
776         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
777         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
778         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
779         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
780         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
781         keystone_region: {get_param: KeystoneRegion}
782         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
783         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
784         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
785         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
786         aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
787         gnocchi_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
788         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
789         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
790         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
791         horizon_subnet:
792           str_replace:
793             template: "['SUBNET']"
794             params:
795               SUBNET: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
796         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
797         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
798         redis_vip: {get_param: RedisVirtualIP}
799         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
800         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
801         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
802         mysql_virtual_ip: {get_param: MysqlVirtualIP}
803         ceph_cluster_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
804         ceph_public_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
805         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
806
807   # Map heat metadata into hiera datafiles
808   ControllerConfig:
809     type: OS::Heat::StructuredConfig
810     properties:
811       group: os-apply-config
812       config:
813         hiera:
814           hierarchy:
815             - '"%{::uuid}"'
816             - heat_config_%{::deploy_config_name}
817             - controller_extraconfig
818             - extraconfig
819             - service_configs
820             - controller
821             - database
822             - object
823             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
824             - ceph_cluster # provided by CephClusterConfig
825             - ceph
826             - bootstrap_node # provided by BootstrapNodeConfig
827             - all_nodes # provided by allNodesConfig
828             - vip_data # provided by vip-config
829             - '"%{::osfamily}"'
830             - common
831             - network
832             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
833             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
834             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
835             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
836             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
837             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
838             - neutron_nuage_data # Optionally provided by ControllerExtraConfigPre
839             - midonet_data #Optionally provided by AllNodesExtraConfig
840             - neutron_opencontrail_data # Optionally provided by ControllerExtraConfigPre
841           merge_behavior: deeper
842           datafiles:
843             service_configs:
844               mapped_data: {get_param: ServiceConfigSettings}
845             controller_extraconfig:
846               mapped_data:
847                 map_merge:
848                   - {get_param: controllerExtraConfig}
849                   - {get_param: ControllerExtraConfig}
850             extraconfig:
851               mapped_data: {get_param: ExtraConfig}
852             common:
853               raw_data: {get_file: hieradata/common.yaml}
854             network:
855               mapped_data:
856                 net_ip_map: {get_attr: [NetIpMap, net_ip_map]}
857                 net_ip_subnet_map: {get_attr: [NetIpMap, net_ip_subnet_map]}
858                 net_ip_uri_map: {get_attr: [NetIpMap, net_ip_uri_map]}
859             ceph:
860               raw_data: {get_file: hieradata/ceph.yaml}
861               mapped_data:
862                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
863                 ceph::profile::params::public_network: {get_input: ceph_public_network}
864                 ceph::profile::params::public_addr: {get_input: ceph_public_ip}
865             database:
866               raw_data: {get_file: hieradata/database.yaml}
867             object:
868               raw_data: {get_file: hieradata/object.yaml}
869             controller:
870               raw_data: {get_file: hieradata/controller.yaml}
871               mapped_data: # data supplied directly to this deployment configuration, etc
872                 bootstack_nodeid: {get_input: bootstack_nodeid}
873
874                 # Pacemaker
875                 enable_fencing: {get_input: enable_fencing}
876                 enable_load_balancer: {get_input: enable_load_balancer}
877                 hacluster_pwd: {get_input: pcsd_password}
878                 corosync_ipv6: {get_input: corosync_ipv6}
879                 tripleo::fencing::config: {get_input: fencing_config}
880
881                 # Swift
882                 # FIXME: need to move proxy_local_net_ip into swift-proxy.yaml
883                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
884                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
885                 swift::swift_hash_path_suffix: {get_input: swift_hash_suffix}
886                 tripleo::ringbuilder::build_ring: { get_input: swift_ring_build }
887                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
888                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
889                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
890                 swift_mount_check: {get_input: swift_mount_check}
891
892                 # Cinder
893                 tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_address: {get_input: cinder_iscsi_network}
894                 cinder::api::bind_host: {get_input: cinder_api_network}
895                 cinder::keystone::auth::public_url: {get_input: cinder_public_url }
896                 cinder::keystone::auth::internal_url: {get_input: cinder_internal_url }
897                 cinder::keystone::auth::admin_url: {get_input: cinder_admin_url }
898                 cinder::keystone::auth::public_url_v2: {get_input: cinder_public_url_v2 }
899                 cinder::keystone::auth::internal_url_v2: {get_input: cinder_internal_url_v2 }
900                 cinder::keystone::auth::admin_url_v2: {get_input: cinder_admin_url_v2 }
901                 cinder::keystone::auth::password: {get_input: cinder_password }
902                 cinder::keystone::auth::region: {get_input: keystone_region}
903
904                 # Glance
905                 glance::api::bind_host: {get_input: glance_api_network}
906                 glance::registry::bind_host: {get_input: glance_registry_network}
907                 glance::keystone::auth::region: {get_input: keystone_region}
908
909                 # Heat
910                 heat::api::bind_host: {get_input: heat_api_network}
911                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
912                 heat::api_cfn::bind_host: {get_input: heat_api_network}
913                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
914
915                 # Keystone
916                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
917                 keystone::public_bind_host: {get_input: keystone_public_api_network}
918                 keystone::wsgi::apache::bind_host: {get_input: keystone_public_api_network}
919                 keystone::wsgi::apache::admin_bind_host: {get_input: keystone_admin_api_network}
920                 # MongoDB
921                 mongodb::server::bind_ip: {get_input: mongo_db_network}
922                 mongodb::server::nojournal: {get_input: mongodb_no_journal}
923                 mongodb::server::ipv6: {get_input: mongodb_ipv6}
924                 # MySQL
925                 admin_password: {get_input: admin_password}
926                 enable_galera: {get_input: enable_galera}
927                 enable_ceph_storage: {get_input: enable_ceph_storage}
928                 enable_swift_storage: {get_input: enable_swift_storage}
929                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
930                 mysql_max_connections: {get_input: mysql_max_connections}
931                 mysql::server::root_password: {get_input: mysql_root_password}
932                 mysql_clustercheck_password: {get_input: mysql_clustercheck_password}
933                 mysql_cluster_name: {get_input: mysql_cluster_name}
934                 mysql_bind_host: {get_input: mysql_network}
935                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
936
937                 # Neutron
938                 neutron::bind_host: {get_input: neutron_api_network}
939                 neutron::network_device_mtu: {get_input: neutron_tenant_mtu}
940                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
941                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
942                 neutron::keystone::auth::public_url: {get_input: neutron_public_url }
943                 neutron::keystone::auth::internal_url: {get_input: neutron_internal_url }
944                 neutron::keystone::auth::admin_url: {get_input: neutron_admin_url }
945                 neutron::keystone::auth::password: {get_input: neutron_password }
946                 neutron::keystone::auth::region: {get_input: keystone_region}
947
948                 # Ceilometer
949                 ceilometer_backend: {get_input: ceilometer_backend}
950                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
951                 ceilometer::telemetry_secret: {get_input: ceilometer_metering_secret}
952                 ceilometer::rabbit_userid: {get_input: rabbit_username}
953                 ceilometer::rabbit_password: {get_input: rabbit_password}
954                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
955                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
956                 ceilometer::debug: {get_input: debug}
957                 ceilometer::api::host: {get_input: ceilometer_api_network}
958                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
959                 ceilometer::api::auth_uri: {get_input: keystone_auth_uri}
960                 ceilometer::api::identity_uri: {get_input: keystone_identity_uri}
961                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
962                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_uri}
963                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
964                 ceilometer::agent::notification::store_events: {get_input: ceilometer_store_events}
965                 ceilometer::db::mysql::password: {get_input: ceilometer_password}
966                 ceilometer::collector::meter_dispatcher: {get_input: ceilometer_meter_dispatcher}
967                 ceilometer::dispatcher::gnocchi::url: {get_input: gnocchi_internal_url }
968                 ceilometer::dispatcher::gnocchi::filter_project: 'service'
969                 ceilometer::dispatcher::gnocchi::archive_policy: 'low'
970                 ceilometer::dispatcher::gnocchi::resources_definition_file: 'gnocchi_resources.yaml'
971                 ceilometer::keystone::auth::public_url: {get_input: ceilometer_public_url }
972                 ceilometer::keystone::auth::internal_url: {get_input: ceilometer_internal_url }
973                 ceilometer::keystone::auth::admin_url: {get_input: ceilometer_admin_url }
974                 ceilometer::keystone::auth::password: {get_input: ceilometer_password }
975                 ceilometer::keystone::auth::region: {get_input: keystone_region}
976                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
977                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
978
979                 # Aodh
980                 aodh::rabbit_userid: {get_input: rabbit_username}
981                 aodh::rabbit_password: {get_input: rabbit_password}
982                 aodh::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
983                 aodh::rabbit_port: {get_input: rabbit_client_port}
984                 aodh::debug: {get_input: debug}
985                 aodh::wsgi::apache::ssl: false
986                 aodh::wsgi::apache::bind_host: {get_input: aodh_api_network}
987                 aodh::api::service_name: 'httpd'
988                 aodh::api::host: {get_input: aodh_api_network}
989                 aodh::api::keystone_password: {get_input: aodh_password}
990                 aodh::api::keystone_auth_uri: {get_input: keystone_auth_uri}
991                 aodh::api::keystone_identity_uri: {get_input: keystone_identity_uri}
992                 aodh::auth::auth_password: {get_input: aodh_password}
993                 aodh::db::mysql::password: {get_input: aodh_password}
994                 # for a migration path from ceilometer-alarm to aodh, we use the same database & coordination
995                 aodh::evaluator::coordination_url: {get_input: ceilometer_coordination_url}
996                 aodh::keystone::auth::public_url: {get_input: aodh_public_url }
997                 aodh::keystone::auth::internal_url: {get_input: aodh_internal_url }
998                 aodh::keystone::auth::admin_url: {get_input: aodh_admin_url }
999                 aodh::keystone::auth::password: {get_input: aodh_password }
1000                 aodh::keystone::auth::region: {get_input: keystone_region}
1001
1002                 # Gnocchi
1003                 gnocchi_backend: {get_input: gnocchi_backend}
1004                 gnocchi_indexer_backend: {get_input: gnocchi_indexer_backend}
1005                 gnocchi_mysql_conn_string: {get_input: gnocchi_dsn}
1006                 gnocchi::debug: {get_input: debug}
1007                 gnocchi::wsgi::apache::ssl: false
1008                 gnocchi::wsgi::apache::bind_host: {get_input: gnocchi_api_network}
1009                 gnocchi::api::service_name: 'httpd'
1010                 gnocchi::api::host: {get_input: gnocchi_api_network}
1011                 gnocchi::api::keystone_password: {get_input: gnocchi_password}
1012                 gnocchi::api::keystone_auth_uri: {get_input: keystone_auth_uri}
1013                 gnocchi::api::keystone_identity_uri: {get_input: keystone_identity_uri}
1014                 gnocchi::db::mysql::password: {get_input: gnocchi_password}
1015                 gnocchi::storage::swift::swift_authurl: {get_input: keystone_auth_uri}
1016                 gnocchi::storage::swift::swift_key: {get_input: gnocchi_password}
1017                 gnocchi::keystone::auth::public_url: {get_input: gnocchi_public_url }
1018                 gnocchi::keystone::auth::internal_url: {get_input: gnocchi_internal_url }
1019                 gnocchi::keystone::auth::admin_url: {get_input: gnocchi_admin_url }
1020                 gnocchi::keystone::auth::password: {get_input: gnocchi_password }
1021                 gnocchi::keystone::auth::region: {get_input: keystone_region}
1022
1023                 # Nova
1024                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
1025                 nova::use_ipv6: {get_input: nova_ipv6}
1026                 nova::api::auth_uri: {get_input: keystone_auth_uri}
1027                 nova::api::identity_uri: {get_input: keystone_identity_uri}
1028                 nova::api::api_bind_address: {get_input: nova_api_network}
1029                 nova::api::metadata_listen: {get_input: nova_metadata_network}
1030                 nova::api::admin_password: {get_input: nova_password}
1031                 nova::api::osapi_compute_workers: {get_input: nova_workers}
1032                 nova::api::metadata_workers: {get_input: nova_workers}
1033                 nova::compute::network_device_mtu: {get_input: neutron_tenant_mtu}
1034                 nova::database_connection: {get_input: nova_dsn}
1035                 nova::api_database_connection: {get_input: nova_api_dsn}
1036                 nova::glance_api_servers: {get_input: glance_api_servers}
1037                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1038                 nova::api::instance_name_template: {get_input: instance_name_template}
1039                 nova::network::neutron::neutron_password: {get_input: neutron_password}
1040                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
1041                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
1042                 nova::vncproxy::host: {get_input: nova_api_network}
1043                 nova::db::mysql::password: {get_input: nova_password}
1044                 nova::db::mysql_api::password: {get_input: nova_password}
1045                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
1046                 nova::keystone::auth::public_url: {get_input: nova_public_url}
1047                 nova::keystone::auth::internal_url: {get_input: nova_internal_url}
1048                 nova::keystone::auth::admin_url: {get_input: nova_admin_url}
1049                 nova::keystone::auth::password: {get_input: nova_password }
1050                 nova::keystone::auth::region: {get_input: keystone_region}
1051
1052                 # Horizon
1053                 apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
1054                 apache::ip: {get_input: horizon_network}
1055                 horizon::allowed_hosts: {get_input: horizon_allowed_hosts}
1056                 horizon::django_debug: {get_input: debug}
1057                 horizon::secret_key: {get_input: horizon_secret}
1058                 horizon::bind_address: {get_input: horizon_network}
1059                 horizon::keystone_url: {get_input: keystone_auth_uri}
1060
1061                 # RabbitMQ
1062                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
1063                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
1064                 # Redis
1065                 redis::bind: {get_input: redis_network}
1066                 redis_vip: {get_input: redis_vip}
1067                 # Firewall
1068                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
1069                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
1070                 # Misc
1071                 memcached_ipv6: {get_input: memcached_ipv6}
1072                 memcached::listen_ip: {get_input: memcached_network}
1073                 ntp::servers: {get_input: ntp_servers}
1074                 timezone::timezone: {get_input: timezone}
1075                 control_virtual_interface: {get_input: control_virtual_interface}
1076                 public_virtual_interface: {get_input: public_virtual_interface}
1077                 tripleo::keepalived::control_virtual_interface: {get_input: control_virtual_interface}
1078                 tripleo::keepalived::public_virtual_interface: {get_input: public_virtual_interface}
1079                 tripleo::haproxy::control_virtual_interface: {get_input: control_virtual_interface}
1080                 tripleo::haproxy::public_virtual_interface: {get_input: public_virtual_interface}
1081                 tripleo::haproxy::haproxy_log_address: {get_input: haproxy_log_address}
1082                 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
1083                 tripleo::haproxy::haproxy_stats_user: {get_input: haproxy_stats_user}
1084                 tripleo::haproxy::haproxy_stats_password: {get_input: haproxy_stats_password}
1085                 tripleo::haproxy::redis_password: {get_input: redis_password}
1086                 tripleo::packages::enable_install: {get_input: enable_package_install}
1087                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
1088
1089   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
1090   ControllerExtraConfigPre:
1091     depends_on: ControllerDeployment
1092     type: OS::TripleO::ControllerExtraConfigPre
1093     properties:
1094         server: {get_resource: Controller}
1095
1096   # Hook for site-specific additional pre-deployment config,
1097   # applying to all nodes, e.g node registration/unregistration
1098   NodeExtraConfig:
1099     depends_on: [ControllerExtraConfigPre, NodeTLSData]
1100     type: OS::TripleO::NodeExtraConfig
1101     properties:
1102         server: {get_resource: Controller}
1103
1104   UpdateConfig:
1105     type: OS::TripleO::Tasks::PackageUpdate
1106
1107   UpdateDeployment:
1108     type: OS::Heat::SoftwareDeployment
1109     properties:
1110       name: UpdateDeployment
1111       config: {get_resource: UpdateConfig}
1112       server: {get_resource: Controller}
1113       input_values:
1114         update_identifier:
1115           get_param: UpdateIdentifier
1116
1117 outputs:
1118   ip_address:
1119     description: IP address of the server in the ctlplane network
1120     value: {get_attr: [Controller, networks, ctlplane, 0]}
1121   external_ip_address:
1122     description: IP address of the server in the external network
1123     value: {get_attr: [ExternalPort, ip_address]}
1124   internal_api_ip_address:
1125     description: IP address of the server in the internal_api network
1126     value: {get_attr: [InternalApiPort, ip_address]}
1127   storage_ip_address:
1128     description: IP address of the server in the storage network
1129     value: {get_attr: [StoragePort, ip_address]}
1130   storage_mgmt_ip_address:
1131     description: IP address of the server in the storage_mgmt network
1132     value: {get_attr: [StorageMgmtPort, ip_address]}
1133   tenant_ip_address:
1134     description: IP address of the server in the tenant network
1135     value: {get_attr: [TenantPort, ip_address]}
1136   management_ip_address:
1137     description: IP address of the server in the management network
1138     value: {get_attr: [ManagementPort, ip_address]}
1139   hostname:
1140     description: Hostname of the server
1141     value: {get_attr: [Controller, name]}
1142   hosts_entry:
1143     description: >
1144       Server's IP address and hostname in the /etc/hosts format
1145     value:
1146       str_replace:
1147         template: |
1148           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
1149           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
1150           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
1151           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
1152           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
1153           TENANTIP TENANTHOST.DOMAIN TENANTHOST
1154           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
1155         params:
1156           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
1157           DOMAIN: {get_param: CloudDomain}
1158           PRIMARYHOST: {get_attr: [Controller, name]}
1159           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
1160           EXTERNALHOST:
1161             list_join:
1162             - '.'
1163             - - {get_attr: [Controller, name]}
1164               - external
1165           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
1166           INTERNAL_APIHOST:
1167             list_join:
1168             - '.'
1169             - - {get_attr: [Controller, name]}
1170               - internalapi
1171           STORAGEIP: {get_attr: [StoragePort, ip_address]}
1172           STORAGEHOST:
1173             list_join:
1174             - '.'
1175             - - {get_attr: [Controller, name]}
1176               - storage
1177           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
1178           STORAGE_MGMTHOST:
1179             list_join:
1180             - '.'
1181             - - {get_attr: [Controller, name]}
1182               - storagemgmt
1183           TENANTIP: {get_attr: [TenantPort, ip_address]}
1184           TENANTHOST:
1185             list_join:
1186             - '.'
1187             - - {get_attr: [Controller, name]}
1188               - tenant
1189           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
1190           MANAGEMENTHOST:
1191             list_join:
1192             - '.'
1193             - - {get_attr: [Controller, name]}
1194               - management
1195   nova_server_resource:
1196     description: Heat resource handle for the Nova compute server
1197     value:
1198       {get_resource: Controller}
1199   swift_device:
1200     description: Swift device formatted for swift-ring-builder
1201     value:
1202       str_replace:
1203         template: 'r1z1-IP:%PORT%/d1'
1204         params:
1205           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1206   swift_proxy_memcache:
1207     description: Swift proxy-memcache value
1208     value:
1209       str_replace:
1210         template: "IP:11211"
1211         params:
1212           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1213   config_identifier:
1214     description: identifier which changes if the controller configuration may need re-applying
1215     value:
1216       list_join:
1217         - ','
1218         - - {get_attr: [ControllerDeployment, deploy_stdout]}
1219           - {get_attr: [NodeTLSCAData, deploy_stdout]}
1220           - {get_attr: [NodeTLSData, deploy_stdout]}
1221           - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
1222           - {get_param: UpdateIdentifier}
1223   tls_key_modulus_md5:
1224     description: MD5 checksum of the TLS Key Modulus
1225     value: {get_attr: [NodeTLSData, key_modulus_md5]}
1226   tls_cert_modulus_md5:
1227     description: MD5 checksum of the TLS Certificate Modulus
1228     value: {get_attr: [NodeTLSData, cert_modulus_md5]}