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