added MetaShareType class, get_share_type function, and wait param to scci_cmd function
This commit is contained in:
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user