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