Support deploy of Swift with internal S3 support
Swift support is in-tree for Swift since OpenStack Rocky, and the swift-plugin-s3 package has been removed from the archive at Cosmic so drop installation at Rocky. Add new template for Rocky to use the in-tree s3api and s3token middleware. Enable cosmic test to validate changes. Change-Id: Ie5447dc44203c1ea2ad27e6d71248ba59d7549d0 Closes-Bug: 1805597
This commit is contained in:
parent
45c57883a7
commit
8cf9dd4e1a
|
@ -125,9 +125,9 @@ BASE_PACKAGES = [
|
||||||
'python-keystone',
|
'python-keystone',
|
||||||
]
|
]
|
||||||
# > Folsom specific packages
|
# > Folsom specific packages
|
||||||
FOLSOM_PACKAGES = BASE_PACKAGES + ['swift-plugin-s3', 'swauth']
|
FOLSOM_PACKAGES = ['swift-plugin-s3', 'swauth']
|
||||||
# > Mitaka specific packages
|
# > Mitaka specific packages
|
||||||
MITAKA_PACKAGES = FOLSOM_PACKAGES + ['python-ceilometermiddleware']
|
MITAKA_PACKAGES = ['python-ceilometermiddleware']
|
||||||
|
|
||||||
SWIFT_HA_RES = 'grp_swift_vips'
|
SWIFT_HA_RES = 'grp_swift_vips'
|
||||||
TEMPLATES = 'templates/'
|
TEMPLATES = 'templates/'
|
||||||
|
@ -454,12 +454,14 @@ def ensure_swift_dir(conf_dir=os.path.dirname(SWIFT_CONF)):
|
||||||
def determine_packages(release):
|
def determine_packages(release):
|
||||||
"""Determine what packages are needed for a given OpenStack release."""
|
"""Determine what packages are needed for a given OpenStack release."""
|
||||||
cmp_openstack = CompareOpenStackReleases(release)
|
cmp_openstack = CompareOpenStackReleases(release)
|
||||||
|
pkgs = BASE_PACKAGES[:]
|
||||||
|
if cmp_openstack >= 'folsom':
|
||||||
|
pkgs += FOLSOM_PACKAGES
|
||||||
if cmp_openstack >= 'mitaka':
|
if cmp_openstack >= 'mitaka':
|
||||||
return MITAKA_PACKAGES
|
pkgs += MITAKA_PACKAGES
|
||||||
elif cmp_openstack >= 'folsom':
|
if cmp_openstack >= 'rocky':
|
||||||
return FOLSOM_PACKAGES
|
pkgs.remove('swift-plugin-s3')
|
||||||
else:
|
return pkgs
|
||||||
return BASE_PACKAGES
|
|
||||||
|
|
||||||
|
|
||||||
def initialize_ring(path, part_power, replicas, min_hours):
|
def initialize_ring(path, part_power, replicas, min_hours):
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# queens
|
||||||
[DEFAULT]
|
[DEFAULT]
|
||||||
bind_port = {{ bind_port }}
|
bind_port = {{ bind_port }}
|
||||||
workers = {{ workers }}
|
workers = {{ workers }}
|
||||||
|
|
|
@ -0,0 +1,151 @@
|
||||||
|
# rocky
|
||||||
|
[DEFAULT]
|
||||||
|
bind_port = {{ bind_port }}
|
||||||
|
workers = {{ workers }}
|
||||||
|
user = swift
|
||||||
|
bind_ip = {{ bind_host }}
|
||||||
|
log_name = swift
|
||||||
|
log_facility = LOG_LOCAL0
|
||||||
|
log_level = {{ log_level }}
|
||||||
|
log_address = /dev/log
|
||||||
|
log_headers = {{ log_headers }}
|
||||||
|
|
||||||
|
{% if statsd_host %}
|
||||||
|
log_statsd_host = {{ statsd_host }}
|
||||||
|
log_statsd_port = {{ statsd_port }}
|
||||||
|
log_statsd_default_sample_rate = {{ statsd_sample_rate }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if ssl %}
|
||||||
|
cert_file = {{ ssl_cert }}
|
||||||
|
key_file = {{ ssl_key }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if auth_type == 'keystone' %}
|
||||||
|
[pipeline:main]
|
||||||
|
{% if transport_url %}
|
||||||
|
pipeline = ceilometer catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk tempurl ratelimit formpost authtoken keystoneauth s3api s3token staticweb copy container-quotas account-quotas slo dlo versioned_writes symlink proxy-logging proxy-server
|
||||||
|
{% else %}
|
||||||
|
pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk tempurl ratelimit formpost authtoken keystoneauth s3api s3token staticweb copy container-quotas account-quotas slo dlo versioned_writes symlink proxy-logging proxy-server
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
[pipeline:main]
|
||||||
|
pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk tempurl slo dlo formpost {{ auth_type }} staticweb versioned_writes container-quotas account-quotas proxy-logging proxy-server
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
[app:proxy-server]
|
||||||
|
use = egg:swift#proxy
|
||||||
|
allow_account_management = true
|
||||||
|
{% if auth_type == 'keystone' %}account_autocreate = true{% endif %}
|
||||||
|
node_timeout = {{ node_timeout }}
|
||||||
|
recoverable_node_timeout = {{ recoverable_node_timeout }}
|
||||||
|
|
||||||
|
[filter:tempauth]
|
||||||
|
use = egg:swift#tempauth
|
||||||
|
user_system_root = testpass .admin https://{{ proxy_ip }}:8080/v1/AUTH_system
|
||||||
|
|
||||||
|
[filter:healthcheck]
|
||||||
|
use = egg:swift#healthcheck
|
||||||
|
|
||||||
|
[filter:cache]
|
||||||
|
use = egg:swift#memcache
|
||||||
|
memcache_servers = {{ memcached_ip }}:11211
|
||||||
|
|
||||||
|
[filter:account-quotas]
|
||||||
|
use = egg:swift#account_quotas
|
||||||
|
|
||||||
|
[filter:container-quotas]
|
||||||
|
use = egg:swift#container_quotas
|
||||||
|
|
||||||
|
[filter:proxy-logging]
|
||||||
|
use = egg:swift#proxy_logging
|
||||||
|
|
||||||
|
[filter:staticweb]
|
||||||
|
use = egg:swift#staticweb
|
||||||
|
|
||||||
|
[filter:bulk]
|
||||||
|
use = egg:swift#bulk
|
||||||
|
|
||||||
|
[filter:slo]
|
||||||
|
use = egg:swift#slo
|
||||||
|
{% if static_large_object_segments and static_large_object_segments > 0 %}
|
||||||
|
max_manifest_size = 536870912
|
||||||
|
max_manifest_segments = {{ static_large_object_segments }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
[filter:dlo]
|
||||||
|
use = egg:swift#dlo
|
||||||
|
|
||||||
|
[filter:formpost]
|
||||||
|
use = egg:swift#formpost
|
||||||
|
|
||||||
|
[filter:tempurl]
|
||||||
|
use = egg:swift#tempurl
|
||||||
|
|
||||||
|
[filter:catch_errors]
|
||||||
|
use = egg:swift#catch_errors
|
||||||
|
|
||||||
|
[filter:versioned_writes]
|
||||||
|
use = egg:swift#versioned_writes
|
||||||
|
|
||||||
|
[filter:container_sync]
|
||||||
|
use = egg:swift#container_sync
|
||||||
|
|
||||||
|
[filter:gatekeeper]
|
||||||
|
use = egg:swift#gatekeeper
|
||||||
|
|
||||||
|
[filter:ratelimit]
|
||||||
|
use = egg:swift#ratelimit
|
||||||
|
|
||||||
|
[filter:copy]
|
||||||
|
use = egg:swift#copy
|
||||||
|
|
||||||
|
[filter:symlink]
|
||||||
|
use = egg:swift#symlink
|
||||||
|
|
||||||
|
{% if auth_type == 'keystone' %}
|
||||||
|
[filter:keystoneauth]
|
||||||
|
use = egg:swift#keystoneauth
|
||||||
|
operator_roles = {{ operator_roles }}
|
||||||
|
|
||||||
|
[filter:authtoken]
|
||||||
|
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
|
||||||
|
identity_uri = {{ auth_protocol }}://{{ keystone_host }}:{{ auth_port }}
|
||||||
|
auth_uri = {{ service_protocol }}://{{ service_host }}:{{ service_port }}
|
||||||
|
auth_plugin = password
|
||||||
|
auth_url = {{ auth_protocol }}://{{ keystone_host }}:{{ auth_port }}
|
||||||
|
auth_version = 3
|
||||||
|
username = {{ service_user }}
|
||||||
|
password = {{ service_password }}
|
||||||
|
project_domain_name = {{ admin_domain_name }}
|
||||||
|
user_domain_name = {{ admin_domain_name }}
|
||||||
|
project_name = {{ admin_tenant_name }}
|
||||||
|
delay_auth_decision = {{ delay_auth_decision|lower }}
|
||||||
|
signing_dir = {{ signing_dir }}
|
||||||
|
cache = swift.cache
|
||||||
|
|
||||||
|
[filter:s3token]
|
||||||
|
use = egg:swift#s3token
|
||||||
|
auth_uri = {{ auth_protocol }}://{{ keystone_host }}:{{ auth_port }}
|
||||||
|
auth_version = 3
|
||||||
|
|
||||||
|
[filter:s3api]
|
||||||
|
use = egg:swift#s3api
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if auth_type == 'swauth' %}
|
||||||
|
[filter:swauth]
|
||||||
|
use = egg:swauth#swauth
|
||||||
|
set log_name = swauth
|
||||||
|
super_admin_key = {{ swauth_admin_key }}
|
||||||
|
default_swift_cluster = local#https://{{ proxy_ip }}:8080/v1
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if transport_url -%}
|
||||||
|
[filter:ceilometer]
|
||||||
|
paste.filter_factory = ceilometermiddleware.swift:filter_factory
|
||||||
|
url = {{ transport_url }}
|
||||||
|
driver = messagingv2
|
||||||
|
topic = notifications
|
||||||
|
log_level = WARN
|
||||||
|
{% endif -%}
|
|
@ -65,7 +65,8 @@ class SwiftProxyBasicDeployment(OpenStackAmuletDeployment):
|
||||||
{'name': 'percona-cluster'},
|
{'name': 'percona-cluster'},
|
||||||
{'name': 'keystone'},
|
{'name': 'keystone'},
|
||||||
{'name': 'glance'},
|
{'name': 'glance'},
|
||||||
{'name': 'swift-storage'}
|
{'name': 'swift-storage',
|
||||||
|
'storage': {'block-devices': 'cinder,10G'}},
|
||||||
]
|
]
|
||||||
super(SwiftProxyBasicDeployment, self)._add_services(this_service,
|
super(SwiftProxyBasicDeployment, self)._add_services(this_service,
|
||||||
other_services)
|
other_services)
|
||||||
|
@ -95,9 +96,6 @@ class SwiftProxyBasicDeployment(OpenStackAmuletDeployment):
|
||||||
}
|
}
|
||||||
swift_storage_config = {
|
swift_storage_config = {
|
||||||
'zone': '1',
|
'zone': '1',
|
||||||
'block-device': 'vdb',
|
|
||||||
'overwrite': 'true',
|
|
||||||
'ephemeral-unmount': '/mnt'
|
|
||||||
}
|
}
|
||||||
pxc_config = {
|
pxc_config = {
|
||||||
'innodb-buffer-pool-size': '256M',
|
'innodb-buffer-pool-size': '256M',
|
||||||
|
@ -366,7 +364,7 @@ class SwiftProxyBasicDeployment(OpenStackAmuletDeployment):
|
||||||
'object_port': '6000',
|
'object_port': '6000',
|
||||||
'container_port': '6001',
|
'container_port': '6001',
|
||||||
'private-address': u.valid_ip,
|
'private-address': u.valid_ip,
|
||||||
'device': 'vdb'
|
'device': 'vdd'
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = u.validate_relation_data(unit, relation, expected)
|
ret = u.validate_relation_data(unit, relation, expected)
|
||||||
|
|
|
@ -552,3 +552,47 @@ class SwiftUtilsTestCase(unittest.TestCase):
|
||||||
swift_utils.clear_storage_rings_available()
|
swift_utils.clear_storage_rings_available()
|
||||||
mock_relation_set.assert_called_once_with(
|
mock_relation_set.assert_called_once_with(
|
||||||
relation_id='storage:0', rings_url=None)
|
relation_id='storage:0', rings_url=None)
|
||||||
|
|
||||||
|
def test_determine_packages(self):
|
||||||
|
self.assertEqual(
|
||||||
|
['swift',
|
||||||
|
'swift-proxy',
|
||||||
|
'memcached',
|
||||||
|
'apache2',
|
||||||
|
'python-keystone'],
|
||||||
|
swift_utils.determine_packages('essex')
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
['swift',
|
||||||
|
'swift-proxy',
|
||||||
|
'memcached',
|
||||||
|
'apache2',
|
||||||
|
'python-keystone',
|
||||||
|
'swift-plugin-s3',
|
||||||
|
'swauth'],
|
||||||
|
swift_utils.determine_packages('folsom')
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
['swift',
|
||||||
|
'swift-proxy',
|
||||||
|
'memcached',
|
||||||
|
'apache2',
|
||||||
|
'python-keystone',
|
||||||
|
'swift-plugin-s3',
|
||||||
|
'swauth',
|
||||||
|
'python-ceilometermiddleware'],
|
||||||
|
swift_utils.determine_packages('mitaka')
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
['swift',
|
||||||
|
'swift-proxy',
|
||||||
|
'memcached',
|
||||||
|
'apache2',
|
||||||
|
'python-keystone',
|
||||||
|
'swauth',
|
||||||
|
'python-ceilometermiddleware'],
|
||||||
|
swift_utils.determine_packages('rocky')
|
||||||
|
)
|
||||||
|
|
Loading…
Reference in New Issue