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