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