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