config/sysinv/cgts-client/cgts-client/cgtsclient/v1/storage_ceph.py
Dan Voiculeasa ddc6b69dfc Allow configurable ceph storage backend network
Ceph components are configured by puppet. Hieradata for it is generated
by sysinv. Currently the configuration is generated using IPs from the
management network.

Allow ceph components to be configurable on cluster-host network.
Create a 'network' parameter for strorage-backend-add command. The
parameter is optional, the rest controller will default the value to
management network.

Example usage:
system storage-backend-add --network cluster-host ceph --confirmed
system storage-backend-add --network mgmt ceph --confirmed
system storage-backend-add ceph --confirmed

Updated unit tests.
Added unit test for component that generates the ceph monitor ips for
hieradata.

Tests:
1) AIO-SX: add ceph using --network cluster-host, unlock, ip is from
cluster-host network.
2) STANDARD 2+2: full deploy, no --network parameter, everything as
before.
3) storage-backend-modify and storage-backend-add allows only 'mgmt' and
'cluster-host' network parameter.
4) storage-backend-modify does modify the network before the first
unlock; is rejected for network parameter after first unlock.

Story: 2008843
Task: 42350
Task: 42351
Signed-off-by: Dan Voiculeasa <dan.voiculeasa@windriver.com>
Change-Id: I681ccb3302b8f233424bc291e08675a4dc2b10f7
2021-05-07 14:31:39 +03:00

64 lines
2.0 KiB
Python

#
# Copyright (c) 2013-2021 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
# -*- encoding: utf-8 -*-
#
from cgtsclient.common import base
from cgtsclient import exc
CREATION_ATTRIBUTES = ['confirmed', 'name', 'services', 'capabilities',
'tier_uuid', 'cinder_pool_gib', 'glance_pool_gib',
'ephemeral_pool_gib', 'object_pool_gib',
'kube_pool_gib', 'object_gateway', 'network']
DISPLAY_ATTRIBUTES = ['object_gateway', 'ceph_total_space_gib',
'object_pool_gib', 'cinder_pool_gib',
'kube_pool_gib', 'glance_pool_gib', 'ephemeral_pool_gib',
'tier_name', 'tier_uuid', 'network']
PATCH_ATTRIBUTES = ['object_gateway', 'object_pool_gib',
'cinder_pool_gib', 'glance_pool_gib',
'ephemeral_pool_gib', 'kube_pool_gib', 'network']
class StorageCeph(base.Resource):
def __repr__(self):
return "<storage_ceph %s>" % self._info
class StorageCephManager(base.Manager):
resource_class = StorageCeph
@staticmethod
def _path(id=None):
return '/v1/storage_ceph/%s' % id if id else '/v1/storage_ceph'
def list(self):
return self._list(self._path(), "storage_ceph")
def get(self, storceph_id=None):
try:
if storceph_id:
return self._list(self._path(storceph_id))[0]
else:
return self._list(self._path(), "storage_ceph")[0]
except IndexError:
return None
def create(self, **kwargs):
new = {}
for (key, value) in kwargs.items():
if key in CREATION_ATTRIBUTES:
new[key] = value
else:
raise exc.InvalidAttribute('%s' % key)
return self._create(self._path(), new)
def update(self, storceph_id, patch):
return self._update(self._path(storceph_id), patch)
def delete(self, storceph_id):
return self._delete(self._path(storceph_id))