Juju Charm - Swift proxy
Go to file
Alex Kavanagh 9725234908 [yoga] Ensure get_requests_for_local_unit doesn't fail on incomplete relation
This is a rebuild/make sync for charms to pickup the fix in charmhelpers to fix
any inadvertant accesses of ['ca'] in the relation data before it is available
from vault in the certificates relation.  Fix in charmhelpers is in [1].

[1] https://github.com/juju/charm-helpers/pull/827
Closes-Bug: #2028683

Change-Id: I753486de8644d25201ec7138ec2190f66533a340
2023-08-17 10:16:04 +00:00
actions Fix yaml safe_load and allow unittests on py35 2021-10-14 14:32:00 +01:00
charmhelpers [yoga] Ensure get_requests_for_local_unit doesn't fail on incomplete relation 2023-08-17 10:16:04 +00:00
files Sync charm/ceph helpers, tox, and requirements 2019-10-01 14:38:02 -05:00
hooks Use python3-jinja2 for py3. 2022-04-22 09:56:55 -04:00
lib Fixed removing multiple devices 2021-11-22 14:13:07 +01:00
scripts - removed health checks 2013-04-05 17:34:01 -04:00
swift_manager Use unittest.mock instead of mock 2021-12-15 11:45:01 +00:00
templates s3token: Fix Keystone API configuration 2020-03-16 12:26:52 +01:00
tests Update the bundles to use the stable track, edge risk for yoga 2022-10-19 13:54:22 +01:00
unit_tests Use unittest.mock instead of mock 2021-12-15 11:45:01 +00:00
.gitignore Migrate charm to charmhub latest/edge track 2022-02-24 10:26:12 +00:00
.gitreview Updates for stable branch creation 2022-04-15 11:57:38 +01:00
.project Fixup missing files 2013-02-27 16:18:34 +00:00
.pydevproject Enable xenial/queens amulet tests 2018-03-20 09:54:11 +00:00
.stestr.conf Convert charm to Python 3 only 2017-12-06 14:20:25 +00:00
.zuul.yaml Updates to enable jammy and finalise charmcraft builds 2022-04-06 10:15:20 +01:00
actions.yaml Drop support of swauth for Train and later 2020-01-07 15:03:08 -05:00
build-requirements.txt Migrate charm to charmhub latest/edge track 2022-02-24 10:26:12 +00:00
charm-helpers-hooks.yaml Updates for stable branch creation 2022-04-15 11:57:38 +01:00
charmcraft.yaml Updates to enable jammy and finalise charmcraft builds 2022-04-06 10:15:20 +01:00
config.yaml Updates to enable jammy and finalise charmcraft builds 2022-04-06 10:15:20 +01:00
copyright Re-license charm as Apache-2.0 2016-07-01 18:12:11 +01:00
hardening.yaml Add hardening support 2016-03-24 11:36:26 +00:00
icon.svg Update charm icon 2017-08-02 17:28:33 +01:00
LICENSE Re-license charm as Apache-2.0 2016-07-01 18:12:11 +01:00
Makefile Sync helpers for 20.05 2020-05-18 14:50:24 +02:00
metadata.yaml Updates to enable jammy and finalise charmcraft builds 2022-04-06 10:15:20 +01:00
osci.yaml Update the bundles to use the stable track, edge risk for yoga 2022-10-19 13:54:22 +01:00
pip.sh Add xena bundles 2021-10-04 14:29:54 +01:00
README.md Policyd override implementation 2020-07-01 11:00:49 +01:00
README.Swift_ring_management Fix typo in ring management README 2019-05-17 11:19:47 -07:00
rename.sh Migrate charm to charmhub latest/edge track 2022-02-24 10:26:12 +00:00
requirements.txt Updates to enable jammy and finalise charmcraft builds 2022-04-06 10:15:20 +01:00
revision Add config options for proxy-server.conf template. node-timeout and recoverable-node-timeout. For large swift/glance uploads, higher defaults are needed to prevent uploads from failing on real servers which are slower than VMs. 2014-06-03 20:38:25 -05:00
setup.cfg [ussuri][goal] Updates for python 2.7 drop 2020-03-24 17:03:44 +00:00
test-requirements.txt Update the bundles to use the stable track, edge risk for yoga 2022-10-19 13:54:22 +01:00
tox.ini [yoga] Ensure get_requests_for_local_unit doesn't fail on incomplete relation 2023-08-17 10:16:04 +00:00

Overview

OpenStack Swift is a highly available, distributed, eventually consistent object/blob store.

The swift-proxy charm deploys Swift's proxy component. The charm's basic function is to manage zone assignment and enforce replica requirements for the storage nodes. It works in tandem with the swift-storage charm, which is used to add storage nodes.

Usage

Configuration

This section covers common configuration options. See file config.yaml for the full list of options, along with their descriptions and default values.

zone-assignment

The zone-assignment option defines the zone assignment method for storage nodes. Values include 'manual' (the default) and 'auto'.

replicas

The replicas option stipulates the number of data replicas are needed. This value should be equal to the number of zones. The default value is '3'.

Deployment

