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