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