Module cvpysdk.metallic
Main file for performing Metallic Integration steps with existing commcell .
This file has all the classes related to Metallic Integration Operations.
Metallic: Class for representing all the metallic integration steps
Metallic
init(commcell_object) – initialize the Metallic class instance for the commcell
_metallic_commcell_object() – returns the metallic commcell object
metallic_subscribe() – linking on metallic side
_cv_metallic_subscribe() – linking on commvault side
is_metallic_registered() – returns boolean value true - if metallic is subscribed for a user false - if metallic is not subscribed for a user
metallic_completed_solutions() – returns all the completed solutions on linked company of metalic
metallic_unsubscribe() – unlinking on metallic side
_cv_metallic_unsubscibe() – unlinking on commvault side
_get_eligible_metallic_commcells() – gets the eligible metallic commcells for the logged in user
Metallic instance Attributes:
**cloudservices_details** -- returns cloudServices details if metallic service is registered in
onprem/ MSP commcell
**cloud_hostname** -- returns cloud commcell hostname
Expand source code Browse git
# -*- coding: utf-8 -*-
# --------------------------------------------------------------------------
# Copyright Commvault Systems, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# --------------------------------------------------------------------------
"""Main file for performing Metallic Integration steps with existing commcell .
This file has all the classes related to Metallic Integration Operations.
Metallic: Class for representing all the metallic integration steps
Metallic:
__init__(commcell_object) -- initialize the Metallic class
instance for the commcell
_metallic_commcell_object() -- returns the metallic commcell object
metallic_subscribe() -- linking on metallic side
_cv_metallic_subscribe() -- linking on commvault side
is_metallic_registered() -- returns boolean value
true - if metallic is subscribed for a user
false - if metallic is not subscribed for a user
metallic_completed_solutions() -- returns all the completed solutions on linked company of metalic
metallic_unsubscribe() -- unlinking on metallic side
_cv_metallic_unsubscibe() -- unlinking on commvault side
_get_eligible_metallic_commcells() -- gets the eligible metallic commcells for the logged in user
Metallic instance Attributes:
**cloudservices_details** -- returns cloudServices details if metallic service is registered in
onprem/ MSP commcell
**cloud_hostname** -- returns cloud commcell hostname
"""
from .exception import SDKException
from .organization import Organization
from .security.user import User
class Metallic(object):
"""Class for representing Metallic related operations."""
def __init__(self, commcell_object):
"""Intializes object of the Metallic class.
Args:
commcell_object (object) -instance of the commcell class
Returns:
object - instance of the Metallic class
"""
self._commcell_object = commcell_object
self._update_response_ = self._commcell_object._update_response_
self._metallic_details = None
self._metallic_web_url = None
self._metallic_obj = None
self._cloudservices_details = None
def _metallic_commcell_object(self, cloud_webconsole_hostname, cloud_username, cloud_password):
"""Gets the metallic commcell object.
Args:
cloud_webconsole_hostname (str) -- hostname of the cloud
cloud_username (str) -- username of the cloud
cloud_password (str) -- password of the cloud
Raises:
SDKException:
if inputs are not valid
if failed to create the object
if response is empty
if response is not success
"""
if not (isinstance(cloud_webconsole_hostname, str) and
isinstance(cloud_username, str) and
isinstance(cloud_password, str)):
raise SDKException('Metallic', '101')
from cvpysdk.commcell import Commcell
metallic_cell = self._get_eligible_metallic_commcells(cloud_username, cloud_webconsole_hostname)
if (len(metallic_cell)) > 0:
cloud_webconsole_hostname = metallic_cell[0]
self._metallic_obj = Commcell(cloud_webconsole_hostname, cloud_username, cloud_password)
def metallic_subscribe(self, cloud_webconsole_hostname, cloud_username, cloud_password, msp_company_name=None):
"""Adds a new Monitoring Policy to the Commcell.
Args:
cloud_webconsole_hostname (str) -- hostname of the cloud
cloud_username (str) -- username of the cloud
cloud_password (str) -- password of the cloud
msp_company_name (str or object) -- name of the company or company object
default: None
Raises:
SDKException:
if metallic is already subscribed
if inputs are not valid
if failed to subscribe to metallic
if response is empty
if response is not success
"""
if not (isinstance(cloud_webconsole_hostname, str) and
isinstance(cloud_username, str) and
isinstance(cloud_password, str)):
raise SDKException('Metallic', '101')
if msp_company_name and not (isinstance(msp_company_name, str)):
raise SDKException('Metallic', '101')
self._metallic_commcell_object(cloud_webconsole_hostname, cloud_username, cloud_password)
if msp_company_name and not isinstance(msp_company_name, Organization):
msp_company_name = msp_company_name.lower()
msp_company_obj = self._commcell_object.organizations.get(msp_company_name)
request = {
"thirdpartyAppReq": {
"opType": 1,
"clientThirdPartyApps": [
{
"isCloudApp": False,
"appName": self._commcell_object.commserv_guid,
"appDisplayName": self._commcell_object.commserv_name,
"flags": 0,
"isCloudServiceSubscription": True,
"appType": 3,
"isEnabled": True,
"props": {
"nameValues": [
{
"name": "RedirectUrl",
"value": self._commcell_object.commserv_metadata['commserv_redirect_url']
},
{
"name": "SP Certificate Data",
"value": self._commcell_object.commserv_metadata['commserv_certificate']
},
{
"name": "CommcellId",
"value": str(self._commcell_object.commcell_id)
},
{
"name": "Enable Sso Redirect",
"value": "1"
}
]
}
}
]
}
}
if msp_company_name:
test_dict = {
'subscriberCompany': {
'GUID': self._commcell_object.organizations.all_organizations_props[msp_company_name]['GUID'],
'providerDomainName': msp_company_obj.organization_name
}
}
request.update(test_dict)
flag, response = self._metallic_obj._cvpysdk_object.make_request(
'POST', self._metallic_obj._services['METALLIC_LINKING'], request)
if flag:
if response.json():
error_code = response.json()['error']['errorCode']
self._metallic_details = {}
if (error_code == 2 or error_code == 0) and 'cloudServiceDetails' in response.json():
self._metallic_details = response.json()['cloudServiceDetails']
if error_code < 0:
error_string = response.json()['errorMessage']
raise SDKException(
'Metallic',
'102',
'Failed to create TPA\nError: "{0}"'.format(
error_string
)
)
else:
raise SDKException('Response', '102')
else:
response_string = self._update_response_(response.text)
raise SDKException('Response', '101', response_string)
if msp_company_name:
self._cv_metallic_subscribe(msp_company_name)
else:
self._cv_metallic_subscribe()
def _cv_metallic_subscribe(self, msp_company_name=None):
"""Subscribing on on-prim or msp side.
Args:
msp_company_name (str) -- name of the company or company object
default: None
Raises:
SDKException:
if inputs are not valid
if failed to subscribe on on-prim or msp side
if response is empty
if response is not success
"""
if msp_company_name and not (isinstance(msp_company_name, str)):
raise SDKException('Metallic', '101')
if msp_company_name and not isinstance(msp_company_name, Organization):
msp_company_obj = self._commcell_object.organizations.get(msp_company_name)
request = {
"opType": 3,
"cloudServiceDetails": self._metallic_details
}
if msp_company_name:
request['subscriberCompany'] = {'providerId': int(msp_company_obj.organization_id)}
flag, response = self._commcell_object._cvpysdk_object.make_request(
'POST', self._commcell_object._services['CV_METALLIC_LINKING'], request)
if flag:
if response and response.json():
error_code = response.json().get('error', {}).get('errorCode')
if error_code != 0:
error_string = response.json()['error']['errorString']
raise SDKException(
'Metallic',
'102',
'Failed to update linking details on onprim/msp: "{0}"'.format(
error_string
)
)
else:
response_string = self._update_response_(response.text)
raise SDKException('Response', '101', response_string)
def is_metallic_registered(self):
"""This function says whether metallic is registered for a user or not.
Args:
username (str) -- name of the user to which we need to check if metallic is registered
Returns:
Boolean -- True if metallic is returned in response
False if metallic is not returned in response
Raises:
SDKException:
if response is empty
if response is not success
"""
flag, response = self._commcell_object._cvpysdk_object.make_request(
'GET', self._commcell_object._services['METALLIC_REGISTERED']
)
if flag:
if response.json():
if 'cloudServices' in response.json():
if response.json().get('cloudServices', [])[0].get('cloudService', {}).get('redirectUrl', {}):
self._metallic_web_url = \
response.json().get('cloudServices', [])[0].get('cloudService', {}).get('redirectUrl', {})
self._cloudservices_details = response.json()
return True
return False
else:
raise SDKException('Response', '102')
else:
response_string = self._update_response_(response.text)
raise SDKException('Response', '101', response_string)
def metallic_completed_solutions(self):
"""This function returns the completed solutions for metallic.
Returns:
dict of completed solutions
Raises:
SDKException:
if response is empty
if response is not success
"""
flag, response = self._commcell_object._cvpysdk_object.make_request(
'GET', self._commcell_object._services['METALLIC_COMPLETED_SETUPS']
)
if flag:
if response.json() and 'completedSetupsDetails' in response.json():
completed_solns = response.json()['completedSetupsDetails'][0]['completedSetups']
return completed_solns
else:
raise SDKException('Metallic', '102', 'No metallic solutions are configured')
else:
response_string = self._update_response_(response.text)
raise SDKException('Response', '101', response_string)
def metallic_unsubscribe(self):
"""This function is for unsubscribing metallic
Raises:
SDKException:
if failed to unsubcribe on metallic
if response is empty
if response is not success
"""
saml_token_for_user = self._commcell_object.get_saml_token()
user_obj = User(self._commcell_object, self._commcell_object.commcell_username)
company_name = user_obj.user_company_name
request = {
"cloudServiceDetails": {
"cloudService": {
"redirectUrl": self._metallic_web_url if self.is_metallic_registered() else None,
"appName": self._commcell_object.commserv_guid
}
}
}
if company_name:
test_dict = {
'subscriberCompany': {
'GUID': self._commcell_object.organizations.all_organizations_props[company_name]['GUID'],
'providerId': self._commcell_object.organizations.all_organizations[company_name],
'providerDomainName': company_name
}
}
request.update(test_dict)
url1 = self._metallic_web_url + "/api/CloudService/Unsubscribe"
flag, response = self._commcell_object._cvpysdk_object.make_request(
method='POST',
url=url1,
payload=request,
headers={'Authtoken': saml_token_for_user,
'Accept': 'application/json'}
)
if flag:
if response.json() and 'cloudServiceDetails' in response.json():
error_code = response.json()['error']['errorCode']
error_message = response.json()['error']['errorString']
if not error_code == 0:
raise SDKException('Metallic', '102', error_message)
else:
response_string = self._update_response_(response.text)
raise SDKException('Response', '101', response_string)
self._cv_metallic_unsubscribe(user_obj)
def _cv_metallic_unsubscribe(self, user):
"""This function says whether metallic is registered for a user or not.
Args:
user (str or object) -- username or user object who has rights to unsubscribe on on-prim or msp side
Returns:
Boolean -- True if metallic is returned in response
False if metallic is not returned in response
Raises:
SDKException:
if failed to unsubscribe on on-prim or msp side
if response is empty
if response is not success
"""
if not isinstance(user, User):
user = self._commcell_object.users.get(self._commcell_object.commcell_username)
company_name = user.user_company_name
request = {
"opType": 4,
"cloudServiceDetails": {
"cloudService": {
"redirectUrl": self._metallic_web_url if self.is_metallic_registered() else None
}
}
}
if company_name:
request['subscriberCompany'] = \
{'providerId': self._commcell_object.organizations.all_organizations[company_name]}
flag, response = self._commcell_object._cvpysdk_object.make_request(
'POST', self._commcell_object._services['CV_METALLIC_LINKING'], request)
if flag:
if response.json():
error_code = response.json().get('error', {}).get('errorCode')
error_message = response.json().get('error', {}).get('errorString')
if not error_code == 0:
raise SDKException('Metallic', '102', error_message)
else:
response_string = self._update_response_(response.text)
raise SDKException('Response', '101', response_string)
def _get_eligible_metallic_commcells(self, login_name_or_email=None, cloud_webconsole_hostname=None):
"""
Gets the redirect metallic commcells based on login_name or email provided
Args:
login_name_or_email (str) -- Login name or email of the user
default: current logged in user
cloud_webconsole_hostname (str) -- cloud webconsole hostname
default: None
Raises:
if the response is empty
if there is no response
Returns:
list_of_metallic_commcells (list) -- list of metallic commcells
"""
login_name_or_email = login_name_or_email.lower()
url1 = r'http://{0}/webconsole/api/CloudService/Routing?username={1}'.format(
cloud_webconsole_hostname, login_name_or_email)
flag, response = self._commcell_object._cvpysdk_object.make_request(method='GET', url=url1)
if flag:
if response.json() and 'cloudServiceCommcells' in response.json():
cloud_commcell_list = []
for ser_comm in response.json()['cloudServiceCommcells']:
cloud_commcell_list.append(ser_comm['url'])
return cloud_commcell_list
else:
return []
else:
response_string = self._update_response_(response.text)
raise SDKException('Response', '101', response_string)
@property
def cloud_hostname(self):
""" Returns cloudhostname"""
return self._cloud_hostname
@cloud_hostname.setter
def cloud_hostname(self, value):
""" Sets cloud hostname """
self._cloud_hostname = value
@property
def cloudservices_details(self):
"""
Get cloudServices details if metallic service is registered in onprem/ MSP commcell
Returns:
cloudservices_details (dict) --
{
'cloudServices':
[
{
'associatedCompany':
{
'companyAlias': ' ',
'GUID': ' '
},
'cloudService':
{
'redirectUrl': ' ',
'commcellName': ' '
}
}
]
}
"""
if self._cloudservices_details is None:
self._commserv_metadata = self.is_metallic_registered()
return self._cloudservices_details
Classes
class Metallic (commcell_object)
-
Class for representing Metallic related operations.
Intializes object of the Metallic class.
Args
commcell_object (object) -instance of the commcell class
Returns
object - instance of the Metallic class
Expand source code Browse git
class Metallic(object): """Class for representing Metallic related operations.""" def __init__(self, commcell_object): """Intializes object of the Metallic class. Args: commcell_object (object) -instance of the commcell class Returns: object - instance of the Metallic class """ self._commcell_object = commcell_object self._update_response_ = self._commcell_object._update_response_ self._metallic_details = None self._metallic_web_url = None self._metallic_obj = None self._cloudservices_details = None def _metallic_commcell_object(self, cloud_webconsole_hostname, cloud_username, cloud_password): """Gets the metallic commcell object. Args: cloud_webconsole_hostname (str) -- hostname of the cloud cloud_username (str) -- username of the cloud cloud_password (str) -- password of the cloud Raises: SDKException: if inputs are not valid if failed to create the object if response is empty if response is not success """ if not (isinstance(cloud_webconsole_hostname, str) and isinstance(cloud_username, str) and isinstance(cloud_password, str)): raise SDKException('Metallic', '101') from cvpysdk.commcell import Commcell metallic_cell = self._get_eligible_metallic_commcells(cloud_username, cloud_webconsole_hostname) if (len(metallic_cell)) > 0: cloud_webconsole_hostname = metallic_cell[0] self._metallic_obj = Commcell(cloud_webconsole_hostname, cloud_username, cloud_password) def metallic_subscribe(self, cloud_webconsole_hostname, cloud_username, cloud_password, msp_company_name=None): """Adds a new Monitoring Policy to the Commcell. Args: cloud_webconsole_hostname (str) -- hostname of the cloud cloud_username (str) -- username of the cloud cloud_password (str) -- password of the cloud msp_company_name (str or object) -- name of the company or company object default: None Raises: SDKException: if metallic is already subscribed if inputs are not valid if failed to subscribe to metallic if response is empty if response is not success """ if not (isinstance(cloud_webconsole_hostname, str) and isinstance(cloud_username, str) and isinstance(cloud_password, str)): raise SDKException('Metallic', '101') if msp_company_name and not (isinstance(msp_company_name, str)): raise SDKException('Metallic', '101') self._metallic_commcell_object(cloud_webconsole_hostname, cloud_username, cloud_password) if msp_company_name and not isinstance(msp_company_name, Organization): msp_company_name = msp_company_name.lower() msp_company_obj = self._commcell_object.organizations.get(msp_company_name) request = { "thirdpartyAppReq": { "opType": 1, "clientThirdPartyApps": [ { "isCloudApp": False, "appName": self._commcell_object.commserv_guid, "appDisplayName": self._commcell_object.commserv_name, "flags": 0, "isCloudServiceSubscription": True, "appType": 3, "isEnabled": True, "props": { "nameValues": [ { "name": "RedirectUrl", "value": self._commcell_object.commserv_metadata['commserv_redirect_url'] }, { "name": "SP Certificate Data", "value": self._commcell_object.commserv_metadata['commserv_certificate'] }, { "name": "CommcellId", "value": str(self._commcell_object.commcell_id) }, { "name": "Enable Sso Redirect", "value": "1" } ] } } ] } } if msp_company_name: test_dict = { 'subscriberCompany': { 'GUID': self._commcell_object.organizations.all_organizations_props[msp_company_name]['GUID'], 'providerDomainName': msp_company_obj.organization_name } } request.update(test_dict) flag, response = self._metallic_obj._cvpysdk_object.make_request( 'POST', self._metallic_obj._services['METALLIC_LINKING'], request) if flag: if response.json(): error_code = response.json()['error']['errorCode'] self._metallic_details = {} if (error_code == 2 or error_code == 0) and 'cloudServiceDetails' in response.json(): self._metallic_details = response.json()['cloudServiceDetails'] if error_code < 0: error_string = response.json()['errorMessage'] raise SDKException( 'Metallic', '102', 'Failed to create TPA\nError: "{0}"'.format( error_string ) ) else: raise SDKException('Response', '102') else: response_string = self._update_response_(response.text) raise SDKException('Response', '101', response_string) if msp_company_name: self._cv_metallic_subscribe(msp_company_name) else: self._cv_metallic_subscribe() def _cv_metallic_subscribe(self, msp_company_name=None): """Subscribing on on-prim or msp side. Args: msp_company_name (str) -- name of the company or company object default: None Raises: SDKException: if inputs are not valid if failed to subscribe on on-prim or msp side if response is empty if response is not success """ if msp_company_name and not (isinstance(msp_company_name, str)): raise SDKException('Metallic', '101') if msp_company_name and not isinstance(msp_company_name, Organization): msp_company_obj = self._commcell_object.organizations.get(msp_company_name) request = { "opType": 3, "cloudServiceDetails": self._metallic_details } if msp_company_name: request['subscriberCompany'] = {'providerId': int(msp_company_obj.organization_id)} flag, response = self._commcell_object._cvpysdk_object.make_request( 'POST', self._commcell_object._services['CV_METALLIC_LINKING'], request) if flag: if response and response.json(): error_code = response.json().get('error', {}).get('errorCode') if error_code != 0: error_string = response.json()['error']['errorString'] raise SDKException( 'Metallic', '102', 'Failed to update linking details on onprim/msp: "{0}"'.format( error_string ) ) else: response_string = self._update_response_(response.text) raise SDKException('Response', '101', response_string) def is_metallic_registered(self): """This function says whether metallic is registered for a user or not. Args: username (str) -- name of the user to which we need to check if metallic is registered Returns: Boolean -- True if metallic is returned in response False if metallic is not returned in response Raises: SDKException: if response is empty if response is not success """ flag, response = self._commcell_object._cvpysdk_object.make_request( 'GET', self._commcell_object._services['METALLIC_REGISTERED'] ) if flag: if response.json(): if 'cloudServices' in response.json(): if response.json().get('cloudServices', [])[0].get('cloudService', {}).get('redirectUrl', {}): self._metallic_web_url = \ response.json().get('cloudServices', [])[0].get('cloudService', {}).get('redirectUrl', {}) self._cloudservices_details = response.json() return True return False else: raise SDKException('Response', '102') else: response_string = self._update_response_(response.text) raise SDKException('Response', '101', response_string) def metallic_completed_solutions(self): """This function returns the completed solutions for metallic. Returns: dict of completed solutions Raises: SDKException: if response is empty if response is not success """ flag, response = self._commcell_object._cvpysdk_object.make_request( 'GET', self._commcell_object._services['METALLIC_COMPLETED_SETUPS'] ) if flag: if response.json() and 'completedSetupsDetails' in response.json(): completed_solns = response.json()['completedSetupsDetails'][0]['completedSetups'] return completed_solns else: raise SDKException('Metallic', '102', 'No metallic solutions are configured') else: response_string = self._update_response_(response.text) raise SDKException('Response', '101', response_string) def metallic_unsubscribe(self): """This function is for unsubscribing metallic Raises: SDKException: if failed to unsubcribe on metallic if response is empty if response is not success """ saml_token_for_user = self._commcell_object.get_saml_token() user_obj = User(self._commcell_object, self._commcell_object.commcell_username) company_name = user_obj.user_company_name request = { "cloudServiceDetails": { "cloudService": { "redirectUrl": self._metallic_web_url if self.is_metallic_registered() else None, "appName": self._commcell_object.commserv_guid } } } if company_name: test_dict = { 'subscriberCompany': { 'GUID': self._commcell_object.organizations.all_organizations_props[company_name]['GUID'], 'providerId': self._commcell_object.organizations.all_organizations[company_name], 'providerDomainName': company_name } } request.update(test_dict) url1 = self._metallic_web_url + "/api/CloudService/Unsubscribe" flag, response = self._commcell_object._cvpysdk_object.make_request( method='POST', url=url1, payload=request, headers={'Authtoken': saml_token_for_user, 'Accept': 'application/json'} ) if flag: if response.json() and 'cloudServiceDetails' in response.json(): error_code = response.json()['error']['errorCode'] error_message = response.json()['error']['errorString'] if not error_code == 0: raise SDKException('Metallic', '102', error_message) else: response_string = self._update_response_(response.text) raise SDKException('Response', '101', response_string) self._cv_metallic_unsubscribe(user_obj) def _cv_metallic_unsubscribe(self, user): """This function says whether metallic is registered for a user or not. Args: user (str or object) -- username or user object who has rights to unsubscribe on on-prim or msp side Returns: Boolean -- True if metallic is returned in response False if metallic is not returned in response Raises: SDKException: if failed to unsubscribe on on-prim or msp side if response is empty if response is not success """ if not isinstance(user, User): user = self._commcell_object.users.get(self._commcell_object.commcell_username) company_name = user.user_company_name request = { "opType": 4, "cloudServiceDetails": { "cloudService": { "redirectUrl": self._metallic_web_url if self.is_metallic_registered() else None } } } if company_name: request['subscriberCompany'] = \ {'providerId': self._commcell_object.organizations.all_organizations[company_name]} flag, response = self._commcell_object._cvpysdk_object.make_request( 'POST', self._commcell_object._services['CV_METALLIC_LINKING'], request) if flag: if response.json(): error_code = response.json().get('error', {}).get('errorCode') error_message = response.json().get('error', {}).get('errorString') if not error_code == 0: raise SDKException('Metallic', '102', error_message) else: response_string = self._update_response_(response.text) raise SDKException('Response', '101', response_string) def _get_eligible_metallic_commcells(self, login_name_or_email=None, cloud_webconsole_hostname=None): """ Gets the redirect metallic commcells based on login_name or email provided Args: login_name_or_email (str) -- Login name or email of the user default: current logged in user cloud_webconsole_hostname (str) -- cloud webconsole hostname default: None Raises: if the response is empty if there is no response Returns: list_of_metallic_commcells (list) -- list of metallic commcells """ login_name_or_email = login_name_or_email.lower() url1 = r'http://{0}/webconsole/api/CloudService/Routing?username={1}'.format( cloud_webconsole_hostname, login_name_or_email) flag, response = self._commcell_object._cvpysdk_object.make_request(method='GET', url=url1) if flag: if response.json() and 'cloudServiceCommcells' in response.json(): cloud_commcell_list = [] for ser_comm in response.json()['cloudServiceCommcells']: cloud_commcell_list.append(ser_comm['url']) return cloud_commcell_list else: return [] else: response_string = self._update_response_(response.text) raise SDKException('Response', '101', response_string) @property def cloud_hostname(self): """ Returns cloudhostname""" return self._cloud_hostname @cloud_hostname.setter def cloud_hostname(self, value): """ Sets cloud hostname """ self._cloud_hostname = value @property def cloudservices_details(self): """ Get cloudServices details if metallic service is registered in onprem/ MSP commcell Returns: cloudservices_details (dict) -- { 'cloudServices': [ { 'associatedCompany': { 'companyAlias': ' ', 'GUID': ' ' }, 'cloudService': { 'redirectUrl': ' ', 'commcellName': ' ' } } ] } """ if self._cloudservices_details is None: self._commserv_metadata = self.is_metallic_registered() return self._cloudservices_details
Instance variables
var cloud_hostname
-
Returns cloudhostname
Expand source code Browse git
@property def cloud_hostname(self): """ Returns cloudhostname""" return self._cloud_hostname
var cloudservices_details
-
Get cloudServices details if metallic service is registered in onprem/ MSP commcell
Returns
cloudservices_details (dict) – { 'cloudServices': [ { 'associatedCompany': { 'companyAlias': ' ', 'GUID': ' ' }, 'cloudService': { 'redirectUrl': ' ', 'commcellName': ' ' } } ] }
Expand source code Browse git
@property def cloudservices_details(self): """ Get cloudServices details if metallic service is registered in onprem/ MSP commcell Returns: cloudservices_details (dict) -- { 'cloudServices': [ { 'associatedCompany': { 'companyAlias': ' ', 'GUID': ' ' }, 'cloudService': { 'redirectUrl': ' ', 'commcellName': ' ' } } ] } """ if self._cloudservices_details is None: self._commserv_metadata = self.is_metallic_registered() return self._cloudservices_details
Methods
def is_metallic_registered(self)
-
This function says whether metallic is registered for a user or not.
Args
username (str) – name of the user to which we need to check if metallic is registered
Returns
Boolean – True if metallic is returned in response False if metallic is not returned in response
Raises
SDKException:
if response is empty if response is not success
Expand source code Browse git
def is_metallic_registered(self): """This function says whether metallic is registered for a user or not. Args: username (str) -- name of the user to which we need to check if metallic is registered Returns: Boolean -- True if metallic is returned in response False if metallic is not returned in response Raises: SDKException: if response is empty if response is not success """ flag, response = self._commcell_object._cvpysdk_object.make_request( 'GET', self._commcell_object._services['METALLIC_REGISTERED'] ) if flag: if response.json(): if 'cloudServices' in response.json(): if response.json().get('cloudServices', [])[0].get('cloudService', {}).get('redirectUrl', {}): self._metallic_web_url = \ response.json().get('cloudServices', [])[0].get('cloudService', {}).get('redirectUrl', {}) self._cloudservices_details = response.json() return True return False else: raise SDKException('Response', '102') else: response_string = self._update_response_(response.text) raise SDKException('Response', '101', response_string)
def metallic_completed_solutions(self)
-
This function returns the completed solutions for metallic.
Returns
dict of completed solutions
Raises
SDKException:
if response is empty if response is not success
Expand source code Browse git
def metallic_completed_solutions(self): """This function returns the completed solutions for metallic. Returns: dict of completed solutions Raises: SDKException: if response is empty if response is not success """ flag, response = self._commcell_object._cvpysdk_object.make_request( 'GET', self._commcell_object._services['METALLIC_COMPLETED_SETUPS'] ) if flag: if response.json() and 'completedSetupsDetails' in response.json(): completed_solns = response.json()['completedSetupsDetails'][0]['completedSetups'] return completed_solns else: raise SDKException('Metallic', '102', 'No metallic solutions are configured') else: response_string = self._update_response_(response.text) raise SDKException('Response', '101', response_string)
def metallic_subscribe(self, cloud_webconsole_hostname, cloud_username, cloud_password, msp_company_name=None)
-
Adds a new Monitoring Policy to the Commcell.
Args
cloud_webconsole_hostname (str) – hostname of the cloud cloud_username (str) – username of the cloud cloud_password (str) – password of the cloud msp_company_name (str or object) – name of the company or company object default: None
Raises
SDKException: if metallic is already subscribed
if inputs are not valid if failed to subscribe to metallic if response is empty if response is not success
Expand source code Browse git
def metallic_subscribe(self, cloud_webconsole_hostname, cloud_username, cloud_password, msp_company_name=None): """Adds a new Monitoring Policy to the Commcell. Args: cloud_webconsole_hostname (str) -- hostname of the cloud cloud_username (str) -- username of the cloud cloud_password (str) -- password of the cloud msp_company_name (str or object) -- name of the company or company object default: None Raises: SDKException: if metallic is already subscribed if inputs are not valid if failed to subscribe to metallic if response is empty if response is not success """ if not (isinstance(cloud_webconsole_hostname, str) and isinstance(cloud_username, str) and isinstance(cloud_password, str)): raise SDKException('Metallic', '101') if msp_company_name and not (isinstance(msp_company_name, str)): raise SDKException('Metallic', '101') self._metallic_commcell_object(cloud_webconsole_hostname, cloud_username, cloud_password) if msp_company_name and not isinstance(msp_company_name, Organization): msp_company_name = msp_company_name.lower() msp_company_obj = self._commcell_object.organizations.get(msp_company_name) request = { "thirdpartyAppReq": { "opType": 1, "clientThirdPartyApps": [ { "isCloudApp": False, "appName": self._commcell_object.commserv_guid, "appDisplayName": self._commcell_object.commserv_name, "flags": 0, "isCloudServiceSubscription": True, "appType": 3, "isEnabled": True, "props": { "nameValues": [ { "name": "RedirectUrl", "value": self._commcell_object.commserv_metadata['commserv_redirect_url'] }, { "name": "SP Certificate Data", "value": self._commcell_object.commserv_metadata['commserv_certificate'] }, { "name": "CommcellId", "value": str(self._commcell_object.commcell_id) }, { "name": "Enable Sso Redirect", "value": "1" } ] } } ] } } if msp_company_name: test_dict = { 'subscriberCompany': { 'GUID': self._commcell_object.organizations.all_organizations_props[msp_company_name]['GUID'], 'providerDomainName': msp_company_obj.organization_name } } request.update(test_dict) flag, response = self._metallic_obj._cvpysdk_object.make_request( 'POST', self._metallic_obj._services['METALLIC_LINKING'], request) if flag: if response.json(): error_code = response.json()['error']['errorCode'] self._metallic_details = {} if (error_code == 2 or error_code == 0) and 'cloudServiceDetails' in response.json(): self._metallic_details = response.json()['cloudServiceDetails'] if error_code < 0: error_string = response.json()['errorMessage'] raise SDKException( 'Metallic', '102', 'Failed to create TPA\nError: "{0}"'.format( error_string ) ) else: raise SDKException('Response', '102') else: response_string = self._update_response_(response.text) raise SDKException('Response', '101', response_string) if msp_company_name: self._cv_metallic_subscribe(msp_company_name) else: self._cv_metallic_subscribe()
def metallic_unsubscribe(self)
-
This function is for unsubscribing metallic
Raises
SDKException:
if failed to unsubcribe on metallic if response is empty if response is not success
Expand source code Browse git
def metallic_unsubscribe(self): """This function is for unsubscribing metallic Raises: SDKException: if failed to unsubcribe on metallic if response is empty if response is not success """ saml_token_for_user = self._commcell_object.get_saml_token() user_obj = User(self._commcell_object, self._commcell_object.commcell_username) company_name = user_obj.user_company_name request = { "cloudServiceDetails": { "cloudService": { "redirectUrl": self._metallic_web_url if self.is_metallic_registered() else None, "appName": self._commcell_object.commserv_guid } } } if company_name: test_dict = { 'subscriberCompany': { 'GUID': self._commcell_object.organizations.all_organizations_props[company_name]['GUID'], 'providerId': self._commcell_object.organizations.all_organizations[company_name], 'providerDomainName': company_name } } request.update(test_dict) url1 = self._metallic_web_url + "/api/CloudService/Unsubscribe" flag, response = self._commcell_object._cvpysdk_object.make_request( method='POST', url=url1, payload=request, headers={'Authtoken': saml_token_for_user, 'Accept': 'application/json'} ) if flag: if response.json() and 'cloudServiceDetails' in response.json(): error_code = response.json()['error']['errorCode'] error_message = response.json()['error']['errorString'] if not error_code == 0: raise SDKException('Metallic', '102', error_message) else: response_string = self._update_response_(response.text) raise SDKException('Response', '101', response_string) self._cv_metallic_unsubscribe(user_obj)