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