added MetaShareType class, get_share_type function, and wait param to scci_cmd function

This commit is contained in:
Naohiro Tamura
2015-05-07 00:17:46 +09:00
parent a4fd5621fd
commit 85217581d7
3 changed files with 48 additions and 9 deletions

View File

@@ -5,3 +5,4 @@
pbr>=0.6,!=0.7,<1.0 pbr>=0.6,!=0.7,<1.0
Babel>=1.3 Babel>=1.3
requests>=2.2.0,!=2.4.0 requests>=2.2.0,!=2.4.0
six>=1.9.0

View File

@@ -17,9 +17,11 @@ SCCI functionalities shared between different iRMC modules.
""" """
import functools import functools
import time
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
import requests import requests
import six
class SCCIError(Exception): class SCCIError(Exception):
@@ -197,14 +199,31 @@ _VIRTUAL_MEDIA_FD_SETTINGS = '''
''' '''
class SHARETYPE(object): class MetaShareType(type):
@property
def nfs(cls):
return cls.NFS
@property
def cifs(cls):
return cls.CIFS
@six.add_metaclass(MetaShareType)
class ShareType(object):
""""Virtual Media Share Type.""" """"Virtual Media Share Type."""
NFS = 0 NFS = 0
CIFS = 1 CIFS = 1
def scci_cmd(host, userid, password, cmd, def get_share_type(share_type):
port=443, auth_method='basic', client_timeout=60): """get share type."""
return({'nfs': ShareType.nfs,
'cifs': ShareType.cifs}[share_type.lower()])
def scci_cmd(host, userid, password, cmd, port=443, auth_method='basic',
client_timeout=60, wait=0, **kwargs):
"""execute SCCI command """execute SCCI command
This function calls SCCI server modules This function calls SCCI server modules
@@ -215,6 +234,7 @@ def scci_cmd(host, userid, password, cmd,
:param port: port number of iRMC :param port: port number of iRMC
:param auth_method: irmc_username :param auth_method: irmc_username
:param client_timeout: timeout for SCCI operations :param client_timeout: timeout for SCCI operations
:param wait: wait seconds before issuing SCCI command
:returns: requests.Response from SCCI server :returns: requests.Response from SCCI server
:raises: SCCIInvalidInputError if port and/or auth_method params :raises: SCCIInvalidInputError if port and/or auth_method params
are invalid are invalid
@@ -234,6 +254,8 @@ def scci_cmd(host, userid, password, cmd,
"auth_method for method %(auth_method)s") % "auth_method for method %(auth_method)s") %
{'port': port, 'auth_method': auth_method}) {'port': port, 'auth_method': auth_method})
# wait
time.sleep(wait)
try: try:
header = {'Content-type': 'application/x-www-form-urlencoded'} header = {'Content-type': 'application/x-www-form-urlencoded'}
r = requests.post(protocol + '://' + host + '/config', r = requests.post(protocol + '://' + host + '/config',
@@ -267,8 +289,8 @@ def scci_cmd(host, userid, password, cmd,
raise SCCIClientError(requests_exception) raise SCCIClientError(requests_exception)
def get_client(host, userid, password, def get_client(host, userid, password, port=443, auth_method='basic',
port=443, auth_method='basic', client_timeout=60): client_timeout=60, **kwargs):
"""get SCCI command partial function """get SCCI command partial function
This function returs SCCI command partial function This function returs SCCI command partial function
@@ -283,7 +305,7 @@ def get_client(host, userid, password,
return functools.partial(scci_cmd, host, userid, password, return functools.partial(scci_cmd, host, userid, password,
port=port, auth_method=auth_method, port=port, auth_method=auth_method,
client_timeout=client_timeout) client_timeout=client_timeout, **kwargs)
def get_virtual_cd_set_params_cmd(remote_image_server, def get_virtual_cd_set_params_cmd(remote_image_server,
@@ -298,7 +320,7 @@ def get_virtual_cd_set_params_cmd(remote_image_server,
This function returs Virtual CD Media Set Parameters Command This function returs Virtual CD Media Set Parameters Command
:param remote_image_server: remote image server name or IP :param remote_image_server: remote image server name or IP
:param remote_image_user_domain: domain name of remote image server :param remote_image_user_domain: domain name of remote image server
:param remote_image_share_type: share type of SHARETYPE :param remote_image_share_type: share type of ShareType
:param remote_image_share_name: share name :param remote_image_share_name: share name
:param remote_image_deploy_iso: deploy ISO image file name :param remote_image_deploy_iso: deploy ISO image file name
:param remote_image_username: username of remote image server :param remote_image_username: username of remote image server
@@ -330,7 +352,7 @@ def get_virtual_fd_set_params_cmd(remote_image_server,
This function returs Virtual FD Media Set Parameters Command This function returs Virtual FD Media Set Parameters Command
:param remote_image_server: remote image server name or IP :param remote_image_server: remote image server name or IP
:param remote_image_user_domain: domain name of remote image server :param remote_image_user_domain: domain name of remote image server
:param remote_image_share_type: share type of SHARETYPE :param remote_image_share_type: share type of ShareType
:param remote_image_share_name: share name :param remote_image_share_name: share name
:param remote_image_deploy_iso: deploy ISO image file name :param remote_image_deploy_iso: deploy ISO image file name
:param remote_image_username: username of remote image server :param remote_image_username: username of remote image server

View File

@@ -75,7 +75,7 @@ class SCCITestCase(testtools.TestCase):
self.irmc_remote_image_server = '10.33.110.49' self.irmc_remote_image_server = '10.33.110.49'
self.irmc_remote_image_user_domain = 'example.local' self.irmc_remote_image_user_domain = 'example.local'
self.irmc_remote_image_share_type = scci.SHARETYPE.NFS self.irmc_remote_image_share_type = scci.ShareType.nfs
self.irmc_remote_image_share_name = 'share' self.irmc_remote_image_share_name = 'share'
self.irmc_remote_image_deploy_iso = 'ubuntu-14.04.1-server-amd64.iso' self.irmc_remote_image_deploy_iso = 'ubuntu-14.04.1-server-amd64.iso'
self.irmc_remote_image_username = 'deployer' self.irmc_remote_image_username = 'deployer'
@@ -122,6 +122,22 @@ class SCCITestCase(testtools.TestCase):
'https://github.com', verify=False) 'https://github.com', verify=False)
self.assertEqual("'member_descriptor' object is not callable", str(e)) self.assertEqual("'member_descriptor' object is not callable", str(e))
def test_get_share_type_ok(self):
nfs_result = scci.get_share_type("nfs")
self.assertEqual(scci.ShareType.nfs, nfs_result)
cifs_result = scci.get_share_type("cifs")
self.assertEqual(scci.ShareType.cifs, cifs_result)
NFS_result = scci.get_share_type("NFS")
self.assertEqual(scci.ShareType.nfs, NFS_result)
CIFS_result = scci.get_share_type("CIFS")
self.assertEqual(scci.ShareType.cifs, CIFS_result)
def test_get_share_type_ng(self):
self.assertRaises(KeyError,
scci.get_share_type,
"abc")
@mock.patch('scciclient.irmc.scci.requests') @mock.patch('scciclient.irmc.scci.requests')
def test_scci_cmd_protocol_https_ok(self, mock_requests): def test_scci_cmd_protocol_https_ok(self, mock_requests):
https_port = 443 https_port = 443