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