2022-01-05 09:32:09 +00:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
from argparse import ArgumentParser
|
2022-02-03 14:36:55 +00:00
|
|
|
import importlib
|
2022-01-05 09:32:09 +00:00
|
|
|
import logging
|
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
|
|
|
|
sys.path.append(os.path.dirname(__file__) + '/../python')
|
|
|
|
|
|
|
|
import spdk.sma as sma # noqa
|
|
|
|
from spdk.rpc.client import JSONRPCClient # noqa
|
|
|
|
|
|
|
|
|
2022-01-05 15:54:14 +00:00
|
|
|
def parse_argv():
|
|
|
|
parser = ArgumentParser(description='Storage Management Agent command line interface')
|
|
|
|
parser.add_argument('--address', '-a', default='localhost',
|
|
|
|
help='IP address to listen on')
|
|
|
|
parser.add_argument('--socket', '-s', default='/var/tmp/spdk.sock',
|
|
|
|
help='SPDK RPC socket')
|
|
|
|
parser.add_argument('--port', '-p', default=8080, type=int,
|
|
|
|
help='IP port to listen on')
|
|
|
|
return parser.parse_args()
|
|
|
|
|
|
|
|
|
|
|
|
def get_build_client(sock):
|
|
|
|
def build_client():
|
|
|
|
return JSONRPCClient(sock)
|
|
|
|
|
|
|
|
return build_client
|
2022-01-05 09:32:09 +00:00
|
|
|
|
|
|
|
|
|
|
|
def register_device(agent, device):
|
|
|
|
device.init(None)
|
|
|
|
agent.register_device(device)
|
|
|
|
|
|
|
|
|
2022-02-03 14:36:55 +00:00
|
|
|
def load_plugins(agent, client, plugins):
|
|
|
|
for plugin in plugins:
|
|
|
|
module = importlib.import_module(plugin)
|
|
|
|
for device in getattr(module, 'devices', []):
|
|
|
|
logging.debug(f'Loading external device: {plugin}.{device.__name__}')
|
|
|
|
register_device(agent, device(client))
|
|
|
|
|
|
|
|
|
2022-01-05 09:32:09 +00:00
|
|
|
if __name__ == '__main__':
|
2022-01-05 15:54:14 +00:00
|
|
|
argv = parse_argv()
|
2022-01-05 09:32:09 +00:00
|
|
|
logging.basicConfig(level=os.environ.get('SMA_LOGLEVEL', 'WARNING').upper())
|
2022-01-05 15:54:14 +00:00
|
|
|
agent = sma.StorageManagementAgent(argv.address, argv.port)
|
|
|
|
register_device(agent, sma.NvmfTcpDeviceManager(get_build_client(argv.socket)))
|
2022-02-03 14:36:55 +00:00
|
|
|
load_plugins(agent, get_build_client(argv.socket),
|
|
|
|
filter(None, os.environ.get('SMA_PLUGINS', '').split(':')))
|
2022-01-05 09:32:09 +00:00
|
|
|
agent.run()
|