blob: 901098ea5665aa106ebe993e2c6006294208d341 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# -*- coding: utf-8 -*-
import json
from .. import mgr
class NvmeofGatewayAlreadyExists(Exception):
def __init__(self, gateway_name):
super(NvmeofGatewayAlreadyExists, self).__init__(
"NVMe-oF gateway '{}' already exists".format(gateway_name))
class NvmeofGatewayDoesNotExist(Exception):
def __init__(self, hostname):
super(NvmeofGatewayDoesNotExist, self).__init__(
"NVMe-oF gateway '{}' does not exist".format(hostname))
class ManagedByOrchestratorException(Exception):
def __init__(self):
super(ManagedByOrchestratorException, self).__init__(
"NVMe-oF configuration is managed by the orchestrator")
_NVMEOF_STORE_KEY = "_nvmeof_config"
class NvmeofGatewaysConfig(object):
@classmethod
def _load_config_from_store(cls):
json_db = mgr.get_store(_NVMEOF_STORE_KEY,
'{"gateways": {}}')
config = json.loads(json_db)
cls._save_config(config)
return config
@classmethod
def _save_config(cls, config):
mgr.set_store(_NVMEOF_STORE_KEY, json.dumps(config))
@classmethod
def get_gateways_config(cls):
return cls._load_config_from_store()
@classmethod
def add_gateway(cls, name, service_url):
config = cls.get_gateways_config()
if name in config:
raise NvmeofGatewayAlreadyExists(name)
config['gateways'][name] = {'service_url': service_url}
cls._save_config(config)
@classmethod
def remove_gateway(cls, name):
config = cls.get_gateways_config()
if name not in config['gateways']:
raise NvmeofGatewayDoesNotExist(name)
del config['gateways'][name]
cls._save_config(config)
|