Merge "Enable httpd balancing for Horizon"
[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   CinderBackendConfig:
53     default: {}
54     description: Contains parameters to configure Cinder backends. Typically
55                  set via parameter_defaults in the resource registry.
56     type: json
57   CloudName:
58     default: ''
59     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
60     type: string
61   ControllerExtraConfig:
62     default: {}
63     description: |
64       Controller specific configuration to inject into the cluster. Same
65       structure as ExtraConfig.
66     type: json
67   ControlVirtualInterface:
68     default: 'br-ex'
69     description: Interface where virtual ip will be assigned.
70     type: string
71   Debug:
72     default: ''
73     description: Set to True to enable debugging on all services.
74     type: string
75   EnableGalera:
76     default: true
77     description: Whether to use Galera instead of regular MariaDB.
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: comma_delimited_list
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: # DEPRECATED: use per service settings instead
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   RedisVirtualIP:
372     type: string
373     default: ''  # Has to be here because of the ignored empty value bug
374   SnmpdReadonlyUserName:
375     default: ro_snmp_user
376     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
377     type: string
378   SnmpdReadonlyUserPassword:
379     default: unset
380     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
381     type: string
382     hidden: true
383   SSLCACertificate:
384     default: ''
385     description: If set, the contents of an SSL certificate authority file.
386     type: string
387   SSLCertificate:
388     default: ''
389     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
390     type: string
391     hidden: true
392   SSLKey:
393     default: ''
394     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
395     type: string
396     hidden: true
397   SwiftHashSuffix:
398     default: unset
399     description: A random string to be used as a salt when hashing to determine mappings
400       in the ring.
401     hidden: true
402     type: string
403   SwiftMountCheck:
404     default: 'false'
405     description: Value of mount_check in Swift account/container/object -server.conf
406     type: boolean
407   SwiftMinPartHours:
408     type: number
409     default: 1
410     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
411   SwiftPartPower:
412     default: 10
413     description: Partition Power to use when building Swift rings
414     type: number
415   SwiftPassword:
416     default: unset
417     description: The password for the swift service account, used by the swift proxy
418       services.
419     hidden: true
420     type: string
421   SwiftReplicas:
422     type: number
423     default: 3
424     description: How many replicas to use in the swift rings.
425   VirtualIP: # DEPRECATED: use per service settings instead
426     type: string
427     default: ''  # Has to be here because of the ignored empty value bug
428   HeatApiVirtualIP:
429     type: string
430     default: ''
431   GlanceApiVirtualIP:
432     type: string
433     default: ''
434   MysqlVirtualIP:
435     type: string
436     default: ''
437   KeystonePublicApiVirtualIP:
438     type: string
439     default: ''
440   NeutronApiVirtualIP:
441     type: string
442     default: ''
443   EnablePackageInstall:
444     default: 'false'
445     description: Set to true to enable package installation via Puppet
446     type: boolean
447   ServiceNetMap:
448     default: {}
449     description: Mapping of service_name -> network name. Typically set
450                  via parameter_defaults in the resource registry.
451     type: json
452   UpdateIdentifier:
453     default: ''
454     type: string
455     description: >
456       Setting to a previously unused value during stack-update will trigger
457       package update on all nodes
458   Hostname:
459     type: string
460     default: '' # Defaults to Heat created hostname
461
462 resources:
463
464   Controller:
465     type: OS::Nova::Server
466     properties:
467       image: {get_param: Image}
468       image_update_policy: {get_param: ImageUpdatePolicy}
469       flavor: {get_param: Flavor}
470       key_name: {get_param: KeyName}
471       networks:
472         - network: ctlplane
473       user_data_format: SOFTWARE_CONFIG
474       user_data: {get_resource: NodeUserData}
475       name: {get_param: Hostname}
476
477   NodeUserData:
478     type: OS::TripleO::NodeUserData
479
480   ExternalPort:
481     type: OS::TripleO::Controller::Ports::ExternalPort
482     properties:
483       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
484
485   InternalApiPort:
486     type: OS::TripleO::Controller::Ports::InternalApiPort
487     properties:
488       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
489
490   StoragePort:
491     type: OS::TripleO::Controller::Ports::StoragePort
492     properties:
493       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
494
495   StorageMgmtPort:
496     type: OS::TripleO::Controller::Ports::StorageMgmtPort
497     properties:
498       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
499
500   TenantPort:
501     type: OS::TripleO::Controller::Ports::TenantPort
502     properties:
503       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
504
505   NetIpMap:
506     type: OS::TripleO::Network::Ports::NetIpMap
507     properties:
508       ExternalIp: {get_attr: [ExternalPort, ip_address]}
509       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
510       StorageIp: {get_attr: [StoragePort, ip_address]}
511       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
512       TenantIp: {get_attr: [TenantPort, ip_address]}
513
514   NetIpSubnetMap:
515     type: OS::TripleO::Network::Ports::NetIpMap
516     properties:
517       ExternalIp: {get_attr: [ExternalPort, ip_subnet]}
518       InternalApiIp: {get_attr: [InternalApiPort, ip_subnet]}
519       StorageIp: {get_attr: [StoragePort, ip_subnet]}
520       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_subnet]}
521       TenantIp: {get_attr: [TenantPort, ip_subnet]}
522
523   NetworkConfig:
524     type: OS::TripleO::Controller::Net::SoftwareConfig
525     properties:
526       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
527       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
528       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
529       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
530       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
531
532   NetworkDeployment:
533     type: OS::TripleO::SoftwareDeployment
534     properties:
535       config: {get_resource: NetworkConfig}
536       server: {get_resource: Controller}
537       input_values:
538         bridge_name: br-ex
539         interface_name: {get_param: NeutronPublicInterface}
540
541   ControllerDeployment:
542     type: OS::TripleO::SoftwareDeployment
543     depends_on: NetworkDeployment
544     properties:
545       config: {get_resource: ControllerConfig}
546       server: {get_resource: Controller}
547       input_values:
548         bootstack_nodeid: {get_attr: [Controller, name]}
549         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
550         heat.watch_server_url:
551           list_join:
552             - ''
553             - - 'http://'
554               - {get_param: HeatApiVirtualIP}
555               - ':8003'
556         heat.metadata_server_url:
557           list_join:
558             - ''
559             - - 'http://'
560               - {get_param: HeatApiVirtualIP}
561               - ':8000'
562         heat.waitcondition_server_url:
563           list_join:
564             - ''
565             - - 'http://'
566               - {get_param: HeatApiVirtualIP}
567               - ':8000/v1/waitcondition'
568         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
569         horizon_secret: {get_param: HorizonSecret}
570         admin_password: {get_param: AdminPassword}
571         admin_token: {get_param: AdminToken}
572         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
573         debug: {get_param: Debug}
574         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
575         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
576         cinder_password: {get_param: CinderPassword}
577         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
578         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
579         cinder_backend_config: {get_param: CinderBackendConfig}
580         cinder_dsn:
581           list_join:
582             - ''
583             - - 'mysql://cinder:'
584               - {get_param: CinderPassword}
585               - '@'
586               - {get_param: MysqlVirtualIP}
587               - '/cinder'
588         glance_port: {get_param: GlancePort}
589         glance_password: {get_param: GlancePassword}
590         glance_backend: {get_param: GlanceBackend}
591         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
592         glance_log_file: {get_param: GlanceLogFile}
593         glance_dsn:
594           list_join:
595             - ''
596             - - 'mysql://glance:'
597               - {get_param: GlancePassword}
598               - '@'
599               - {get_param: MysqlVirtualIP}
600               - '/glance'
601         heat_password: {get_param: HeatPassword}
602         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
603         heat_dsn:
604           list_join:
605             - ''
606             - - 'mysql://heat:'
607               - {get_param: HeatPassword}
608               - '@'
609               - {get_param: MysqlVirtualIP}
610               - '/heat'
611         keystone_auth_address: {list_join: ['', ['http://', {get_param: KeystonePublicApiVirtualIP} , ':5000/v2.0']]}
612         keystone_ca_certificate: {get_param: KeystoneCACertificate}
613         keystone_signing_key: {get_param: KeystoneSigningKey}
614         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
615         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
616         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
617         keystone_dsn:
618           list_join:
619             - ''
620             - - 'mysql://keystone:'
621               - {get_param: AdminToken}
622               - '@'
623               - {get_param: MysqlVirtualIP}
624               - '/keystone'
625         keystone_identity_uri:
626           list_join:
627             - ''
628             - - 'http://'
629               - {get_param: KeystonePublicApiVirtualIP}
630               - ':35357/'
631         keystone_auth_uri:
632           list_join:
633             - ''
634             - - 'http://'
635               - {get_param: KeystonePublicApiVirtualIP}
636               - ':5000/v2.0/'
637         enable_galera: {get_param: EnableGalera}
638         enable_ceph_storage: {get_param: EnableCephStorage}
639         enable_swift_storage: {get_param: EnableSwiftStorage}
640         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
641         mysql_root_password: {get_param: MysqlRootPassword}
642         mysql_cluster_name:
643           str_replace:
644             template: tripleo-CLUSTER
645             params:
646               CLUSTER: {get_param: MysqlClusterUniquePart}
647         neutron_flat_networks: {get_param: NeutronFlatNetworks}
648         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
649         neutron_agent_mode: {get_param: NeutronAgentMode}
650         neutron_router_distributed: {get_param: NeutronDVR}
651         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
652         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
653         neutron_l3_ha: {get_param: NeutronL3HA}
654         neutron_network_vlan_ranges:
655           str_replace:
656             template: "['RANGES']"
657             params:
658               RANGES:
659                 list_join:
660                 - "','"
661                 - {get_param: NeutronNetworkVLANRanges}
662         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
663         neutron_public_interface: {get_param: NeutronPublicInterface}
664         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
665         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
666         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
667         neutron_tenant_network_type: {get_param: NeutronNetworkType}
668         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
669         neutron_password: {get_param: NeutronPassword}
670         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
671         neutron_dsn:
672           list_join:
673             - ''
674             - - 'mysql://neutron:'
675               - {get_param: NeutronPassword}
676               - '@'
677               - {get_param: MysqlVirtualIP}
678               - '/ovs_neutron?charset=utf8'
679         neutron_url:
680           list_join:
681             - ''
682             - - 'http://'
683               - {get_param: NeutronApiVirtualIP}
684               - ':9696'
685         neutron_admin_auth_url:
686           list_join:
687             - ''
688             - - 'http://'
689               - {get_param: KeystonePublicApiVirtualIP}
690               - ':35357/v2.0'
691         ceilometer_backend: {get_param: CeilometerBackend}
692         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
693         ceilometer_password: {get_param: CeilometerPassword}
694         ceilometer_coordination_url:
695           list_join:
696             - ''
697             - - 'redis://'
698               - {get_param: RedisVirtualIP}
699               - ':6379'
700         ceilometer_dsn:
701           list_join:
702             - ''
703             - - 'mysql://ceilometer:unset@'
704               - {get_param: MysqlVirtualIP}
705               - '/ceilometer'
706         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
707         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
708         nova_password: {get_param: NovaPassword}
709         nova_dsn:
710           list_join:
711             - ''
712             - - 'mysql://nova:'
713               - {get_param: NovaPassword}
714               - '@'
715               - {get_param: MysqlVirtualIP}
716               - '/nova'
717         pcsd_password: {get_param: PcsdPassword}
718         rabbit_username: {get_param: RabbitUserName}
719         rabbit_password: {get_param: RabbitPassword}
720         rabbit_cookie: {get_param: RabbitCookie}
721         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
722         rabbit_client_port: {get_param: RabbitClientPort}
723         ntp_servers:
724           str_replace:
725             template: '["server"]'
726             params:
727               server: {get_param: NtpServer}
728         control_virtual_interface: {get_param: ControlVirtualInterface}
729         public_virtual_interface: {get_param: PublicVirtualInterface}
730         swift_hash_suffix: {get_param: SwiftHashSuffix}
731         swift_password: {get_param: SwiftPassword}
732         swift_part_power: {get_param: SwiftPartPower}
733         swift_replicas: {get_param: SwiftReplicas}
734         swift_min_part_hours: {get_param: SwiftMinPartHours}
735         swift_mount_check: {get_param: SwiftMountCheck}
736         enable_package_install: {get_param: EnablePackageInstall}
737         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
738         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
739         cinder_iscsi_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
740         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
741         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
742         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
743         glance_api_servers:
744           list_join:
745             - ''
746             - - {get_param: GlanceProtocol}
747               - '://'
748               - {get_param: GlanceApiVirtualIP}
749               - ':'
750               - {get_param: GlancePort}
751         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
752         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
753         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
754         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
755         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
756         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
757         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
758         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
759         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
760         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
761         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
762         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
763         redis_vip: {get_param: RedisVirtualIP}
764         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
765         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
766         ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
767         ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
768         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
769
770   # Map heat metadata into hiera datafiles
771   ControllerConfig:
772     type: OS::Heat::StructuredConfig
773     properties:
774       group: os-apply-config
775       config:
776         hiera:
777           hierarchy:
778             - heat_config_%{::deploy_config_name}
779             - controller
780             - object
781             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
782             - ceph_cluster # provided by CephClusterConfig
783             - ceph
784             - bootstrap_node # provided by BootstrapNodeConfig
785             - all_nodes # provided by allNodesConfig
786             - vip_data # provided by vip-config
787             - '"%{::osfamily}"'
788             - common
789           datafiles:
790             common:
791               raw_data: {get_file: hieradata/common.yaml}
792             ceph:
793               raw_data: {get_file: hieradata/ceph.yaml}
794               mapped_data:
795                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
796                 ceph::profile::params::public_network: {get_input: ceph_public_network}
797                 ceph::mon::public_addr: {get_input: ceph_public_ip}
798             object:
799               raw_data: {get_file: hieradata/object.yaml}
800             controller:
801               raw_data: {get_file: hieradata/controller.yaml}
802               mapped_data: # data supplied directly to this deployment configuration, etc
803                 bootstack_nodeid: {get_input: bootstack_nodeid}
804
805                 # Pacemaker
806                 hacluster_pwd: {get_input: pcsd_password}
807
808                 # Swift
809                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
810                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
811                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
812                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
813                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
814                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
815                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
816                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
817                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
818                 swift_mount_check: {get_input: swift_mount_check}
819
820                 # NOTE(dprince): build_ring support is currently not wired in.
821                 # See: https://review.openstack.org/#/c/109225/
822                 tripleo::ringbuilder::build_ring: True
823
824                 # Cinder
825                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
826                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
827                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
828                 cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
829                 cinder::database_connection: {get_input: cinder_dsn}
830                 cinder::api::keystone_password: {get_input: cinder_password}
831                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
832                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
833                 cinder::api::bind_host: {get_input: cinder_api_network}
834                 cinder::rabbit_userid: {get_input: rabbit_username}
835                 cinder::rabbit_password: {get_input: rabbit_password}
836                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
837                 cinder::rabbit_port: {get_input: rabbit_client_port}
838                 cinder::debug: {get_input: debug}
839                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
840                 cinder::glance::glance_api_servers: {get_input: glance_api_servers}
841                 cinder_backend_config: {get_input: CinderBackendConfig}
842
843                 # Glance
844                 glance::api::bind_port: {get_input: glance_port}
845                 glance::api::bind_host: {get_input: glance_api_network}
846                 glance::api::auth_uri: {get_input: keystone_auth_uri}
847                 glance::api::identity_uri: {get_input: keystone_identity_uri}
848                 glance::api::registry_host: {get_input: glance_registry_network}
849                 glance::api::keystone_password: {get_input: glance_password}
850                 glance::api::debug: {get_input: debug}
851                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
852                 glance_log_file: {get_input: glance_log_file}
853                 glance_log_file: {get_input: glance_log_file}
854                 glance::api::database_connection: {get_input: glance_dsn}
855                 glance::registry::keystone_password: {get_input: glance_password}
856                 glance::registry::database_connection: {get_input: glance_dsn}
857                 glance::registry::bind_host: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
858                 glance::registry::auth_uri: {get_input: keystone_auth_uri}
859                 glance::registry::identity_uri: {get_input: keystone_identity_uri}
860                 glance::registry::debug: {get_input: debug}
861                 glance::backend::swift::swift_store_auth_address: {get_input: keystone_auth_address}
862                 glance::backend::swift::swift_store_user: service:glance
863                 glance::backend::swift::swift_store_key: {get_input: glance_password}
864                 glance_backend: {get_input: glance_backend}
865
866                 # Heat
867                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
868                 heat::engine::heat_watch_server_url: {get_input: heat.watch_server_url}
869                 heat::engine::heat_metadata_server_url: {get_input: heat.metadata_server_url}
870                 heat::engine::heat_waitcondition_server_url: {get_input: heat.waitcondition_server_url}
871                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
872                 heat::rabbit_userid: {get_input: rabbit_username}
873                 heat::rabbit_password: {get_input: rabbit_password}
874                 heat::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
875                 heat::rabbit_port: {get_input: rabbit_client_port}
876                 heat::auth_uri: {get_input: keystone_auth_uri}
877                 heat::identity_uri: {get_input: keystone_identity_uri}
878                 heat::keystone_password: {get_input: heat_password}
879                 heat::api::bind_host: {get_input: heat_api_network}
880                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
881                 heat::api_cfn::bind_host: {get_input: heat_api_network}
882                 heat::database_connection: {get_input: heat_dsn}
883                 heat::instance_user: heat-admin
884                 heat::debug: {get_input: debug}
885
886                 # Keystone
887                 keystone::admin_token: {get_input: admin_token}
888                 keystone_ca_certificate: {get_input: keystone_ca_certificate}
889                 keystone_signing_key: {get_input: keystone_signing_key}
890                 keystone_signing_certificate: {get_input: keystone_signing_certificate}
891                 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
892                 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
893                 keystone::database_connection: {get_input: keystone_dsn}
894                 keystone::public_bind_host: {get_input: keystone_public_api_network}
895                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
896                 keystone::debug: {get_input: debug}
897                 # MongoDB
898                 mongodb::server::bind_ip: {get_input: mongo_db_network}
899                 # MySQL
900                 admin_password: {get_input: admin_password}
901                 enable_galera: {get_input: enable_galera}
902                 enable_ceph_storage: {get_input: enable_ceph_storage}
903                 enable_swift_storage: {get_input: enable_swift_storage}
904                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
905                 mysql::server::root_password: {get_input: mysql_root_password}
906                 mysql_cluster_name: {get_input: mysql_cluster_name}
907                 mysql_bind_host: {get_input: mysql_network}
908
909                 # Neutron
910                 neutron::bind_host: {get_input: neutron_api_network}
911                 neutron::rabbit_password: {get_input: rabbit_password}
912                 neutron::rabbit_user: {get_input: rabbit_user}
913                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
914                 neutron::rabbit_port: {get_input: rabbit_client_port}
915                 neutron::debug: {get_input: debug}
916                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
917                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
918                 neutron::server::database_connection: {get_input: neutron_dsn}
919                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
920                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
921                 neutron_flat_networks: {get_input: neutron_flat_networks}
922                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
923                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
924                 neutron_agent_mode: {get_input: neutron_agent_mode}
925                 neutron_router_distributed: {get_input: neutron_router_distributed}
926                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
927                 neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
928                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
929                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
930                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
931                 neutron_public_interface: {get_input: neutron_public_interface}
932                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
933                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
934                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
935                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
936                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
937                 neutron::server::auth_password: {get_input: neutron_password}
938                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
939                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
940                 neutron_dsn: {get_input: neutron_dsn}
941                 neutron::agents::metadata::auth_url: {get_input: keystone_identity_uri}
942
943                 # Ceilometer
944                 ceilometer_backend: {get_input: ceilometer_backend}
945                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
946                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
947                 ceilometer::rabbit_userid: {get_input: rabbit_username}
948                 ceilometer::rabbit_password: {get_input: rabbit_password}
949                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
950                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
951                 ceilometer::debug: {get_input: debug}
952                 ceilometer::api::host: {get_input: ceilometer_api_network}
953                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
954                 ceilometer::api::keystone_auth_uri: {get_input: keystone_auth_uri}
955                 ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri}
956                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
957                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_address}
958                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
959                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
960                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
961
962                 # Nova
963                 nova::rabbit_userid: {get_input: rabbit_username}
964                 nova::rabbit_password: {get_input: rabbit_password}
965                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
966                 nova::rabbit_port: {get_input: rabbit_client_port}
967                 nova::debug: {get_input: debug}
968                 nova::api::auth_uri: {get_input: keystone_auth_uri}
969                 nova::api::identity_uri: {get_input: keystone_identity_uri}
970                 nova::api::api_bind_address: {get_input: nova_api_network}
971                 nova::api::metadata_listen: {get_input: nova_metadata_network}
972                 nova::api::admin_password: {get_input: nova_password}
973                 nova::database_connection: {get_input: nova_dsn}
974                 nova::glance_api_servers: {get_input: glance_api_servers}
975                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
976                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
977                 nova::network::neutron::neutron_url: {get_input: neutron_url}
978                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
979                 nova::vncproxy::host: {get_input: nova_api_network}
980
981                 # Horizon
982                 apache::ip: {get_input: horizon_network}
983                 horizon::django_debug: {get_input: debug}
984                 horizon::secret_key: {get_input: horizon_secret}
985                 horizon::bind_address: {get_input: horizon_network}
986                 horizon::keystone_url: {get_input: keystone_auth_uri}
987
988                 # Rabbit
989                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
990                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
991                 # Redis
992                 redis::bind: {get_input: redis_network}
993                 redis_vip: {get_input: redis_vip}
994                 # Misc
995                 memcached::listen_ip: {get_input: memcached_network}
996                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
997                 ntp::servers: {get_input: ntp_servers}
998                 control_virtual_interface: {get_input: control_virtual_interface}
999                 public_virtual_interface: {get_input: public_virtual_interface}
1000                 tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
1001                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
1002                 enable_package_install: {get_input: enable_package_install}
1003
1004   UpdateConfig:
1005     type: OS::TripleO::Tasks::PackageUpdate
1006
1007   UpdateDeployment:
1008     type: OS::Heat::SoftwareDeployment
1009     properties:
1010       config: {get_resource: UpdateConfig}
1011       server: {get_resource: Controller}
1012       input_values:
1013         update_identifier:
1014           get_param: UpdateIdentifier
1015
1016 outputs:
1017   ip_address:
1018     description: IP address of the server in the ctlplane network
1019     value: {get_attr: [Controller, networks, ctlplane, 0]}
1020   external_ip_address:
1021     description: IP address of the server in the external network
1022     value: {get_attr: [ExternalPort, ip_address]}
1023   internal_api_ip_address:
1024     description: IP address of the server in the internal_api network
1025     value: {get_attr: [InternalApiPort, ip_address]}
1026   storage_ip_address:
1027     description: IP address of the server in the storage network
1028     value: {get_attr: [StoragePort, ip_address]}
1029   storage_mgmt_ip_address:
1030     description: IP address of the server in the storage_mgmt network
1031     value: {get_attr: [StorageMgmtPort, ip_address]}
1032   tenant_ip_address:
1033     description: IP address of the server in the tenant network
1034     value: {get_attr: [TenantPort, ip_address]}
1035   hostname:
1036     description: Hostname of the server
1037     value: {get_attr: [Controller, name]}
1038   corosync_node:
1039     description: >
1040       Node object in the format {ip: ..., name: ...} format that the corosync
1041       element expects
1042     value:
1043       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1044       name: {get_attr: [Controller, name]}
1045   hosts_entry:
1046     description: >
1047       Server's IP address and hostname in the /etc/hosts format
1048     value:
1049       str_replace:
1050         template: IP HOST.localdomain HOST CLOUDNAME
1051         params:
1052           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1053           HOST: {get_attr: [Controller, name]}
1054           CLOUDNAME: {get_param: CloudName}
1055   nova_server_resource:
1056     description: Heat resource handle for the Nova compute server
1057     value:
1058       {get_resource: Controller}
1059   swift_device:
1060     description: Swift device formatted for swift-ring-builder
1061     value:
1062       str_replace:
1063         template: 'r1z1-IP:%PORT%/d1'
1064         params:
1065           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1066   swift_proxy_memcache:
1067     description: Swift proxy-memcache value
1068     value:
1069       str_replace:
1070         template: "IP:11211"
1071         params:
1072           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}