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