1 heat_template_version: 2014-10-16
4 OpenStack controller node configured by Puppet.
9 description: The password for the keystone admin account, used for monitoring, querying neutron etc.
14 description: The keystone auth secret.
17 CeilometerMeteringSecret:
19 description: Secret shared by the ceilometer services.
24 description: The password for the ceilometer service account.
27 CinderEnableIscsiBackend:
29 description: Whether to enable or not the Iscsi backend for Cinder
33 description: The iSCSI helper to use with cinder.
35 CinderLVMLoopDeviceSize:
37 description: The size of the loopback file used by the cinder LVM driver.
41 description: The password for the cinder service account, used by cinder-api.
46 description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
48 ControllerExtraConfig:
51 Controller specific configuration to inject into the cluster. Same
52 structure as ExtraConfig.
54 ControlVirtualInterface:
56 description: Interface where virtual ip will be assigned.
60 description: Set to True to enable debugging on all services.
65 Additional configuration to inject into the cluster. The JSON should have
66 the following structure:
69 [{"section": "SECTIONNAME",
71 [{"option": "OPTIONNAME",
82 [{"section": "default",
84 [{"option": "compute_manager",
85 "value": "ironic.nova.compute.manager.ClusterComputeManager"
92 "value": "nova.cells.rpc_driver.CellsRPCDriver"
101 description: Flavor for control nodes to request when deploying.
104 - custom_constraint: nova.flavor
105 GlanceNotifierStrategy:
106 description: Strategy to use for Glance notification queue
110 description: The filepath of the file to use for logging messages from Glance.
115 description: The password for the glance service account, used by the glance services.
120 description: Glance port.
124 description: Protocol to use when connecting to glance, set to https for SSL.
128 description: The password for the Heat service account, used by the Heat services.
131 HeatStackDomainAdminPassword:
132 description: Password for heat_domain_admin user.
136 HeatAuthEncryptionKey:
137 description: Auth encryption key for heat-engine
141 default: overcloud-control
143 - custom_constraint: glance.image
145 default: 'REBUILD_PRESERVE_EPHEMERAL'
146 description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
150 description: Name of an existing EC2 KeyPair to enable SSH access to the instances
153 - custom_constraint: nova.keypair
154 KeystoneCACertificate:
156 description: Keystone self-signed certificate authority certificate.
158 KeystoneSigningCertificate:
160 description: Keystone certificate for verifying token validity.
164 description: Keystone key for signing tokens.
167 KeystoneSSLCertificate:
169 description: Keystone certificate for verifying token validity.
171 KeystoneSSLCertificateKey:
173 description: Keystone key for signing tokens.
176 MysqlClusterUniquePart:
177 description: A unique identifier of the MySQL cluster the controller is in.
179 default: 'unset' # Has to be here because of the ignored empty value bug
180 # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
182 # - length: {min: 4, max: 10}
183 MysqlInnodbBufferPoolSize:
185 Specifies the size of the buffer pool in megabytes. Setting to
186 zero should be interpreted as "no value" and will defer to the
193 default: '' # Has to be here because of the ignored empty value bug
194 NeutronBridgeMappings:
196 The OVS logical->physical bridge mappings to use. See the Neutron
197 documentation for details. Defaults to mapping br-ex - the external
198 bridge on hosts - to a physical name 'datacentre' which can be used
199 to create provider networks (and we use this for the default floating
200 network) - if changing this either use different post-install network
201 scripts or be sure to keep 'datacentre' as a mapping network name.
204 NeutronDnsmasqOptions:
205 default: 'dhcp-option-force=26,1400'
206 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.
210 description: Agent mode for the neutron-l3-agent on the controller hosts
212 NeutronL3HA: #FIXME this isn't wired in
214 description: Whether to enable l3-agent HA
218 description: Whether to configure Neutron Distributed Virtual Routers
220 NeutronMetadataProxySharedSecret:
222 description: Shared secret to prevent spoofing
224 NeutronMechanismDrivers:
225 default: 'openvswitch'
227 The mechanism drivers for the Neutron tenant network. To specify multiple
228 values, use a comma separated string, like so: 'openvswitch,l2_population'
230 NeutronAllowL3AgentFailover:
232 description: Allow automatic l3-agent failover
234 NeutronEnableTunnelling:
240 description: If set, flat networks to configure in neutron plugins.
243 description: The tenant network type for Neutron, either gre or vxlan.
245 NeutronNetworkVLANRanges:
246 default: 'datacentre'
248 The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
249 Neutron documentation for permitted values. Defaults to permitting any
250 VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
254 description: The password for the neutron service account, used by neutron agents.
257 NeutronPublicInterface:
259 description: What interface to bridge onto br-ex for network nodes.
261 NeutronPublicInterfaceTag:
264 VLAN tag for creating a public VLAN. The tag will be used to
265 create an access port on the exterior bridge for each control plane node,
266 and that port will be given the IP address returned by neutron from the
267 public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
268 overcloud.yaml to include the deployment of VLAN ports to the control
271 NeutronPublicInterfaceDefaultRoute:
273 description: A custom default route for the NeutronPublicInterface.
275 NeutronPublicInterfaceIP:
277 description: A custom IP address to put onto the NeutronPublicInterface.
279 NeutronPublicInterfaceRawDevice:
281 description: If set, the public interface is a vlan with this device as the raw device.
286 The tunnel types for the Neutron tenant network. To specify multiple
287 values, use a comma separated string, like so: 'gre,vxlan'
291 description: The password for the nova service account, used by nova-api.
297 PublicVirtualInterface:
300 Specifies the interface where the public-facing virtual ip will be assigned.
301 This should be int_public when a VLAN is being used.
305 default: '' # Has to be here because of the ignored empty value bug
308 default: '' # Has to be here because of the ignored empty value bug
312 description: The password for RabbitMQ
317 description: The username for RabbitMQ
322 Rabbit client subscriber parameter to specify
323 an SSL connection to the RabbitMQ host.
327 description: Set rabbit subscriber port, change this if using SSL
329 SnmpdReadonlyUserName:
330 default: ro_snmp_user
331 description: The user name for SNMPd with readonly rights running on all Overcloud nodes
333 SnmpdReadonlyUserPassword:
335 description: The user password for SNMPd with readonly rights running on all Overcloud nodes
340 description: If set, the contents of an SSL certificate authority file.
344 description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
349 description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
354 description: A random string to be used as a salt when hashing to determine mappings
360 description: Value of mount_check in Swift account/container/object -server.conf
365 description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
368 description: Partition Power to use when building Swift rings
372 description: The password for the swift service account, used by the swift proxy
379 description: How many replicas to use in the swift rings.
382 default: '' # Has to be here because of the ignored empty value bug
383 EnablePackageInstall:
385 description: Set to true to enable package installation via Puppet
391 type: OS::Nova::Server
393 image: {get_param: Image}
394 image_update_policy: {get_param: ImageUpdatePolicy}
395 flavor: {get_param: Flavor}
396 key_name: {get_param: KeyName}
399 user_data_format: SOFTWARE_CONFIG
402 type: OS::TripleO::Net::SoftwareConfig
405 type: OS::TripleO::SoftwareDeployment
407 signal_transport: NO_SIGNAL
408 config: {get_attr: [NetworkConfig, config_id]}
409 server: {get_resource: Controller}
412 interface_name: {get_param: NeutronPublicInterface}
414 ControllerDeployment:
415 type: OS::TripleO::SoftwareDeployment
417 signal_transport: NO_SIGNAL
418 config: {get_resource: ControllerConfig}
419 server: {get_resource: Controller}
421 bootstack_nodeid: {get_attr: [Controller, name]}
422 controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
423 controller_virtual_ip: {get_param: VirtualIP}
424 neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
425 heat.watch_server_url:
429 - {get_param: VirtualIP}
431 heat.metadata_server_url:
435 - {get_param: VirtualIP}
437 heat.waitcondition_server_url:
441 - {get_param: VirtualIP}
442 - ':8000/v1/waitcondition'
443 heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
444 admin_password: {get_param: AdminPassword}
445 admin_token: {get_param: AdminToken}
446 neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
447 debug: {get_param: Debug}
448 cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
449 cinder_password: {get_param: CinderPassword}
450 cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
451 cinder_iscsi_helper: {get_param: CinderISCSIHelper}
455 - - 'mysql://cinder:unset@'
456 - {get_param: VirtualIP}
458 glance_port: {get_param: GlancePort}
459 glance_protocol: {get_param: GlanceProtocol}
460 glance_password: {get_param: GlancePassword}
461 glance_swift_store_auth_address: {list_join: ['', ['http://', {get_param: VirtualIP} , ':5000/v2.0']]}
462 glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
463 glance_log_file: {get_param: GlanceLogFile}
467 - - 'mysql://glance:unset@'
468 - {get_param: VirtualIP}
470 heat_password: {get_param: HeatPassword}
471 heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
475 - - 'mysql://heat:unset@'
476 - {get_param: VirtualIP}
478 keystone_ca_certificate: {get_param: KeystoneCACertificate}
479 keystone_signing_key: {get_param: KeystoneSigningKey}
480 keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
481 keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
482 keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
486 - - 'mysql://keystone:unset@'
487 - {get_param: VirtualIP}
489 mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
490 mysql_root_password: {get_param: MysqlRootPassword}
493 template: tripleo-CLUSTER
495 CLUSTER: {get_param: MysqlClusterUniquePart}
496 neutron_flat_networks: {get_param: NeutronFlatNetworks}
497 neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
498 neutron_agent_mode: {get_param: NeutronAgentMode}
499 neutron_router_distributed: {get_param: NeutronDVR}
500 neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
501 neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
502 neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
503 neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
504 neutron_public_interface: {get_param: NeutronPublicInterface}
505 neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
506 neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
507 neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
508 neutron_tenant_network_type: {get_param: NeutronNetworkType}
509 neutron_tunnel_types: {get_param: NeutronTunnelTypes}
510 neutron_password: {get_param: NeutronPassword}
511 neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
515 - - 'mysql://neutron:unset@'
516 - {get_param: VirtualIP}
517 - '/ovs_neutron?charset=utf8'
522 - {get_param: VirtualIP}
524 neutron_admin_auth_url:
528 - {get_param: VirtualIP}
530 ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
531 ceilometer_password: {get_param: CeilometerPassword}
535 - - 'mysql://ceilometer:unset@'
536 - {get_param: VirtualIP}
538 snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
539 snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
540 nova_password: {get_param: NovaPassword}
544 - - 'mysql://nova:unset@'
545 - {get_param: VirtualIP}
547 rabbit_username: {get_param: RabbitUserName}
548 rabbit_password: {get_param: RabbitPassword}
549 rabbit_cookie: {get_param: RabbitCookie}
550 rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
551 rabbit_client_port: {get_param: RabbitClientPort}
554 template: '["server"]'
556 server: {get_param: NtpServer}
557 control_virtual_interface: {get_param: ControlVirtualInterface}
558 public_virtual_interface: {get_param: PublicVirtualInterface}
559 public_virtual_ip: {get_param: PublicVirtualIP}
560 swift_hash_suffix: {get_param: SwiftHashSuffix}
561 swift_password: {get_param: SwiftPassword}
562 swift_part_power: {get_param: SwiftPartPower}
563 swift_replicas: {get_param: SwiftReplicas}
564 swift_min_part_hours: {get_param: SwiftMinPartHours}
565 swift_mount_check: {get_param: SwiftMountCheck}
566 enable_package_install: {get_param: EnablePackageInstall}
568 # Map heat metadata into hiera datafiles
570 type: OS::Heat::StructuredConfig
572 group: os-apply-config
576 - heat_config_%{::deploy_config_name}
579 - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
580 - rabbit # provided by allNodesConfig
581 - ceph_cluster # provided by CephClusterConfig
583 - bootstrap_node # provided by BootstrapNodeConfig
587 raw_data: {get_file: hieradata/common.yaml}
589 raw_data: {get_file: hieradata/ceph.yaml}
591 raw_data: {get_file: hieradata/object.yaml}
593 raw_data: {get_file: hieradata/controller.yaml}
594 mapped_data: # data supplied directly to this deployment configuration, etc
595 debug: {get_input: debug}
596 bootstack_nodeid: {get_input: bootstack_nodeid}
597 controller_host: {get_input: controller_host} #local-ipv4
599 swift::proxy::proxy_local_net_ip: {get_input: controller_host}
600 swift::proxy::authtoken::auth_host: {get_input: controller_virtual_ip}
601 swift::storage::all::storage_local_net_ip: {get_input: controller_host}
602 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
603 swift::proxy::authtoken::admin_password: {get_input: swift_password}
604 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
605 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
606 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
607 swift_mount_check: {get_input: swift_mount_check}
609 # NOTE(dprince): build_ring support is currently not wired in.
610 # See: https://review.openstack.org/#/c/109225/
611 tripleo::ringbuilder::build_ring: True
613 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
614 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
615 cinder_iscsi_ip_address: {get_input: controller_host}
616 cinder::database_connection: {get_input: cinder_dsn}
617 cinder::api::keystone_password: {get_input: cinder_password}
618 cinder::api::keystone_auth_host: {get_input: controller_virtual_ip}
619 cinder::api::bind_host: {get_input: controller_host}
620 cinder::rabbit_userid: {get_input: rabbit_username}
621 cinder::rabbit_password: {get_input: rabbit_password}
622 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
623 #cinder::debug: {get_input: debug}
625 glance::api::bind_port: {get_input: glance_port}
626 glance::api::bind_host: {get_input: controller_host}
627 glance::api::auth_host: {get_input: controller_virtual_ip}
628 glance::api::registry_host: {get_input: controller_host}
629 glance::api::keystone_password: {get_input: glance_password}
630 # used to construct glance_api_servers
631 glance_port: {get_input: glance_port}
632 glance_protocol: {get_input: glance_protocol}
633 glance_notifier_strategy: {get_input: glance_notifier_strategy}
634 glance_log_file: {get_input: glance_log_file}
635 glance_log_file: {get_input: glance_log_file}
636 glance::api::database_connection: {get_input: glance_dsn}
637 glance::registry::keystone_password: {get_input: glance_password}
638 glance::registry::database_connection: {get_input: glance_dsn}
639 glance::registry::bind_host: {get_input: controller_host}
640 glance::registry::auth_host: {get_input: controller_virtual_ip}
641 glance::backend::swift::swift_store_auth_address: {get_input: glance_swift_store_auth_address}
642 glance::backend::swift::swift_store_user: service:glance
643 glance::backend::swift::swift_store_key: {get_input: glance_password}
645 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
646 heat::engine::heat_watch_server_url: {get_input: heat.watch_server_url}
647 heat::engine::heat_metadata_server_url: {get_input: heat.metadata_server_url}
648 heat::engine::heat_waitcondition_server_url: {get_input: heat.waitcondition_server_url}
649 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
650 heat::rabbit_userid: {get_input: rabbit_username}
651 heat::rabbit_password: {get_input: rabbit_password}
652 heat::rabbit_host: {get_input: controller_virtual_ip}
653 heat::keystone_host: {get_input: controller_virtual_ip}
654 heat::keystone_password: {get_input: heat_password}
655 heat::api::bind_host: {get_input: controller_host}
656 heat::api_cloudwatch::bind_host: {get_input: controller_host}
657 heat::api_cfn::bind_host: {get_input: controller_host}
658 heat::database_connection: {get_input: heat_dsn}
659 heat::instance_user: heat-admin
662 keystone::admin_token: {get_input: admin_token}
663 keystone_ca_certificate: {get_input: keystone_ca_certificate}
664 keystone_signing_key: {get_input: keystone_signing_key}
665 keystone_signing_certificate: {get_input: keystone_signing_certificate}
666 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
667 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
668 keystone::database_connection: {get_input: keystone_dsn}
669 keystone::public_bind_host: {get_input: controller_host}
670 keystone::admin_bind_host: {get_input: controller_host}
671 #keystone::debug: {get_input: debug}
673 admin_password: {get_input: admin_password}
674 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
675 mysql_root_password: {get_input: mysql_root_password}
676 mysql_cluster_name: {get_input: mysql_cluster_name}
678 neutron::bind_host: {get_input: controller_host}
679 neutron::rabbit_password: {get_input: rabbit_password}
680 neutron::rabbit_user: {get_input: rabbit_user}
681 #neutron::debug: {get_input: debug}
682 neutron::server::auth_host: {get_input: controller_virtual_ip}
683 neutron::server::database_connection: {get_input: neutron_dsn}
684 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
685 neutron::agents::ml2::ovs::local_ip: {get_input: controller_host}
686 neutron_flat_networks: {get_input: neutron_flat_networks}
687 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
688 neutron::agents::metadata::metadata_ip: {get_input: controller_virtual_ip}
689 neutron_agent_mode: {get_input: neutron_agent_mode}
690 neutron_router_distributed: {get_input: neutron_router_distributed}
691 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
692 neutron_allow_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
693 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
694 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
695 neutron_public_interface: {get_input: neutron_public_interface}
696 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
697 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
698 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
699 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
700 neutron_tunnel_types: {get_input: neutron_tunnel_types}
701 neutron::server::auth_password: {get_input: neutron_password}
702 neutron::agents::metadata::auth_password: {get_input: neutron_password}
703 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
704 neutron_dsn: {get_input: neutron_dsn}
706 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
707 ceilometer::rabbit_userid: {get_input: rabbit_username}
708 ceilometer::rabbit_password: {get_input: rabbit_password}
709 ceilometer::rabbit_host: {get_input: controller_virtual_ip}
710 ceilometer::api::host: {get_input: controller_host}
711 ceilometer::api::keystone_password: {get_input: ceilometer_password}
712 ceilometer::api::keystone_host: {get_input: controller_virtual_ip}
713 ceilometer::db::database_connection: {get_input: ceilometer_dsn}
714 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
715 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
716 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
718 nova::rabbit_userid: {get_input: rabbit_username}
719 nova::rabbit_password: {get_input: rabbit_password}
720 nova::api::auth_host: {get_input: controller_virtual_ip}
721 nova::api::api_bind_address: {get_input: controller_host}
722 nova::api::metadata_listen: {get_input: controller_host}
723 nova::api::admin_password: {get_input: nova_password}
724 nova::database_connection: {get_input: nova_dsn}
725 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
726 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
727 nova::network::neutron::neutron_url: {get_input: neutron_url}
728 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
731 rabbit_username: {get_input: rabbit_username}
732 rabbit_password: {get_input: rabbit_password}
733 rabbit_client_use_ssl: {get_input: rabbit_client_use_ssl}
734 rabbit_client_port: {get_input: rabbit_client_port}
735 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
737 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
738 ntp::servers: {get_input: ntp_servers}
739 control_virtual_interface: {get_input: control_virtual_interface}
740 controller_virtual_ip: {get_input: controller_virtual_ip}
741 public_virtual_interface: {get_input: public_virtual_interface}
742 public_virtual_ip: {get_input: public_virtual_ip}
743 enable_package_install: {get_input: enable_package_install}
747 description: IP address of the server in the ctlplane network
748 value: {get_attr: [Controller, networks, ctlplane, 0]}
750 description: Hostname of the server
751 value: {get_attr: [Controller, name]}
754 Node object in the format {ip: ..., name: ...} format that the corosync
757 ip: {get_attr: [Controller, networks, ctlplane, 0]}
758 name: {get_attr: [Controller, name]}
761 Server's IP address and hostname in the /etc/hosts format
764 template: IP HOST HOST.novalocal CLOUDNAME
766 IP: {get_attr: [Controller, networks, ctlplane, 0]}
767 HOST: {get_attr: [Controller, name]}
768 CLOUDNAME: {get_param: CloudName}
769 nova_server_resource:
770 description: Heat resource handle for the Nova compute server
772 {get_resource: Controller}
774 description: Swift device formatted for swift-ring-builder
777 template: 'r1z1-IP:%PORT%/d1'
779 IP: {get_attr: [Controller, networks, ctlplane, 0]}
780 swift_proxy_memcache:
781 description: Swift proxy-memcache value
786 IP: {get_attr: [Controller, networks, ctlplane, 0]}