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