swift storage #239


OpenStack Object Storage (code-named Swift) is open source software for
creating redundant, scalable object storage using clusters of standardized
servers to store petabytes of accessible data. It is not a file system or
real-time data storage system, but rather a long-term storage system for a
more permanent type of static data that can be retrieved, leveraged, and
then updated if necessary. Primary examples of data that best fit this
type of storage model are virtual machine images, photo storage, email
storage and backup archiving. Having no central "brain" or master point of
control provides greater scalability, redundancy and permanence.
This charm deploys the Swift storage service, supporting HTTP based access
via Swift proxy services.


This charm provides the swift-storage component of the OpenStack Swift object
storage system. It can be deployed as part of its own standalone storage
cluster or it can be integrated with the other OpenStack components, assuming
those are also managed by Juju. For Swift to function, you'll also need to
deploy an additional swift-proxy using the cs:precise/swift-proxy charm.

For more information about Swift and its architecture, visit the official
project website https://docs.openstack.org/developer/swift.

This charm was developed to support deploying multiple version of Swift on
Ubuntu Precise 12.04, as they relate to the release series of OpenStack. That
is, OpenStack Essex corresponds to Swift 1.4.8 while OpenStack Folsom shipped
1.7.4. This charm can be used to deploy either (and future) versions of Swift
onto an Ubuntu Precise 12.04, making use of the Ubuntu Cloud Archive when


This charm is quite simple. Its basic function is to get a storage device
setup for swift usage, and run the container, object and account services.
The deployment workflow for swift using this charm is covered in the README
for the swift-proxy charm at cs:precise/swift-proxy. The following are
deployment options to take into consideration when deploying swift-storage.

Zone assignment

If the swift-proxy charm is configured for manual zone assignment (recommended),
the 'zone' option should be set for each swift-storage service being deployed.
See the swift-proxy README for more information about zone assignment.


Swift storage nodes require access to local storage and filesystem. The charm
takes a 'block-device' config setting that can be used to specify which storage
device(s) to use. Options include:

  • 1 or more local block devices (eg, sdb or /dev/sdb). It's important that this
    device be the same on all machine units assigned to this service. Multiple
    block devices should be listed as a space-separated list of device nodes.
  • a path to a local file on the filesystem with the size appended after a pipe,
    eg "/etc/swift/storagedev1.img|5G". This will be created if it does not
    exist and be mapped to a loopback device. Good for development and testing.
  • "guess" can be used to tell the charm to do its best to find a local devices
    to use. EXPERIMENTAL

Multiple devices can be specified. In all cases, the resulting block device(s)
will each be formatted as XFS file system and mounted at /srv/node/$devname.

Installation repository

The 'openstack-origin' setting allows Swift to be installed from installation
repositories and can be used to setup access to the Ubuntu Cloud Archive
to support installing Swift versions more recent than what is shipped with
Ubuntu 12.04 (1.4.8). For more information, see config.yaml.


(string) YAML formatted associative array of sysctl values, e.g.: '{ kernel.pid_max : 4194303 }'
(int) Listening port of the swift-container-server.
(int) Number of replication workers to spawn.
(int) Listening port of the swift-object-server.
(int) Listening port of the swift-account-server.
(int) Size of the per-disk thread pool used for performing disk I/O. 0 means to not use a per-disk thread pool. It is recommended to keep this value small, as large values can result in high read latencies due to large queue depths. A good starting point is 4 threads per disk.
(string) If true, charm will attempt to unmount and overwrite existing and in-use block-devices (WARNING).
(boolean) When this option is set to True the charm will disable the IPv6 support in ufw in case ip6tables couldn't be activated, situations where this could happen is in a LXC container running on top of a host that doesn't have loaded the ip6_tables. If this option is False (the default) and ip6_tables module couldn't be loaded, the charm will fail to install.
(int) Swift storage zone to request membership. Relevant only when the swift-proxy charm has been configured for manual zone assignment (the default). This should be changed for every service unit.
(int) Destination port on the provided statsd host to send samples to. Only takes effect if statsd-host is set.
(float) Sample rate determines what percentage of the metric points a client should send to the server. Only takes effect if statsd-host is set.
(int) Number of connections allowed to the account rsync stanza.
(int) Number of connections allowed to the container rsync stanza.
(boolean) If True enables IPv6 support. The charm will expect network interfaces to be configured with an IPv6 address. If set to False (default) IPv4 is expected. NOTE: these charms do not currently support IPv6 privacy extension. In order for this charm to function correctly, the privacy extension must be disabled and a non-temporary address must be configured/available on your network interface.
(string) A comma-separated list of nagios servicegroups. If left empty, the nagios_context will be used as the servicegroup
(string) Enable statsd metrics to be sent to the specified host. If this value is empty, statsd logging will be disabled.
(boolean) If True enables openstack upgrades for this charm via juju actions. You will still need to set openstack-origin to the new repository but instead of an upgrade running automatically across all units, it will wait for you to execute the openstack-upgrade action for this charm on each unit. If False it will revert to existing behavior of upgrading all units on config change.
(string) Device to be used to back Swift storage. May be any valid block device or a path and size to a local file (/path/to/file.img|$sizeG), which will be created and used as a loopback device (for testing only). Multiple devices may be specified as a space-separated list of devices. If set to "guess", the charm will attempt to format and mount all extra block devices (this is currently experimental and potentially dangerous).
(int) Number of connections allowed to the object rsync stanza.
(string) Repository from which to install. May be one of the following: distro (default), ppa:somecustom/ppa, a deb url sources entry, or a supported Cloud Archive release pocket. Supported Cloud Archive sources include: cloud:<series>-<openstack-release> cloud:<series>-<openstack-release>/updates cloud:<series>-<openstack-release>/staging cloud:<series>-<openstack-release>/proposed For series=Precise we support cloud archives for openstack-release: * icehouse For series=Trusty we support cloud archives for openstack-release: * juno * kilo * ... NOTE: updating this setting to a source that is known to provide a later version of OpenStack will trigger a software upgrade.
(string) Used by the nrpe-external-master subordinate charm. A string that will be prepended to instance name to set the host name in nagios. So for instance the hostname would be something like: juju-myservice-0 If you're running multiple environments with the same services in them this allows you to differentiate between them.
(float) The CPU multiplier to use when configuring worker processes for the account, container and object server processes.
(string) Apply system hardening. Supports a space-delimited list of modules to run. Supported modules currently include os, ssh, apache and mysql.
(int) Max duration of a partition rsync (in seconds).
(string) String appended to nagios check
-m -r 60 180 10 20