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