Add support for storage pools
The patch set all back-end storage pools that are known to the scheduler service for share and volume services. Change-Id: I9abb849cd28b8c4c7874919fb271d6506cb7a255
This commit is contained in:
parent
e7c69d2957
commit
12ec193b0f
@ -20,6 +20,10 @@ import urllib3
|
|||||||
from six.moves import urllib
|
from six.moves import urllib
|
||||||
|
|
||||||
from config_tempest.constants import LOG
|
from config_tempest.constants import LOG
|
||||||
|
|
||||||
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
|
|
||||||
MULTIPLE_SLASH = re.compile(r'/+')
|
MULTIPLE_SLASH = re.compile(r'/+')
|
||||||
|
|
||||||
|
|
||||||
@ -62,6 +66,11 @@ class Service(object):
|
|||||||
self.s_type, url)
|
self.s_type, url)
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
|
if r.status == 403:
|
||||||
|
raise exceptions.Forbidden("Request on service '%s' with url '%s' "
|
||||||
|
"failed with code 403" % (self.s_type,
|
||||||
|
url))
|
||||||
|
|
||||||
if r.status >= 400:
|
if r.status >= 400:
|
||||||
raise ServiceError("Request on service '%s' with url '%s' failed"
|
raise ServiceError("Request on service '%s' with url '%s' failed"
|
||||||
" with code %d" % (self.s_type, url, r.status))
|
" with code %d" % (self.s_type, url, r.status))
|
||||||
|
@ -13,17 +13,41 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
|
from config_tempest import constants as C
|
||||||
from config_tempest.services.base import VersionedService
|
from config_tempest.services.base import VersionedService
|
||||||
|
|
||||||
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
|
|
||||||
class ShareService(VersionedService):
|
class ShareService(VersionedService):
|
||||||
|
|
||||||
|
def get_share_pools(self):
|
||||||
|
body = self.do_get(self.service_url + '/scheduler-stats/pools')
|
||||||
|
body = json.loads(body)
|
||||||
|
return body
|
||||||
|
|
||||||
def set_default_tempest_options(self, conf):
|
def set_default_tempest_options(self, conf):
|
||||||
if 'v2' in self.service_url:
|
if 'v2' in self.service_url:
|
||||||
m_vs = self.filter_api_microversions()
|
m_vs = self.filter_api_microversions()
|
||||||
conf.set('share', 'min_api_microversion', m_vs['min_microversion'])
|
conf.set('share', 'min_api_microversion', m_vs['min_microversion'])
|
||||||
conf.set('share', 'max_api_microversion', m_vs['max_microversion'])
|
conf.set('share', 'max_api_microversion', m_vs['max_microversion'])
|
||||||
|
|
||||||
|
try:
|
||||||
|
pools = self.get_share_pools()['pools']
|
||||||
|
except exceptions.Forbidden:
|
||||||
|
C.LOG.warning("User has no permissions to list back-end storage "
|
||||||
|
"pools - storage back-ends can't be discovered.")
|
||||||
|
return
|
||||||
|
if pools:
|
||||||
|
backends = [
|
||||||
|
pool['backend'] for pool in pools
|
||||||
|
]
|
||||||
|
conf.set('share', 'backend_names', ','.join(backends))
|
||||||
|
if len(backends) > 1:
|
||||||
|
conf.set('share', 'multi_backend', True)
|
||||||
|
|
||||||
def get_unversioned_service_type(self):
|
def get_unversioned_service_type(self):
|
||||||
return 'share'
|
return 'share'
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
import re
|
||||||
|
|
||||||
from config_tempest import constants as C
|
from config_tempest import constants as C
|
||||||
from config_tempest.services.base import VersionedService
|
from config_tempest.services.base import VersionedService
|
||||||
@ -33,12 +34,32 @@ class VolumeService(VersionedService):
|
|||||||
self.versions_body = json.loads(body)
|
self.versions_body = json.loads(body)
|
||||||
self.versions = self.deserialize_versions(self.versions_body)
|
self.versions = self.deserialize_versions(self.versions_body)
|
||||||
|
|
||||||
|
def get_volume_pools(self):
|
||||||
|
body = self.do_get(self.service_url + '/scheduler-stats/get_pools')
|
||||||
|
body = json.loads(body)
|
||||||
|
return body
|
||||||
|
|
||||||
def set_default_tempest_options(self, conf):
|
def set_default_tempest_options(self, conf):
|
||||||
if 'v3' in self.service_url:
|
if 'v3' in self.service_url:
|
||||||
m_vs = self.filter_api_microversions()
|
m_vs = self.filter_api_microversions()
|
||||||
conf.set('volume', 'min_microversion', m_vs['min_microversion'])
|
conf.set('volume', 'min_microversion', m_vs['min_microversion'])
|
||||||
conf.set('volume', 'max_microversion', m_vs['max_microversion'])
|
conf.set('volume', 'max_microversion', m_vs['max_microversion'])
|
||||||
|
|
||||||
|
try:
|
||||||
|
pools = self.get_volume_pools()['pools']
|
||||||
|
except exceptions.Forbidden:
|
||||||
|
C.LOG.warning("User has no permissions to list back-end storage "
|
||||||
|
"pools - storage back-ends can't be discovered.")
|
||||||
|
return
|
||||||
|
if pools:
|
||||||
|
backends = [
|
||||||
|
re.findall(r'(\w*)@(\w*)', pool['name'])[0][1]
|
||||||
|
for pool in pools
|
||||||
|
]
|
||||||
|
conf.set('volume', 'backend_names', ','.join(backends))
|
||||||
|
if len(backends) > 1:
|
||||||
|
conf.set('volume-feature-enabled', 'multi_backend', True)
|
||||||
|
|
||||||
def get_service_extension_key(self):
|
def get_service_extension_key(self):
|
||||||
return 'api_extensions'
|
return 'api_extensions'
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user