Adding core_plugin, type_drivers and service_plugins parameters
[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             - heat_config_%{::deploy_config_name}
934             - controller_extraconfig
935             - extraconfig
936             - controller
937             - database
938             - object
939             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
940             - ceph_cluster # provided by CephClusterConfig
941             - ceph
942             - bootstrap_node # provided by BootstrapNodeConfig
943             - all_nodes # provided by allNodesConfig
944             - vip_data # provided by vip-config
945             - '"%{::osfamily}"'
946             - common
947             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
948             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
949             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
950           datafiles:
951             controller_extraconfig:
952               mapped_data: {get_param: ControllerExtraConfig}
953             extraconfig:
954               mapped_data: {get_param: ExtraConfig}
955             common:
956               raw_data: {get_file: hieradata/common.yaml}
957             ceph:
958               raw_data: {get_file: hieradata/ceph.yaml}
959               mapped_data:
960                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
961                 ceph::profile::params::public_network: {get_input: ceph_public_network}
962                 ceph::mon::public_addr: {get_input: ceph_public_ip}
963             database:
964               raw_data: {get_file: hieradata/database.yaml}
965             object:
966               raw_data: {get_file: hieradata/object.yaml}
967             controller:
968               raw_data: {get_file: hieradata/controller.yaml}
969               mapped_data: # data supplied directly to this deployment configuration, etc
970                 bootstack_nodeid: {get_input: bootstack_nodeid}
971
972                 # Pacemaker
973                 enable_fencing: {get_input: enable_fencing}
974                 hacluster_pwd: {get_input: pcsd_password}
975                 tripleo::fencing::config: {get_input: fencing_config}
976
977                 # Swift
978                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
979                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
980                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
981                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
982                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
983                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
984                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
985                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
986                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
987                 swift_mount_check: {get_input: swift_mount_check}
988
989                 # NOTE(dprince): build_ring support is currently not wired in.
990                 # See: https://review.openstack.org/#/c/109225/
991                 tripleo::ringbuilder::build_ring: True
992
993                 # Cinder
994                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
995                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
996                 cinder_nfs_mount_options: {get_input: cinder_nfs_mount_options}
997                 cinder_nfs_servers: {get_input: cinder_nfs_servers}
998                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
999                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
1000                 cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
1001                 cinder::database_connection: {get_input: cinder_dsn}
1002                 cinder::api::keystone_password: {get_input: cinder_password}
1003                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
1004                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
1005                 cinder::api::bind_host: {get_input: cinder_api_network}
1006                 cinder::rabbit_userid: {get_input: rabbit_username}
1007                 cinder::rabbit_password: {get_input: rabbit_password}
1008                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1009                 cinder::rabbit_port: {get_input: rabbit_client_port}
1010                 cinder::debug: {get_input: debug}
1011                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
1012                 cinder::glance::glance_api_servers: {get_input: glance_api_servers}
1013                 cinder_backend_config: {get_input: CinderBackendConfig}
1014                 cinder::db::mysql::password: {get_input: cinder_password}
1015
1016                 # Glance
1017                 glance::api::bind_port: {get_input: glance_port}
1018                 glance::api::bind_host: {get_input: glance_api_network}
1019                 glance::api::auth_uri: {get_input: keystone_auth_uri}
1020                 glance::api::identity_uri: {get_input: keystone_identity_uri}
1021                 glance::api::registry_host: {get_input: glance_registry_network}
1022                 glance::api::keystone_password: {get_input: glance_password}
1023                 glance::api::debug: {get_input: debug}
1024                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
1025                 glance_log_file: {get_input: glance_log_file}
1026                 glance_log_file: {get_input: glance_log_file}
1027                 glance::api::database_connection: {get_input: glance_dsn}
1028                 glance::registry::keystone_password: {get_input: glance_password}
1029                 glance::registry::database_connection: {get_input: glance_dsn}
1030                 glance::registry::bind_host: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1031                 glance::registry::auth_uri: {get_input: keystone_auth_uri}
1032                 glance::registry::identity_uri: {get_input: keystone_identity_uri}
1033                 glance::registry::debug: {get_input: debug}
1034                 glance::backend::swift::swift_store_auth_address: {get_input: keystone_auth_address}
1035                 glance::backend::swift::swift_store_user: service:glance
1036                 glance::backend::swift::swift_store_key: {get_input: glance_password}
1037                 glance_backend: {get_input: glance_backend}
1038                 glance::db::mysql::password: {get_input: glance_password}
1039
1040                 # Heat
1041                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
1042                 heat::engine::heat_watch_server_url: {get_input: heat.watch_server_url}
1043                 heat::engine::heat_metadata_server_url: {get_input: heat.metadata_server_url}
1044                 heat::engine::heat_waitcondition_server_url: {get_input: heat.waitcondition_server_url}
1045                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
1046                 heat::rabbit_userid: {get_input: rabbit_username}
1047                 heat::rabbit_password: {get_input: rabbit_password}
1048                 heat::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1049                 heat::rabbit_port: {get_input: rabbit_client_port}
1050                 heat::auth_uri: {get_input: keystone_auth_uri}
1051                 heat::keystone_ec2_uri: {get_input: keystone_ec2_uri}
1052                 heat::identity_uri: {get_input: keystone_identity_uri}
1053                 heat::keystone_password: {get_input: heat_password}
1054                 heat::api::bind_host: {get_input: heat_api_network}
1055                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
1056                 heat::api_cfn::bind_host: {get_input: heat_api_network}
1057                 heat::database_connection: {get_input: heat_dsn}
1058                 heat::debug: {get_input: debug}
1059                 heat::db::mysql::password: {get_input: heat_password}
1060
1061                 # Keystone
1062                 keystone::admin_token: {get_input: admin_token}
1063                 keystone_ca_certificate: {get_input: keystone_ca_certificate}
1064                 keystone_signing_key: {get_input: keystone_signing_key}
1065                 keystone_signing_certificate: {get_input: keystone_signing_certificate}
1066                 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
1067                 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
1068                 keystone::database_connection: {get_input: keystone_dsn}
1069                 keystone::public_bind_host: {get_input: keystone_public_api_network}
1070                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
1071                 keystone::debug: {get_input: debug}
1072                 keystone::db::mysql::password: {get_input: admin_token}
1073                 keystone::rabbit_userid: {get_input: rabbit_username}
1074                 keystone::rabbit_password: {get_input: rabbit_password}
1075                 keystone::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1076                 keystone::rabbit_port: {get_input: rabbit_client_port}
1077                 keystone::notification_driver: {get_input: keystone_notification_driver}
1078                 keystone::notification_format: {get_input: keystone_notification_format}
1079                 # MongoDB
1080                 mongodb::server::bind_ip: {get_input: mongo_db_network}
1081                 mongodb::server::nojournal: {get_input: mongodb_no_journal}
1082                 # MySQL
1083                 admin_password: {get_input: admin_password}
1084                 enable_galera: {get_input: enable_galera}
1085                 enable_ceph_storage: {get_input: enable_ceph_storage}
1086                 enable_swift_storage: {get_input: enable_swift_storage}
1087                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
1088                 mysql_max_connections: {get_input: mysql_max_connections}
1089                 mysql::server::root_password: {get_input: mysql_root_password}
1090                 mysql_cluster_name: {get_input: mysql_cluster_name}
1091                 mysql_bind_host: {get_input: mysql_network}
1092                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
1093
1094                 # Neutron
1095                 neutron::bind_host: {get_input: neutron_api_network}
1096                 neutron::rabbit_password: {get_input: rabbit_password}
1097                 neutron::rabbit_user: {get_input: rabbit_user}
1098                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1099                 neutron::rabbit_port: {get_input: rabbit_client_port}
1100                 neutron::debug: {get_input: debug}
1101                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
1102                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
1103                 neutron::server::database_connection: {get_input: neutron_dsn}
1104                 neutron::agents::l3::external_network_bridge: {get_input: neutron_external_network_bridge}
1105                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
1106                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
1107                 neutron_flat_networks: {get_input: neutron_flat_networks}
1108                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1109                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
1110                 neutron_agent_mode: {get_input: neutron_agent_mode}
1111                 neutron_router_distributed: {get_input: neutron_router_distributed}
1112                 neutron::core_plugin: {get_input: neutron_core_plugin}
1113                 neutron::service_plugins: {get_input: neutron_service_plugins}
1114                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
1115                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
1116                 neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
1117                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
1118                 neutron::dhcp_agents_per_network: {get_input: neutron_dhcp_agents_per_network}
1119                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
1120                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
1121                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
1122                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
1123                 neutron_public_interface: {get_input: neutron_public_interface}
1124                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
1125                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
1126                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
1127                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
1128                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
1129                 neutron::server::auth_password: {get_input: neutron_password}
1130                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
1131                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
1132                 neutron_dsn: {get_input: neutron_dsn}
1133                 neutron::agents::metadata::auth_url: {get_input: keystone_identity_uri}
1134                 neutron::db::mysql::password: {get_input: neutron_password}
1135
1136                 # Ceilometer
1137                 ceilometer_backend: {get_input: ceilometer_backend}
1138                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
1139                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
1140                 ceilometer::rabbit_userid: {get_input: rabbit_username}
1141                 ceilometer::rabbit_password: {get_input: rabbit_password}
1142                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1143                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
1144                 ceilometer::debug: {get_input: debug}
1145                 ceilometer::api::host: {get_input: ceilometer_api_network}
1146                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
1147                 ceilometer::api::keystone_auth_uri: {get_input: keystone_auth_uri}
1148                 ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri}
1149                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
1150                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_address}
1151                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
1152                 ceilometer::db::mysql::password: {get_input: ceilometer_password}
1153                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
1154                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
1155
1156                 # Nova
1157                 nova::rabbit_userid: {get_input: rabbit_username}
1158                 nova::rabbit_password: {get_input: rabbit_password}
1159                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1160                 nova::rabbit_port: {get_input: rabbit_client_port}
1161                 nova::debug: {get_input: debug}
1162                 nova::api::auth_uri: {get_input: keystone_auth_uri}
1163                 nova::api::identity_uri: {get_input: keystone_identity_uri}
1164                 nova::api::api_bind_address: {get_input: nova_api_network}
1165                 nova::api::metadata_listen: {get_input: nova_metadata_network}
1166                 nova::api::admin_password: {get_input: nova_password}
1167                 nova::database_connection: {get_input: nova_dsn}
1168                 nova::glance_api_servers: {get_input: glance_api_servers}
1169                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1170                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
1171                 nova::network::neutron::neutron_url: {get_input: neutron_url}
1172                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
1173                 nova::vncproxy::host: {get_input: nova_api_network}
1174                 nova::db::mysql::password: {get_input: nova_password}
1175
1176                 # Horizon
1177                 apache::ip: {get_input: horizon_network}
1178                 horizon::django_debug: {get_input: debug}
1179                 horizon::secret_key: {get_input: horizon_secret}
1180                 horizon::bind_address: {get_input: horizon_network}
1181                 horizon::keystone_url: {get_input: keystone_auth_uri}
1182
1183                 # Rabbit
1184                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
1185                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
1186                 # Redis
1187                 redis::bind: {get_input: redis_network}
1188                 redis_vip: {get_input: redis_vip}
1189                 # Misc
1190                 memcached::listen_ip: {get_input: memcached_network}
1191                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
1192                 ntp::servers: {get_input: ntp_servers}
1193                 control_virtual_interface: {get_input: control_virtual_interface}
1194                 public_virtual_interface: {get_input: public_virtual_interface}
1195                 tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
1196                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
1197                 tripleo::packages::enable_install: {get_input: enable_package_install}
1198
1199   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
1200   ControllerExtraConfigPre:
1201     depends_on: ControllerDeployment
1202     type: OS::TripleO::ControllerExtraConfigPre
1203     properties:
1204         server: {get_resource: Controller}
1205
1206   UpdateConfig:
1207     type: OS::TripleO::Tasks::PackageUpdate
1208
1209   UpdateDeployment:
1210     type: OS::Heat::SoftwareDeployment
1211     properties:
1212       config: {get_resource: UpdateConfig}
1213       server: {get_resource: Controller}
1214       input_values:
1215         update_identifier:
1216           get_param: UpdateIdentifier
1217
1218 outputs:
1219   ip_address:
1220     description: IP address of the server in the ctlplane network
1221     value: {get_attr: [Controller, networks, ctlplane, 0]}
1222   external_ip_address:
1223     description: IP address of the server in the external network
1224     value: {get_attr: [ExternalPort, ip_address]}
1225   internal_api_ip_address:
1226     description: IP address of the server in the internal_api network
1227     value: {get_attr: [InternalApiPort, ip_address]}
1228   storage_ip_address:
1229     description: IP address of the server in the storage network
1230     value: {get_attr: [StoragePort, ip_address]}
1231   storage_mgmt_ip_address:
1232     description: IP address of the server in the storage_mgmt network
1233     value: {get_attr: [StorageMgmtPort, ip_address]}
1234   tenant_ip_address:
1235     description: IP address of the server in the tenant network
1236     value: {get_attr: [TenantPort, ip_address]}
1237   hostname:
1238     description: Hostname of the server
1239     value: {get_attr: [Controller, name]}
1240   corosync_node:
1241     description: >
1242       Node object in the format {ip: ..., name: ...} format that the corosync
1243       element expects
1244     value:
1245       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1246       name: {get_attr: [Controller, name]}
1247   hosts_entry:
1248     description: >
1249       Server's IP address and hostname in the /etc/hosts format
1250     value:
1251       str_replace:
1252         template: IP HOST.localdomain HOST CLOUDNAME
1253         params:
1254           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
1255           HOST: {get_attr: [Controller, name]}
1256           CLOUDNAME: {get_param: CloudName}
1257   nova_server_resource:
1258     description: Heat resource handle for the Nova compute server
1259     value:
1260       {get_resource: Controller}
1261   swift_device:
1262     description: Swift device formatted for swift-ring-builder
1263     value:
1264       str_replace:
1265         template: 'r1z1-IP:%PORT%/d1'
1266         params:
1267           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1268   swift_proxy_memcache:
1269     description: Swift proxy-memcache value
1270     value:
1271       str_replace:
1272         template: "IP:11211"
1273         params:
1274           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1275   config_identifier:
1276     description: identifier which changes if the controller configuration may need re-applying
1277     value:
1278       list_join:
1279       - ','
1280       - - {get_attr: [ControllerDeployment, deploy_stdout]}
1281         - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}