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