Allow one to specify horizon ALLOWED_HOSTS
[apex-tripleo-heat-templates.git] / puppet / controller.yaml
1 heat_template_version: 2015-04-30
2
3 description: >
4   OpenStack controller node configured by Puppet.
5
6 parameters:
7   AdminPassword:
8     default: unset
9     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
10     type: string
11     hidden: true
12   AdminToken:
13     default: unset
14     description: The keystone auth secret and db password.
15     type: string
16     hidden: true
17   CeilometerBackend:
18     default: 'mongodb'
19     description: The ceilometer backend type.
20     type: string
21   CeilometerMeteringSecret:
22     default: unset
23     description: Secret shared by the ceilometer services.
24     type: string
25     hidden: true
26   CeilometerPassword:
27     default: unset
28     description: The password for the ceilometer service  and db account.
29     type: string
30     hidden: true
31   CinderEnableNfsBackend:
32     default: false
33     description: Whether to enable or not the NFS backend for Cinder
34     type: boolean
35   CinderEnableIscsiBackend:
36     default: true
37     description: Whether to enable or not the Iscsi backend for Cinder
38     type: boolean
39   CinderEnableRbdBackend:
40     default: false
41     description: Whether to enable or not the Rbd backend for Cinder
42     type: boolean
43   CinderISCSIHelper:
44     default: tgtadm
45     description: The iSCSI helper to use with cinder.
46     type: string
47   CinderLVMLoopDeviceSize:
48     default: 5000
49     description: The size of the loopback file used by the cinder LVM driver.
50     type: number
51   CinderNfsMountOptions:
52     default: ''
53     description: >
54       Mount options for NFS mounts used by Cinder NFS backend. Effective
55       when CinderEnableNfsBackend is true.
56     type: string
57   CinderNfsServers:
58     default: ''
59     description: >
60       NFS servers used by Cinder NFS backend. Effective when
61       CinderEnableNfsBackend is true.
62     type: comma_delimited_list
63   CinderPassword:
64     default: unset
65     description: The password for the cinder service and db account, used by cinder-api.
66     type: string
67     hidden: true
68   CinderBackendConfig:
69     default: {}
70     description: Contains parameters to configure Cinder backends. Typically
71                  set via parameter_defaults in the resource registry.
72     type: json
73   CloudName:
74     default: ''
75     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
76     type: string
77   ControllerExtraConfig:
78     default: {}
79     description: |
80       Controller specific hiera configuration data to inject into the cluster.
81     type: json
82   ControlVirtualInterface:
83     default: 'br-ex'
84     description: Interface where virtual ip will be assigned.
85     type: string
86   Debug:
87     default: ''
88     description: Set to True to enable debugging on all services.
89     type: string
90   EnableFencing:
91     default: false
92     description: Whether to enable fencing in Pacemaker or not.
93     type: boolean
94   EnableGalera:
95     default: true
96     description: Whether to use Galera instead of regular MariaDB.
97     type: boolean
98   EnableCephStorage:
99     default: false
100     description: Whether to deploy Ceph Storage (OSD) on the Controller
101     type: boolean
102   EnableSwiftStorage:
103     default: true
104     description: Whether to enable Swift Storage on the Controller
105     type: boolean
106   ExtraConfig:
107     default: {}
108     description: |
109       Additional hieradata to inject into the cluster, note that
110       ControllerExtraConfig takes precedence over ExtraConfig.
111     type: json
112   FencingConfig:
113     default: {}
114     description: |
115       Pacemaker fencing configuration. The JSON should have
116       the following structure:
117         {
118           "devices": [
119             {
120               "agent": "AGENT_NAME",
121               "host_mac": "HOST_MAC_ADDRESS",
122               "params": {"PARAM_NAME": "PARAM_VALUE"}
123             }
124           ]
125         }
126       For instance:
127         {
128           "devices": [
129             {
130               "agent": "fence_xvm",
131               "host_mac": "52:54:00:aa:bb:cc",
132               "params": {
133                 "multicast_address": "225.0.0.12",
134                 "port": "baremetal_0",
135                 "manage_fw": true,
136                 "manage_key_file": true,
137                 "key_file": "/etc/fence_xvm.key",
138                 "key_file_password": "abcdef"
139               }
140             }
141           ]
142         }
143     type: json
144   Flavor:
145     description: Flavor for control nodes to request when deploying.
146     type: string
147     constraints:
148       - custom_constraint: nova.flavor
149   GlanceNotifierStrategy:
150     description: Strategy to use for Glance notification queue
151     type: string
152     default: noop
153   GlanceLogFile:
154     description: The filepath of the file to use for logging messages from Glance.
155     type: string
156     default: ''
157   GlancePassword:
158     default: unset
159     description: The password for the glance service and db account, used by the glance services.
160     type: string
161     hidden: true
162   GlancePort:
163     default: "9292"
164     description: Glance port.
165     type: string
166   GlanceProtocol:
167     default: http
168     description: Protocol to use when connecting to glance, set to https for SSL.
169     type: string
170   GlanceBackend:
171     default: swift
172     description: The short name of the Glance backend to use. Should be one
173       of swift, rbd, or file
174     type: string
175     constraints:
176     - allowed_values: ['swift', 'file', 'rbd']
177   HeatPassword:
178     default: unset
179     description: The password for the Heat service and db account, used by the Heat services.
180     type: string
181     hidden: true
182   HeatStackDomainAdminPassword:
183     description: Password for heat_domain_admin user.
184     type: string
185     default: ''
186     hidden: true
187   HeatAuthEncryptionKey:
188     description: Auth encryption key for heat-engine
189     type: string
190   HorizonAllowedHosts:
191     default: '*'
192     description: A list of IP/Hostname allowed to connect to horizon
193     type: comma_delimited_list
194   HorizonSecret:
195     description: Secret key for Django
196     type: string
197   Image:
198     type: string
199     default: overcloud-control
200     constraints:
201       - custom_constraint: glance.image
202   ImageUpdatePolicy:
203     default: 'REBUILD_PRESERVE_EPHEMERAL'
204     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
205     type: string
206   KeyName:
207     default: default
208     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
209     type: string
210     constraints:
211       - custom_constraint: nova.keypair
212   KeystoneCACertificate:
213     default: ''
214     description: Keystone self-signed certificate authority certificate.
215     type: string
216   KeystoneSigningCertificate:
217     default: ''
218     description: Keystone certificate for verifying token validity.
219     type: string
220   KeystoneSigningKey:
221     default: ''
222     description: Keystone key for signing tokens.
223     type: string
224     hidden: true
225   KeystoneSSLCertificate:
226     default: ''
227     description: Keystone certificate for verifying token validity.
228     type: string
229   KeystoneSSLCertificateKey:
230     default: ''
231     description: Keystone key for signing tokens.
232     type: string
233     hidden: true
234   KeystoneNotificationDriver:
235     description: Comma-separated list of Oslo notification drivers used by Keystone
236     default: ['messaging']
237     type: comma_delimited_list
238   KeystoneNotificationFormat:
239     description: The Keystone notification format
240     default: 'basic'
241     type: string
242     constraints:
243       - allowed_values: [ 'basic', 'cadf' ]
244   MysqlClusterUniquePart:
245     description: A unique identifier of the MySQL cluster the controller is in.
246     type: string
247     default: 'unset'  # Has to be here because of the ignored empty value bug
248     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
249     # constraints:
250     # - length: {min: 4, max: 10}
251   MysqlInnodbBufferPoolSize:
252     description: >
253         Specifies the size of the buffer pool in megabytes. Setting to
254         zero should be interpreted as "no value" and will defer to the
255         lower level default.
256     type: number
257     default: 0
258   MysqlMaxConnections:
259     description: Configures MySQL max_connections config setting
260     type: number
261     default: 4096
262   MysqlRootPassword:
263     type: string
264     hidden: true
265     default: ''  # Has to be here because of the ignored empty value bug
266   NeutronExternalNetworkBridge:
267     description: Name of bridge used for external network traffic.
268     type: string
269     default: 'br-ex'
270   NeutronBridgeMappings:
271     description: >
272       The OVS logical->physical bridge mappings to use. See the Neutron
273       documentation for details. Defaults to mapping br-ex - the external
274       bridge on hosts - to a physical name 'datacentre' which can be used
275       to create provider networks (and we use this for the default floating
276       network) - if changing this either use different post-install network
277       scripts or be sure to keep 'datacentre' as a mapping network name.
278     type: string
279     default: "datacentre:br-ex"
280   NeutronDnsmasqOptions:
281     default: 'dhcp-option-force=26,1400'
282     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the gre tunnel overhead.
283     type: string
284   NeutronAgentMode:
285     default: 'dvr_snat'
286     description: Agent mode for the neutron-l3-agent on the controller hosts
287     type: string
288   NeutronL3HA:
289     default: 'False'
290     description: Whether to enable l3-agent HA
291     type: string
292   NeutronDhcpAgentsPerNetwork:
293     type: number
294     default: 3
295     description: The number of neutron dhcp agents to schedule per network
296   NeutronDVR:
297     default: 'False'
298     description: Whether to configure Neutron Distributed Virtual Routers
299     type: string
300   NeutronMetadataProxySharedSecret:
301     default: 'unset'
302     description: Shared secret to prevent spoofing
303     type: string
304   NeutronCorePlugin:
305     default: 'ml2'
306     description: |
307         The core plugin for Neutron. The value should be the entrypoint to be loaded
308         from neutron.core_plugins namespace.
309     type: string
310   NeutronServicePlugins:
311     default: "router"
312     description: |
313         Comma-separated list of service plugin entrypoints to be loaded from the
314         neutron.service_plugins namespace.
315     type: comma_delimited_list
316   NeutronTypeDrivers:
317     default: "vxlan,vlan,flat,gre"
318     description: |
319         Comma-separated list of network type driver entrypoints to be loaded.
320     type: comma_delimited_list
321   NeutronMechanismDrivers:
322     default: 'openvswitch'
323     description: |
324         The mechanism drivers for the Neutron tenant network. To specify multiple
325         values, use a comma separated string, like so: 'openvswitch,l2_population'
326     type: string
327   NeutronAllowL3AgentFailover:
328     default: 'True'
329     description: Allow automatic l3-agent failover
330     type: string
331   NeutronEnableTunnelling:
332     type: string
333     default: "True"
334   NeutronFlatNetworks:
335     type: string
336     default: 'datacentre'
337     description: If set, flat networks to configure in neutron plugins.
338   NeutronL3HA:
339     default: 'False'
340     description: Whether to enable l3-agent HA
341     type: string
342   NeutronNetworkType:
343     default: 'vxlan'
344     description: The tenant network type for Neutron, either gre or vxlan.
345     type: string
346   NeutronNetworkVLANRanges:
347     default: 'datacentre'
348     description: >
349       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
350       Neutron documentation for permitted values. Defaults to permitting any
351       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
352     type: comma_delimited_list
353   NeutronPassword:
354     default: unset
355     description: The password for the neutron service and db account, used by neutron agents.
356     type: string
357     hidden: true
358   NeutronPublicInterface:
359     default: nic1
360     description: What interface to bridge onto br-ex for network nodes.
361     type: string
362   NeutronPublicInterfaceTag:
363     default: ''
364     description: >
365       VLAN tag for creating a public VLAN. The tag will be used to
366       create an access port on the exterior bridge for each control plane node,
367       and that port will be given the IP address returned by neutron from the
368       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
369       overcloud.yaml to include the deployment of VLAN ports to the control
370       plane.
371     type: string
372   NeutronPublicInterfaceDefaultRoute:
373     default: ''
374     description: A custom default route for the NeutronPublicInterface.
375     type: string
376   NeutronPublicInterfaceIP:
377     default: ''
378     description: A custom IP address to put onto the NeutronPublicInterface.
379     type: string
380   NeutronPublicInterfaceRawDevice:
381     default: ''
382     description: If set, the public interface is a vlan with this device as the raw device.
383     type: string
384   NeutronTunnelTypes:
385     default: 'vxlan'
386     description: |
387         The tunnel types for the Neutron tenant network. To specify multiple
388         values, use a comma separated string, like so: 'gre,vxlan'
389     type: string
390   NeutronTunnelIdRanges:
391     description: |
392         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
393         of GRE tunnel IDs that are available for tenant network allocation
394     default: ["1:1000", ]
395     type: comma_delimited_list
396   NeutronVniRanges:
397     description: |
398         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
399         of VXLAN VNI IDs that are available for tenant network allocation
400     default: ["1:1000", ]
401     type: comma_delimited_list
402   NovaPassword:
403     default: unset
404     description: The password for the nova service and db account, used by nova-api.
405     type: string
406     hidden: true
407   MongoDbNoJournal:
408     default: false
409     description: Should MongoDb journaling be disabled
410     type: boolean
411   NtpServer:
412     type: string
413     default: ''
414   PcsdPassword:
415     type: string
416     description: The password for the 'pcsd' user.
417   PublicVirtualInterface:
418     default: 'br-ex'
419     description: >
420         Specifies the interface where the public-facing virtual ip will be assigned.
421         This should be int_public when a VLAN is being used.
422     type: string
423   PublicVirtualIP: # DEPRECATED: use per service settings instead
424     type: string
425     default: ''  # Has to be here because of the ignored empty value bug
426   RabbitCookie:
427     type: string
428     default: ''  # Has to be here because of the ignored empty value bug
429     hidden: true
430   RabbitPassword:
431     default: guest
432     description: The password for RabbitMQ
433     type: string
434     hidden: true
435   RabbitUserName:
436     default: guest
437     description: The username for RabbitMQ
438     type: string
439   RabbitClientUseSSL:
440     default: false
441     description: >
442         Rabbit client subscriber parameter to specify
443         an SSL connection to the RabbitMQ host.
444     type: string
445   RabbitClientPort:
446     default: 5672
447     description: Set rabbit subscriber port, change this if using SSL
448     type: number
449   RedisVirtualIP:
450     type: string
451     default: ''  # Has to be here because of the ignored empty value bug
452   SnmpdReadonlyUserName:
453     default: ro_snmp_user
454     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
455     type: string
456   SnmpdReadonlyUserPassword:
457     default: unset
458     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
459     type: string
460     hidden: true
461   SSLCACertificate:
462     default: ''
463     description: If set, the contents of an SSL certificate authority file.
464     type: string
465   SSLCertificate:
466     default: ''
467     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
468     type: string
469     hidden: true
470   SSLKey:
471     default: ''
472     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
473     type: string
474     hidden: true
475   SwiftHashSuffix:
476     default: unset
477     description: A random string to be used as a salt when hashing to determine mappings
478       in the ring.
479     hidden: true
480     type: string
481   SwiftMountCheck:
482     default: 'false'
483     description: Value of mount_check in Swift account/container/object -server.conf
484     type: boolean
485   SwiftMinPartHours:
486     type: number
487     default: 1
488     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
489   SwiftPartPower:
490     default: 10
491     description: Partition Power to use when building Swift rings
492     type: number
493   SwiftPassword:
494     default: unset
495     description: The password for the swift service account, used by the swift proxy
496       services.
497     hidden: true
498     type: string
499   SwiftReplicas:
500     type: number
501     default: 3
502     description: How many replicas to use in the swift rings.
503   VirtualIP: # DEPRECATED: use per service settings instead
504     type: string
505     default: ''  # Has to be here because of the ignored empty value bug
506   HeatApiVirtualIP:
507     type: string
508     default: ''
509   GlanceApiVirtualIP:
510     type: string
511     default: ''
512   GlanceRegistryVirtualIP:
513     type: string
514     default: ''
515   MysqlVirtualIP:
516     type: string
517     default: ''
518   KeystoneAdminApiVirtualIP:
519     type: string
520     default: ''
521   KeystonePublicApiVirtualIP:
522     type: string
523     default: ''
524   NeutronApiVirtualIP:
525     type: string
526     default: ''
527   EnablePackageInstall:
528     default: 'false'
529     description: Set to true to enable package installation via Puppet
530     type: boolean
531   ServiceNetMap:
532     default: {}
533     description: Mapping of service_name -> network name. Typically set
534                  via parameter_defaults in the resource registry.
535     type: json
536   UpdateIdentifier:
537     default: ''
538     type: string
539     description: >
540       Setting to a previously unused value during stack-update will trigger
541       package update on all nodes
542   Hostname:
543     type: string
544     default: '' # Defaults to Heat created hostname
545
546 resources:
547
548   Controller:
549     type: OS::Nova::Server
550     properties:
551       image: {get_param: Image}
552       image_update_policy: {get_param: ImageUpdatePolicy}
553       flavor: {get_param: Flavor}
554       key_name: {get_param: KeyName}
555       networks:
556         - network: ctlplane
557       user_data_format: SOFTWARE_CONFIG
558       user_data: {get_resource: UserData}
559       name: {get_param: Hostname}
560
561   # Combine the NodeAdminUserData and NodeUserData mime archives
562   UserData:
563     type: OS::Heat::MultipartMime
564     properties:
565       parts:
566       - config: {get_resource: NodeAdminUserData}
567         type: multipart
568       - config: {get_resource: NodeUserData}
569         type: multipart
570
571   # Creates the "heat-admin" user if configured via the environment
572   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
573   NodeAdminUserData:
574     type: OS::TripleO::NodeAdminUserData
575
576   # For optional operator additional userdata
577   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
578   NodeUserData:
579     type: OS::TripleO::NodeUserData
580
581   ExternalPort:
582     type: OS::TripleO::Controller::Ports::ExternalPort
583     properties:
584       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
585
586   InternalApiPort:
587     type: OS::TripleO::Controller::Ports::InternalApiPort
588     properties:
589       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
590
591   StoragePort:
592     type: OS::TripleO::Controller::Ports::StoragePort
593     properties:
594       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
595
596   StorageMgmtPort:
597     type: OS::TripleO::Controller::Ports::StorageMgmtPort
598     properties:
599       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
600
601   TenantPort:
602     type: OS::TripleO::Controller::Ports::TenantPort
603     properties:
604       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
605
606   NetIpMap:
607     type: OS::TripleO::Network::Ports::NetIpMap
608     properties:
609       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
610       ExternalIp: {get_attr: [ExternalPort, ip_address]}
611       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
612       StorageIp: {get_attr: [StoragePort, ip_address]}
613       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
614       TenantIp: {get_attr: [TenantPort, ip_address]}
615
616   NetIpSubnetMap:
617     type: OS::TripleO::Network::Ports::NetIpSubnetMap
618     properties:
619       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
620       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
621       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
622       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
623       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
624       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
625
626   NetworkConfig:
627     type: OS::TripleO::Controller::Net::SoftwareConfig
628     properties:
629       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
630       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
631       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
632       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
633       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
634       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
635
636   NetworkDeployment:
637     type: OS::TripleO::SoftwareDeployment
638     properties:
639       config: {get_resource: NetworkConfig}
640       server: {get_resource: Controller}
641       input_values:
642         bridge_name: br-ex
643         interface_name: {get_param: NeutronPublicInterface}
644
645   ControllerDeployment:
646     type: OS::TripleO::SoftwareDeployment
647     depends_on: NetworkDeployment
648     properties:
649       config: {get_resource: ControllerConfig}
650       server: {get_resource: Controller}
651       input_values:
652         bootstack_nodeid: {get_attr: [Controller, name]}
653         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
654         heat.watch_server_url:
655           list_join:
656             - ''
657             - - 'http://'
658               - {get_param: HeatApiVirtualIP}
659               - ':8003'
660         heat.metadata_server_url:
661           list_join:
662             - ''
663             - - 'http://'
664               - {get_param: HeatApiVirtualIP}
665               - ':8000'
666         heat.waitcondition_server_url:
667           list_join:
668             - ''
669             - - 'http://'
670               - {get_param: HeatApiVirtualIP}
671               - ':8000/v1/waitcondition'
672         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
673         horizon_allowed_hosts: {get_param: HorizonAllowedHosts}
674         horizon_secret: {get_param: HorizonSecret}
675         admin_password: {get_param: AdminPassword}
676         admin_token: {get_param: AdminToken}
677         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
678         debug: {get_param: Debug}
679         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
680         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
681         cinder_nfs_mount_options: {get_param: CinderNfsMountOptions}
682         cinder_nfs_servers:
683           str_replace:
684             template: "['SERVERS']"
685             params:
686               SERVERS:
687                 list_join:
688                 - "','"
689                 - {get_param: CinderNfsServers}
690         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
691         cinder_password: {get_param: CinderPassword}
692         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
693         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
694         cinder_backend_config: {get_param: CinderBackendConfig}
695         cinder_dsn:
696           list_join:
697             - ''
698             - - 'mysql://cinder:'
699               - {get_param: CinderPassword}
700               - '@'
701               - {get_param: MysqlVirtualIP}
702               - '/cinder'
703         glance_port: {get_param: GlancePort}
704         glance_password: {get_param: GlancePassword}
705         glance_backend: {get_param: GlanceBackend}
706         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
707         glance_log_file: {get_param: GlanceLogFile}
708         glance_dsn:
709           list_join:
710             - ''
711             - - 'mysql://glance:'
712               - {get_param: GlancePassword}
713               - '@'
714               - {get_param: MysqlVirtualIP}
715               - '/glance'
716         heat_password: {get_param: HeatPassword}
717         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
718         heat_dsn:
719           list_join:
720             - ''
721             - - 'mysql://heat:'
722               - {get_param: HeatPassword}
723               - '@'
724               - {get_param: MysqlVirtualIP}
725               - '/heat'
726         keystone_auth_address: {list_join: ['', ['http://', {get_param: KeystonePublicApiVirtualIP} , ':5000/v2.0']]}
727         keystone_ca_certificate: {get_param: KeystoneCACertificate}
728         keystone_signing_key: {get_param: KeystoneSigningKey}
729         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
730         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
731         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
732         keystone_notification_driver: {get_param: KeystoneNotificationDriver}
733         keystone_notification_format: {get_param: KeystoneNotificationFormat}
734         keystone_dsn:
735           list_join:
736             - ''
737             - - 'mysql://keystone:'
738               - {get_param: AdminToken}
739               - '@'
740               - {get_param: MysqlVirtualIP}
741               - '/keystone'
742         keystone_identity_uri:
743           list_join:
744             - ''
745             - - 'http://'
746               - {get_param: KeystoneAdminApiVirtualIP}
747               - ':35357/'
748         keystone_auth_uri:
749           list_join:
750             - ''
751             - - 'http://'
752               - {get_param: KeystonePublicApiVirtualIP}
753               - ':5000/v2.0/'
754         keystone_ec2_uri:
755           list_join:
756             - ''
757             - - 'http://'
758               - {get_param: KeystonePublicApiVirtualIP}
759               - ':5000/v2.0/ec2tokens'
760         enable_fencing: {get_param: EnableFencing}
761         enable_galera: {get_param: EnableGalera}
762         enable_ceph_storage: {get_param: EnableCephStorage}
763         enable_swift_storage: {get_param: EnableSwiftStorage}
764         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
765         mysql_max_connections: {get_param: MysqlMaxConnections}
766         mysql_root_password: {get_param: MysqlRootPassword}
767         mysql_cluster_name:
768           str_replace:
769             template: tripleo-CLUSTER
770             params:
771               CLUSTER: {get_param: MysqlClusterUniquePart}
772         neutron_flat_networks: {get_param: NeutronFlatNetworks}
773         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
774         neutron_agent_mode: {get_param: NeutronAgentMode}
775         neutron_router_distributed: {get_param: NeutronDVR}
776         neutron_core_plugin: {get_param: NeutronCorePlugin}
777         neutron_service_plugins:
778           str_replace:
779             template: "['PLUGINS']"
780             params:
781               PLUGINS:
782                 list_join:
783                 - "','"
784                 - {get_param: NeutronServicePlugins}
785         neutron_type_drivers:
786           str_replace:
787             template: "['DRIVERS']"
788             params:
789               DRIVERS:
790                 list_join:
791                 - "','"
792                 - {get_param: NeutronTypeDrivers}
793         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
794         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
795         neutron_l3_ha: {get_param: NeutronL3HA}
796         neutron_dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
797         neutron_network_vlan_ranges:
798           str_replace:
799             template: "['RANGES']"
800             params:
801               RANGES:
802                 list_join:
803                 - "','"
804                 - {get_param: NeutronNetworkVLANRanges}
805         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
806         neutron_external_network_bridge: {get_param: NeutronExternalNetworkBridge}
807         neutron_public_interface: {get_param: NeutronPublicInterface}
808         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
809         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
810         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
811         neutron_tenant_network_type: {get_param: NeutronNetworkType}
812         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
813         neutron_tunnel_id_ranges:
814           str_replace:
815             template: "['RANGES']"
816             params:
817               RANGES:
818                 list_join:
819                 - "','"
820                 - {get_param: NeutronTunnelIdRanges}
821         neutron_vni_ranges:
822           str_replace:
823             template: "['RANGES']"
824             params:
825               RANGES:
826                 list_join:
827                 - "','"
828                 - {get_param: NeutronVniRanges}
829         neutron_password: {get_param: NeutronPassword}
830         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
831         neutron_dsn:
832           list_join:
833             - ''
834             - - 'mysql://neutron:'
835               - {get_param: NeutronPassword}
836               - '@'
837               - {get_param: MysqlVirtualIP}
838               - '/ovs_neutron?charset=utf8'
839         neutron_url:
840           list_join:
841             - ''
842             - - 'http://'
843               - {get_param: NeutronApiVirtualIP}
844               - ':9696'
845         neutron_admin_auth_url:
846           list_join:
847             - ''
848             - - 'http://'
849               - {get_param: KeystoneAdminApiVirtualIP}
850               - ':35357/v2.0'
851         ceilometer_backend: {get_param: CeilometerBackend}
852         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
853         ceilometer_password: {get_param: CeilometerPassword}
854         ceilometer_coordination_url:
855           list_join:
856             - ''
857             - - 'redis://'
858               - {get_param: RedisVirtualIP}
859               - ':6379'
860         ceilometer_dsn:
861           list_join:
862             - ''
863             - - 'mysql://ceilometer:unset@'
864               - {get_param: MysqlVirtualIP}
865               - '/ceilometer'
866         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
867         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
868         nova_password: {get_param: NovaPassword}
869         nova_dsn:
870           list_join:
871             - ''
872             - - 'mysql://nova:'
873               - {get_param: NovaPassword}
874               - '@'
875               - {get_param: MysqlVirtualIP}
876               - '/nova'
877         fencing_config: {get_param: FencingConfig}
878         pcsd_password: {get_param: PcsdPassword}
879         rabbit_username: {get_param: RabbitUserName}
880         rabbit_password: {get_param: RabbitPassword}
881         rabbit_cookie: {get_param: RabbitCookie}
882         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
883         rabbit_client_port: {get_param: RabbitClientPort}
884         mongodb_no_journal: {get_param: MongoDbNoJournal}
885         ntp_servers:
886           str_replace:
887             template: '["server"]'
888             params:
889               server: {get_param: NtpServer}
890         control_virtual_interface: {get_param: ControlVirtualInterface}
891         public_virtual_interface: {get_param: PublicVirtualInterface}
892         swift_hash_suffix: {get_param: SwiftHashSuffix}
893         swift_password: {get_param: SwiftPassword}
894         swift_part_power: {get_param: SwiftPartPower}
895         swift_replicas: {get_param: SwiftReplicas}
896         swift_min_part_hours: {get_param: SwiftMinPartHours}
897         swift_mount_check: {get_param: SwiftMountCheck}
898         enable_package_install: {get_param: EnablePackageInstall}
899         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
900         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
901         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
902         cinder_iscsi_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
903         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
904         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
905         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
906         glance_api_servers:
907           list_join:
908             - ''
909             - - {get_param: GlanceProtocol}
910               - '://'
911               - {get_param: GlanceApiVirtualIP}
912               - ':'
913               - {get_param: GlancePort}
914         glance_registry_host: {get_param: GlanceRegistryVirtualIP}
915         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
916         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
917         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
918         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
919         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
920         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
921         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
922         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
923         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
924         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
925         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
926         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
927         redis_vip: {get_param: RedisVirtualIP}
928         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
929         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
930         mysql_virtual_ip: {get_param: MysqlVirtualIP}
931         ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
932         ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
933         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
934
935   # Map heat metadata into hiera datafiles
936   ControllerConfig:
937     type: OS::Heat::StructuredConfig
938     properties:
939       group: os-apply-config
940       config:
941         hiera:
942           hierarchy:
943             - '"%{::uuid}"'
944             - heat_config_%{::deploy_config_name}
945             - controller_extraconfig
946             - extraconfig
947             - controller
948             - database
949             - object
950             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
951             - ceph_cluster # provided by CephClusterConfig
952             - ceph
953             - bootstrap_node # provided by BootstrapNodeConfig
954             - all_nodes # provided by allNodesConfig
955             - vip_data # provided by vip-config
956             - '"%{::osfamily}"'
957             - common
958             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
959             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
960             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
961             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
962           datafiles:
963             controller_extraconfig:
964               mapped_data: {get_param: ControllerExtraConfig}
965             extraconfig:
966               mapped_data: {get_param: ExtraConfig}
967             common:
968               raw_data: {get_file: hieradata/common.yaml}
969             ceph:
970               raw_data: {get_file: hieradata/ceph.yaml}
971               mapped_data:
972                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
973                 ceph::profile::params::public_network: {get_input: ceph_public_network}
974                 ceph::mon::public_addr: {get_input: ceph_public_ip}
975             database:
976               raw_data: {get_file: hieradata/database.yaml}
977             object:
978               raw_data: {get_file: hieradata/object.yaml}
979             controller:
980               raw_data: {get_file: hieradata/controller.yaml}
981               mapped_data: # data supplied directly to this deployment configuration, etc
982                 bootstack_nodeid: {get_input: bootstack_nodeid}
983
984                 # Pacemaker
985                 enable_fencing: {get_input: enable_fencing}
986                 hacluster_pwd: {get_input: pcsd_password}
987                 tripleo::fencing::config: {get_input: fencing_config}
988
989                 # Swift
990                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
991                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
992                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
993                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
994                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
995                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
996                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
997                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
998                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
999                 swift_mount_check: {get_input: swift_mount_check}
1000
1001                 # NOTE(dprince): build_ring support is currently not wired in.
1002                 # See: https://review.openstack.org/#/c/109225/
1003                 tripleo::ringbuilder::build_ring: True
1004
1005                 # Cinder
1006                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
1007                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
1008                 cinder_nfs_mount_options: {get_input: cinder_nfs_mount_options}
1009                 cinder_nfs_servers: {get_input: cinder_nfs_servers}
1010                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
1011                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
1012                 cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
1013                 cinder::database_connection: {get_input: cinder_dsn}
1014                 cinder::api::keystone_password: {get_input: cinder_password}
1015                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
1016                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
1017                 cinder::api::bind_host: {get_input: cinder_api_network}
1018                 cinder::rabbit_userid: {get_input: rabbit_username}
1019                 cinder::rabbit_password: {get_input: rabbit_password}
1020                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1021                 cinder::rabbit_port: {get_input: rabbit_client_port}
1022                 cinder::debug: {get_input: debug}
1023                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
1024                 cinder::glance::glance_api_servers: {get_input: glance_api_servers}
1025                 cinder_backend_config: {get_input: CinderBackendConfig}
1026                 cinder::db::mysql::password: {get_input: cinder_password}
1027
1028                 # Glance
1029                 glance::api::bind_port: {get_input: glance_port}
1030                 glance::api::bind_host: {get_input: glance_api_network}
1031                 glance::api::auth_uri: {get_input: keystone_auth_uri}
1032                 glance::api::identity_uri: {get_input: keystone_identity_uri}
1033                 glance::api::registry_host: {get_input: glance_registry_host}
1034                 glance::api::keystone_password: {get_input: glance_password}
1035                 glance::api::debug: {get_input: debug}
1036                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
1037                 glance_log_file: {get_input: glance_log_file}
1038                 glance_log_file: {get_input: glance_log_file}
1039                 glance::api::database_connection: {get_input: glance_dsn}
1040                 glance::registry::keystone_password: {get_input: glance_password}
1041                 glance::registry::database_connection: {get_input: glance_dsn}
1042                 glance::registry::bind_host: {get_input: glance_registry_network}
1043                 glance::registry::auth_uri: {get_input: keystone_auth_uri}
1044                 glance::registry::identity_uri: {get_input: keystone_identity_uri}
1045                 glance::registry::debug: {get_input: debug}
1046                 glance::backend::swift::swift_store_auth_address: {get_input: keystone_auth_address}
1047                 glance::backend::swift::swift_store_user: service:glance
1048                 glance::backend::swift::swift_store_key: {get_input: glance_password}
1049                 glance_backend: {get_input: glance_backend}
1050                 glance::db::mysql::password: {get_input: glance_password}
1051
1052                 # Heat
1053                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
1054                 heat::engine::heat_watch_server_url: {get_input: heat.watch_server_url}
1055                 heat::engine::heat_metadata_server_url: {get_input: heat.metadata_server_url}
1056                 heat::engine::heat_waitcondition_server_url: {get_input: heat.waitcondition_server_url}
1057                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
1058                 heat::rabbit_userid: {get_input: rabbit_username}
1059                 heat::rabbit_password: {get_input: rabbit_password}
1060                 heat::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1061                 heat::rabbit_port: {get_input: rabbit_client_port}
1062                 heat::auth_uri: {get_input: keystone_auth_uri}
1063                 heat::keystone_ec2_uri: {get_input: keystone_ec2_uri}
1064                 heat::identity_uri: {get_input: keystone_identity_uri}
1065                 heat::keystone_password: {get_input: heat_password}
1066                 heat::api::bind_host: {get_input: heat_api_network}
1067                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
1068                 heat::api_cfn::bind_host: {get_input: heat_api_network}
1069                 heat::database_connection: {get_input: heat_dsn}
1070                 heat::debug: {get_input: debug}
1071                 heat::db::mysql::password: {get_input: heat_password}
1072
1073                 # Keystone
1074                 keystone::admin_token: {get_input: admin_token}
1075                 keystone_ca_certificate: {get_input: keystone_ca_certificate}
1076                 keystone_signing_key: {get_input: keystone_signing_key}
1077                 keystone_signing_certificate: {get_input: keystone_signing_certificate}
1078                 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
1079                 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
1080                 keystone::database_connection: {get_input: keystone_dsn}
1081                 keystone::public_bind_host: {get_input: keystone_public_api_network}
1082                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
1083                 keystone::debug: {get_input: debug}
1084                 keystone::db::mysql::password: {get_input: admin_token}
1085                 keystone::rabbit_userid: {get_input: rabbit_username}
1086                 keystone::rabbit_password: {get_input: rabbit_password}
1087                 keystone::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1088                 keystone::rabbit_port: {get_input: rabbit_client_port}
1089                 keystone::notification_driver: {get_input: keystone_notification_driver}
1090                 keystone::notification_format: {get_input: keystone_notification_format}
1091                 # MongoDB
1092                 mongodb::server::bind_ip: {get_input: mongo_db_network}
1093                 mongodb::server::nojournal: {get_input: mongodb_no_journal}
1094                 # MySQL
1095                 admin_password: {get_input: admin_password}
1096                 enable_galera: {get_input: enable_galera}
1097                 enable_ceph_storage: {get_input: enable_ceph_storage}
1098                 enable_swift_storage: {get_input: enable_swift_storage}
1099                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
1100                 mysql_max_connections: {get_input: mysql_max_connections}
1101                 mysql::server::root_password: {get_input: mysql_root_password}
1102                 mysql_cluster_name: {get_input: mysql_cluster_name}
1103                 mysql_bind_host: {get_input: mysql_network}
1104                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
1105
1106                 # Neutron
1107                 neutron::bind_host: {get_input: neutron_api_network}
1108                 neutron::rabbit_password: {get_input: rabbit_password}
1109                 neutron::rabbit_user: {get_input: rabbit_user}
1110                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1111                 neutron::rabbit_port: {get_input: rabbit_client_port}
1112                 neutron::debug: {get_input: debug}
1113                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
1114                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
1115                 neutron::server::database_connection: {get_input: neutron_dsn}
1116                 neutron::agents::l3::external_network_bridge: {get_input: neutron_external_network_bridge}
1117                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
1118                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
1119                 neutron_flat_networks: {get_input: neutron_flat_networks}
1120                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1121                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
1122                 neutron_agent_mode: {get_input: neutron_agent_mode}
1123                 neutron_router_distributed: {get_input: neutron_router_distributed}
1124                 neutron::core_plugin: {get_input: neutron_core_plugin}
1125                 neutron::service_plugins: {get_input: neutron_service_plugins}
1126                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
1127                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
1128                 neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
1129                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
1130                 neutron::dhcp_agents_per_network: {get_input: neutron_dhcp_agents_per_network}
1131                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
1132                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
1133                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
1134                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
1135                 neutron_public_interface: {get_input: neutron_public_interface}
1136                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
1137                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
1138                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
1139                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
1140                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
1141                 neutron::server::auth_password: {get_input: neutron_password}
1142                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
1143                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
1144                 neutron_dsn: {get_input: neutron_dsn}
1145                 neutron::agents::metadata::auth_url: {get_input: keystone_identity_uri}
1146                 neutron::db::mysql::password: {get_input: neutron_password}
1147
1148                 # Ceilometer
1149                 ceilometer_backend: {get_input: ceilometer_backend}
1150                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
1151                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
1152                 ceilometer::rabbit_userid: {get_input: rabbit_username}
1153                 ceilometer::rabbit_password: {get_input: rabbit_password}
1154                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1155                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
1156                 ceilometer::debug: {get_input: debug}
1157                 ceilometer::api::host: {get_input: ceilometer_api_network}
1158                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
1159                 ceilometer::api::keystone_auth_uri: {get_input: keystone_auth_uri}
1160                 ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri}
1161                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
1162                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_address}
1163                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
1164                 ceilometer::db::mysql::password: {get_input: ceilometer_password}
1165                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
1166                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
1167
1168                 # Nova
1169                 nova::rabbit_userid: {get_input: rabbit_username}
1170                 nova::rabbit_password: {get_input: rabbit_password}
1171                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1172                 nova::rabbit_port: {get_input: rabbit_client_port}
1173                 nova::debug: {get_input: debug}
1174                 nova::api::auth_uri: {get_input: keystone_auth_uri}
1175                 nova::api::identity_uri: {get_input: keystone_identity_uri}
1176                 nova::api::api_bind_address: {get_input: nova_api_network}
1177                 nova::api::metadata_listen: {get_input: nova_metadata_network}
1178                 nova::api::admin_password: {get_input: nova_password}
1179                 nova::database_connection: {get_input: nova_dsn}
1180                 nova::glance_api_servers: {get_input: glance_api_servers}
1181                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1182                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
1183                 nova::network::neutron::neutron_url: {get_input: neutron_url}
1184                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
1185                 nova::vncproxy::host: {get_input: nova_api_network}
1186                 nova::db::mysql::password: {get_input: nova_password}
1187
1188                 # Horizon
1189                 apache::ip: {get_input: horizon_network}
1190                 horizon::allowed_hosts: {get_input: horizon_allowed_hosts}
1191                 horizon::django_debug: {get_input: debug}
1192                 horizon::secret_key: {get_input: horizon_secret}
1193                 horizon::bind_address: {get_input: horizon_network}
1194                 horizon::keystone_url: {get_input: keystone_auth_uri}
1195
1196                 # Rabbit
1197                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
1198                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
1199                 # Redis
1200                 redis::bind: {get_input: redis_network}
1201                 redis_vip: {get_input: redis_vip}
1202                 # Misc
1203                 memcached::listen_ip: {get_input: memcached_network}
1204                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
1205                 ntp::servers: {get_input: ntp_servers}
1206                 control_virtual_interface: {get_input: control_virtual_interface}
1207                 public_virtual_interface: {get_input: public_virtual_interface}
1208                 tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
1209                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
1210                 tripleo::packages::enable_install: {get_input: enable_package_install}
1211                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
1212
1213   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
1214   ControllerExtraConfigPre:
1215     depends_on: ControllerDeployment
1216     type: OS::TripleO::ControllerExtraConfigPre
1217     properties:
1218         server: {get_resource: Controller}
1219
1220   # Hook for site-specific additional pre-deployment config,
1221   # applying to all nodes, e.g node registration/unregistration
1222   NodeExtraConfig:
1223     depends_on: ControllerExtraConfigPre
1224     type: OS::TripleO::NodeExtraConfig
1225     properties:
1226         server: {get_resource: Controller}
1227
1228   UpdateConfig:
1229     type: OS::TripleO::Tasks::PackageUpdate
1230
1231   UpdateDeployment:
1232     type: OS::Heat::SoftwareDeployment
1233     properties:
1234       config: {get_resource: UpdateConfig}
1235       server: {get_resource: Controller}
1236       input_values:
1237         update_identifier:
1238           get_param: UpdateIdentifier
1239
1240 outputs:
1241   ip_address:
1242     description: IP address of the server in the ctlplane network
1243     value: {get_attr: [Controller, networks, ctlplane, 0]}
1244   external_ip_address:
1245     description: IP address of the server in the external network
1246     value: {get_attr: [ExternalPort, ip_address]}
1247   internal_api_ip_address:
1248     description: IP address of the server in the internal_api network
1249     value: {get_attr: [InternalApiPort, ip_address]}
1250   storage_ip_address:
1251     description: IP address of the server in the storage network
1252     value: {get_attr: [StoragePort, ip_address]}
1253   storage_mgmt_ip_address:
1254     description: IP address of the server in the storage_mgmt network
1255     value: {get_attr: [StorageMgmtPort, ip_address]}
1256   tenant_ip_address:
1257     description: IP address of the server in the tenant network
1258     value: {get_attr: [TenantPort, ip_address]}
1259   hostname:
1260     description: Hostname of the server
1261     value: {get_attr: [Controller, name]}
1262   corosync_node:
1263     description: >
1264       Node object in the format {ip: ..., name: ...} format that the corosync
1265       element expects
1266     value:
1267       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1268       name: {get_attr: [Controller, name]}
1269   hosts_entry:
1270     description: >
1271       Server's IP address and hostname in the /etc/hosts format
1272     value:
1273       str_replace:
1274         template: IP HOST.localdomain HOST CLOUDNAME
1275         params:
1276           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
1277           HOST: {get_attr: [Controller, name]}
1278           CLOUDNAME: {get_param: CloudName}
1279   nova_server_resource:
1280     description: Heat resource handle for the Nova compute server
1281     value:
1282       {get_resource: Controller}
1283   swift_device:
1284     description: Swift device formatted for swift-ring-builder
1285     value:
1286       str_replace:
1287         template: 'r1z1-IP:%PORT%/d1'
1288         params:
1289           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1290   swift_proxy_memcache:
1291     description: Swift proxy-memcache value
1292     value:
1293       str_replace:
1294         template: "IP:11211"
1295         params:
1296           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1297   config_identifier:
1298     description: identifier which changes if the controller configuration may need re-applying
1299     value:
1300       list_join:
1301         - ','
1302         - - {get_attr: [ControllerDeployment, deploy_stdout]}
1303           - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
1304           - {get_param: UpdateIdentifier}