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