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