Allow a user to disable MongoDB journaling
[apex-tripleo-heat-templates.git] / puppet / controller-puppet.yaml
1 heat_template_version: 2015-04-30
2
3 description: >
4   OpenStack controller node configured by Puppet.
5
6 parameters:
7   AdminPassword:
8     default: unset
9     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
10     type: string
11     hidden: true
12   AdminToken:
13     default: unset
14     description: The keystone auth secret and db password.
15     type: string
16     hidden: true
17   CeilometerBackend:
18     default: 'mongodb'
19     description: The ceilometer backend type.
20     type: string
21   CeilometerMeteringSecret:
22     default: unset
23     description: Secret shared by the ceilometer services.
24     type: string
25     hidden: true
26   CeilometerPassword:
27     default: unset
28     description: The password for the ceilometer service  and db account.
29     type: string
30     hidden: true
31   CinderEnableIscsiBackend:
32     default: true
33     description: Whether to enable or not the Iscsi backend for Cinder
34     type: boolean
35   CinderEnableRbdBackend:
36     default: false
37     description: Whether to enable or not the Rbd backend for Cinder
38     type: boolean
39   CinderISCSIHelper:
40     default: tgtadm
41     description: The iSCSI helper to use with cinder.
42     type: string
43   CinderLVMLoopDeviceSize:
44     default: 5000
45     description: The size of the loopback file used by the cinder LVM driver.
46     type: number
47   CinderPassword:
48     default: unset
49     description: The password for the cinder service and db account, used by cinder-api.
50     type: string
51     hidden: true
52   CinderBackendConfig:
53     default: {}
54     description: Contains parameters to configure Cinder backends. Typically
55                  set via parameter_defaults in the resource registry.
56     type: json
57   CloudName:
58     default: ''
59     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
60     type: string
61   ControllerExtraConfig:
62     default: {}
63     description: |
64       Controller specific configuration to inject into the cluster. Same
65       structure as ExtraConfig.
66     type: json
67   ControlVirtualInterface:
68     default: 'br-ex'
69     description: Interface where virtual ip will be assigned.
70     type: string
71   Debug:
72     default: ''
73     description: Set to True to enable debugging on all services.
74     type: string
75   EnableFencing:
76     default: false
77     description: Whether to enable fencing in Pacemaker or not.
78     type: boolean
79   EnableGalera:
80     default: true
81     description: Whether to use Galera instead of regular MariaDB.
82     type: boolean
83   EnableCephStorage:
84     default: false
85     description: Whether to deploy Ceph Storage (OSD) on the Controller
86     type: boolean
87   EnableSwiftStorage:
88     default: true
89     description: Whether to enable Swift Storage on the Controller
90     type: boolean
91   ExtraConfig:
92     default: {}
93     description: |
94       Additional configuration to inject into the cluster. The JSON should have
95       the following structure:
96         {"FILEKEY":
97           {"config":
98             [{"section": "SECTIONNAME",
99               "values":
100                 [{"option": "OPTIONNAME",
101                   "value": "VALUENAME"
102                  }
103                 ]
104              }
105             ]
106           }
107         }
108       For instance:
109         {"nova":
110           {"config":
111             [{"section": "default",
112               "values":
113                 [{"option": "compute_manager",
114                   "value": "ironic.nova.compute.manager.ClusterComputeManager"
115                  }
116                 ]
117              },
118              {"section": "cells",
119               "values":
120                 [{"option": "driver",
121                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
122                  }
123                 ]
124              }
125             ]
126           }
127         }
128     type: json
129   FencingConfig:
130     default: {}
131     description: |
132       Pacemaker fencing configuration. The JSON should have
133       the following structure:
134         {
135           "devices": [
136             {
137               "agent": "AGENT_NAME",
138               "host_mac": "HOST_MAC_ADDRESS",
139               "params": {"PARAM_NAME": "PARAM_VALUE"}
140             }
141           ]
142         }
143       For instance:
144         {
145           "devices": [
146             {
147               "agent": "fence_xvm",
148               "host_mac": "52:54:00:aa:bb:cc",
149               "params": {
150                 "multicast_address": "225.0.0.12",
151                 "port": "baremetal_0",
152                 "manage_fw": true,
153                 "manage_key_file": true,
154                 "key_file": "/etc/fence_xvm.key",
155                 "key_file_password": "abcdef"
156               }
157             }
158           ]
159         }
160     type: json
161   Flavor:
162     description: Flavor for control nodes to request when deploying.
163     type: string
164     constraints:
165       - custom_constraint: nova.flavor
166   GlanceNotifierStrategy:
167     description: Strategy to use for Glance notification queue
168     type: string
169     default: noop
170   GlanceLogFile:
171     description: The filepath of the file to use for logging messages from Glance.
172     type: string
173     default: ''
174   GlancePassword:
175     default: unset
176     description: The password for the glance service and db account, used by the glance services.
177     type: string
178     hidden: true
179   GlancePort:
180     default: "9292"
181     description: Glance port.
182     type: string
183   GlanceProtocol:
184     default: http
185     description: Protocol to use when connecting to glance, set to https for SSL.
186     type: string
187   GlanceBackend:
188     default: swift
189     description: The short name of the Glance backend to use. Should be one
190       of swift, rbd, or file
191     type: string
192     constraints:
193     - allowed_values: ['swift', 'file', 'rbd']
194   HeatPassword:
195     default: unset
196     description: The password for the Heat service and db account, used by the Heat services.
197     type: string
198     hidden: true
199   HeatStackDomainAdminPassword:
200     description: Password for heat_domain_admin user.
201     type: string
202     default: ''
203     hidden: true
204   HeatAuthEncryptionKey:
205     description: Auth encryption key for heat-engine
206     type: string
207   HorizonSecret:
208     description: Secret key for Django
209     type: string
210   Image:
211     type: string
212     default: overcloud-control
213     constraints:
214       - custom_constraint: glance.image
215   ImageUpdatePolicy:
216     default: 'REBUILD_PRESERVE_EPHEMERAL'
217     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
218     type: string
219   KeyName:
220     default: default
221     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
222     type: string
223     constraints:
224       - custom_constraint: nova.keypair
225   KeystoneCACertificate:
226     default: ''
227     description: Keystone self-signed certificate authority certificate.
228     type: string
229   KeystoneSigningCertificate:
230     default: ''
231     description: Keystone certificate for verifying token validity.
232     type: string
233   KeystoneSigningKey:
234     default: ''
235     description: Keystone key for signing tokens.
236     type: string
237     hidden: true
238   KeystoneSSLCertificate:
239     default: ''
240     description: Keystone certificate for verifying token validity.
241     type: string
242   KeystoneSSLCertificateKey:
243     default: ''
244     description: Keystone key for signing tokens.
245     type: string
246     hidden: true
247   MysqlClusterUniquePart:
248     description: A unique identifier of the MySQL cluster the controller is in.
249     type: string
250     default: 'unset'  # Has to be here because of the ignored empty value bug
251     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
252     # constraints:
253     # - length: {min: 4, max: 10}
254   MysqlInnodbBufferPoolSize:
255     description: >
256         Specifies the size of the buffer pool in megabytes. Setting to
257         zero should be interpreted as "no value" and will defer to the
258         lower level default.
259     type: number
260     default: 0
261   MysqlRootPassword:
262     type: string
263     hidden: true
264     default: ''  # Has to be here because of the ignored empty value bug
265   NeutronExternalNetworkBridge:
266     description: Name of bridge used for external network traffic.
267     type: string
268     default: 'br-ex'
269   NeutronBridgeMappings:
270     description: >
271       The OVS logical->physical bridge mappings to use. See the Neutron
272       documentation for details. Defaults to mapping br-ex - the external
273       bridge on hosts - to a physical name 'datacentre' which can be used
274       to create provider networks (and we use this for the default floating
275       network) - if changing this either use different post-install network
276       scripts or be sure to keep 'datacentre' as a mapping network name.
277     type: string
278     default: "datacentre:br-ex"
279   NeutronDnsmasqOptions:
280     default: 'dhcp-option-force=26,1400'
281     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.
282     type: string
283   NeutronAgentMode:
284     default: 'dvr_snat'
285     description: Agent mode for the neutron-l3-agent on the controller hosts
286     type: string
287   NeutronL3HA:
288     default: 'False'
289     description: Whether to enable l3-agent HA
290     type: string
291   NeutronDhcpAgentsPerNetwork:
292     type: number
293     default: 3
294     description: The number of neutron dhcp agents to schedule per network
295   NeutronDVR:
296     default: 'False'
297     description: Whether to configure Neutron Distributed Virtual Routers
298     type: string
299   NeutronMetadataProxySharedSecret:
300     default: 'unset'
301     description: Shared secret to prevent spoofing
302     type: string
303   NeutronMechanismDrivers:
304     default: 'openvswitch'
305     description: |
306         The mechanism drivers for the Neutron tenant network. To specify multiple
307         values, use a comma separated string, like so: 'openvswitch,l2_population'
308     type: string
309   NeutronAllowL3AgentFailover:
310     default: 'True'
311     description: Allow automatic l3-agent failover
312     type: string
313   NeutronEnableTunnelling:
314     type: string
315     default: "True"
316   NeutronFlatNetworks:
317     type: string
318     default: 'datacentre'
319     description: If set, flat networks to configure in neutron plugins.
320   NeutronL3HA:
321     default: 'False'
322     description: Whether to enable l3-agent HA
323     type: string
324   NeutronNetworkType:
325     default: 'gre'
326     description: The tenant network type for Neutron, either gre or vxlan.
327     type: string
328   NeutronNetworkVLANRanges:
329     default: 'datacentre'
330     description: >
331       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
332       Neutron documentation for permitted values. Defaults to permitting any
333       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
334     type: comma_delimited_list
335   NeutronPassword:
336     default: unset
337     description: The password for the neutron service and db account, used by neutron agents.
338     type: string
339     hidden: true
340   NeutronPublicInterface:
341     default: nic1
342     description: What interface to bridge onto br-ex for network nodes.
343     type: string
344   NeutronPublicInterfaceTag:
345     default: ''
346     description: >
347       VLAN tag for creating a public VLAN. The tag will be used to
348       create an access port on the exterior bridge for each control plane node,
349       and that port will be given the IP address returned by neutron from the
350       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
351       overcloud.yaml to include the deployment of VLAN ports to the control
352       plane.
353     type: string
354   NeutronPublicInterfaceDefaultRoute:
355     default: ''
356     description: A custom default route for the NeutronPublicInterface.
357     type: string
358   NeutronPublicInterfaceIP:
359     default: ''
360     description: A custom IP address to put onto the NeutronPublicInterface.
361     type: string
362   NeutronPublicInterfaceRawDevice:
363     default: ''
364     description: If set, the public interface is a vlan with this device as the raw device.
365     type: string
366   NeutronTunnelTypes:
367     default: 'gre'
368     description: |
369         The tunnel types for the Neutron tenant network. To specify multiple
370         values, use a comma separated string, like so: 'gre,vxlan'
371     type: string
372   NovaPassword:
373     default: unset
374     description: The password for the nova service and db account, used by nova-api.
375     type: string
376     hidden: true
377   MongoDbNoJournal:
378     default: false
379     description: Should MongoDb journaling be disabled
380     type: boolean
381   NtpServer:
382     type: string
383     default: ''
384   PcsdPassword:
385     type: string
386     description: The password for the 'pcsd' user.
387   PublicVirtualInterface:
388     default: 'br-ex'
389     description: >
390         Specifies the interface where the public-facing virtual ip will be assigned.
391         This should be int_public when a VLAN is being used.
392     type: string
393   PublicVirtualIP: # DEPRECATED: use per service settings instead
394     type: string
395     default: ''  # Has to be here because of the ignored empty value bug
396   RabbitCookie:
397     type: string
398     default: ''  # Has to be here because of the ignored empty value bug
399     hidden: true
400   RabbitPassword:
401     default: guest
402     description: The password for RabbitMQ
403     type: string
404     hidden: true
405   RabbitUserName:
406     default: guest
407     description: The username for RabbitMQ
408     type: string
409   RabbitClientUseSSL:
410     default: false
411     description: >
412         Rabbit client subscriber parameter to specify
413         an SSL connection to the RabbitMQ host.
414     type: string
415   RabbitClientPort:
416     default: 5672
417     description: Set rabbit subscriber port, change this if using SSL
418     type: number
419   RedisVirtualIP:
420     type: string
421     default: ''  # Has to be here because of the ignored empty value bug
422   SnmpdReadonlyUserName:
423     default: ro_snmp_user
424     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
425     type: string
426   SnmpdReadonlyUserPassword:
427     default: unset
428     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
429     type: string
430     hidden: true
431   SSLCACertificate:
432     default: ''
433     description: If set, the contents of an SSL certificate authority file.
434     type: string
435   SSLCertificate:
436     default: ''
437     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
438     type: string
439     hidden: true
440   SSLKey:
441     default: ''
442     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
443     type: string
444     hidden: true
445   SwiftHashSuffix:
446     default: unset
447     description: A random string to be used as a salt when hashing to determine mappings
448       in the ring.
449     hidden: true
450     type: string
451   SwiftMountCheck:
452     default: 'false'
453     description: Value of mount_check in Swift account/container/object -server.conf
454     type: boolean
455   SwiftMinPartHours:
456     type: number
457     default: 1
458     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
459   SwiftPartPower:
460     default: 10
461     description: Partition Power to use when building Swift rings
462     type: number
463   SwiftPassword:
464     default: unset
465     description: The password for the swift service account, used by the swift proxy
466       services.
467     hidden: true
468     type: string
469   SwiftReplicas:
470     type: number
471     default: 3
472     description: How many replicas to use in the swift rings.
473   VirtualIP: # DEPRECATED: use per service settings instead
474     type: string
475     default: ''  # Has to be here because of the ignored empty value bug
476   HeatApiVirtualIP:
477     type: string
478     default: ''
479   GlanceApiVirtualIP:
480     type: string
481     default: ''
482   MysqlVirtualIP:
483     type: string
484     default: ''
485   KeystonePublicApiVirtualIP:
486     type: string
487     default: ''
488   NeutronApiVirtualIP:
489     type: string
490     default: ''
491   EnablePackageInstall:
492     default: 'false'
493     description: Set to true to enable package installation via Puppet
494     type: boolean
495   ServiceNetMap:
496     default: {}
497     description: Mapping of service_name -> network name. Typically set
498                  via parameter_defaults in the resource registry.
499     type: json
500   UpdateIdentifier:
501     default: ''
502     type: string
503     description: >
504       Setting to a previously unused value during stack-update will trigger
505       package update on all nodes
506   Hostname:
507     type: string
508     default: '' # Defaults to Heat created hostname
509
510 resources:
511
512   Controller:
513     type: OS::Nova::Server
514     properties:
515       image: {get_param: Image}
516       image_update_policy: {get_param: ImageUpdatePolicy}
517       flavor: {get_param: Flavor}
518       key_name: {get_param: KeyName}
519       networks:
520         - network: ctlplane
521       user_data_format: SOFTWARE_CONFIG
522       user_data: {get_resource: NodeUserData}
523       name: {get_param: Hostname}
524
525   NodeUserData:
526     type: OS::TripleO::NodeUserData
527
528   ExternalPort:
529     type: OS::TripleO::Controller::Ports::ExternalPort
530     properties:
531       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
532
533   InternalApiPort:
534     type: OS::TripleO::Controller::Ports::InternalApiPort
535     properties:
536       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
537
538   StoragePort:
539     type: OS::TripleO::Controller::Ports::StoragePort
540     properties:
541       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
542
543   StorageMgmtPort:
544     type: OS::TripleO::Controller::Ports::StorageMgmtPort
545     properties:
546       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
547
548   TenantPort:
549     type: OS::TripleO::Controller::Ports::TenantPort
550     properties:
551       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
552
553   NetIpMap:
554     type: OS::TripleO::Network::Ports::NetIpMap
555     properties:
556       ExternalIp: {get_attr: [ExternalPort, ip_address]}
557       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
558       StorageIp: {get_attr: [StoragePort, ip_address]}
559       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
560       TenantIp: {get_attr: [TenantPort, ip_address]}
561
562   NetIpSubnetMap:
563     type: OS::TripleO::Network::Ports::NetIpMap
564     properties:
565       ExternalIp: {get_attr: [ExternalPort, ip_subnet]}
566       InternalApiIp: {get_attr: [InternalApiPort, ip_subnet]}
567       StorageIp: {get_attr: [StoragePort, ip_subnet]}
568       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_subnet]}
569       TenantIp: {get_attr: [TenantPort, ip_subnet]}
570
571   NetworkConfig:
572     type: OS::TripleO::Controller::Net::SoftwareConfig
573     properties:
574       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
575       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
576       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
577       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
578       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
579
580   NetworkDeployment:
581     type: OS::TripleO::SoftwareDeployment
582     properties:
583       config: {get_resource: NetworkConfig}
584       server: {get_resource: Controller}
585       input_values:
586         bridge_name: br-ex
587         interface_name: {get_param: NeutronPublicInterface}
588
589   ControllerDeployment:
590     type: OS::TripleO::SoftwareDeployment
591     depends_on: NetworkDeployment
592     properties:
593       config: {get_resource: ControllerConfig}
594       server: {get_resource: Controller}
595       input_values:
596         bootstack_nodeid: {get_attr: [Controller, name]}
597         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
598         heat.watch_server_url:
599           list_join:
600             - ''
601             - - 'http://'
602               - {get_param: HeatApiVirtualIP}
603               - ':8003'
604         heat.metadata_server_url:
605           list_join:
606             - ''
607             - - 'http://'
608               - {get_param: HeatApiVirtualIP}
609               - ':8000'
610         heat.waitcondition_server_url:
611           list_join:
612             - ''
613             - - 'http://'
614               - {get_param: HeatApiVirtualIP}
615               - ':8000/v1/waitcondition'
616         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
617         horizon_secret: {get_param: HorizonSecret}
618         admin_password: {get_param: AdminPassword}
619         admin_token: {get_param: AdminToken}
620         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
621         debug: {get_param: Debug}
622         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
623         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
624         cinder_password: {get_param: CinderPassword}
625         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
626         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
627         cinder_backend_config: {get_param: CinderBackendConfig}
628         cinder_dsn:
629           list_join:
630             - ''
631             - - 'mysql://cinder:'
632               - {get_param: CinderPassword}
633               - '@'
634               - {get_param: MysqlVirtualIP}
635               - '/cinder'
636         glance_port: {get_param: GlancePort}
637         glance_password: {get_param: GlancePassword}
638         glance_backend: {get_param: GlanceBackend}
639         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
640         glance_log_file: {get_param: GlanceLogFile}
641         glance_dsn:
642           list_join:
643             - ''
644             - - 'mysql://glance:'
645               - {get_param: GlancePassword}
646               - '@'
647               - {get_param: MysqlVirtualIP}
648               - '/glance'
649         heat_password: {get_param: HeatPassword}
650         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
651         heat_dsn:
652           list_join:
653             - ''
654             - - 'mysql://heat:'
655               - {get_param: HeatPassword}
656               - '@'
657               - {get_param: MysqlVirtualIP}
658               - '/heat'
659         keystone_auth_address: {list_join: ['', ['http://', {get_param: KeystonePublicApiVirtualIP} , ':5000/v2.0']]}
660         keystone_ca_certificate: {get_param: KeystoneCACertificate}
661         keystone_signing_key: {get_param: KeystoneSigningKey}
662         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
663         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
664         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
665         keystone_dsn:
666           list_join:
667             - ''
668             - - 'mysql://keystone:'
669               - {get_param: AdminToken}
670               - '@'
671               - {get_param: MysqlVirtualIP}
672               - '/keystone'
673         keystone_identity_uri:
674           list_join:
675             - ''
676             - - 'http://'
677               - {get_param: KeystonePublicApiVirtualIP}
678               - ':35357/'
679         keystone_auth_uri:
680           list_join:
681             - ''
682             - - 'http://'
683               - {get_param: KeystonePublicApiVirtualIP}
684               - ':5000/v2.0/'
685         enable_fencing: {get_param: EnableFencing}
686         enable_galera: {get_param: EnableGalera}
687         enable_ceph_storage: {get_param: EnableCephStorage}
688         enable_swift_storage: {get_param: EnableSwiftStorage}
689         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
690         mysql_root_password: {get_param: MysqlRootPassword}
691         mysql_cluster_name:
692           str_replace:
693             template: tripleo-CLUSTER
694             params:
695               CLUSTER: {get_param: MysqlClusterUniquePart}
696         neutron_flat_networks: {get_param: NeutronFlatNetworks}
697         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
698         neutron_agent_mode: {get_param: NeutronAgentMode}
699         neutron_router_distributed: {get_param: NeutronDVR}
700         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
701         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
702         neutron_l3_ha: {get_param: NeutronL3HA}
703         neutron_dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
704         neutron_network_vlan_ranges:
705           str_replace:
706             template: "['RANGES']"
707             params:
708               RANGES:
709                 list_join:
710                 - "','"
711                 - {get_param: NeutronNetworkVLANRanges}
712         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
713         neutron_external_network_bridge: {get_param: NeutronExternalNetworkBridge}
714         neutron_public_interface: {get_param: NeutronPublicInterface}
715         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
716         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
717         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
718         neutron_tenant_network_type: {get_param: NeutronNetworkType}
719         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
720         neutron_password: {get_param: NeutronPassword}
721         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
722         neutron_dsn:
723           list_join:
724             - ''
725             - - 'mysql://neutron:'
726               - {get_param: NeutronPassword}
727               - '@'
728               - {get_param: MysqlVirtualIP}
729               - '/ovs_neutron?charset=utf8'
730         neutron_url:
731           list_join:
732             - ''
733             - - 'http://'
734               - {get_param: NeutronApiVirtualIP}
735               - ':9696'
736         neutron_admin_auth_url:
737           list_join:
738             - ''
739             - - 'http://'
740               - {get_param: KeystonePublicApiVirtualIP}
741               - ':35357/v2.0'
742         ceilometer_backend: {get_param: CeilometerBackend}
743         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
744         ceilometer_password: {get_param: CeilometerPassword}
745         ceilometer_coordination_url:
746           list_join:
747             - ''
748             - - 'redis://'
749               - {get_param: RedisVirtualIP}
750               - ':6379'
751         ceilometer_dsn:
752           list_join:
753             - ''
754             - - 'mysql://ceilometer:unset@'
755               - {get_param: MysqlVirtualIP}
756               - '/ceilometer'
757         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
758         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
759         nova_password: {get_param: NovaPassword}
760         nova_dsn:
761           list_join:
762             - ''
763             - - 'mysql://nova:'
764               - {get_param: NovaPassword}
765               - '@'
766               - {get_param: MysqlVirtualIP}
767               - '/nova'
768         fencing_config: {get_param: FencingConfig}
769         pcsd_password: {get_param: PcsdPassword}
770         rabbit_username: {get_param: RabbitUserName}
771         rabbit_password: {get_param: RabbitPassword}
772         rabbit_cookie: {get_param: RabbitCookie}
773         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
774         rabbit_client_port: {get_param: RabbitClientPort}
775         mongodb_no_journal: {get_param: MongoDbNoJournal}
776         ntp_servers:
777           str_replace:
778             template: '["server"]'
779             params:
780               server: {get_param: NtpServer}
781         control_virtual_interface: {get_param: ControlVirtualInterface}
782         public_virtual_interface: {get_param: PublicVirtualInterface}
783         swift_hash_suffix: {get_param: SwiftHashSuffix}
784         swift_password: {get_param: SwiftPassword}
785         swift_part_power: {get_param: SwiftPartPower}
786         swift_replicas: {get_param: SwiftReplicas}
787         swift_min_part_hours: {get_param: SwiftMinPartHours}
788         swift_mount_check: {get_param: SwiftMountCheck}
789         enable_package_install: {get_param: EnablePackageInstall}
790         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
791         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
792         cinder_iscsi_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
793         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
794         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
795         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
796         glance_api_servers:
797           list_join:
798             - ''
799             - - {get_param: GlanceProtocol}
800               - '://'
801               - {get_param: GlanceApiVirtualIP}
802               - ':'
803               - {get_param: GlancePort}
804         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
805         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
806         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
807         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
808         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
809         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
810         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
811         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
812         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
813         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
814         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
815         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
816         redis_vip: {get_param: RedisVirtualIP}
817         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
818         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
819         ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
820         ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
821         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
822
823   # Map heat metadata into hiera datafiles
824   ControllerConfig:
825     type: OS::Heat::StructuredConfig
826     properties:
827       group: os-apply-config
828       config:
829         hiera:
830           hierarchy:
831             - heat_config_%{::deploy_config_name}
832             - controller
833             - object
834             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
835             - ceph_cluster # provided by CephClusterConfig
836             - ceph
837             - bootstrap_node # provided by BootstrapNodeConfig
838             - all_nodes # provided by allNodesConfig
839             - vip_data # provided by vip-config
840             - '"%{::osfamily}"'
841             - common
842             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
843           datafiles:
844             common:
845               raw_data: {get_file: hieradata/common.yaml}
846             ceph:
847               raw_data: {get_file: hieradata/ceph.yaml}
848               mapped_data:
849                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
850                 ceph::profile::params::public_network: {get_input: ceph_public_network}
851                 ceph::mon::public_addr: {get_input: ceph_public_ip}
852             object:
853               raw_data: {get_file: hieradata/object.yaml}
854             controller:
855               raw_data: {get_file: hieradata/controller.yaml}
856               mapped_data: # data supplied directly to this deployment configuration, etc
857                 bootstack_nodeid: {get_input: bootstack_nodeid}
858
859                 # Pacemaker
860                 enable_fencing: {get_input: enable_fencing}
861                 hacluster_pwd: {get_input: pcsd_password}
862                 tripleo::fencing::config: {get_input: fencing_config}
863
864                 # Swift
865                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
866                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
867                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
868                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
869                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
870                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
871                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
872                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
873                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
874                 swift_mount_check: {get_input: swift_mount_check}
875
876                 # NOTE(dprince): build_ring support is currently not wired in.
877                 # See: https://review.openstack.org/#/c/109225/
878                 tripleo::ringbuilder::build_ring: True
879
880                 # Cinder
881                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
882                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
883                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
884                 cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
885                 cinder::database_connection: {get_input: cinder_dsn}
886                 cinder::api::keystone_password: {get_input: cinder_password}
887                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
888                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
889                 cinder::api::bind_host: {get_input: cinder_api_network}
890                 cinder::rabbit_userid: {get_input: rabbit_username}
891                 cinder::rabbit_password: {get_input: rabbit_password}
892                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
893                 cinder::rabbit_port: {get_input: rabbit_client_port}
894                 cinder::debug: {get_input: debug}
895                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
896                 cinder::glance::glance_api_servers: {get_input: glance_api_servers}
897                 cinder_backend_config: {get_input: CinderBackendConfig}
898
899                 # Glance
900                 glance::api::bind_port: {get_input: glance_port}
901                 glance::api::bind_host: {get_input: glance_api_network}
902                 glance::api::auth_uri: {get_input: keystone_auth_uri}
903                 glance::api::identity_uri: {get_input: keystone_identity_uri}
904                 glance::api::registry_host: {get_input: glance_registry_network}
905                 glance::api::keystone_password: {get_input: glance_password}
906                 glance::api::debug: {get_input: debug}
907                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
908                 glance_log_file: {get_input: glance_log_file}
909                 glance_log_file: {get_input: glance_log_file}
910                 glance::api::database_connection: {get_input: glance_dsn}
911                 glance::registry::keystone_password: {get_input: glance_password}
912                 glance::registry::database_connection: {get_input: glance_dsn}
913                 glance::registry::bind_host: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
914                 glance::registry::auth_uri: {get_input: keystone_auth_uri}
915                 glance::registry::identity_uri: {get_input: keystone_identity_uri}
916                 glance::registry::debug: {get_input: debug}
917                 glance::backend::swift::swift_store_auth_address: {get_input: keystone_auth_address}
918                 glance::backend::swift::swift_store_user: service:glance
919                 glance::backend::swift::swift_store_key: {get_input: glance_password}
920                 glance_backend: {get_input: glance_backend}
921
922                 # Heat
923                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
924                 heat::engine::heat_watch_server_url: {get_input: heat.watch_server_url}
925                 heat::engine::heat_metadata_server_url: {get_input: heat.metadata_server_url}
926                 heat::engine::heat_waitcondition_server_url: {get_input: heat.waitcondition_server_url}
927                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
928                 heat::rabbit_userid: {get_input: rabbit_username}
929                 heat::rabbit_password: {get_input: rabbit_password}
930                 heat::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
931                 heat::rabbit_port: {get_input: rabbit_client_port}
932                 heat::auth_uri: {get_input: keystone_auth_uri}
933                 heat::identity_uri: {get_input: keystone_identity_uri}
934                 heat::keystone_password: {get_input: heat_password}
935                 heat::api::bind_host: {get_input: heat_api_network}
936                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
937                 heat::api_cfn::bind_host: {get_input: heat_api_network}
938                 heat::database_connection: {get_input: heat_dsn}
939                 heat::instance_user: heat-admin
940                 heat::debug: {get_input: debug}
941
942                 # Keystone
943                 keystone::admin_token: {get_input: admin_token}
944                 keystone_ca_certificate: {get_input: keystone_ca_certificate}
945                 keystone_signing_key: {get_input: keystone_signing_key}
946                 keystone_signing_certificate: {get_input: keystone_signing_certificate}
947                 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
948                 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
949                 keystone::database_connection: {get_input: keystone_dsn}
950                 keystone::public_bind_host: {get_input: keystone_public_api_network}
951                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
952                 keystone::debug: {get_input: debug}
953                 # MongoDB
954                 mongodb::server::bind_ip: {get_input: mongo_db_network}
955                 mongodb::server::nojournal: {get_input: mongodb_no_journal}
956                 # MySQL
957                 admin_password: {get_input: admin_password}
958                 enable_galera: {get_input: enable_galera}
959                 enable_ceph_storage: {get_input: enable_ceph_storage}
960                 enable_swift_storage: {get_input: enable_swift_storage}
961                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
962                 mysql::server::root_password: {get_input: mysql_root_password}
963                 mysql_cluster_name: {get_input: mysql_cluster_name}
964                 mysql_bind_host: {get_input: mysql_network}
965
966                 # Neutron
967                 neutron::bind_host: {get_input: neutron_api_network}
968                 neutron::rabbit_password: {get_input: rabbit_password}
969                 neutron::rabbit_user: {get_input: rabbit_user}
970                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
971                 neutron::rabbit_port: {get_input: rabbit_client_port}
972                 neutron::debug: {get_input: debug}
973                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
974                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
975                 neutron::server::database_connection: {get_input: neutron_dsn}
976                 neutron::agents::l3::external_network_bridge: {get_input: neutron_external_network_bridge}
977                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
978                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
979                 neutron_flat_networks: {get_input: neutron_flat_networks}
980                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
981                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
982                 neutron_agent_mode: {get_input: neutron_agent_mode}
983                 neutron_router_distributed: {get_input: neutron_router_distributed}
984                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
985                 neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
986                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
987                 neutron::dhcp_agents_per_network: {get_input: neutron_dhcp_agents_per_network}
988                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
989                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
990                 neutron_public_interface: {get_input: neutron_public_interface}
991                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
992                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
993                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
994                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
995                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
996                 neutron::server::auth_password: {get_input: neutron_password}
997                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
998                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
999                 neutron_dsn: {get_input: neutron_dsn}
1000                 neutron::agents::metadata::auth_url: {get_input: keystone_identity_uri}
1001
1002                 # Ceilometer
1003                 ceilometer_backend: {get_input: ceilometer_backend}
1004                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
1005                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
1006                 ceilometer::rabbit_userid: {get_input: rabbit_username}
1007                 ceilometer::rabbit_password: {get_input: rabbit_password}
1008                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1009                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
1010                 ceilometer::debug: {get_input: debug}
1011                 ceilometer::api::host: {get_input: ceilometer_api_network}
1012                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
1013                 ceilometer::api::keystone_auth_uri: {get_input: keystone_auth_uri}
1014                 ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri}
1015                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
1016                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_address}
1017                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
1018                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
1019                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
1020
1021                 # Nova
1022                 nova::rabbit_userid: {get_input: rabbit_username}
1023                 nova::rabbit_password: {get_input: rabbit_password}
1024                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1025                 nova::rabbit_port: {get_input: rabbit_client_port}
1026                 nova::debug: {get_input: debug}
1027                 nova::api::auth_uri: {get_input: keystone_auth_uri}
1028                 nova::api::identity_uri: {get_input: keystone_identity_uri}
1029                 nova::api::api_bind_address: {get_input: nova_api_network}
1030                 nova::api::metadata_listen: {get_input: nova_metadata_network}
1031                 nova::api::admin_password: {get_input: nova_password}
1032                 nova::database_connection: {get_input: nova_dsn}
1033                 nova::glance_api_servers: {get_input: glance_api_servers}
1034                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1035                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
1036                 nova::network::neutron::neutron_url: {get_input: neutron_url}
1037                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
1038                 nova::vncproxy::host: {get_input: nova_api_network}
1039
1040                 # Horizon
1041                 apache::ip: {get_input: horizon_network}
1042                 horizon::django_debug: {get_input: debug}
1043                 horizon::secret_key: {get_input: horizon_secret}
1044                 horizon::bind_address: {get_input: horizon_network}
1045                 horizon::keystone_url: {get_input: keystone_auth_uri}
1046
1047                 # Rabbit
1048                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
1049                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
1050                 # Redis
1051                 redis::bind: {get_input: redis_network}
1052                 redis_vip: {get_input: redis_vip}
1053                 # Misc
1054                 memcached::listen_ip: {get_input: memcached_network}
1055                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
1056                 ntp::servers: {get_input: ntp_servers}
1057                 control_virtual_interface: {get_input: control_virtual_interface}
1058                 public_virtual_interface: {get_input: public_virtual_interface}
1059                 tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
1060                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
1061                 enable_package_install: {get_input: enable_package_install}
1062
1063   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
1064   ControllerExtraConfigPre:
1065     depends_on: ControllerDeployment
1066     type: OS::TripleO::ControllerExtraConfigPre
1067     properties:
1068         server: {get_resource: Controller}
1069
1070   UpdateConfig:
1071     type: OS::TripleO::Tasks::PackageUpdate
1072
1073   UpdateDeployment:
1074     type: OS::Heat::SoftwareDeployment
1075     properties:
1076       config: {get_resource: UpdateConfig}
1077       server: {get_resource: Controller}
1078       input_values:
1079         update_identifier:
1080           get_param: UpdateIdentifier
1081
1082 outputs:
1083   ip_address:
1084     description: IP address of the server in the ctlplane network
1085     value: {get_attr: [Controller, networks, ctlplane, 0]}
1086   external_ip_address:
1087     description: IP address of the server in the external network
1088     value: {get_attr: [ExternalPort, ip_address]}
1089   internal_api_ip_address:
1090     description: IP address of the server in the internal_api network
1091     value: {get_attr: [InternalApiPort, ip_address]}
1092   storage_ip_address:
1093     description: IP address of the server in the storage network
1094     value: {get_attr: [StoragePort, ip_address]}
1095   storage_mgmt_ip_address:
1096     description: IP address of the server in the storage_mgmt network
1097     value: {get_attr: [StorageMgmtPort, ip_address]}
1098   tenant_ip_address:
1099     description: IP address of the server in the tenant network
1100     value: {get_attr: [TenantPort, ip_address]}
1101   hostname:
1102     description: Hostname of the server
1103     value: {get_attr: [Controller, name]}
1104   corosync_node:
1105     description: >
1106       Node object in the format {ip: ..., name: ...} format that the corosync
1107       element expects
1108     value:
1109       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1110       name: {get_attr: [Controller, name]}
1111   hosts_entry:
1112     description: >
1113       Server's IP address and hostname in the /etc/hosts format
1114     value:
1115       str_replace:
1116         template: IP HOST.localdomain HOST CLOUDNAME
1117         params:
1118           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
1119           HOST: {get_attr: [Controller, name]}
1120           CLOUDNAME: {get_param: CloudName}
1121   nova_server_resource:
1122     description: Heat resource handle for the Nova compute server
1123     value:
1124       {get_resource: Controller}
1125   swift_device:
1126     description: Swift device formatted for swift-ring-builder
1127     value:
1128       str_replace:
1129         template: 'r1z1-IP:%PORT%/d1'
1130         params:
1131           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1132   swift_proxy_memcache:
1133     description: Swift proxy-memcache value
1134     value:
1135       str_replace:
1136         template: "IP:11211"
1137         params:
1138           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1139   config_identifier:
1140     description: identifier which changes if the controller configuration may need re-applying
1141     value:
1142       list_join:
1143       - ','
1144       - - {get_attr: [ControllerDeployment, deploy_stdout]}
1145         - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}