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