loadbalancer: update hiera parameters for HAproxy/keepalived split
[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   NeutronApiVirtualIP:
600     type: string
601     default: ''
602   EnablePackageInstall:
603     default: 'false'
604     description: Set to true to enable package installation via Puppet
605     type: boolean
606   ServiceNetMap:
607     default: {}
608     description: Mapping of service_name -> network name. Typically set
609                  via parameter_defaults in the resource registry.
610     type: json
611   EndpointMap:
612     default: {}
613     description: Mapping of service endpoint -> protocol. Typically set
614                  via parameter_defaults in the resource registry.
615     type: json
616   UpdateIdentifier:
617     default: ''
618     type: string
619     description: >
620       Setting to a previously unused value during stack-update will trigger
621       package update on all nodes
622   Hostname:
623     type: string
624     default: '' # Defaults to Heat created hostname
625   HostnameMap:
626     type: json
627     default: {}
628     description: Optional mapping to override hostnames
629   NetworkDeploymentActions:
630     type: comma_delimited_list
631     description: >
632       Heat action when to apply network configuration changes
633     default: ['CREATE']
634   NodeIndex:
635     type: number
636     default: 0
637   SoftwareConfigTransport:
638     default: POLL_SERVER_CFN
639     description: |
640       How the server should receive the metadata required for software configuration.
641     type: string
642     constraints:
643     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
644   CloudDomain:
645     default: ''
646     type: string
647     description: >
648       The DNS domain used for the hosts. This should match the dhcp_domain
649       configured in the Undercloud neutron. Defaults to localdomain.
650   ServerMetadata:
651     default: {}
652     description: >
653       Extra properties or metadata passed to Nova for the created nodes in
654       the overcloud. It's accessible via the Nova metadata API.
655     type: json
656   SchedulerHints:
657     type: json
658     description: Optional scheduler hints to pass to nova
659     default: {}
660   ServiceConfigSettings:
661     type: json
662     default: {}
663
664 parameter_groups:
665 - label: deprecated
666   description: Do not use deprecated params, they will be removed.
667   parameters:
668   - controllerExtraConfig
669
670 resources:
671
672   Controller:
673     type: OS::Nova::Server
674     properties:
675       image: {get_param: Image}
676       image_update_policy: {get_param: ImageUpdatePolicy}
677       flavor: {get_param: Flavor}
678       key_name: {get_param: KeyName}
679       networks:
680         - network: ctlplane
681       user_data_format: SOFTWARE_CONFIG
682       user_data: {get_resource: UserData}
683       name:
684         str_replace:
685             template: {get_param: Hostname}
686             params: {get_param: HostnameMap}
687       software_config_transport: {get_param: SoftwareConfigTransport}
688       metadata: {get_param: ServerMetadata}
689       scheduler_hints: {get_param: SchedulerHints}
690
691   # Combine the NodeAdminUserData and NodeUserData mime archives
692   UserData:
693     type: OS::Heat::MultipartMime
694     properties:
695       parts:
696       - config: {get_resource: NodeAdminUserData}
697         type: multipart
698       - config: {get_resource: NodeUserData}
699         type: multipart
700
701   # Creates the "heat-admin" user if configured via the environment
702   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
703   NodeAdminUserData:
704     type: OS::TripleO::NodeAdminUserData
705
706   # For optional operator additional userdata
707   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
708   NodeUserData:
709     type: OS::TripleO::NodeUserData
710
711   ExternalPort:
712     type: OS::TripleO::Controller::Ports::ExternalPort
713     properties:
714       IPPool: {get_param: ControllerIPs}
715       NodeIndex: {get_param: NodeIndex}
716       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
717
718   InternalApiPort:
719     type: OS::TripleO::Controller::Ports::InternalApiPort
720     properties:
721       IPPool: {get_param: ControllerIPs}
722       NodeIndex: {get_param: NodeIndex}
723       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
724
725   StoragePort:
726     type: OS::TripleO::Controller::Ports::StoragePort
727     properties:
728       IPPool: {get_param: ControllerIPs}
729       NodeIndex: {get_param: NodeIndex}
730       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
731
732   StorageMgmtPort:
733     type: OS::TripleO::Controller::Ports::StorageMgmtPort
734     properties:
735       IPPool: {get_param: ControllerIPs}
736       NodeIndex: {get_param: NodeIndex}
737       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
738
739   TenantPort:
740     type: OS::TripleO::Controller::Ports::TenantPort
741     properties:
742       IPPool: {get_param: ControllerIPs}
743       NodeIndex: {get_param: NodeIndex}
744       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
745
746   ManagementPort:
747     type: OS::TripleO::Controller::Ports::ManagementPort
748     properties:
749       IPPool: {get_param: ControllerIPs}
750       NodeIndex: {get_param: NodeIndex}
751       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
752
753   NetIpMap:
754     type: OS::TripleO::Network::Ports::NetIpMap
755     properties:
756       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
757       ExternalIp: {get_attr: [ExternalPort, ip_address]}
758       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
759       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
760       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
761       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
762       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
763       StorageIp: {get_attr: [StoragePort, ip_address]}
764       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
765       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
766       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
767       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
768       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
769       TenantIp: {get_attr: [TenantPort, ip_address]}
770       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
771       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
772       ManagementIp: {get_attr: [ManagementPort, ip_address]}
773       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
774       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
775
776   NetworkConfig:
777     type: OS::TripleO::Controller::Net::SoftwareConfig
778     properties:
779       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
780       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
781       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
782       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
783       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
784       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
785       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
786
787   NetworkDeployment:
788     type: OS::TripleO::SoftwareDeployment
789     properties:
790       name: NetworkDeployment
791       config: {get_resource: NetworkConfig}
792       server: {get_resource: Controller}
793       actions: {get_param: NetworkDeploymentActions}
794       input_values:
795         bridge_name: br-ex
796         interface_name: {get_param: NeutronPublicInterface}
797
798   # Resource for site-specific injection of root certificate
799   NodeTLSCAData:
800     depends_on: NetworkDeployment
801     type: OS::TripleO::NodeTLSCAData
802     properties:
803       server: {get_resource: Controller}
804
805   # Resource for site-specific passing of private keys/certificates
806   NodeTLSData:
807     depends_on: NodeTLSCAData
808     type: OS::TripleO::NodeTLSData
809     properties:
810       server: {get_resource: Controller}
811       NodeIndex: {get_param: NodeIndex}
812
813
814   ControllerDeployment:
815     type: OS::TripleO::SoftwareDeployment
816     depends_on: NetworkDeployment
817     properties:
818       name: ControllerDeployment
819       config: {get_resource: ControllerConfig}
820       server: {get_resource: Controller}
821       input_values:
822         bootstack_nodeid: {get_attr: [Controller, name]}
823         ceilometer_workers: {get_param: CeilometerWorkers}
824         cinder_workers: {get_param: CinderWorkers}
825         nova_workers: {get_param: NovaWorkers}
826         neutron_workers: {get_param: NeutronWorkers}
827         swift_workers: {get_param: SwiftWorkers}
828         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
829         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
830         haproxy_log_address: {get_param: HAProxySyslogAddress}
831         haproxy_stats_password: {get_param: HAProxyStatsPassword}
832         haproxy_stats_user: {get_param: HAProxyStatsUser}
833         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
834         horizon_allowed_hosts: {get_param: HorizonAllowedHosts}
835         horizon_secret: {get_param: HorizonSecret}
836         admin_password: {get_param: AdminPassword}
837         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
838         debug: {get_param: Debug}
839         cinder_enable_db_purge: {get_param: CinderEnableDBPurge}
840         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
841         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
842         cinder_nfs_mount_options: {get_param: CinderNfsMountOptions}
843         cinder_nfs_servers:
844           str_replace:
845             template: SERVERS
846             params:
847               SERVERS: {get_param: CinderNfsServers}
848         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
849         cinder_password: {get_param: CinderPassword}
850         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
851         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
852         cinder_backend_config: {get_param: CinderBackendConfig}
853         cinder_dsn:
854           list_join:
855             - ''
856             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
857               - '://cinder:'
858               - {get_param: CinderPassword}
859               - '@'
860               - {get_param: [EndpointMap, MysqlInternal, host]}
861               - '/cinder'
862         cinder_public_url: {get_param: [EndpointMap, CinderPublic, uri]}
863         cinder_internal_url: {get_param: [EndpointMap, CinderInternal, uri]}
864         cinder_admin_url: {get_param: [EndpointMap, CinderAdmin, uri]}
865         cinder_public_url_v2: {get_param: [EndpointMap, CinderV2Public, uri]}
866         cinder_internal_url_v2: {get_param: [EndpointMap, CinderV2Internal, uri]}
867         cinder_admin_url_v2: {get_param: [EndpointMap, CinderV2Admin, uri]}
868         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
869         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
870         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
871         enable_fencing: {get_param: EnableFencing}
872         enable_galera: {get_param: EnableGalera}
873         enable_load_balancer: {get_param: EnableLoadBalancer}
874         enable_ceph_storage: {get_param: EnableCephStorage}
875         enable_swift_storage: {get_param: EnableSwiftStorage}
876         manage_firewall: {get_param: ManageFirewall}
877         purge_firewall_rules: {get_param: PurgeFirewallRules}
878         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
879         mysql_max_connections: {get_param: MysqlMaxConnections}
880         mysql_root_password: {get_param: MysqlRootPassword}
881         mysql_clustercheck_password: {get_param: MysqlClustercheckPassword}
882         mysql_cluster_name:
883           str_replace:
884             template: tripleo-CLUSTER
885             params:
886               CLUSTER: {get_param: MysqlClusterUniquePart}
887         neutron_flat_networks:
888           str_replace:
889             template: NETWORKS
890             params:
891               NETWORKS: {get_param: NeutronFlatNetworks}
892         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
893         neutron_agent_mode: {get_param: NeutronAgentMode}
894         neutron_router_distributed: {get_param: NeutronDVR}
895         neutron_core_plugin: {get_param: NeutronCorePlugin}
896         neutron_service_plugins:
897           str_replace:
898             template: PLUGINS
899             params:
900               PLUGINS: {get_param: NeutronServicePlugins}
901         neutron_type_drivers:
902           str_replace:
903             template: DRIVERS
904             params:
905               DRIVERS: {get_param: NeutronTypeDrivers}
906         neutron_enable_ovs_agent: {get_param: NeutronEnableOVSAgent}
907         neutron_mechanism_drivers:
908           str_replace:
909             template: MECHANISMS
910             params:
911               MECHANISMS: {get_param: NeutronMechanismDrivers}
912         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
913         neutron_l3_ha: {get_param: NeutronL3HA}
914         neutron_network_vlan_ranges:
915           str_replace:
916             template: RANGES
917             params:
918               RANGES: {get_param: NeutronNetworkVLANRanges}
919         neutron_bridge_mappings:
920           str_replace:
921             template: MAPPINGS
922             params:
923               MAPPINGS: {get_param: NeutronBridgeMappings}
924         neutron_public_interface: {get_param: NeutronPublicInterface}
925         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
926         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
927         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
928         neutron_tunnel_id_ranges:
929           str_replace:
930             template: RANGES
931             params:
932               RANGES: {get_param: NeutronTunnelIdRanges}
933         neutron_vni_ranges:
934           str_replace:
935             template: RANGES
936             params:
937               RANGES: {get_param: NeutronVniRanges}
938         neutron_tenant_network_types:
939           str_replace:
940             template: TYPES
941             params:
942               TYPES: {get_param: NeutronNetworkType}
943         neutron_tunnel_types:
944           str_replace:
945             template: TYPES
946             params:
947               TYPES: {get_param: NeutronTunnelTypes}
948         neutron_plugin_extensions:
949           str_replace:
950             template: PLUGIN_EXTENSIONS
951             params:
952               PLUGIN_EXTENSIONS: {get_param: NeutronPluginExtensions}
953         neutron_agent_extensions:
954           str_replace:
955             template: AGENT_EXTENSIONS
956             params:
957               AGENT_EXTENSIONS: {get_param: NeutronAgentExtensions}
958         neutron_password: {get_param: NeutronPassword}
959         neutron_tenant_mtu: {get_param: NeutronTenantMtu}
960         neutron_dsn:
961           list_join:
962             - ''
963             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
964               - '://neutron:'
965               - {get_param: NeutronPassword}
966               - '@'
967               - {get_param: [EndpointMap, MysqlInternal, host]}
968               - '/ovs_neutron?charset=utf8'
969         neutron_internal_url: { get_param: [ EndpointMap, NeutronInternal, uri ] }
970         neutron_public_url: { get_param: [ EndpointMap, NeutronPublic, uri ] }
971         neutron_admin_url: { get_param: [ EndpointMap, NeutronAdmin, uri ] }
972         neutron_auth_url: { get_param: [ EndpointMap, KeystoneV3Admin, uri ] }
973         nova_internal_url: { get_param: [ EndpointMap, NovaInternal, uri ] }
974         ceilometer_backend: {get_param: CeilometerBackend}
975         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
976         ceilometer_password: {get_param: CeilometerPassword}
977         ceilometer_store_events: {get_param: CeilometerStoreEvents}
978         aodh_password: {get_param: AodhPassword}
979         aodh_internal_url: { get_param: [ EndpointMap, AodhInternal, uri ] }
980         aodh_public_url: { get_param: [ EndpointMap, AodhPublic, uri ] }
981         aodh_admin_url: { get_param: [ EndpointMap, AodhAdmin, uri ] }
982         ceilometer_meter_dispatcher: {get_param: CeilometerMeterDispatcher}
983         gnocchi_password: {get_param: GnocchiPassword}
984         gnocchi_backend: {get_param: GnocchiBackend}
985         gnocchi_indexer_backend: {get_param: GnocchiIndexerBackend}
986         ceilometer_coordination_url:
987           list_join:
988             - ''
989             - - 'redis://:'
990               - {get_param: RedisPassword}
991               - '@'
992               - {get_param: RedisVirtualIPUri}
993               - ':6379/'
994         ceilometer_dsn:
995           list_join:
996             - ''
997             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
998               - '://ceilometer:'
999               - {get_param: CeilometerPassword}
1000               - '@'
1001               - {get_param: [EndpointMap, MysqlInternal, host]}
1002               - '/ceilometer'
1003         gnocchi_dsn:
1004           list_join:
1005             - ''
1006             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
1007               - '://gnocchi:'
1008               - {get_param: GnocchiPassword}
1009               - '@'
1010               - {get_param: [EndpointMap, MysqlInternal, host]}
1011               - '/gnocchi'
1012         gnocchi_internal_url: {get_param: [EndpointMap, GnocchiInternal, uri]}
1013         gnocchi_public_url: { get_param: [ EndpointMap, GnocchiPublic, uri ] }
1014         gnocchi_admin_url: { get_param: [ EndpointMap, GnocchiAdmin, uri ] }
1015         ceilometer_public_url: {get_param: [EndpointMap, CeilometerPublic, uri]}
1016         ceilometer_internal_url: {get_param: [EndpointMap, CeilometerInternal, uri]}
1017         ceilometer_admin_url: {get_param: [EndpointMap, CeilometerAdmin, uri]}
1018         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
1019         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
1020         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
1021         nova_ipv6: {get_param: NovaIPv6}
1022         corosync_ipv6: {get_param: CorosyncIPv6}
1023         memcached_ipv6: {get_param: MemcachedIPv6}
1024         nova_password: {get_param: NovaPassword}
1025         nova_dsn:
1026           list_join:
1027             - ''
1028             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
1029               - '://nova:'
1030               - {get_param: NovaPassword}
1031               - '@'
1032               - {get_param: [EndpointMap, MysqlInternal, host]}
1033               - '/nova'
1034         nova_api_dsn:
1035           list_join:
1036             - ''
1037             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
1038               - '://nova_api:'
1039               - {get_param: NovaPassword}
1040               - '@'
1041               - {get_param: [EndpointMap, MysqlInternal, host]}
1042               - '/nova_api'
1043         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
1044         instance_name_template: {get_param: InstanceNameTemplate}
1045         nova_public_url: {get_param: [EndpointMap, NovaPublic, uri]}
1046         nova_internal_url: {get_param: [EndpointMap, NovaInternal, uri]}
1047         nova_admin_url: {get_param: [EndpointMap, NovaAdmin, uri]}
1048         fencing_config: {get_param: FencingConfig}
1049         pcsd_password: {get_param: PcsdPassword}
1050         rabbit_username: {get_param: RabbitUserName}
1051         rabbit_password: {get_param: RabbitPassword}
1052         rabbit_cookie: {get_param: RabbitCookie}
1053         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
1054         rabbit_client_port: {get_param: RabbitClientPort}
1055         mongodb_no_journal: {get_param: MongoDbNoJournal}
1056         mongodb_ipv6: {get_param: MongoDbIPv6}
1057         ntp_servers: {get_param: NtpServer}
1058         timezone: {get_param: TimeZone}
1059         control_virtual_interface: {get_param: ControlVirtualInterface}
1060         public_virtual_interface: {get_param: PublicVirtualInterface}
1061         swift_hash_suffix: {get_param: SwiftHashSuffix}
1062         swift_password: {get_param: SwiftPassword}
1063         swift_part_power: {get_param: SwiftPartPower}
1064         swift_ring_build: {get_param: SwiftRingBuild}
1065         swift_replicas: {get_param: SwiftReplicas}
1066         swift_min_part_hours: {get_param: SwiftMinPartHours}
1067         swift_mount_check: {get_param: SwiftMountCheck}
1068         swift_public_url: {get_param: [EndpointMap, SwiftPublic, uri]}
1069         swift_internal_url: {get_param: [EndpointMap, SwiftInternal, uri]}
1070         swift_admin_url: {get_param: [EndpointMap, SwiftAdmin, uri]}
1071         swift_public_url_s3: {get_param: [EndpointMap, SwiftS3Public, uri]}
1072         swift_internal_url_s3: {get_param: [EndpointMap, SwiftS3Internal, uri]}
1073         swift_admin_url_s3: {get_param: [EndpointMap, SwiftS3Admin, uri]}
1074         enable_package_install: {get_param: EnablePackageInstall}
1075         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
1076         sahara_password: {get_param: SaharaPassword}
1077         sahara_public_url: {get_param: [EndpointMap, SaharaPublic, uri]}
1078         sahara_internal_url: {get_param: [EndpointMap, SaharaInternal, uri]}
1079         sahara_admin_url: {get_param: [EndpointMap, SaharaAdmin, uri]}
1080         sahara_dsn:
1081           list_join:
1082             - ''
1083             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
1084               - '://sahara:'
1085               - {get_param: SaharaPassword}
1086               - '@'
1087               - {get_param: [EndpointMap, MysqlInternal, host]}
1088               - '/sahara'
1089         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1090         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1091         cinder_iscsi_network:
1092           str_replace:
1093             template: "'IP'"
1094             params:
1095               IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
1096         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1097         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1098         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1099         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
1100         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1101         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1102         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1103         keystone_region: {get_param: KeystoneRegion}
1104         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1105         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1106         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
1107         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1108         aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1109         gnocchi_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1110         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1111         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1112         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1113         horizon_subnet:
1114           str_replace:
1115             template: "['SUBNET']"
1116             params:
1117               SUBNET: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1118         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1119         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1120         redis_password: {get_param: RedisPassword}
1121         redis_vip: {get_param: RedisVirtualIP}
1122         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1123         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1124         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1125         mysql_virtual_ip: {get_param: MysqlVirtualIP}
1126         ceph_cluster_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
1127         ceph_public_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1128         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1129
1130   # Map heat metadata into hiera datafiles
1131   ControllerConfig:
1132     type: OS::Heat::StructuredConfig
1133     properties:
1134       group: os-apply-config
1135       config:
1136         hiera:
1137           hierarchy:
1138             - '"%{::uuid}"'
1139             - heat_config_%{::deploy_config_name}
1140             - controller_extraconfig
1141             - extraconfig
1142             - service_configs
1143             - controller
1144             - database
1145             - object
1146             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
1147             - ceph_cluster # provided by CephClusterConfig
1148             - ceph
1149             - bootstrap_node # provided by BootstrapNodeConfig
1150             - all_nodes # provided by allNodesConfig
1151             - vip_data # provided by vip-config
1152             - '"%{::osfamily}"'
1153             - common
1154             - network
1155             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
1156             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
1157             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
1158             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
1159             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
1160             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
1161             - neutron_nuage_data # Optionally provided by ControllerExtraConfigPre
1162             - midonet_data #Optionally provided by AllNodesExtraConfig
1163             - neutron_opencontrail_data # Optionally provided by ControllerExtraConfigPre
1164             - neutron_plumgrid_data # Optionally provided by ControllerExtraConfigPre
1165           merge_behavior: deeper
1166           datafiles:
1167             service_configs:
1168               mapped_data: {get_param: ServiceConfigSettings}
1169             controller_extraconfig:
1170               mapped_data:
1171                 map_merge:
1172                   - {get_param: controllerExtraConfig}
1173                   - {get_param: ControllerExtraConfig}
1174             extraconfig:
1175               mapped_data: {get_param: ExtraConfig}
1176             common:
1177               raw_data: {get_file: hieradata/common.yaml}
1178             network:
1179               mapped_data:
1180                 net_ip_map: {get_attr: [NetIpMap, net_ip_map]}
1181                 net_ip_subnet_map: {get_attr: [NetIpMap, net_ip_subnet_map]}
1182                 net_ip_uri_map: {get_attr: [NetIpMap, net_ip_uri_map]}
1183             ceph:
1184               raw_data: {get_file: hieradata/ceph.yaml}
1185               mapped_data:
1186                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
1187                 ceph::profile::params::public_network: {get_input: ceph_public_network}
1188                 ceph::profile::params::public_addr: {get_input: ceph_public_ip}
1189             database:
1190               raw_data: {get_file: hieradata/database.yaml}
1191             object:
1192               raw_data: {get_file: hieradata/object.yaml}
1193             controller:
1194               raw_data: {get_file: hieradata/controller.yaml}
1195               mapped_data: # data supplied directly to this deployment configuration, etc
1196                 bootstack_nodeid: {get_input: bootstack_nodeid}
1197
1198                 # Pacemaker
1199                 enable_fencing: {get_input: enable_fencing}
1200                 enable_load_balancer: {get_input: enable_load_balancer}
1201                 hacluster_pwd: {get_input: pcsd_password}
1202                 corosync_ipv6: {get_input: corosync_ipv6}
1203                 tripleo::fencing::config: {get_input: fencing_config}
1204
1205                 # Swift
1206                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
1207                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
1208                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
1209                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
1210                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
1211                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
1212                 swift::proxy::workers: {get_input: swift_workers}
1213                 tripleo::ringbuilder::build_ring: { get_input: swift_ring_build }
1214                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
1215                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
1216                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
1217                 swift_mount_check: {get_input: swift_mount_check}
1218                 swift::keystone::auth::public_url: {get_input: swift_public_url }
1219                 swift::keystone::auth::internal_url: {get_input: swift_internal_url }
1220                 swift::keystone::auth::admin_url: {get_input: swift_admin_url }
1221                 swift::keystone::auth::public_url_s3: {get_input: swift_public_url_v3 }
1222                 swift::keystone::auth::internal_url_s3: {get_input: swift_internal_url_v3 }
1223                 swift::keystone::auth::admin_url_s3: {get_input: swift_admin_url_v3 }
1224                 swift::keystone::auth::password: {get_input: swift_password }
1225                 swift::keystone::auth::region: {get_input: keystone_region}
1226
1227                 # Cinder
1228                 cinder_enable_db_purge: {get_input: cinder_enable_db_purge}
1229                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
1230                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
1231                 cinder_nfs_mount_options: {get_input: cinder_nfs_mount_options}
1232                 cinder_nfs_servers: {get_input: cinder_nfs_servers}
1233                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
1234                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
1235                 cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
1236                 cinder::database_connection: {get_input: cinder_dsn}
1237                 cinder::api::keystone_password: {get_input: cinder_password}
1238                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
1239                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
1240                 cinder::api::bind_host: {get_input: cinder_api_network}
1241                 cinder::rabbit_userid: {get_input: rabbit_username}
1242                 cinder::rabbit_password: {get_input: rabbit_password}
1243                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1244                 cinder::rabbit_port: {get_input: rabbit_client_port}
1245                 cinder::debug: {get_input: debug}
1246                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
1247                 cinder::glance::glance_api_servers: {get_input: glance_api_servers}
1248                 cinder_backend_config: {get_input: CinderBackendConfig}
1249                 cinder::db::mysql::password: {get_input: cinder_password}
1250                 cinder::keystone::auth::public_url: {get_input: cinder_public_url }
1251                 cinder::keystone::auth::internal_url: {get_input: cinder_internal_url }
1252                 cinder::keystone::auth::admin_url: {get_input: cinder_admin_url }
1253                 cinder::keystone::auth::public_url_v2: {get_input: cinder_public_url_v2 }
1254                 cinder::keystone::auth::internal_url_v2: {get_input: cinder_internal_url_v2 }
1255                 cinder::keystone::auth::admin_url_v2: {get_input: cinder_admin_url_v2 }
1256                 cinder::keystone::auth::password: {get_input: cinder_password }
1257                 cinder::keystone::auth::region: {get_input: keystone_region}
1258
1259                 # Glance
1260                 glance::api::bind_host: {get_input: glance_api_network}
1261                 glance::registry::bind_host: {get_input: glance_registry_network}
1262                 glance::keystone::auth::region: {get_input: keystone_region}
1263
1264                 # Heat
1265                 heat::api::bind_host: {get_input: heat_api_network}
1266                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
1267                 heat::api_cfn::bind_host: {get_input: heat_api_network}
1268                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
1269
1270                 # Keystone
1271                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
1272                 keystone::public_bind_host: {get_input: keystone_public_api_network}
1273                 keystone::wsgi::apache::bind_host: {get_input: keystone_public_api_network}
1274                 keystone::wsgi::apache::admin_bind_host: {get_input: keystone_admin_api_network}
1275                 # MongoDB
1276                 mongodb::server::bind_ip: {get_input: mongo_db_network}
1277                 mongodb::server::nojournal: {get_input: mongodb_no_journal}
1278                 mongodb::server::ipv6: {get_input: mongodb_ipv6}
1279                 # MySQL
1280                 admin_password: {get_input: admin_password}
1281                 enable_galera: {get_input: enable_galera}
1282                 enable_ceph_storage: {get_input: enable_ceph_storage}
1283                 enable_swift_storage: {get_input: enable_swift_storage}
1284                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
1285                 mysql_max_connections: {get_input: mysql_max_connections}
1286                 mysql::server::root_password: {get_input: mysql_root_password}
1287                 mysql_clustercheck_password: {get_input: mysql_clustercheck_password}
1288                 mysql_cluster_name: {get_input: mysql_cluster_name}
1289                 mysql_bind_host: {get_input: mysql_network}
1290                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
1291
1292                 # Neutron
1293                 neutron::bind_host: {get_input: neutron_api_network}
1294                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
1295                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
1296                 neutron::server::database_connection: {get_input: neutron_dsn}
1297                 neutron::server::api_workers: {get_input: neutron_workers}
1298                 neutron::network_device_mtu: {get_input: neutron_tenant_mtu}
1299                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
1300                 neutron::agents::ml2::ovs::l2_population: {get_input: neutron_enable_l2pop}
1301                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
1302                 neutron::plugins::ml2::flat_networks: {get_input: neutron_flat_networks}
1303                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
1304                 neutron_agent_mode: {get_input: neutron_agent_mode}
1305                 neutron_router_distributed: {get_input: neutron_router_distributed}
1306                 neutron::core_plugin: {get_input: neutron_core_plugin}
1307                 neutron::service_plugins: {get_input: neutron_service_plugins}
1308                 neutron::enable_ovs_agent: {get_input: neutron_enable_ovs_agent}
1309                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
1310                 neutron::plugins::ml2::mechanism_drivers: {get_input: neutron_mechanism_drivers}
1311                 neutron::plugins::ml2::extension_drivers: {get_input: neutron_plugin_extensions}
1312                 neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
1313                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
1314                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
1315                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
1316                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
1317                 neutron::agents::ml2::ovs::bridge_mappings: {get_input: neutron_bridge_mappings}
1318                 neutron_public_interface: {get_input: neutron_public_interface}
1319                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
1320                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
1321                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
1322                 neutron::plugins::ml2::tenant_network_types: {get_input: neutron_tenant_network_types}
1323                 neutron::agents::ml2::ovs::tunnel_types: {get_input: neutron_tunnel_types}
1324                 neutron::agents::ml2::ovs::extensions: {get_input: neutron_agent_extensions}
1325                 neutron::server::auth_password: {get_input: neutron_password}
1326                 neutron_dsn: {get_input: neutron_dsn}
1327                 neutron::db::mysql::password: {get_input: neutron_password}
1328                 neutron::keystone::auth::public_url: {get_input: neutron_public_url }
1329                 neutron::keystone::auth::internal_url: {get_input: neutron_internal_url }
1330                 neutron::keystone::auth::admin_url: {get_input: neutron_admin_url }
1331                 neutron::keystone::auth::password: {get_input: neutron_password }
1332                 neutron::keystone::auth::region: {get_input: keystone_region}
1333                 neutron::server::notifications::nova_url: {get_input: nova_internal_url}
1334                 neutron::server::notifications::auth_url: {get_input: neutron_auth_url}
1335                 neutron::server::notifications::tenant_name: 'service'
1336                 neutron::server::notifications::project_name: 'service'
1337                 neutron::server::notifications::password: {get_input: nova_password}
1338
1339                 # Ceilometer
1340                 ceilometer_backend: {get_input: ceilometer_backend}
1341                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
1342                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
1343                 ceilometer::rabbit_userid: {get_input: rabbit_username}
1344                 ceilometer::rabbit_password: {get_input: rabbit_password}
1345                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1346                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
1347                 ceilometer::debug: {get_input: debug}
1348                 ceilometer::api::host: {get_input: ceilometer_api_network}
1349                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
1350                 ceilometer::api::keystone_auth_uri: {get_input: keystone_auth_uri}
1351                 ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri}
1352                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
1353                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_uri}
1354                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
1355                 ceilometer::agent::notification::store_events: {get_input: ceilometer_store_events}
1356                 ceilometer::db::mysql::password: {get_input: ceilometer_password}
1357                 ceilometer::collector::meter_dispatcher: {get_input: ceilometer_meter_dispatcher}
1358                 ceilometer::dispatcher::gnocchi::url: {get_input: gnocchi_internal_url }
1359                 ceilometer::dispatcher::gnocchi::filter_project: 'service'
1360                 ceilometer::dispatcher::gnocchi::archive_policy: 'low'
1361                 ceilometer::dispatcher::gnocchi::resources_definition_file: 'gnocchi_resources.yaml'
1362                 ceilometer::keystone::auth::public_url: {get_input: ceilometer_public_url }
1363                 ceilometer::keystone::auth::internal_url: {get_input: ceilometer_internal_url }
1364                 ceilometer::keystone::auth::admin_url: {get_input: ceilometer_admin_url }
1365                 ceilometer::keystone::auth::password: {get_input: ceilometer_password }
1366                 ceilometer::keystone::auth::region: {get_input: keystone_region}
1367                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
1368                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
1369
1370                 # Aodh
1371                 aodh::rabbit_userid: {get_input: rabbit_username}
1372                 aodh::rabbit_password: {get_input: rabbit_password}
1373                 aodh::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1374                 aodh::rabbit_port: {get_input: rabbit_client_port}
1375                 aodh::debug: {get_input: debug}
1376                 aodh::wsgi::apache::ssl: false
1377                 aodh::wsgi::apache::bind_host: {get_input: aodh_api_network}
1378                 aodh::api::service_name: 'httpd'
1379                 aodh::api::host: {get_input: aodh_api_network}
1380                 aodh::api::keystone_password: {get_input: aodh_password}
1381                 aodh::api::keystone_auth_uri: {get_input: keystone_auth_uri}
1382                 aodh::api::keystone_identity_uri: {get_input: keystone_identity_uri}
1383                 aodh::auth::auth_password: {get_input: aodh_password}
1384                 aodh::db::mysql::password: {get_input: aodh_password}
1385                 # for a migration path from ceilometer-alarm to aodh, we use the same database & coordination
1386                 aodh::evaluator::coordination_url: {get_input: ceilometer_coordination_url}
1387                 aodh::keystone::auth::public_url: {get_input: aodh_public_url }
1388                 aodh::keystone::auth::internal_url: {get_input: aodh_internal_url }
1389                 aodh::keystone::auth::admin_url: {get_input: aodh_admin_url }
1390                 aodh::keystone::auth::password: {get_input: aodh_password }
1391                 aodh::keystone::auth::region: {get_input: keystone_region}
1392
1393                 # Gnocchi
1394                 gnocchi_backend: {get_input: gnocchi_backend}
1395                 gnocchi_indexer_backend: {get_input: gnocchi_indexer_backend}
1396                 gnocchi_mysql_conn_string: {get_input: gnocchi_dsn}
1397                 gnocchi::debug: {get_input: debug}
1398                 gnocchi::wsgi::apache::ssl: false
1399                 gnocchi::wsgi::apache::bind_host: {get_input: gnocchi_api_network}
1400                 gnocchi::api::service_name: 'httpd'
1401                 gnocchi::api::host: {get_input: gnocchi_api_network}
1402                 gnocchi::api::keystone_password: {get_input: gnocchi_password}
1403                 gnocchi::api::keystone_auth_uri: {get_input: keystone_auth_uri}
1404                 gnocchi::api::keystone_identity_uri: {get_input: keystone_identity_uri}
1405                 gnocchi::db::mysql::password: {get_input: gnocchi_password}
1406                 gnocchi::storage::swift::swift_authurl: {get_input: keystone_auth_uri}
1407                 gnocchi::storage::swift::swift_key: {get_input: gnocchi_password}
1408                 gnocchi::keystone::auth::public_url: {get_input: gnocchi_public_url }
1409                 gnocchi::keystone::auth::internal_url: {get_input: gnocchi_internal_url }
1410                 gnocchi::keystone::auth::admin_url: {get_input: gnocchi_admin_url }
1411                 gnocchi::keystone::auth::password: {get_input: gnocchi_password }
1412                 gnocchi::keystone::auth::region: {get_input: keystone_region}
1413
1414                 # Nova
1415                 nova::rabbit_userid: {get_input: rabbit_username}
1416                 nova::rabbit_password: {get_input: rabbit_password}
1417                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1418                 nova::rabbit_port: {get_input: rabbit_client_port}
1419                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
1420                 nova::debug: {get_input: debug}
1421                 nova::use_ipv6: {get_input: nova_ipv6}
1422                 nova::api::auth_uri: {get_input: keystone_auth_uri}
1423                 nova::api::identity_uri: {get_input: keystone_identity_uri}
1424                 nova::api::api_bind_address: {get_input: nova_api_network}
1425                 nova::api::metadata_listen: {get_input: nova_metadata_network}
1426                 nova::api::admin_password: {get_input: nova_password}
1427                 nova::api::osapi_compute_workers: {get_input: nova_workers}
1428                 nova::api::metadata_workers: {get_input: nova_workers}
1429                 nova::compute::network_device_mtu: {get_input: neutron_tenant_mtu}
1430                 nova::database_connection: {get_input: nova_dsn}
1431                 nova::api_database_connection: {get_input: nova_api_dsn}
1432                 nova::glance_api_servers: {get_input: glance_api_servers}
1433                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1434                 nova::api::instance_name_template: {get_input: instance_name_template}
1435                 nova::network::neutron::neutron_password: {get_input: neutron_password}
1436                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
1437                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
1438                 nova::vncproxy::host: {get_input: nova_api_network}
1439                 nova::db::mysql::password: {get_input: nova_password}
1440                 nova::db::mysql_api::password: {get_input: nova_password}
1441                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
1442                 nova::keystone::auth::public_url: {get_input: nova_public_url}
1443                 nova::keystone::auth::internal_url: {get_input: nova_internal_url}
1444                 nova::keystone::auth::admin_url: {get_input: nova_admin_url}
1445                 nova::keystone::auth::password: {get_input: nova_password }
1446                 nova::keystone::auth::region: {get_input: keystone_region}
1447
1448                 # Horizon
1449                 apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
1450                 apache::ip: {get_input: horizon_network}
1451                 horizon::allowed_hosts: {get_input: horizon_allowed_hosts}
1452                 horizon::django_debug: {get_input: debug}
1453                 horizon::secret_key: {get_input: horizon_secret}
1454                 horizon::bind_address: {get_input: horizon_network}
1455                 horizon::keystone_url: {get_input: keystone_auth_uri}
1456
1457                 # Sahara
1458                 sahara::host: {get_input: sahara_api_network}
1459                 sahara::plugins:
1460                   - cdh
1461                   - hdp
1462                   - mapr
1463                   - vanilla
1464                   - spark
1465                   - storm
1466                 sahara::admin_password: {get_input: sahara_password}
1467                 sahara::auth_uri: {get_input: keystone_auth_uri}
1468                 sahara::admin_user: sahara
1469                 sahara::identity_uri: {get_input: keystone_identity_uri}
1470                 sahara::use_neutron: true
1471                 sahara::database_connection: {get_input: sahara_dsn}
1472                 sahara::debug: {get_input: debug}
1473                 sahara::rpc_backend: rabbit
1474                 sahara::rabbit_userid: {get_input: rabbit_username}
1475                 sahara::rabbit_password: {get_input: rabbit_password}
1476                 sahara::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1477                 sahara::rabbit_port: {get_input: rabbit_client_port}
1478                 sahara::db::mysql::password: {get_input: sahara_password}
1479                 sahara::keystone::auth::public_url: {get_input: sahara_public_url }
1480                 sahara::keystone::auth::internal_url: {get_input: sahara_internal_url }
1481                 sahara::keystone::auth::admin_url: {get_input: sahara_admin_url }
1482                 sahara::keystone::auth::password: {get_input: sahara_password }
1483                 sahara::keystone::auth::region: {get_input: keystone_region}
1484                 # RabbitMQ
1485                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
1486                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
1487                 # Redis
1488                 redis::bind: {get_input: redis_network}
1489                 redis::requirepass: {get_input: redis_password}
1490                 redis::masterauth: {get_input: redis_password}
1491                 redis::sentinel_auth_pass: {get_input: redis_password}
1492                 redis_vip: {get_input: redis_vip}
1493                 # Firewall
1494                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
1495                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
1496                 # Misc
1497                 memcached_ipv6: {get_input: memcached_ipv6}
1498                 memcached::listen_ip: {get_input: memcached_network}
1499                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
1500                 ntp::servers: {get_input: ntp_servers}
1501                 timezone::timezone: {get_input: timezone}
1502                 control_virtual_interface: {get_input: control_virtual_interface}
1503                 public_virtual_interface: {get_input: public_virtual_interface}
1504                 tripleo::keepalived::control_virtual_interface: {get_input: control_virtual_interface}
1505                 tripleo::keepalived::public_virtual_interface: {get_input: public_virtual_interface}
1506                 tripleo::haproxy::control_virtual_interface: {get_input: control_virtual_interface}
1507                 tripleo::haproxy::public_virtual_interface: {get_input: public_virtual_interface}
1508                 tripleo::haproxy::haproxy_log_address: {get_input: haproxy_log_address}
1509                 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
1510                 tripleo::haproxy::haproxy_stats_user: {get_input: haproxy_stats_user}
1511                 tripleo::haproxy::haproxy_stats_password: {get_input: haproxy_stats_password}
1512                 tripleo::haproxy::redis_password: {get_input: redis_password}
1513                 tripleo::packages::enable_install: {get_input: enable_package_install}
1514                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
1515
1516   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
1517   ControllerExtraConfigPre:
1518     depends_on: ControllerDeployment
1519     type: OS::TripleO::ControllerExtraConfigPre
1520     properties:
1521         server: {get_resource: Controller}
1522
1523   # Hook for site-specific additional pre-deployment config,
1524   # applying to all nodes, e.g node registration/unregistration
1525   NodeExtraConfig:
1526     depends_on: [ControllerExtraConfigPre, NodeTLSData]
1527     type: OS::TripleO::NodeExtraConfig
1528     properties:
1529         server: {get_resource: Controller}
1530
1531   UpdateConfig:
1532     type: OS::TripleO::Tasks::PackageUpdate
1533
1534   UpdateDeployment:
1535     type: OS::Heat::SoftwareDeployment
1536     properties:
1537       name: UpdateDeployment
1538       config: {get_resource: UpdateConfig}
1539       server: {get_resource: Controller}
1540       input_values:
1541         update_identifier:
1542           get_param: UpdateIdentifier
1543
1544 outputs:
1545   ip_address:
1546     description: IP address of the server in the ctlplane network
1547     value: {get_attr: [Controller, networks, ctlplane, 0]}
1548   external_ip_address:
1549     description: IP address of the server in the external network
1550     value: {get_attr: [ExternalPort, ip_address]}
1551   internal_api_ip_address:
1552     description: IP address of the server in the internal_api network
1553     value: {get_attr: [InternalApiPort, ip_address]}
1554   storage_ip_address:
1555     description: IP address of the server in the storage network
1556     value: {get_attr: [StoragePort, ip_address]}
1557   storage_mgmt_ip_address:
1558     description: IP address of the server in the storage_mgmt network
1559     value: {get_attr: [StorageMgmtPort, ip_address]}
1560   tenant_ip_address:
1561     description: IP address of the server in the tenant network
1562     value: {get_attr: [TenantPort, ip_address]}
1563   management_ip_address:
1564     description: IP address of the server in the management network
1565     value: {get_attr: [ManagementPort, ip_address]}
1566   hostname:
1567     description: Hostname of the server
1568     value: {get_attr: [Controller, name]}
1569   hosts_entry:
1570     description: >
1571       Server's IP address and hostname in the /etc/hosts format
1572     value:
1573       str_replace:
1574         template: |
1575           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
1576           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
1577           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
1578           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
1579           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
1580           TENANTIP TENANTHOST.DOMAIN TENANTHOST
1581           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
1582         params:
1583           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
1584           DOMAIN: {get_param: CloudDomain}
1585           PRIMARYHOST: {get_attr: [Controller, name]}
1586           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
1587           EXTERNALHOST:
1588             list_join:
1589             - '.'
1590             - - {get_attr: [Controller, name]}
1591               - external
1592           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
1593           INTERNAL_APIHOST:
1594             list_join:
1595             - '.'
1596             - - {get_attr: [Controller, name]}
1597               - internalapi
1598           STORAGEIP: {get_attr: [StoragePort, ip_address]}
1599           STORAGEHOST:
1600             list_join:
1601             - '.'
1602             - - {get_attr: [Controller, name]}
1603               - storage
1604           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
1605           STORAGE_MGMTHOST:
1606             list_join:
1607             - '.'
1608             - - {get_attr: [Controller, name]}
1609               - storagemgmt
1610           TENANTIP: {get_attr: [TenantPort, ip_address]}
1611           TENANTHOST:
1612             list_join:
1613             - '.'
1614             - - {get_attr: [Controller, name]}
1615               - tenant
1616           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
1617           MANAGEMENTHOST:
1618             list_join:
1619             - '.'
1620             - - {get_attr: [Controller, name]}
1621               - management
1622   nova_server_resource:
1623     description: Heat resource handle for the Nova compute server
1624     value:
1625       {get_resource: Controller}
1626   swift_device:
1627     description: Swift device formatted for swift-ring-builder
1628     value:
1629       str_replace:
1630         template: 'r1z1-IP:%PORT%/d1'
1631         params:
1632           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1633   swift_proxy_memcache:
1634     description: Swift proxy-memcache value
1635     value:
1636       str_replace:
1637         template: "IP:11211"
1638         params:
1639           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1640   config_identifier:
1641     description: identifier which changes if the controller configuration may need re-applying
1642     value:
1643       list_join:
1644         - ','
1645         - - {get_attr: [ControllerDeployment, deploy_stdout]}
1646           - {get_attr: [NodeTLSCAData, deploy_stdout]}
1647           - {get_attr: [NodeTLSData, deploy_stdout]}
1648           - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
1649           - {get_param: UpdateIdentifier}
1650   tls_key_modulus_md5:
1651     description: MD5 checksum of the TLS Key Modulus
1652     value: {get_attr: [NodeTLSData, key_modulus_md5]}
1653   tls_cert_modulus_md5:
1654     description: MD5 checksum of the TLS Certificate Modulus
1655     value: {get_attr: [NodeTLSData, cert_modulus_md5]}