Merge "Wire ServiceNetMap as a top level parameter"
[apex-tripleo-heat-templates.git] / puppet / controller-puppet.yaml
1 heat_template_version: 2015-04-30
2
3 description: >
4   OpenStack controller node configured by Puppet.
5
6 parameters:
7   AdminPassword:
8     default: unset
9     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
10     type: string
11     hidden: true
12   AdminToken:
13     default: unset
14     description: The keystone auth secret and db password.
15     type: string
16     hidden: true
17   CeilometerBackend:
18     default: 'mongodb'
19     description: The ceilometer backend type.
20     type: string
21   CeilometerMeteringSecret:
22     default: unset
23     description: Secret shared by the ceilometer services.
24     type: string
25     hidden: true
26   CeilometerPassword:
27     default: unset
28     description: The password for the ceilometer service  and db account.
29     type: string
30     hidden: true
31   CinderEnableIscsiBackend:
32     default: true
33     description: Whether to enable or not the Iscsi backend for Cinder
34     type: boolean
35   CinderEnableRbdBackend:
36     default: false
37     description: Whether to enable or not the Rbd backend for Cinder
38     type: boolean
39   CinderISCSIHelper:
40     default: tgtadm
41     description: The iSCSI helper to use with cinder.
42     type: string
43   CinderLVMLoopDeviceSize:
44     default: 5000
45     description: The size of the loopback file used by the cinder LVM driver.
46     type: number
47   CinderPassword:
48     default: unset
49     description: The password for the cinder service and db account, used by cinder-api.
50     type: string
51     hidden: true
52   CloudName:
53     default: ''
54     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
55     type: string
56   ControllerExtraConfig:
57     default: {}
58     description: |
59       Controller specific configuration to inject into the cluster. Same
60       structure as ExtraConfig.
61     type: json
62   ControlVirtualInterface:
63     default: 'br-ex'
64     description: Interface where virtual ip will be assigned.
65     type: string
66   Debug:
67     default: ''
68     description: Set to True to enable debugging on all services.
69     type: string
70   EnableGalera:
71     default: true
72     description: Whether to use Galera instead of regular MariaDB.
73     type: boolean
74   EnablePacemaker:
75     default: false
76     description: If enabled services will be monitored by Pacemaker; it
77       will manage VIPs as well, in place of Keepalived.
78     type: boolean
79   EnableCephStorage:
80     default: false
81     description: Whether to deploy Ceph Storage (OSD) on the Controller
82     type: boolean
83   EnableSwiftStorage:
84     default: true
85     description: Whether to enable Swift Storage on the Controller
86     type: boolean
87   ExtraConfig:
88     default: {}
89     description: |
90       Additional configuration to inject into the cluster. The JSON should have
91       the following structure:
92         {"FILEKEY":
93           {"config":
94             [{"section": "SECTIONNAME",
95               "values":
96                 [{"option": "OPTIONNAME",
97                   "value": "VALUENAME"
98                  }
99                 ]
100              }
101             ]
102           }
103         }
104       For instance:
105         {"nova":
106           {"config":
107             [{"section": "default",
108               "values":
109                 [{"option": "compute_manager",
110                   "value": "ironic.nova.compute.manager.ClusterComputeManager"
111                  }
112                 ]
113              },
114              {"section": "cells",
115               "values":
116                 [{"option": "driver",
117                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
118                  }
119                 ]
120              }
121             ]
122           }
123         }
124     type: json
125   Flavor:
126     description: Flavor for control nodes to request when deploying.
127     type: string
128     constraints:
129       - custom_constraint: nova.flavor
130   GlanceNotifierStrategy:
131     description: Strategy to use for Glance notification queue
132     type: string
133     default: noop
134   GlanceLogFile:
135     description: The filepath of the file to use for logging messages from Glance.
136     type: string
137     default: ''
138   GlancePassword:
139     default: unset
140     description: The password for the glance service and db account, used by the glance services.
141     type: string
142     hidden: true
143   GlancePort:
144     default: "9292"
145     description: Glance port.
146     type: string
147   GlanceProtocol:
148     default: http
149     description: Protocol to use when connecting to glance, set to https for SSL.
150     type: string
151   GlanceBackend:
152     default: swift
153     description: The short name of the Glance backend to use. Should be one
154       of swift, rbd, or file
155     type: string
156     constraints:
157     - allowed_values: ['swift', 'file', 'rbd']
158   HeatPassword:
159     default: unset
160     description: The password for the Heat service and db account, used by the Heat services.
161     type: string
162     hidden: true
163   HeatStackDomainAdminPassword:
164     description: Password for heat_domain_admin user.
165     type: string
166     default: ''
167     hidden: true
168   HeatAuthEncryptionKey:
169     description: Auth encryption key for heat-engine
170     type: string
171   HorizonSecret:
172     description: Secret key for Django
173     type: string
174   Image:
175     type: string
176     default: overcloud-control
177     constraints:
178       - custom_constraint: glance.image
179   ImageUpdatePolicy:
180     default: 'REBUILD_PRESERVE_EPHEMERAL'
181     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
182     type: string
183   KeyName:
184     default: default
185     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
186     type: string
187     constraints:
188       - custom_constraint: nova.keypair
189   KeystoneCACertificate:
190     default: ''
191     description: Keystone self-signed certificate authority certificate.
192     type: string
193   KeystoneSigningCertificate:
194     default: ''
195     description: Keystone certificate for verifying token validity.
196     type: string
197   KeystoneSigningKey:
198     default: ''
199     description: Keystone key for signing tokens.
200     type: string
201     hidden: true
202   KeystoneSSLCertificate:
203     default: ''
204     description: Keystone certificate for verifying token validity.
205     type: string
206   KeystoneSSLCertificateKey:
207     default: ''
208     description: Keystone key for signing tokens.
209     type: string
210     hidden: true
211   MysqlClusterUniquePart:
212     description: A unique identifier of the MySQL cluster the controller is in.
213     type: string
214     default: 'unset'  # Has to be here because of the ignored empty value bug
215     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
216     # constraints:
217     # - length: {min: 4, max: 10}
218   MysqlInnodbBufferPoolSize:
219     description: >
220         Specifies the size of the buffer pool in megabytes. Setting to
221         zero should be interpreted as "no value" and will defer to the
222         lower level default.
223     type: number
224     default: 0
225   MysqlRootPassword:
226     type: string
227     hidden: true
228     default: ''  # Has to be here because of the ignored empty value bug
229   NeutronBridgeMappings:
230     description: >
231       The OVS logical->physical bridge mappings to use. See the Neutron
232       documentation for details. Defaults to mapping br-ex - the external
233       bridge on hosts - to a physical name 'datacentre' which can be used
234       to create provider networks (and we use this for the default floating
235       network) - if changing this either use different post-install network
236       scripts or be sure to keep 'datacentre' as a mapping network name.
237     type: string
238     default: "datacentre:br-ex"
239   NeutronDnsmasqOptions:
240     default: 'dhcp-option-force=26,1400'
241     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the gre tunnel overhead.
242     type: string
243   NeutronAgentMode:
244     default: 'dvr_snat'
245     description: Agent mode for the neutron-l3-agent on the controller hosts
246     type: string
247   NeutronL3HA:
248     default: 'False'
249     description: Whether to enable l3-agent HA
250     type: string
251   NeutronDVR:
252     default: 'False'
253     description: Whether to configure Neutron Distributed Virtual Routers
254     type: string
255   NeutronMetadataProxySharedSecret:
256     default: 'unset'
257     description: Shared secret to prevent spoofing
258     type: string
259   NeutronMechanismDrivers:
260     default: 'openvswitch'
261     description: |
262         The mechanism drivers for the Neutron tenant network. To specify multiple
263         values, use a comma separated string, like so: 'openvswitch,l2_population'
264     type: string
265   NeutronAllowL3AgentFailover:
266     default: 'True'
267     description: Allow automatic l3-agent failover
268     type: string
269   NeutronEnableTunnelling:
270     type: string
271     default: "True"
272   NeutronFlatNetworks:
273     type: string
274     default: 'datacentre'
275     description: If set, flat networks to configure in neutron plugins.
276   NeutronL3HA:
277     default: 'False'
278     description: Whether to enable l3-agent HA
279     type: string
280   NeutronNetworkType:
281     default: 'gre'
282     description: The tenant network type for Neutron, either gre or vxlan.
283     type: string
284   NeutronNetworkVLANRanges:
285     default: 'datacentre'
286     description: >
287       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
288       Neutron documentation for permitted values. Defaults to permitting any
289       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
290     type: string
291   NeutronPassword:
292     default: unset
293     description: The password for the neutron service and db account, used by neutron agents.
294     type: string
295     hidden: true
296   NeutronPublicInterface:
297     default: nic1
298     description: What interface to bridge onto br-ex for network nodes.
299     type: string
300   NeutronPublicInterfaceTag:
301     default: ''
302     description: >
303       VLAN tag for creating a public VLAN. The tag will be used to
304       create an access port on the exterior bridge for each control plane node,
305       and that port will be given the IP address returned by neutron from the
306       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
307       overcloud.yaml to include the deployment of VLAN ports to the control
308       plane.
309     type: string
310   NeutronPublicInterfaceDefaultRoute:
311     default: ''
312     description: A custom default route for the NeutronPublicInterface.
313     type: string
314   NeutronPublicInterfaceIP:
315     default: ''
316     description: A custom IP address to put onto the NeutronPublicInterface.
317     type: string
318   NeutronPublicInterfaceRawDevice:
319     default: ''
320     description: If set, the public interface is a vlan with this device as the raw device.
321     type: string
322   NeutronTunnelTypes:
323     default: 'gre'
324     description: |
325         The tunnel types for the Neutron tenant network. To specify multiple
326         values, use a comma separated string, like so: 'gre,vxlan'
327     type: string
328   NovaPassword:
329     default: unset
330     description: The password for the nova service and db account, used by nova-api.
331     type: string
332     hidden: true
333   NtpServer:
334     type: string
335     default: ''
336   PcsdPassword:
337     type: string
338     description: The password for the 'pcsd' user.
339   PublicVirtualInterface:
340     default: 'br-ex'
341     description: >
342         Specifies the interface where the public-facing virtual ip will be assigned.
343         This should be int_public when a VLAN is being used.
344     type: string
345   PublicVirtualIP:
346     type: string
347     default: ''  # Has to be here because of the ignored empty value bug
348   RabbitCookie:
349     type: string
350     default: ''  # Has to be here because of the ignored empty value bug
351     hidden: true
352   RabbitPassword:
353     default: guest
354     description: The password for RabbitMQ
355     type: string
356     hidden: true
357   RabbitUserName:
358     default: guest
359     description: The username for RabbitMQ
360     type: string
361   RabbitClientUseSSL:
362     default: false
363     description: >
364         Rabbit client subscriber parameter to specify
365         an SSL connection to the RabbitMQ host.
366     type: string
367   RabbitClientPort:
368     default: 5672
369     description: Set rabbit subscriber port, change this if using SSL
370     type: number
371   SnmpdReadonlyUserName:
372     default: ro_snmp_user
373     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
374     type: string
375   SnmpdReadonlyUserPassword:
376     default: unset
377     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
378     type: string
379     hidden: true
380   SSLCACertificate:
381     default: ''
382     description: If set, the contents of an SSL certificate authority file.
383     type: string
384   SSLCertificate:
385     default: ''
386     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
387     type: string
388     hidden: true
389   SSLKey:
390     default: ''
391     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
392     type: string
393     hidden: true
394   SwiftHashSuffix:
395     default: unset
396     description: A random string to be used as a salt when hashing to determine mappings
397       in the ring.
398     hidden: true
399     type: string
400   SwiftMountCheck:
401     default: 'false'
402     description: Value of mount_check in Swift account/container/object -server.conf
403     type: boolean
404   SwiftMinPartHours:
405     type: number
406     default: 1
407     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
408   SwiftPartPower:
409     default: 10
410     description: Partition Power to use when building Swift rings
411     type: number
412   SwiftPassword:
413     default: unset
414     description: The password for the swift service account, used by the swift proxy
415       services.
416     hidden: true
417     type: string
418   SwiftReplicas:
419     type: number
420     default: 3
421     description: How many replicas to use in the swift rings.
422   VirtualIP:
423     type: string
424     default: ''  # Has to be here because of the ignored empty value bug
425   EnablePackageInstall:
426     default: 'false'
427     description: Set to true to enable package installation via Puppet
428     type: boolean
429   ServiceNetMap:
430     default: {}
431     description: Mapping of service_name -> network name. Typically set
432                  via parameter_defaults in the resource registry.
433     type: json
434
435 resources:
436
437   Controller:
438     type: OS::Nova::Server
439     properties:
440       image: {get_param: Image}
441       image_update_policy: {get_param: ImageUpdatePolicy}
442       flavor: {get_param: Flavor}
443       key_name: {get_param: KeyName}
444       networks:
445         - network: ctlplane
446       user_data_format: SOFTWARE_CONFIG
447       user_data: {get_resource: NodeUserData}
448
449   NodeUserData:
450     type: OS::TripleO::NodeUserData
451
452   ExternalPort:
453     type: OS::TripleO::Controller::Ports::ExternalPort
454     properties:
455       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
456
457   InternalApiPort:
458     type: OS::TripleO::Controller::Ports::InternalApiPort
459     properties:
460       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
461
462   StoragePort:
463     type: OS::TripleO::Controller::Ports::StoragePort
464     properties:
465       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
466
467   StorageMgmtPort:
468     type: OS::TripleO::Controller::Ports::StorageMgmtPort
469     properties:
470       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
471
472   TenantPort:
473     type: OS::TripleO::Controller::Ports::TenantPort
474     properties:
475       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
476
477   NetIpMap:
478     type: OS::TripleO::Network::Ports::NetIpMap
479     properties:
480       ExternalIp: {get_attr: [ExternalPort, ip_address]}
481       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
482       StorageIp: {get_attr: [StoragePort, ip_address]}
483       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
484       TenantIp: {get_attr: [TenantPort, ip_address]}
485
486   NetworkConfig:
487     type: OS::TripleO::Controller::Net::SoftwareConfig
488     properties:
489       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
490       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
491       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
492       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
493       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
494
495   NetworkDeployment:
496     type: OS::TripleO::SoftwareDeployment
497     properties:
498       signal_transport: NO_SIGNAL
499       config: {get_resource: NetworkConfig}
500       server: {get_resource: Controller}
501       input_values:
502         bridge_name: br-ex
503         interface_name: {get_param: NeutronPublicInterface}
504
505   ControllerDeployment:
506     type: OS::TripleO::SoftwareDeployment
507     properties:
508       signal_transport: NO_SIGNAL
509       config: {get_resource: ControllerConfig}
510       server: {get_resource: Controller}
511       input_values:
512         bootstack_nodeid: {get_attr: [Controller, name]}
513         controller_virtual_ip: {get_param: VirtualIP}
514         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
515         heat.watch_server_url:
516           list_join:
517             - ''
518             - - 'http://'
519               - {get_param: VirtualIP}
520               - ':8003'
521         heat.metadata_server_url:
522           list_join:
523             - ''
524             - - 'http://'
525               - {get_param: VirtualIP}
526               - ':8000'
527         heat.waitcondition_server_url:
528           list_join:
529             - ''
530             - - 'http://'
531               - {get_param: VirtualIP}
532               - ':8000/v1/waitcondition'
533         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
534         horizon_secret: {get_param: HorizonSecret}
535         admin_password: {get_param: AdminPassword}
536         admin_token: {get_param: AdminToken}
537         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
538         debug: {get_param: Debug}
539         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
540         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
541         cinder_password: {get_param: CinderPassword}
542         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
543         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
544         cinder_dsn:
545           list_join:
546             - ''
547             - - 'mysql://cinder:'
548               - {get_param: CinderPassword}
549               - '@'
550               - {get_param: VirtualIP}
551               - '/cinder'
552         glance_port: {get_param: GlancePort}
553         glance_protocol: {get_param: GlanceProtocol}
554         glance_password: {get_param: GlancePassword}
555         glance_backend: {get_param: GlanceBackend}
556         glance_swift_store_auth_address: {list_join: ['', ['http://', {get_param: VirtualIP} , ':5000/v2.0']]}
557         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
558         glance_log_file: {get_param: GlanceLogFile}
559         glance_dsn:
560           list_join:
561             - ''
562             - - 'mysql://glance:'
563               - {get_param: GlancePassword}
564               - '@'
565               - {get_param: VirtualIP}
566               - '/glance'
567         heat_password: {get_param: HeatPassword}
568         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
569         heat_dsn:
570           list_join:
571             - ''
572             - - 'mysql://heat:'
573               - {get_param: HeatPassword}
574               - '@'
575               - {get_param: VirtualIP}
576               - '/heat'
577         keystone_ca_certificate: {get_param: KeystoneCACertificate}
578         keystone_signing_key: {get_param: KeystoneSigningKey}
579         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
580         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
581         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
582         keystone_dsn:
583           list_join:
584             - ''
585             - - 'mysql://keystone:'
586               - {get_param: AdminToken}
587               - '@'
588               - {get_param: VirtualIP}
589               - '/keystone'
590         keystone_identity_uri:
591           list_join:
592             - ''
593             - - 'http://'
594               - {get_param: VirtualIP}
595               - ':35357/'
596         keystone_auth_uri:
597           list_join:
598             - ''
599             - - 'http://'
600               - {get_param: VirtualIP}
601               - ':5000/v2.0/'
602         enable_galera: {get_param: EnableGalera}
603         enable_ceph_storage: {get_param: EnableCephStorage}
604         enable_swift_storage: {get_param: EnableSwiftStorage}
605         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
606         mysql_root_password: {get_param: MysqlRootPassword}
607         mysql_cluster_name:
608           str_replace:
609             template: tripleo-CLUSTER
610             params:
611               CLUSTER: {get_param: MysqlClusterUniquePart}
612         neutron_flat_networks: {get_param: NeutronFlatNetworks}
613         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
614         neutron_agent_mode: {get_param: NeutronAgentMode}
615         neutron_router_distributed: {get_param: NeutronDVR}
616         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
617         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
618         neutron_l3_ha: {get_param: NeutronL3HA}
619         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
620         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
621         neutron_public_interface: {get_param: NeutronPublicInterface}
622         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
623         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
624         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
625         neutron_tenant_network_type: {get_param: NeutronNetworkType}
626         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
627         neutron_password: {get_param: NeutronPassword}
628         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
629         neutron_dsn:
630           list_join:
631             - ''
632             - - 'mysql://neutron:'
633               - {get_param: NeutronPassword}
634               - '@'
635               - {get_param: VirtualIP}
636               - '/ovs_neutron?charset=utf8'
637         neutron_url:
638           list_join:
639             - ''
640             - - 'http://'
641               - {get_param: VirtualIP}
642               - ':9696'
643         neutron_admin_auth_url:
644           list_join:
645             - ''
646             - - 'http://'
647               - {get_param: VirtualIP}
648               - ':35357/v2.0'
649         ceilometer_backend: {get_param: CeilometerBackend}
650         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
651         ceilometer_password: {get_param: CeilometerPassword}
652         ceilometer_dsn:
653           list_join:
654             - ''
655             - - 'mysql://ceilometer:unset@'
656               - {get_param: VirtualIP}
657               - '/ceilometer'
658         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
659         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
660         nova_password: {get_param: NovaPassword}
661         nova_dsn:
662           list_join:
663             - ''
664             - - 'mysql://nova:'
665               - {get_param: NovaPassword}
666               - '@'
667               - {get_param: VirtualIP}
668               - '/nova'
669         pcsd_password: {get_param: PcsdPassword}
670         rabbit_username: {get_param: RabbitUserName}
671         rabbit_password: {get_param: RabbitPassword}
672         rabbit_cookie: {get_param: RabbitCookie}
673         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
674         rabbit_client_port: {get_param: RabbitClientPort}
675         ntp_servers:
676           str_replace:
677             template: '["server"]'
678             params:
679               server: {get_param: NtpServer}
680         control_virtual_interface: {get_param: ControlVirtualInterface}
681         public_virtual_interface: {get_param: PublicVirtualInterface}
682         public_virtual_ip: {get_param: PublicVirtualIP}
683         swift_hash_suffix: {get_param: SwiftHashSuffix}
684         swift_password: {get_param: SwiftPassword}
685         swift_part_power: {get_param: SwiftPartPower}
686         swift_replicas: {get_param: SwiftReplicas}
687         swift_min_part_hours: {get_param: SwiftMinPartHours}
688         swift_mount_check: {get_param: SwiftMountCheck}
689         enable_package_install: {get_param: EnablePackageInstall}
690         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
691         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
692         cinder_iscsi_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
693         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
694         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
695         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
696         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
697         heat_api_cloudwatch_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiCloudwatchNetwork]}]}
698         heat_api_cfn_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiCfnNetwork]}]}
699         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
700         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
701         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
702         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
703         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronLocalIp]}]}
704         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
705         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
706         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
707         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
708         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
709         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
710         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
711         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
712
713   # Map heat metadata into hiera datafiles
714   ControllerConfig:
715     type: OS::Heat::StructuredConfig
716     properties:
717       group: os-apply-config
718       config:
719         hiera:
720           hierarchy:
721             - heat_config_%{::deploy_config_name}
722             - controller
723             - object
724             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
725             - ceph_cluster # provided by CephClusterConfig
726             - ceph
727             - bootstrap_node # provided by BootstrapNodeConfig
728             - all_nodes # provided by allNodesConfig
729             - '"%{::osfamily}"'
730             - common
731           datafiles:
732             common:
733               raw_data: {get_file: hieradata/common.yaml}
734             ceph:
735               raw_data: {get_file: hieradata/ceph.yaml}
736             object:
737               raw_data: {get_file: hieradata/object.yaml}
738             controller:
739               raw_data: {get_file: hieradata/controller.yaml}
740               mapped_data: # data supplied directly to this deployment configuration, etc
741                 bootstack_nodeid: {get_input: bootstack_nodeid}
742
743                 # Pacemaker
744                 hacluster_pwd: {get_input: pcsd_password}
745
746                 # Swift
747                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
748                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
749                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
750                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
751                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
752                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
753                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
754                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
755                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
756                 swift_mount_check: {get_input: swift_mount_check}
757
758                 # NOTE(dprince): build_ring support is currently not wired in.
759                 # See: https://review.openstack.org/#/c/109225/
760                 tripleo::ringbuilder::build_ring: True
761
762                 # Cinder
763                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
764                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
765                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
766                 cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
767                 cinder::database_connection: {get_input: cinder_dsn}
768                 cinder::api::keystone_password: {get_input: cinder_password}
769                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
770                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
771                 cinder::api::bind_host: {get_input: cinder_api_network}
772                 cinder::rabbit_userid: {get_input: rabbit_username}
773                 cinder::rabbit_password: {get_input: rabbit_password}
774                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
775                 cinder::rabbit_port: {get_input: rabbit_client_port}
776                 cinder::debug: {get_input: debug}
777                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
778
779                 # Glance
780                 glance::api::bind_port: {get_input: glance_port}
781                 glance::api::bind_host: {get_input: glance_api_network}
782                 glance::api::auth_uri: {get_input: keystone_auth_uri}
783                 glance::api::identity_uri: {get_input: keystone_identity_uri}
784                 glance::api::registry_host: {get_input: glance_registry_network}
785                 glance::api::keystone_password: {get_input: glance_password}
786                 glance::api::debug: {get_input: debug}
787                 # used to construct glance_api_servers
788                 glance_port: {get_input: glance_port}
789                 glance_protocol: {get_input: glance_protocol}
790                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
791                 glance_log_file: {get_input: glance_log_file}
792                 glance_log_file: {get_input: glance_log_file}
793                 glance::api::database_connection: {get_input: glance_dsn}
794                 glance::registry::keystone_password: {get_input: glance_password}
795                 glance::registry::database_connection: {get_input: glance_dsn}
796                 glance::registry::bind_host: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
797                 glance::registry::auth_uri: {get_input: keystone_auth_uri}
798                 glance::registry::identity_uri: {get_input: keystone_identity_uri}
799                 glance::registry::debug: {get_input: debug}
800                 glance::backend::swift::swift_store_auth_address: {get_input: glance_swift_store_auth_address}
801                 glance::backend::swift::swift_store_user: service:glance
802                 glance::backend::swift::swift_store_key: {get_input: glance_password}
803                 glance_backend: {get_input: glance_backend}
804
805                 # Heat
806                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
807                 heat::engine::heat_watch_server_url: {get_input: heat.watch_server_url}
808                 heat::engine::heat_metadata_server_url: {get_input: heat.metadata_server_url}
809                 heat::engine::heat_waitcondition_server_url: {get_input: heat.waitcondition_server_url}
810                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
811                 heat::rabbit_userid: {get_input: rabbit_username}
812                 heat::rabbit_password: {get_input: rabbit_password}
813                 heat::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
814                 heat::rabbit_port: {get_input: rabbit_client_port}
815                 heat::auth_uri: {get_input: keystone_auth_uri}
816                 heat::identity_uri: {get_input: keystone_identity_uri}
817                 heat::keystone_password: {get_input: heat_password}
818                 heat::api::bind_host: {get_input: heat_api_network}
819                 heat::api_cloudwatch::bind_host: {get_input: heat_api_cloudwatch_network}
820                 heat::api_cfn::bind_host: {get_input: heat_api_cfn_network}
821                 heat::database_connection: {get_input: heat_dsn}
822                 heat::instance_user: heat-admin
823                 heat::debug: {get_input: debug}
824
825                 # Keystone
826                 keystone::admin_token: {get_input: admin_token}
827                 keystone_ca_certificate: {get_input: keystone_ca_certificate}
828                 keystone_signing_key: {get_input: keystone_signing_key}
829                 keystone_signing_certificate: {get_input: keystone_signing_certificate}
830                 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
831                 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
832                 keystone::database_connection: {get_input: keystone_dsn}
833                 keystone::public_bind_host: {get_input: keystone_public_api_network}
834                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
835                 keystone::debug: {get_input: debug}
836                 # MongoDB
837                 mongodb::server::bind_ip: {get_input: mongo_db_network}
838                 # MySQL
839                 admin_password: {get_input: admin_password}
840                 enable_galera: {get_input: enable_galera}
841                 enable_ceph_storage: {get_input: enable_ceph_storage}
842                 enable_swift_storage: {get_input: enable_swift_storage}
843                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
844                 mysql::server::root_password: {get_input: mysql_root_password}
845                 mysql_cluster_name: {get_input: mysql_cluster_name}
846                 mysql_bind_host: {get_input: mysql_network}
847
848                 # Neutron
849                 neutron::bind_host: {get_input: neutron_api_network}
850                 neutron::rabbit_password: {get_input: rabbit_password}
851                 neutron::rabbit_user: {get_input: rabbit_user}
852                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
853                 neutron::rabbit_port: {get_input: rabbit_client_port}
854                 neutron::debug: {get_input: debug}
855                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
856                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
857                 neutron::server::database_connection: {get_input: neutron_dsn}
858                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
859                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
860                 neutron_flat_networks: {get_input: neutron_flat_networks}
861                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
862                 neutron::agents::metadata::metadata_ip: {get_input: controller_virtual_ip}
863                 neutron_agent_mode: {get_input: neutron_agent_mode}
864                 neutron_router_distributed: {get_input: neutron_router_distributed}
865                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
866                 neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
867                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
868                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
869                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
870                 neutron_public_interface: {get_input: neutron_public_interface}
871                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
872                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
873                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
874                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
875                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
876                 neutron::server::auth_password: {get_input: neutron_password}
877                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
878                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
879                 neutron_dsn: {get_input: neutron_dsn}
880
881                 # Ceilometer
882                 ceilometer_backend: {get_input: ceilometer_backend}
883                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
884                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
885                 ceilometer::rabbit_userid: {get_input: rabbit_username}
886                 ceilometer::rabbit_password: {get_input: rabbit_password}
887                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
888                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
889                 ceilometer::debug: {get_input: debug}
890                 ceilometer::api::host: {get_input: ceilometer_api_network}
891                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
892                 ceilometer::api::keystone_auth_uri: {get_input: keystone_auth_uri}
893                 ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri}
894                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
895                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
896                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
897
898                 # Nova
899                 nova::rabbit_userid: {get_input: rabbit_username}
900                 nova::rabbit_password: {get_input: rabbit_password}
901                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
902                 nova::rabbit_port: {get_input: rabbit_client_port}
903                 nova::debug: {get_input: debug}
904                 nova::api::auth_uri: {get_input: keystone_auth_uri}
905                 nova::api::identity_uri: {get_input: keystone_identity_uri}
906                 nova::api::api_bind_address: {get_input: nova_api_network}
907                 nova::api::metadata_listen: {get_input: nova_metadata_network}
908                 nova::api::admin_password: {get_input: nova_password}
909                 nova::database_connection: {get_input: nova_dsn}
910                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
911                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
912                 nova::network::neutron::neutron_url: {get_input: neutron_url}
913                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
914
915                 # Horizon
916                 horizon::django_debug: {get_input: debug}
917                 horizon::secret_key: {get_input: horizon_secret}
918                 horizon::bind_address: {get_input: horizon_network}
919                 horizon::keystone_url: {get_input: keystone_auth_uri}
920
921                 # Rabbit
922                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
923                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
924                 # Redis
925                 redis::bind: {get_input: redis_network}
926                 # Misc
927                 memcached::listen_ip: {get_input: memcached_network}
928                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
929                 ntp::servers: {get_input: ntp_servers}
930                 control_virtual_interface: {get_input: control_virtual_interface}
931                 controller_virtual_ip: {get_input: controller_virtual_ip}
932                 public_virtual_interface: {get_input: public_virtual_interface}
933                 public_virtual_ip: {get_input: public_virtual_ip}
934                 tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
935                 tripleo::loadbalancer::controller_virtual_ip: {get_input: controller_virtual_ip}
936                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
937                 tripleo::loadbalancer::public_virtual_ip: {get_input: public_virtual_ip}
938                 enable_package_install: {get_input: enable_package_install}
939
940 outputs:
941   ip_address:
942     description: IP address of the server in the ctlplane network
943     value: {get_attr: [Controller, networks, ctlplane, 0]}
944   external_ip_address:
945     description: IP address of the server in the external network
946     value: {get_attr: [ExternalPort, ip_address]}
947   internal_api_ip_address:
948     description: IP address of the server in the internal_api network
949     value: {get_attr: [InternalApiPort, ip_address]}
950   storage_ip_address:
951     description: IP address of the server in the storage network
952     value: {get_attr: [StoragePort, ip_address]}
953   storage_mgmt_ip_address:
954     description: IP address of the server in the storage_mgmt network
955     value: {get_attr: [StorageMgmtPort, ip_address]}
956   tenant_ip_address:
957     description: IP address of the server in the tenant network
958     value: {get_attr: [TenantPort, ip_address]}
959   hostname:
960     description: Hostname of the server
961     value: {get_attr: [Controller, name]}
962   corosync_node:
963     description: >
964       Node object in the format {ip: ..., name: ...} format that the corosync
965       element expects
966     value:
967       ip: {get_attr: [Controller, networks, ctlplane, 0]}
968       name: {get_attr: [Controller, name]}
969   hosts_entry:
970     description: >
971       Server's IP address and hostname in the /etc/hosts format
972     value:
973       str_replace:
974         template: IP HOST CLOUDNAME
975         params:
976           IP: {get_attr: [Controller, networks, ctlplane, 0]}
977           HOST: {get_attr: [Controller, name]}
978           CLOUDNAME: {get_param: CloudName}
979   nova_server_resource:
980     description: Heat resource handle for the Nova compute server
981     value:
982       {get_resource: Controller}
983   swift_device:
984     description: Swift device formatted for swift-ring-builder
985     value:
986       str_replace:
987         template: 'r1z1-IP:%PORT%/d1'
988         params:
989           IP: {get_attr: [Controller, networks, ctlplane, 0]}
990   swift_proxy_memcache:
991     description: Swift proxy-memcache value
992     value:
993       str_replace:
994         template: "IP:11211"
995         params:
996           IP: {get_attr: [Controller, networks, ctlplane, 0]}