Let file swift.yaml contain the deployment configuration:

    swift-proxy:
        zone-assignment: manual
        replicas: 3
    swift-storage-zone1:
        zone: 1
        block-device: /dev/sdb
    swift-storage-zone2:
        zone: 2
        block-device: /dev/sdb
    swift-storage-zone3:
        zone: 3
        block-device: /dev/sdb

Deploy the proxy and storage nodes:

juju deploy --config swift.yaml swift-proxy
juju deploy --config swift.yaml swift-storage swift-storage-zone1
juju deploy --config swift.yaml swift-storage swift-storage-zone2
juju deploy --config swift.yaml swift-storage swift-storage-zone3

Add relations between the proxy node and all storage nodes:

juju add-relation swift-proxy:swift-storage swift-storage-zone1:swift-storage
juju add-relation swift-proxy:swift-storage swift-storage-zone2:swift-storage
juju add-relation swift-proxy:swift-storage swift-storage-zone3:swift-storage

This will result in a three-zone cluster, with each zone consisting of a single storage node, thereby satisfying the replica requirement of three.

Storage capacity is increased by adding swift-storage units to a zone. For example, to add two storage nodes to zone '3':

juju add-unit -n 2 swift-storage-zone3

Note

: When scaling out ensure the candidate machines are equipped with the block devices currently configured for the associated application.

This charm will not balance the storage ring until there are enough storage zones to meet its minimum replica requirement, in this case three.

Appendix Swift usage in the OpenStack Charms Deployment Guide offers in-depth guidance for deploying Swift with charms. In particular, it shows how to set up a multi-region (global) cluster.

Swift as backend for Glance

Swift may be used as a storage backend for the Glance image service. To do so, add a relation between the swift-proxy and glance applications:

juju add-relation swift-proxy:object-store glance:object-store

Telemetry

Starting with OpenStack Mitaka improved telemetry collection support can be achieved by adding a relation to rabbitmq-server:

juju add-relation swift-proxy rabbitmq-server

Doing the above in a busy Swift deployment can add a significant amount of load to the underlying message bus.

High availability

When more than one unit is deployed with the hacluster application the charm will bring up an HA active/active cluster.

There are two mutually exclusive high availability options: using virtual IP(s) or DNS. In both cases the hacluster subordinate charm is used to provide the Corosync and Pacemaker backend HA functionality.

See OpenStack high availability in the OpenStack Charms Deployment Guide for details.

Network spaces

This charm supports the use of Juju network spaces (Juju v.2.0). This feature optionally allows specific types of the application's network traffic to be bound to subnets that the underlying hardware is connected to.

Note

: Spaces must be configured in the backing cloud prior to deployment.

API endpoints can be bound to distinct network spaces supporting the network separation of public, internal, and admin endpoints.

For example, providing that spaces 'public-space', 'internal-space', and 'admin-space' exist, the deploy command above could look like this:

juju deploy --config swift-proxy.yaml swift-proxy \
   --bind "public=public-space internal=internal-space admin=admin-space"

Alternatively, configuration can be provided as part of a bundle:

    swift-proxy:
      charm: cs:swift-proxy
      num_units: 1
      bindings:
        public: public-space
        internal: internal-space
        admin: admin-space

Note

: Existing cinder units configured with the os-admin-network, os-internal-network, or os-public-network options will continue to honour them. Furthermore, these options override any space bindings, if set.

Actions

This section lists Juju actions supported by the charm. Actions allow specific operations to be performed on a per-unit basis.

  • add-user
  • diskusage
  • dispersion-populate
  • dispersion-report
  • openstack-upgrade
  • pause
  • remove-devices
  • resume
  • set-weight

To display action descriptions run juju actions swift-proxy.

Policy Overrides

This feature allows for policy overrides using the policy.d directory. This is an advanced feature and the policies that the OpenStack service supports should be clearly and unambiguously understood before trying to override, or add to, the default policies that the service uses. The charm also has some policy defaults. They should also be understood before being overridden.

Caution

: It is possible to break the system (for tenants and other services) if policies are incorrectly applied to the service.

Policy overrides are YAML files that contain rules that will add to, or override, existing policy rules in the service. The policy.d directory is a place to put the YAML override files. This charm owns the /etc/swift/policy.d directory, and as such, any manual changes to it will be overwritten on charm upgrades.

Overrides are provided to the charm using a Juju resource called policyd-override. The resource is a ZIP file. This file, say overrides.zip, is attached to the charm by:

juju attach-resource swift-proxy policyd-override=overrides.zip

The policy override is enabled in the charm using:

juju config swift-proxy use-policyd-override=true

When use-policyd-override is True the status line of the charm will be prefixed with PO: indicating that policies have been overridden. If the installation of the policy override YAML files failed for any reason then the status line will be prefixed with PO (broken):. The log file for the charm will indicate the reason. No policy override files are installed if the PO (broken): is shown. The status line indicates that the overrides are broken, not that the policy for the service has failed. The policy will be the defaults for the charm and service.

Policy overrides on one service may affect the functionality of another service. Therefore, it may be necessary to provide policy overrides for multiple service charms to achieve a consistent set of policies across the OpenStack system. The charms for the other services that may need overrides should be checked to ensure that they support overrides before proceeding.

Bugs

Please report bugs on Launchpad.

For general charm questions refer to the OpenStack Charm Guide.