Source code for ucsmsdk.utils.ucstechsupport

# Copyright 2013 Cisco 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.

"""
This module contains the APIs used to create and download tech_support file.
"""

import os
import time
import datetime
import logging
from ..ucsexception import UcsValidationException, UcsWarning

log = logging.getLogger('ucs')


[docs]def get_ucs_tech_support(handle, ucs_manager=False, ucs_mgmt=False, chassis_id=None, cimc_id=None, adapter_id=None, iom_id=None, fex_id=None, rack_server_id=None, rack_adapter_id=None, remove_from_ucs=False, download_techsupp=True, file_dir=None, file_name=None, timeout_in_sec=600): """ This operation creates and downloads the technical support file for the specified Ucs server. Args: handle (UcsHandle): Ucs connection handle ucs_manager (bool): True/False, False - by default Create and download TechSupport for UCSM, if true ucs_mgmt (bool): True/False, False - by default Create and download TechSupport for UCSM Management services(excluding Fabric interconnects), if true chassis_id (int): chassis id cimc_id (int/string): for a specific chassis. Can be 'all'. adapter_id (int/string): for a specific chassis. Can be 'all'. iom_id (int/string): for a specific chassis. Can be 'all'. fex_id (int): id of a fabric extender. rack_server_id (int): id of a rack server. rack_adapter_id (int/string): adaptor_id for a specific rack server. Can be 'all'. remove_from_ucs (bool): True/False, False - by default TechSupport will be removed from server, if True download_techsupp (bool): True/False, True - by default Download the TechSupport file, if True file_dir (str): directory to download tech support file to file_name (str): name of the download tech support file timeout_in_sec (int): specifies the time in seconds after which the operation times-out. Example: * M - Manadatory, O - Optional * Note: Mandatory in ALL param sets: file_dir, file_name Optional in ALL param sets: timeout_in_sec, remove_from_ucs, download_techsupp * param set 1: * M - ucs_manager --------------------------------------------------------------- file_dir = "/home/user/techsupp" file_name = "techsupp_ucs_manager.tar" get_ucs_tech_support(handle, file_dir=file_dir, file_name=file_name, ucs_manager=True) get_ucs_tech_support(handle, file_dir=file_dir, file_name=file_name, ucs_manager=True, timeout_in_sec=300, remove_from_ucs=True) * param set 2: * M - ucs_manager --------------------------------------------------------------- file_dir = "/home/user/techsupp" file_name = "techsupp_ucs_mgmt.tar" get_ucs_tech_support(handle, file_dir=file_dir, file_name=file_name, ucs_mgmt=True) * param set 3: * M - chassis_id, cimc_id * O - adapter_id --------------------------------------------------------------- file_dir = "/home/user/techsupp" file_name = "techsupp_ucs_mgmt.tar" get_ucs_tech_support(handle, file_dir=file_dir, file_name=file_name, chassis_id=1, cimc_id=1, adapter_id=1) * param set 4: * M - chassis_id, iom_id --------------------------------------------------------------- file_dir = "/home/user/techsupp" file_name = "techsupp_ucs_mgmt.tar" get_ucs_tech_support(handle, file_dir=file_dir, file_name=file_name, chassis_id=1, iom_id=1) * param set 5: * M - fex_id --------------------------------------------------------------- file_dir = "/home/user/techsupp" file_name = "techsupp_ucs_mgmt.tar" get_ucs_tech_support(handle, file_dir=file_dir, file_name=file_name, fex_id=1) * param set 6: * M - rack_server_id * O - rack_adapter_id --------------------------------------------------------------- file_dir = "/home/user/techsupp" file_name = "techsupp_ucs_mgmt.tar" get_ucs_tech_support(handle, file_dir=file_dir, file_name=file_name, rack_server_id=1, rack_adapter_id=1) """ from ..mometa.top.TopSystem import TopSystem from ..mometa.sysdebug.SysdebugTechSupport import SysdebugTechSupport, \ SysdebugTechSupportConsts from ..mometa.sysdebug.SysdebugTechSupFileRepository import \ SysdebugTechSupFileRepository from ..mometa.sysdebug.SysdebugTechSupportCmdOpt import \ SysdebugTechSupportCmdOpt, SysdebugTechSupportCmdOptConsts if download_techsupp: if file_name is None: raise UcsValidationException('provide file_name') if file_dir is None: raise UcsValidationException('provide dir_name') if not file_name.endswith('.tar'): raise UcsValidationException('file_name should end with .tar') if not os.path.exists(file_dir): os.makedirs(file_dir) # Converting timedelta in to total seconds for Python version compatibility dt1 = datetime.datetime(1970, 1, 1, 12, 0, 0, 0) dt2 = datetime.datetime.utcnow() creation_ts = int((dt2 - dt1).total_seconds()) # create SysdebugTechSupport top_system = TopSystem() sysdebug_techsup_file_repo = SysdebugTechSupFileRepository( parent_mo_or_dn=top_system) sys_debug_tech_support = SysdebugTechSupport( parent_mo_or_dn=sysdebug_techsup_file_repo, creation_ts=str(creation_ts), admin_state=SysdebugTechSupportConsts.ADMIN_STATE_START) sys_debug_tech_support_cmd_opt = SysdebugTechSupportCmdOpt( parent_mo_or_dn=sys_debug_tech_support) # Parameter Set UCSM if ucs_manager: sys_debug_tech_support_cmd_opt.major_opt_type = \ SysdebugTechSupportCmdOptConsts.MAJOR_OPT_TYPE_UCSM elif ucs_mgmt: sys_debug_tech_support_cmd_opt.major_opt_type = \ SysdebugTechSupportCmdOptConsts.MAJOR_OPT_TYPE_UCSM_MGMT elif chassis_id is not None: if cimc_id is not None: sys_debug_tech_support_cmd_opt.chassis_cimc_id = str(cimc_id) sys_debug_tech_support_cmd_opt.chassis_id = str(chassis_id) sys_debug_tech_support_cmd_opt.major_opt_type = \ SysdebugTechSupportCmdOptConsts.MAJOR_OPT_TYPE_CHASSIS if adapter_id is None: sys_debug_tech_support_cmd_opt.cimc_adapter_id = \ SysdebugTechSupportCmdOptConsts.CIMC_ADAPTER_ID_ALL else: sys_debug_tech_support_cmd_opt.cimc_adapter_id = \ str(adapter_id) elif iom_id is not None: sys_debug_tech_support_cmd_opt.chassis_iom_id = str(iom_id) sys_debug_tech_support_cmd_opt.chassis_id = str(chassis_id) sys_debug_tech_support_cmd_opt.major_opt_type = \ SysdebugTechSupportCmdOptConsts.MAJOR_OPT_TYPE_CHASSIS elif rack_server_id is not None: sys_debug_tech_support_cmd_opt.rack_server_id = str(iom_id) if rack_adapter_id is None: sys_debug_tech_support_cmd_opt.rack_server_adapter_id = \ SysdebugTechSupportCmdOptConsts.RACK_SERVER_ADAPTER_ID_ALL else: sys_debug_tech_support_cmd_opt.rack_server_adapter_id = \ str(rack_adapter_id) sys_debug_tech_support_cmd_opt.major_opt_type = \ SysdebugTechSupportCmdOptConsts.MAJOR_OPT_TYPE_SERVER elif fex_id is not None: sys_debug_tech_support_cmd_opt.fab_ext_id = str(iom_id) sys_debug_tech_support_cmd_opt.major_opt_type = \ SysdebugTechSupportCmdOptConsts.MAJOR_OPT_TYPE_FEX handle.add_mo(sys_debug_tech_support) handle.commit() # poll for tech support to complete duration = timeout_in_sec poll_interval = 2 status = False while True: tech_support = handle.query_dn(sys_debug_tech_support.dn) if tech_support.oper_state == \ SysdebugTechSupportConsts.OPER_STATE_AVAILABLE: status = True if status: break time.sleep(min(duration, poll_interval)) duration = max(0, (duration - poll_interval)) if duration == 0: handle.remove_mo(tech_support) handle.commit() raise UcsValidationException('TechSupport file creation timed out') # download tech support file if download_techsupp: url_suffix = "techsupport/" + tech_support.name try: handle.file_download(url_suffix=url_suffix, file_dir=file_dir, file_name=file_name) except Exception as err: UcsWarning(str(err)) # remove tech support file from ucs if remove_from_ucs: tech_support.admin_state = "delete" handle.set_mo(tech_support) handle.commit() return tech_support