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