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