Don't write CLOUDNAME to the hosts file.
[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: 5000
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   NeutronTunnelTypes:
496     default: 'vxlan'
497     description: |
498         The tunnel types for the Neutron tenant network.
499     type: comma_delimited_list
500   NeutronTunnelIdRanges:
501     description: |
502         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
503         of GRE tunnel IDs that are available for tenant network allocation
504     default: ["1:1000", ]
505     type: comma_delimited_list
506   NeutronVniRanges:
507     description: |
508         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
509         of VXLAN VNI IDs that are available for tenant network allocation
510     default: ["1:1000", ]
511     type: comma_delimited_list
512   NeutronPluginExtensions:
513     default: "qos"
514     description: |
515         Comma-separated list of extensions enabled for the Neutron plugin.
516     type: comma_delimited_list
517   NeutronAgentExtensions:
518     default: "qos"
519     description: |
520         Comma-separated list of extensions enabled for the Neutron agents.
521     type: comma_delimited_list
522   NovaApiVirtualIP:
523     type: string
524     default: ''
525   NeutronWorkers:
526     default: 0
527     description: Number of workers for Neutron service.
528     type: number
529   NovaEnableDBPurge:
530     default: true
531     description: |
532         Whether to create cron job for purging soft deleted rows in Nova database.
533     type: boolean
534   NovaPassword:
535     description: The password for the nova service and db account, used by nova-api.
536     type: string
537     hidden: true
538   NovaWorkers:
539     default: 0
540     description: Number of workers for Nova service.
541     type: number
542   MongoDbNoJournal:
543     default: false
544     description: Should MongoDb journaling be disabled
545     type: boolean
546   NtpServer:
547     default: ''
548     description: Comma-separated list of ntp servers
549     type: comma_delimited_list
550   PcsdPassword:
551     type: string
552     description: The password for the 'pcsd' user.
553     hidden: true
554   PublicVirtualInterface:
555     default: 'br-ex'
556     description: >
557         Specifies the interface where the public-facing virtual ip will be assigned.
558         This should be int_public when a VLAN is being used.
559     type: string
560   PublicVirtualIP:
561     type: string
562     default: ''  # Has to be here because of the ignored empty value bug
563   RabbitCookie:
564     type: string
565     default: ''  # Has to be here because of the ignored empty value bug
566     hidden: true
567   RabbitPassword:
568     default: guest
569     description: The password for RabbitMQ
570     type: string
571     hidden: true
572   RabbitUserName:
573     default: guest
574     description: The username for RabbitMQ
575     type: string
576   RabbitClientUseSSL:
577     default: false
578     description: >
579         Rabbit client subscriber parameter to specify
580         an SSL connection to the RabbitMQ host.
581     type: string
582   RabbitClientPort:
583     default: 5672
584     description: Set rabbit subscriber port, change this if using SSL
585     type: number
586   RabbitFDLimit:
587     default: 16384
588     description: Configures RabbitMQ FD limit
589     type: string
590   RedisVirtualIP:
591     type: string
592     default: ''  # Has to be here because of the ignored empty value bug
593   SnmpdReadonlyUserName:
594     default: ro_snmp_user
595     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
596     type: string
597   SnmpdReadonlyUserPassword:
598     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
599     type: string
600     hidden: true
601   SwiftHashSuffix:
602     description: A random string to be used as a salt when hashing to determine mappings
603       in the ring.
604     hidden: true
605     type: string
606   SwiftMountCheck:
607     default: 'false'
608     description: Value of mount_check in Swift account/container/object -server.conf
609     type: boolean
610   SwiftMinPartHours:
611     type: number
612     default: 1
613     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
614   SwiftPartPower:
615     default: 10
616     description: Partition Power to use when building Swift rings
617     type: number
618   SwiftPassword:
619     description: The password for the swift service account, used by the swift proxy
620       services.
621     hidden: true
622     type: string
623   SwiftProxyVirtualIP:
624     type: string
625     default: ''
626   SwiftReplicas:
627     type: number
628     default: 3
629     description: How many replicas to use in the swift rings.
630   SwiftWorkers:
631     default: 0
632     description: Number of workers for Swift service.
633     type: number
634   TimeZone:
635     default: 'UTC'
636     description: The timezone to be set on controller nodes.
637     type: string
638   VirtualIP: # DEPRECATED: use per service settings instead
639     type: string
640     default: ''  # Has to be here because of the ignored empty value bug
641   HeatApiVirtualIP:
642     type: string
643     default: ''
644   GlanceApiVirtualIP:
645     type: string
646     default: ''
647   GlanceRegistryVirtualIP:
648     type: string
649     default: ''
650   MysqlVirtualIP:
651     type: string
652     default: ''
653   KeystoneAdminApiVirtualIP:
654     type: string
655     default: ''
656   KeystonePublicApiVirtualIP:
657     type: string
658     default: ''
659   NeutronApiVirtualIP:
660     type: string
661     default: ''
662   EnablePackageInstall:
663     default: 'false'
664     description: Set to true to enable package installation via Puppet
665     type: boolean
666   ServiceNetMap:
667     default: {}
668     description: Mapping of service_name -> network name. Typically set
669                  via parameter_defaults in the resource registry.
670     type: json
671   EndpointMap:
672     default: {}
673     description: Mapping of service endpoint -> protocol. Typically set
674                  via parameter_defaults in the resource registry.
675     type: json
676   UpdateIdentifier:
677     default: ''
678     type: string
679     description: >
680       Setting to a previously unused value during stack-update will trigger
681       package update on all nodes
682   Hostname:
683     type: string
684     default: '' # Defaults to Heat created hostname
685   NetworkDeploymentActions:
686     type: comma_delimited_list
687     description: >
688       Heat action when to apply network configuration changes
689     default: ['CREATE']
690   NodeIndex:
691     type: number
692     default: 0
693   SoftwareConfigTransport:
694     default: POLL_SERVER_CFN
695     description: |
696       How the server should receive the metadata required for software configuration.
697     type: string
698     constraints:
699     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
700   CloudDomain:
701     default: ''
702     type: string
703     description: >
704       The DNS domain used for the hosts. This should match the dhcp_domain
705       configured in the Undercloud neutron. Defaults to localdomain.
706   ServerMetadata:
707     default: {}
708     description: >
709       Extra properties or metadata passed to Nova for the created nodes in
710       the overcloud. It's accessible via the Nova metadata API.
711     type: json
712   SchedulerHints:
713     type: json
714     description: Optional scheduler hints to pass to nova
715     default: {}
716
717 resources:
718
719   Controller:
720     type: OS::Nova::Server
721     properties:
722       image: {get_param: Image}
723       image_update_policy: {get_param: ImageUpdatePolicy}
724       flavor: {get_param: Flavor}
725       key_name: {get_param: KeyName}
726       networks:
727         - network: ctlplane
728       user_data_format: SOFTWARE_CONFIG
729       user_data: {get_resource: UserData}
730       name: {get_param: Hostname}
731       software_config_transport: {get_param: SoftwareConfigTransport}
732       metadata: {get_param: ServerMetadata}
733       scheduler_hints: {get_param: SchedulerHints}
734
735   # Combine the NodeAdminUserData and NodeUserData mime archives
736   UserData:
737     type: OS::Heat::MultipartMime
738     properties:
739       parts:
740       - config: {get_resource: NodeAdminUserData}
741         type: multipart
742       - config: {get_resource: NodeUserData}
743         type: multipart
744
745   # Creates the "heat-admin" user if configured via the environment
746   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
747   NodeAdminUserData:
748     type: OS::TripleO::NodeAdminUserData
749
750   # For optional operator additional userdata
751   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
752   NodeUserData:
753     type: OS::TripleO::NodeUserData
754
755   ExternalPort:
756     type: OS::TripleO::Controller::Ports::ExternalPort
757     properties:
758       IPPool: {get_param: ControllerIPs}
759       NodeIndex: {get_param: NodeIndex}
760       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
761
762   InternalApiPort:
763     type: OS::TripleO::Controller::Ports::InternalApiPort
764     properties:
765       IPPool: {get_param: ControllerIPs}
766       NodeIndex: {get_param: NodeIndex}
767       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
768
769   StoragePort:
770     type: OS::TripleO::Controller::Ports::StoragePort
771     properties:
772       IPPool: {get_param: ControllerIPs}
773       NodeIndex: {get_param: NodeIndex}
774       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
775
776   StorageMgmtPort:
777     type: OS::TripleO::Controller::Ports::StorageMgmtPort
778     properties:
779       IPPool: {get_param: ControllerIPs}
780       NodeIndex: {get_param: NodeIndex}
781       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
782
783   TenantPort:
784     type: OS::TripleO::Controller::Ports::TenantPort
785     properties:
786       IPPool: {get_param: ControllerIPs}
787       NodeIndex: {get_param: NodeIndex}
788       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
789
790   ManagementPort:
791     type: OS::TripleO::Controller::Ports::ManagementPort
792     properties:
793       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
794
795   NetIpMap:
796     type: OS::TripleO::Network::Ports::NetIpMap
797     properties:
798       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
799       ExternalIp: {get_attr: [ExternalPort, ip_address]}
800       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
801       StorageIp: {get_attr: [StoragePort, ip_address]}
802       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
803       TenantIp: {get_attr: [TenantPort, ip_address]}
804       ManagementIp: {get_attr: [ManagementPort, ip_address]}
805
806   NetIpSubnetMap:
807     type: OS::TripleO::Network::Ports::NetIpSubnetMap
808     properties:
809       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
810       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
811       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
812       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
813       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
814       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
815       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
816
817   NetworkConfig:
818     type: OS::TripleO::Controller::Net::SoftwareConfig
819     properties:
820       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
821       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
822       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
823       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
824       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
825       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
826       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
827
828   NetworkDeployment:
829     type: OS::TripleO::SoftwareDeployment
830     properties:
831       config: {get_resource: NetworkConfig}
832       server: {get_resource: Controller}
833       actions: {get_param: NetworkDeploymentActions}
834       input_values:
835         bridge_name: br-ex
836         interface_name: {get_param: NeutronPublicInterface}
837
838   # Resource for site-specific injection of root certificate
839   NodeTLSCAData:
840     depends_on: NetworkDeployment
841     type: OS::TripleO::NodeTLSCAData
842     properties:
843       server: {get_resource: Controller}
844
845   # Resource for site-specific passing of private keys/certificates
846   NodeTLSData:
847     depends_on: NodeTLSCAData
848     type: OS::TripleO::NodeTLSData
849     properties:
850       server: {get_resource: Controller}
851       NodeIndex: {get_param: NodeIndex}
852
853
854   ControllerDeployment:
855     type: OS::TripleO::SoftwareDeployment
856     depends_on: NetworkDeployment
857     properties:
858       config: {get_resource: ControllerConfig}
859       server: {get_resource: Controller}
860       input_values:
861         bootstack_nodeid: {get_attr: [Controller, name]}
862         ceilometer_workers: {get_param: CeilometerWorkers}
863         cinder_workers: {get_param: CinderWorkers}
864         glance_workers: {get_param: GlanceWorkers}
865         heat_workers: {get_param: HeatWorkers}
866         keystone_workers: {get_param: KeystoneWorkers}
867         nova_workers: {get_param: NovaWorkers}
868         neutron_workers: {get_param: NeutronWorkers}
869         swift_workers: {get_param: SwiftWorkers}
870         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
871         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
872         neutron_enable_isolated_metadata: {get_param: NeutronEnableIsolatedMetadata}
873         haproxy_log_address: {get_param: HAProxySyslogAddress}
874         heat.watch_server_url:
875           list_join:
876             - ''
877             - - 'http://'
878               - {get_param: HeatApiVirtualIP}
879               - ':8003'
880         heat.metadata_server_url:
881           list_join:
882             - ''
883             - - 'http://'
884               - {get_param: HeatApiVirtualIP}
885               - ':8000'
886         heat.waitcondition_server_url:
887           list_join:
888             - ''
889             - - 'http://'
890               - {get_param: HeatApiVirtualIP}
891               - ':8000/v1/waitcondition'
892         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
893         horizon_allowed_hosts: {get_param: HorizonAllowedHosts}
894         horizon_secret: {get_param: HorizonSecret}
895         admin_email: {get_param: AdminEmail}
896         admin_password: {get_param: AdminPassword}
897         admin_token: {get_param: AdminToken}
898         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
899         debug: {get_param: Debug}
900         cinder_enable_db_purge: {get_param: CinderEnableDBPurge}
901         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
902         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
903         cinder_nfs_mount_options: {get_param: CinderNfsMountOptions}
904         cinder_nfs_servers:
905           str_replace:
906             template: SERVERS
907             params:
908               SERVERS: {get_param: CinderNfsServers}
909         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
910         cinder_password: {get_param: CinderPassword}
911         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
912         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
913         cinder_backend_config: {get_param: CinderBackendConfig}
914         cinder_dsn:
915           list_join:
916             - ''
917             - - 'mysql+pymysql://cinder:'
918               - {get_param: CinderPassword}
919               - '@'
920               - {get_param: MysqlVirtualIP}
921               - '/cinder'
922         glance_port: {get_param: [EndpointMap, GlanceInternal, port]}
923         glance_password: {get_param: GlancePassword}
924         glance_backend: {get_param: GlanceBackend}
925         glance_file_pcmk_device: {get_param: GlanceFilePcmkDevice}
926         glance_file_pcmk_fstype: {get_param: GlanceFilePcmkFstype}
927         glance_file_pcmk_manage: {get_param: GlanceFilePcmkManage}
928         glance_file_pcmk_options: {get_param: GlanceFilePcmkOptions}
929         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
930         glance_log_file: {get_param: GlanceLogFile}
931         glance_dsn:
932           list_join:
933             - ''
934             - - 'mysql+pymysql://glance:'
935               - {get_param: GlancePassword}
936               - '@'
937               - {get_param: MysqlVirtualIP}
938               - '/glance'
939         heat_password: {get_param: HeatPassword}
940         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
941         heat_dsn:
942           list_join:
943             - ''
944             - - 'mysql+pymysql://heat:'
945               - {get_param: HeatPassword}
946               - '@'
947               - {get_param: MysqlVirtualIP}
948               - '/heat'
949         keystone_ca_certificate: {get_param: KeystoneCACertificate}
950         keystone_signing_key: {get_param: KeystoneSigningKey}
951         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
952         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
953         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
954         keystone_notification_driver: {get_param: KeystoneNotificationDriver}
955         keystone_notification_format: {get_param: KeystoneNotificationFormat}
956         keystone_enable_db_purge: {get_param: KeystoneEnableDBPurge}
957         keystone_dsn:
958           list_join:
959             - ''
960             - - 'mysql+pymysql://keystone:'
961               - {get_param: AdminToken}
962               - '@'
963               - {get_param: MysqlVirtualIP}
964               - '/keystone'
965         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
966         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
967         keystone_public_url: { get_param: [EndpointMap, KeystonePublic, uri_no_suffix] }
968         keystone_internal_url: { get_param: [EndpointMap, KeystoneInternal, uri_no_suffix] }
969         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
970         enable_fencing: {get_param: EnableFencing}
971         enable_galera: {get_param: EnableGalera}
972         enable_load_balancer: {get_param: EnableLoadBalancer}
973         enable_ceph_storage: {get_param: EnableCephStorage}
974         enable_swift_storage: {get_param: EnableSwiftStorage}
975         manage_firewall: {get_param: ManageFirewall}
976         purge_firewall_rules: {get_param: PurgeFirewallRules}
977         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
978         mysql_max_connections: {get_param: MysqlMaxConnections}
979         mysql_root_password: {get_param: MysqlRootPassword}
980         mysql_cluster_name:
981           str_replace:
982             template: tripleo-CLUSTER
983             params:
984               CLUSTER: {get_param: MysqlClusterUniquePart}
985         neutron_flat_networks:
986           str_replace:
987             template: NETWORKS
988             params:
989               NETWORKS: {get_param: NeutronFlatNetworks}
990         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
991         neutron_agent_mode: {get_param: NeutronAgentMode}
992         neutron_router_distributed: {get_param: NeutronDVR}
993         neutron_core_plugin: {get_param: NeutronCorePlugin}
994         neutron_service_plugins:
995           str_replace:
996             template: PLUGINS
997             params:
998               PLUGINS: {get_param: NeutronServicePlugins}
999         neutron_type_drivers:
1000           str_replace:
1001             template: DRIVERS
1002             params:
1003               DRIVERS: {get_param: NeutronTypeDrivers}
1004         neutron_enable_dhcp_agent: {get_param: NeutronEnableDHCPAgent}
1005         neutron_enable_l3_agent: {get_param: NeutronEnableL3Agent}
1006         neutron_enable_metadata_agent: {get_param: NeutronEnableMetadataAgent}
1007         neutron_enable_ovs_agent: {get_param: NeutronEnableOVSAgent}
1008         neutron_mechanism_drivers:
1009           str_replace:
1010             template: MECHANISMS
1011             params:
1012               MECHANISMS: {get_param: NeutronMechanismDrivers}
1013         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
1014         neutron_l3_ha: {get_param: NeutronL3HA}
1015         neutron_dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
1016         neutron_network_vlan_ranges:
1017           str_replace:
1018             template: RANGES
1019             params:
1020               RANGES: {get_param: NeutronNetworkVLANRanges}
1021         neutron_bridge_mappings:
1022           str_replace:
1023             template: MAPPINGS
1024             params:
1025               MAPPINGS: {get_param: NeutronBridgeMappings}
1026         neutron_external_network_bridge: {get_param: NeutronExternalNetworkBridge}
1027         neutron_public_interface: {get_param: NeutronPublicInterface}
1028         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
1029         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
1030         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
1031         neutron_tunnel_id_ranges:
1032           str_replace:
1033             template: RANGES
1034             params:
1035               RANGES: {get_param: NeutronTunnelIdRanges}
1036         neutron_vni_ranges:
1037           str_replace:
1038             template: RANGES
1039             params:
1040               RANGES: {get_param: NeutronVniRanges}
1041         neutron_tenant_network_types:
1042           str_replace:
1043             template: TYPES
1044             params:
1045               TYPES: {get_param: NeutronNetworkType}
1046         neutron_tunnel_types:
1047           str_replace:
1048             template: TYPES
1049             params:
1050               TYPES: {get_param: NeutronTunnelTypes}
1051         neutron_plugin_extensions:
1052           str_replace:
1053             template: PLUGIN_EXTENSIONS
1054             params:
1055               PLUGIN_EXTENSIONS: {get_param: NeutronPluginExtensions}
1056         neutron_agent_extensions:
1057           str_replace:
1058             template: AGENT_EXTENSIONS
1059             params:
1060               AGENT_EXTENSIONS: {get_param: NeutronAgentExtensions}
1061         neutron_password: {get_param: NeutronPassword}
1062         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
1063         neutron_dsn:
1064           list_join:
1065             - ''
1066             - - 'mysql+pymysql://neutron:'
1067               - {get_param: NeutronPassword}
1068               - '@'
1069               - {get_param: MysqlVirtualIP}
1070               - '/ovs_neutron?charset=utf8'
1071         neutron_internal_url: { get_param: [ EndpointMap, NeutronInternal, uri ] }
1072         neutron_public_url: { get_param: [ EndpointMap, NeutronPublic, uri ] }
1073         neutron_admin_url: { get_param: [ EndpointMap, NeutronAdmin, uri ] }
1074         neutron_admin_auth_url: { get_param: [ EndpointMap, KeystoneAdmin, uri ] }
1075         nova_internal_url: { get_param: [ EndpointMap, NovaInternal, uri ] }
1076         ceilometer_backend: {get_param: CeilometerBackend}
1077         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
1078         ceilometer_password: {get_param: CeilometerPassword}
1079         ceilometer_coordination_url:
1080           list_join:
1081             - ''
1082             - - 'redis://'
1083               - {get_param: RedisVirtualIP}
1084               - ':6379'
1085         ceilometer_dsn:
1086           list_join:
1087             - ''
1088             - - 'mysql+pymysql://ceilometer:'
1089               - {get_param: CeilometerPassword}
1090               - '@'
1091               - {get_param: MysqlVirtualIP}
1092               - '/ceilometer'
1093         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
1094         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
1095         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
1096         nova_password: {get_param: NovaPassword}
1097         nova_dsn:
1098           list_join:
1099             - ''
1100             - - 'mysql+pymysql://nova:'
1101               - {get_param: NovaPassword}
1102               - '@'
1103               - {get_param: MysqlVirtualIP}
1104               - '/nova'
1105         instance_name_template: {get_param: InstanceNameTemplate}
1106         fencing_config: {get_param: FencingConfig}
1107         pcsd_password: {get_param: PcsdPassword}
1108         rabbit_username: {get_param: RabbitUserName}
1109         rabbit_password: {get_param: RabbitPassword}
1110         rabbit_cookie: {get_param: RabbitCookie}
1111         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
1112         rabbit_client_port: {get_param: RabbitClientPort}
1113         mongodb_no_journal: {get_param: MongoDbNoJournal}
1114         # We need to force this into quotes or hiera will return integer causing
1115         # the puppet module validation regexp to fail.
1116         # Remove when: https://github.com/puppetlabs/puppetlabs-rabbitmq/pull/401
1117         rabbit_fd_limit:
1118           str_replace:
1119             template: "'LIMIT'"
1120             params:
1121               LIMIT: {get_param: RabbitFDLimit}
1122         ntp_servers: {get_param: NtpServer}
1123         timezone: {get_param: TimeZone}
1124         control_virtual_interface: {get_param: ControlVirtualInterface}
1125         public_virtual_interface: {get_param: PublicVirtualInterface}
1126         swift_hash_suffix: {get_param: SwiftHashSuffix}
1127         swift_password: {get_param: SwiftPassword}
1128         swift_part_power: {get_param: SwiftPartPower}
1129         swift_replicas: {get_param: SwiftReplicas}
1130         swift_min_part_hours: {get_param: SwiftMinPartHours}
1131         swift_mount_check: {get_param: SwiftMountCheck}
1132         enable_package_install: {get_param: EnablePackageInstall}
1133         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
1134         sahara_password: {get_param: SaharaPassword}
1135         sahara_dsn:
1136           list_join:
1137             - ''
1138             - - 'mysql://sahara:'
1139               - {get_param: SaharaPassword}
1140               - '@'
1141               - {get_param: MysqlVirtualIP}
1142               - '/sahara'
1143         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1144         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1145         cinder_iscsi_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
1146         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1147         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1148         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1149         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
1150         glance_registry_host: {get_param: GlanceRegistryVirtualIP}
1151         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1152         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1153         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1154         keystone_region: {get_param: KeystoneRegion}
1155         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1156         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1157         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
1158         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1159         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1160         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1161         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1162         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1163         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1164         redis_vip: {get_param: RedisVirtualIP}
1165         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1166         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1167         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1168         mysql_virtual_ip: {get_param: MysqlVirtualIP}
1169         ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
1170         ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1171         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1172
1173   # Map heat metadata into hiera datafiles
1174   ControllerConfig:
1175     type: OS::Heat::StructuredConfig
1176     properties:
1177       group: os-apply-config
1178       config:
1179         hiera:
1180           hierarchy:
1181             - '"%{::uuid}"'
1182             - heat_config_%{::deploy_config_name}
1183             - controller_extraconfig
1184             - extraconfig
1185             - controller
1186             - database
1187             - object
1188             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
1189             - ceph_cluster # provided by CephClusterConfig
1190             - ceph
1191             - bootstrap_node # provided by BootstrapNodeConfig
1192             - all_nodes # provided by allNodesConfig
1193             - vip_data # provided by vip-config
1194             - '"%{::osfamily}"'
1195             - common
1196             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
1197             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
1198             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
1199             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
1200             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
1201             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
1202             - neutron_nuage_data # Optionally provided by ControllerExtraConfigPre
1203             - midonet_data #Optionally provided by AllNodesExtraConfig
1204           datafiles:
1205             controller_extraconfig:
1206               mapped_data: {get_param: ControllerExtraConfig}
1207             extraconfig:
1208               mapped_data: {get_param: ExtraConfig}
1209             common:
1210               raw_data: {get_file: hieradata/common.yaml}
1211             ceph:
1212               raw_data: {get_file: hieradata/ceph.yaml}
1213               mapped_data:
1214                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
1215                 ceph::profile::params::public_network: {get_input: ceph_public_network}
1216                 ceph::mon::public_addr: {get_input: ceph_public_ip}
1217             database:
1218               raw_data: {get_file: hieradata/database.yaml}
1219             object:
1220               raw_data: {get_file: hieradata/object.yaml}
1221             controller:
1222               raw_data: {get_file: hieradata/controller.yaml}
1223               mapped_data: # data supplied directly to this deployment configuration, etc
1224                 bootstack_nodeid: {get_input: bootstack_nodeid}
1225
1226                 # Pacemaker
1227                 enable_fencing: {get_input: enable_fencing}
1228                 enable_load_balancer: {get_input: enable_load_balancer}
1229                 hacluster_pwd: {get_input: pcsd_password}
1230                 tripleo::fencing::config: {get_input: fencing_config}
1231
1232                 # Swift
1233                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
1234                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
1235                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
1236                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
1237                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
1238                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
1239                 swift::proxy::workers: {get_input: swift_workers}
1240                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
1241                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
1242                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
1243                 swift_mount_check: {get_input: swift_mount_check}
1244
1245                 # NOTE(dprince): build_ring support is currently not wired in.
1246                 # See: https://review.openstack.org/#/c/109225/
1247                 tripleo::ringbuilder::build_ring: True
1248
1249                 # Cinder
1250                 cinder_enable_db_purge: {get_input: cinder_enable_db_purge}
1251                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
1252                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
1253                 cinder_nfs_mount_options: {get_input: cinder_nfs_mount_options}
1254                 cinder_nfs_servers: {get_input: cinder_nfs_servers}
1255                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
1256                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
1257                 cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
1258                 cinder::database_connection: {get_input: cinder_dsn}
1259                 cinder::api::keystone_password: {get_input: cinder_password}
1260                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
1261                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
1262                 cinder::api::bind_host: {get_input: cinder_api_network}
1263                 cinder::rabbit_userid: {get_input: rabbit_username}
1264                 cinder::rabbit_password: {get_input: rabbit_password}
1265                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1266                 cinder::rabbit_port: {get_input: rabbit_client_port}
1267                 cinder::debug: {get_input: debug}
1268                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
1269                 cinder::glance::glance_api_servers: {get_input: glance_api_servers}
1270                 cinder_backend_config: {get_input: CinderBackendConfig}
1271                 cinder::db::mysql::password: {get_input: cinder_password}
1272
1273                 # Glance
1274                 glance::api::bind_port: {get_input: glance_port}
1275                 glance::api::bind_host: {get_input: glance_api_network}
1276                 glance::api::auth_uri: {get_input: keystone_auth_uri}
1277                 glance::api::identity_uri: {get_input: keystone_identity_uri}
1278                 glance::api::registry_host: {get_input: glance_registry_host}
1279                 glance::api::keystone_password: {get_input: glance_password}
1280                 glance::api::debug: {get_input: debug}
1281                 glance::api::workers: {get_input: glance_workers}
1282                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
1283                 glance_log_file: {get_input: glance_log_file}
1284                 glance_log_file: {get_input: glance_log_file}
1285                 glance::api::database_connection: {get_input: glance_dsn}
1286                 glance::registry::keystone_password: {get_input: glance_password}
1287                 glance::registry::database_connection: {get_input: glance_dsn}
1288                 glance::registry::bind_host: {get_input: glance_registry_network}
1289                 glance::registry::auth_uri: {get_input: keystone_auth_uri}
1290                 glance::registry::identity_uri: {get_input: keystone_identity_uri}
1291                 glance::registry::debug: {get_input: debug}
1292                 glance::backend::swift::swift_store_auth_address: {get_input: keystone_auth_uri}
1293                 glance::registry::workers: {get_input: glance_workers}
1294                 glance::backend::swift::swift_store_user: service:glance
1295                 glance::backend::swift::swift_store_key: {get_input: glance_password}
1296                 glance_backend: {get_input: glance_backend}
1297                 glance::db::mysql::password: {get_input: glance_password}
1298                 glance_file_pcmk_device: {get_input: glance_file_pcmk_device}
1299                 glance_file_pcmk_fstype: {get_input: glance_file_pcmk_fstype}
1300                 glance_file_pcmk_manage: {get_input: glance_file_pcmk_manage}
1301                 glance_file_pcmk_options: {get_input: glance_file_pcmk_options}
1302
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::database_connection: {get_input: heat_dsn}
1324                 heat::debug: {get_input: debug}
1325                 heat::db::mysql::password: {get_input: heat_password}
1326
1327                 # Keystone
1328                 keystone::admin_token: {get_input: admin_token}
1329                 keystone_ca_certificate: {get_input: keystone_ca_certificate}
1330                 keystone_signing_key: {get_input: keystone_signing_key}
1331                 keystone_signing_certificate: {get_input: keystone_signing_certificate}
1332                 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
1333                 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
1334                 keystone::database_connection: {get_input: keystone_dsn}
1335                 keystone::public_bind_host: {get_input: keystone_public_api_network}
1336                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
1337                 keystone::debug: {get_input: debug}
1338                 keystone::db::mysql::password: {get_input: admin_token}
1339                 keystone::rabbit_userid: {get_input: rabbit_username}
1340                 keystone::rabbit_password: {get_input: rabbit_password}
1341                 keystone::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1342                 keystone::rabbit_port: {get_input: rabbit_client_port}
1343                 keystone::notification_driver: {get_input: keystone_notification_driver}
1344                 keystone::notification_format: {get_input: keystone_notification_format}
1345                 keystone::roles::admin::email: {get_input: admin_email}
1346                 keystone::roles::admin::password: {get_input: admin_password}
1347                 keystone::endpoint::public_url: {get_input: keystone_public_url}
1348                 keystone::endpoint::internal_url: {get_input: keystone_internal_url}
1349                 keystone::endpoint::admin_url: {get_input: keystone_identity_uri}
1350                 keystone::endpoint::region: {get_input: keystone_region}
1351                 keystone::admin_workers: {get_input: keystone_workers}
1352                 keystone::public_workers: {get_input: keystone_workers}
1353                 keystone_enable_db_purge: {get_input: keystone_enable_db_purge}
1354
1355                 # MongoDB
1356                 mongodb::server::bind_ip: {get_input: mongo_db_network}
1357                 mongodb::server::nojournal: {get_input: mongodb_no_journal}
1358                 # MySQL
1359                 admin_password: {get_input: admin_password}
1360                 enable_galera: {get_input: enable_galera}
1361                 enable_ceph_storage: {get_input: enable_ceph_storage}
1362                 enable_swift_storage: {get_input: enable_swift_storage}
1363                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
1364                 mysql_max_connections: {get_input: mysql_max_connections}
1365                 mysql::server::root_password: {get_input: mysql_root_password}
1366                 mysql_cluster_name: {get_input: mysql_cluster_name}
1367                 mysql_bind_host: {get_input: mysql_network}
1368                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
1369
1370                 # Neutron
1371                 neutron::bind_host: {get_input: neutron_api_network}
1372                 neutron::rabbit_password: {get_input: rabbit_password}
1373                 neutron::rabbit_user: {get_input: rabbit_username}
1374                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1375                 neutron::rabbit_port: {get_input: rabbit_client_port}
1376                 neutron::debug: {get_input: debug}
1377                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
1378                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
1379                 neutron::server::database_connection: {get_input: neutron_dsn}
1380                 neutron::server::api_workers: {get_input: neutron_workers}
1381                 neutron::agents::l3::external_network_bridge: {get_input: neutron_external_network_bridge}
1382                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
1383                 neutron::agents::ml2::ovs::l2_population: {get_input: neutron_enable_l2pop}
1384                 neutron::agents::dhcp::enable_isolated_metadata: {get_input: neutron_enable_isolated_metadata}
1385                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
1386                 neutron::plugins::ml2::flat_networks: {get_input: neutron_flat_networks}
1387                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1388                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
1389                 neutron::agents::metadata::metadata_workers: {get_input: neutron_workers}
1390                 neutron_agent_mode: {get_input: neutron_agent_mode}
1391                 neutron_router_distributed: {get_input: neutron_router_distributed}
1392                 neutron::core_plugin: {get_input: neutron_core_plugin}
1393                 neutron::service_plugins: {get_input: neutron_service_plugins}
1394                 neutron::enable_dhcp_agent: {get_input: neutron_enable_dhcp_agent}
1395                 neutron::enable_l3_agent: {get_input: neutron_enable_l3_agent}
1396                 neutron::enable_metadata_agent: {get_input: neutron_enable_metadata_agent}
1397                 neutron::enable_ovs_agent: {get_input: neutron_enable_ovs_agent}
1398                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
1399                 neutron::plugins::ml2::mechanism_drivers: {get_input: neutron_mechanism_drivers}
1400                 neutron::plugins::ml2::extension_drivers: {get_input: neutron_plugin_extensions}
1401                 neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
1402                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
1403                 neutron::dhcp_agents_per_network: {get_input: neutron_dhcp_agents_per_network}
1404                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
1405                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
1406                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
1407                 neutron::agents::ml2::ovs:bridge_mappings: {get_input: neutron_bridge_mappings}
1408                 neutron_public_interface: {get_input: neutron_public_interface}
1409                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
1410                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
1411                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
1412                 neutron::plugins::ml2::tenant_network_types: {get_input: neutron_tenant_network_types}
1413                 neutron::agents::ml2::ovs::tunnel_types: {get_input: neutron_tunnel_types}
1414                 neutron::agents::ml2::ovs::extensions: {get_input: neutron_agent_extensions}
1415                 neutron::server::auth_password: {get_input: neutron_password}
1416                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
1417                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
1418                 neutron_dsn: {get_input: neutron_dsn}
1419                 neutron::agents::metadata::auth_url: {get_input: keystone_identity_uri}
1420                 neutron::db::mysql::password: {get_input: neutron_password}
1421                 neutron::keystone::auth::public_url: {get_input: neutron_public_url }
1422                 neutron::keystone::auth::internal_url: {get_input: neutron_internal_url }
1423                 neutron::keystone::auth::admin_url: {get_input: neutron_admin_url }
1424                 neutron::keystone::auth::password: {get_input: neutron_password }
1425                 neutron::keystone::auth::region: {get_input: keystone_region}
1426                 neutron::server::notifications::nova_url: {get_input: nova_internal_url}
1427                 neutron::server::notifications::auth_url: {get_input: neutron_admin_auth_url}
1428                 neutron::server::notifications::tenant_name: 'service'
1429                 neutron::server::notifications::password: {get_input: nova_password}
1430
1431                 # Ceilometer
1432                 ceilometer_backend: {get_input: ceilometer_backend}
1433                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
1434                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
1435                 ceilometer::rabbit_userid: {get_input: rabbit_username}
1436                 ceilometer::rabbit_password: {get_input: rabbit_password}
1437                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1438                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
1439                 ceilometer::debug: {get_input: debug}
1440                 ceilometer::api::host: {get_input: ceilometer_api_network}
1441                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
1442                 ceilometer::api::keystone_auth_uri: {get_input: keystone_auth_uri}
1443                 ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri}
1444                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
1445                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_uri}
1446                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
1447                 ceilometer::db::mysql::password: {get_input: ceilometer_password}
1448                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
1449                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
1450
1451                 # Nova
1452                 nova::rabbit_userid: {get_input: rabbit_username}
1453                 nova::rabbit_password: {get_input: rabbit_password}
1454                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1455                 nova::rabbit_port: {get_input: rabbit_client_port}
1456                 nova::debug: {get_input: debug}
1457                 nova::api::auth_uri: {get_input: keystone_auth_uri}
1458                 nova::api::identity_uri: {get_input: keystone_identity_uri}
1459                 nova::api::api_bind_address: {get_input: nova_api_network}
1460                 nova::api::metadata_listen: {get_input: nova_metadata_network}
1461                 nova::api::admin_password: {get_input: nova_password}
1462                 nova::api::osapi_compute_workers: {get_input: nova_workers}
1463                 nova::api::ec2_workers: {get_input: nova_workers}
1464                 nova::api::metadata_workers: {get_input: nova_workers}
1465                 nova::database_connection: {get_input: nova_dsn}
1466                 nova::glance_api_servers: {get_input: glance_api_servers}
1467                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1468                 nova::api::instance_name_template: {get_input: instance_name_template}
1469                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
1470                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
1471                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
1472                 nova::vncproxy::host: {get_input: nova_api_network}
1473                 nova::db::mysql::password: {get_input: nova_password}
1474                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
1475
1476                 # Horizon
1477                 apache::ip: {get_input: horizon_network}
1478                 horizon::allowed_hosts: {get_input: horizon_allowed_hosts}
1479                 horizon::django_debug: {get_input: debug}
1480                 horizon::secret_key: {get_input: horizon_secret}
1481                 horizon::bind_address: {get_input: horizon_network}
1482                 horizon::keystone_url: {get_input: keystone_auth_uri}
1483
1484                 # Sahara
1485                 sahara::host: {get_input: sahara_api_network}
1486                 sahara::plugins:
1487                   - cdh
1488                   - hdp
1489                   - mapr
1490                   - vanilla
1491                   - spark
1492                   - storm
1493                 sahara::admin_password: {get_input: sahara_password}
1494                 sahara::auth_uri: {get_input: keystone_auth_uri}
1495                 sahara::admin_user: sahara
1496                 sahara::identity_uri: {get_input: keystone_identity_uri}
1497                 sahara::use_neutron: true
1498                 sahara::database_connection: {get_input: sahara_dsn}
1499                 sahara::debug: {get_input: debug}
1500                 sahara::rpc_backend: rabbit
1501                 sahara::rabbit_userid: {get_input: rabbit_username}
1502                 sahara::rabbit_password: {get_input: rabbit_password}
1503                 sahara::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1504                 sahara::rabbit_port: {get_input: rabbit_client_port}
1505                 sahara::db::mysql::password: {get_input: sahara_password}
1506
1507                 # Rabbit
1508                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
1509                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
1510                 rabbitmq::file_limit: {get_input: rabbit_fd_limit}
1511                 rabbitmq::default_user: {get_input: rabbit_username}
1512                 rabbitmq::default_pass: {get_input: rabbit_password}
1513                 # Redis
1514                 redis::bind: {get_input: redis_network}
1515                 redis_vip: {get_input: redis_vip}
1516                 # Firewall
1517                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
1518                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
1519                 # Misc
1520                 memcached::listen_ip: {get_input: memcached_network}
1521                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
1522                 ntp::servers: {get_input: ntp_servers}
1523                 timezone::timezone: {get_input: timezone}
1524                 control_virtual_interface: {get_input: control_virtual_interface}
1525                 public_virtual_interface: {get_input: public_virtual_interface}
1526                 tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
1527                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
1528                 tripleo::loadbalancer::haproxy_log_address: {get_input: haproxy_log_address}
1529                 tripleo::loadbalancer::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
1530                 tripleo::packages::enable_install: {get_input: enable_package_install}
1531                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
1532
1533   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
1534   ControllerExtraConfigPre:
1535     depends_on: ControllerDeployment
1536     type: OS::TripleO::ControllerExtraConfigPre
1537     properties:
1538         server: {get_resource: Controller}
1539
1540   # Hook for site-specific additional pre-deployment config,
1541   # applying to all nodes, e.g node registration/unregistration
1542   NodeExtraConfig:
1543     depends_on: [ControllerExtraConfigPre, NodeTLSData]
1544     type: OS::TripleO::NodeExtraConfig
1545     properties:
1546         server: {get_resource: Controller}
1547
1548   UpdateConfig:
1549     type: OS::TripleO::Tasks::PackageUpdate
1550
1551   UpdateDeployment:
1552     type: OS::Heat::SoftwareDeployment
1553     properties:
1554       config: {get_resource: UpdateConfig}
1555       server: {get_resource: Controller}
1556       input_values:
1557         update_identifier:
1558           get_param: UpdateIdentifier
1559
1560 outputs:
1561   ip_address:
1562     description: IP address of the server in the ctlplane network
1563     value: {get_attr: [Controller, networks, ctlplane, 0]}
1564   external_ip_address:
1565     description: IP address of the server in the external network
1566     value: {get_attr: [ExternalPort, ip_address]}
1567   internal_api_ip_address:
1568     description: IP address of the server in the internal_api network
1569     value: {get_attr: [InternalApiPort, ip_address]}
1570   storage_ip_address:
1571     description: IP address of the server in the storage network
1572     value: {get_attr: [StoragePort, ip_address]}
1573   storage_mgmt_ip_address:
1574     description: IP address of the server in the storage_mgmt network
1575     value: {get_attr: [StorageMgmtPort, ip_address]}
1576   tenant_ip_address:
1577     description: IP address of the server in the tenant network
1578     value: {get_attr: [TenantPort, ip_address]}
1579   management_ip_address:
1580     description: IP address of the server in the management network
1581     value: {get_attr: [ManagementPort, ip_address]}
1582   hostname:
1583     description: Hostname of the server
1584     value: {get_attr: [Controller, name]}
1585   corosync_node:
1586     description: >
1587       Node object in the format {ip: ..., name: ...} format that the corosync
1588       element expects
1589     value:
1590       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1591       name: {get_attr: [Controller, name]}
1592   hosts_entry:
1593     description: >
1594       Server's IP address and hostname in the /etc/hosts format
1595     value:
1596       str_replace:
1597         template: IP HOST.DOMAIN HOST
1598         params:
1599           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
1600           DOMAIN: {get_param: CloudDomain}
1601           HOST: {get_attr: [Controller, name]}
1602   nova_server_resource:
1603     description: Heat resource handle for the Nova compute server
1604     value:
1605       {get_resource: Controller}
1606   swift_device:
1607     description: Swift device formatted for swift-ring-builder
1608     value:
1609       str_replace:
1610         template: 'r1z1-IP:%PORT%/d1'
1611         params:
1612           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1613   swift_proxy_memcache:
1614     description: Swift proxy-memcache value
1615     value:
1616       str_replace:
1617         template: "IP:11211"
1618         params:
1619           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1620   config_identifier:
1621     description: identifier which changes if the controller configuration may need re-applying
1622     value:
1623       list_join:
1624         - ','
1625         - - {get_attr: [ControllerDeployment, deploy_stdout]}
1626           - {get_attr: [NodeTLSCAData, deploy_stdout]}
1627           - {get_attr: [NodeTLSData, deploy_stdout]}
1628           - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
1629           - {get_param: UpdateIdentifier}
1630   tls_key_modulus_md5:
1631     description: MD5 checksum of the TLS Key Modulus
1632     value: {get_attr: [NodeTLSData, key_modulus_md5]}
1633   tls_cert_modulus_md5:
1634     description: MD5 checksum of the TLS Certificate Modulus
1635     value: {get_attr: [NodeTLSData, cert_modulus_md5]}