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