Beispiel #1
0
def firmware_auto_install(handle,
                          version,
                          image_dir,
                          infra_only=False,
                          infra=True,
                          blade=True,
                          rack=False,
                          require_user_confirmation=True):
    """
    This will do end-to-end processing to update firmware on ucsm.

    Args:
        handle (UcsHandle)
        version (string): firmware version
        image_dir (string): image directory
        infra_only (bool): by default False. If set to True, will update
                          firmware of FI only
        require_user_confirmation (bool): by default True. If False needs no
                                          user intervention.

    Returns:
        None

    Example:
        firmware_auto_install(handle, version="2.2.5b",
                              image_dir="/home/imagedir")
    """

    from ucsmsdk.ucseventhandler import UcsEventHandle

    try:
        bundle_map = get_firmware_file_names(version)

        bundles = []
        cco_image_list = []
        images_to_upload = []

        if infra_only:
            bundles.append(bundle_map['A'][0])
        else:
            if infra:
                bundles.append(bundle_map['A'][0])
            if blade:
                bundles.append(bundle_map['B'][0])
            if rack:
                bundles.append(bundle_map['C'][0])

        for image in bundles:
            if not is_image_available_on_ucsm(handle, image):
                images_to_upload.append(image)

        for image in images_to_upload:
            log.debug("Checking if image file: '%s' is exist in local "
                      "directory" % image)
            file_path = os.path.join(image_dir, image)
            if os.path.exists(file_path):
                log.debug("Image already exist in image directory ")
            else:
                cco_image_list.append(image)

        # if image not available raising exception to download
        if cco_image_list:
            raise ValueError("Download images %s using firmware_download" %
                             cco_image_list)

        # upload images on ucsm
        for image in images_to_upload:
            log.debug("Uploading image '%s' to UCSM." % image)
            firmware = firmware_add_local(handle, image_dir, image)
            eh = UcsEventHandle(handle)
            eh.add(managed_object=firmware,
                   prop="transfer_state",
                   success_value=['downloaded'],
                   poll_sec=30,
                   timeout_sec=600)
            log.debug("Upload of image file '%s' is completed." % image)

        if infra_only:
            # Activate UCSM
            firmware_activate_infra(
                handle,
                version=version,
                require_user_confirmation=require_user_confirmation)
        else:
            if infra:
                # Activate UCSM
                log.debug("Activating Firmware Infra......")
                firmware_activate_infra(
                    handle,
                    version=version,
                    require_user_confirmation=require_user_confirmation)
            if blade:
                # Activate Blade
                log.debug("Activating Firmware Blade......")
                firmware_activate_blade(
                    handle,
                    version=version,
                    require_user_confirmation=require_user_confirmation)
            if rack:
                # Activate Blade
                log.debug("firmware upgrade code for rack is yet to be done.")
                # firmware_activate_blade(
                #     handle, version=version,
                #     require_user_confirmation=require_user_confirmation)

    except:
        log.debug("Error Occurred in Script.")
        handle.logout()
        raise
Beispiel #2
0
def firmware_auto_install(handle, version, image_dir, infra_only=False,
                          infra=True, blade=True, rack=False,
                          require_user_confirmation=True):
    """
    This will do end-to-end processing to update firmware on ucsm.

    Args:
        handle (UcsHandle)
        version (string): firmware version
        image_dir (string): image directory
        infra_only (bool): by default False. If set to True, will update
                          firmware of FI only
        require_user_confirmation (bool): by default True. If False needs no
                                          user intervention.

    Returns:
        None

    Example:
        firmware_auto_install(handle, version="2.2.5b",
                              image_dir="/home/imagedir")
    """

    from ucsmsdk.ucseventhandler import UcsEventHandle

    try:
        bundle_map = get_firmware_file_names(version)

        bundles = []
        cco_image_list = []
        images_to_upload = []

        if infra_only:
            bundles.append(bundle_map['A'][0])
        else:
            if infra:
                bundles.append(bundle_map['A'][0])
            if blade:
                bundles.append(bundle_map['B'][0])
            if rack:
                bundles.append(bundle_map['C'][0])

        for image in bundles:
            if not is_image_available_on_ucsm(handle, image):
                images_to_upload.append(image)

        for image in images_to_upload:
            log.debug("Checking if image file: '%s' is exist in local "
                      "directory" % image)
            file_path = os.path.join(image_dir, image)
            if os.path.exists(file_path):
                log.debug("Image already exist in image directory ")
            else:
                cco_image_list.append(image)

        # if image not available raising exception to download
        if cco_image_list:
            raise ValueError("Download images %s using firmware_download" %
                             cco_image_list)

        # upload images on ucsm
        for image in images_to_upload:
            log.debug("Uploading image '%s' to UCSM." % image)
            firmware = firmware_add_local(handle, image_dir, image)
            eh = UcsEventHandle(handle)
            eh.add(managed_object=firmware, prop="transfer_state",
                   success_value=['downloaded'], poll_sec=30,
                   timeout_sec=600)
            log.debug("Upload of image file '%s' is completed." % image)

        if infra_only:
            # Activate UCSM
            firmware_activate_infra(
                handle, version=version,
                require_user_confirmation=require_user_confirmation)
        else:
            if infra:
                # Activate UCSM
                log.debug("Activating Firmware Infra......")
                firmware_activate_infra(
                    handle, version=version,
                    require_user_confirmation=require_user_confirmation)
            if blade:
                # Activate Blade
                log.debug("Activating Firmware Blade......")
                firmware_activate_blade(
                    handle, version=version,
                    require_user_confirmation=require_user_confirmation)
            if rack:
                # Activate Blade
                log.debug("firmware upgrade code for rack is yet to be done.")
                # firmware_activate_blade(
                #     handle, version=version,
                #     require_user_confirmation=require_user_confirmation)

    except:
        log.debug("Error Occurred in Script.")
        handle.logout()
        raise
def firmware_auto_install(handle, version, image_dir, infra_only=False):
    """
    This will do end-to-end processing to update firmware on ucsm.

    Args:
        handle (UcsHandle)
        version (string): firmware version
        image_dir (string): image directory
        infra_only (bool): by default False. If set to True, will update
                          firmware of FI only

    Returns:
        None

    Example:
        firmware_auto_install(handle, version="2.2.5b",
                              image_dir="/home/imagedir")
    """

    from ucsmsdk.ucseventhandler import UcsEventHandle

    try:
        bundle_map = get_firmware_file_names(version)

        bundles = []
        cco_image_list = []

        bundles.append(bundle_map['A'][0])

        if not infra_only:
            bundles.append(bundle_map['B'][0])
            bundles.append(bundle_map['C'][0])

        log.debug("Starting Firmware download process to local directory: %s" %
                  image_dir)

        # adding files to cco image list if not available in local directory
        for bundle in bundles:
            file_path = os.path.join(image_dir, bundle)
            if os.path.exists(file_path):
                log.debug("Image already exist in image directory ")
            else:
                cco_image_list.append(bundle)

        # if image not available raising exception to download
        if cco_image_list:
            raise ValueError("Download images %s using firmware_download" %
                             cco_image_list)

        # check if image is already uploaded to ucs domain
        for image in bundles:
            log.debug("Checking if image file: '%s' is already uploaded to UCS"
                      " Domain" % image)

            deleted = False
            filter_str = '(name, %s, type="eq")' % image
            firmware_package = handle.query_classid(
                class_id="FirmwareDistributable", filter_str=filter_str)
            if firmware_package:
                firmware_dist_image = handle.query_children(
                    in_mo=firmware_package[0], class_id="FirmwareDistImage")
                if firmware_dist_image:
                    firmware_dist_image = firmware_dist_image[0]
                    if firmware_dist_image.image_deleted != "":
                        deleted = True

            # image does not exist then upload
            if deleted or not firmware_package:
                log.debug("Uploading file to UCSM.")
                firmware = firmware_add_local(handle, image_dir, image)
                eh = UcsEventHandle(handle)
                eh.add(managed_object=firmware, prop="transfer_state",
                       success_value=['downloaded'], poll_sec=30,
                       timeout_sec=600)
                log.debug("Upload of image file '%s' is completed." % image)

            else:
                log.debug("Image file '%s' is already upload available on "
                          "UCSM" % image)

        # Activate UCSM
        firmware_activate_infra(handle, version=version)

        if not infra_only:
            # Activate Blade
            firmware_activate_blade(handle, version=version)
    except:
        log.debug("Error Occurred in Script.")
        handle.logout()
        raise
Beispiel #4
0
def firmware_auto_install(handle, version, image_dir, infra_only=False):

    from ucsmsdk.ucseventhandler import UcsEventHandle

    try:
        # create version string
        ver_split = version.split('(')
        version_bundle = ver_split[0] + "." + ver_split[1].strip(')')

        bundles = []
        cco_image_list = []

        # create firmware file name for the respective version
        aseries_bundle = "ucs-k9-bundles-infra." + version_bundle + ".A.bin"
        bundles.append(aseries_bundle)

        if not infra_only:
            bseries_bundle = "ucs-k9-bundles-b-series." + version_bundle + \
                             ".B.bin"
            bundles.append(bseries_bundle)

            cseries_bundle = "ucs-k9-bundles-c-series." + version_bundle + \
                             ".C.bin"
            bundles.append(cseries_bundle)

        print("Starting Firmware download process to local directory: %s" %
              image_dir)

        # adding files to cco image list if not available in local directory
        for bundle in bundles:
            file_path = os.path.join(image_dir, bundle)
            if os.path.exists(file_path):
                print("Image already exist in image directory ")
            else:
                cco_image_list.append(bundle)

        # if image not available raising exception to download
        if cco_image_list:
            raise ValueError("Download images %s using firmware_download" %
                             cco_image_list)

        # check if image is already uploaded to ucs domain
        for image in bundles:
            print("Checking if image file: '%s' is already uploaded to UCS "
                  "Domain" % image)

            deleted = False
            filter_str = '(name, %s, type="eq")' % image
            firmware_package = handle.query_classid(
                class_id="FirmwareDistributable", filter_str=filter_str)[0]
            if firmware_package:
                firmware_dist_image = handle.query_children(
                    in_mo=firmware_package, class_id="FirmwareDistImage")[0]
                if firmware_dist_image:
                    if firmware_dist_image.image_deleted != "":
                        deleted = True

            # image does not exist then upload
            if deleted or not firmware_package:
                print("Uploading file to UCSM.")
                firmware = firmware_add_local(handle, image_dir, image)
                eh = UcsEventHandle(handle)
                eh.add(managed_object=firmware, prop="transfer_state",
                       success_value=['downloaded'], poll_sec=30,
                       timeout_sec=600)
                print("Upload of image file '%s' is completed." % image)

            else:
                print("Image file '%s' is already upload available on UCSM" %
                      image)

        # Activate UCSM
        firmware_activate_ucsm(handle, version=version)

        if not infra_only:
            # Activate Blade
            firmware_activate_blade(handle, version=version)
    except:
        print("Error Occurred in Script.")
        handle.logout()
        raise
Beispiel #5
0
def firmware_auto_install(handle, version, image_dir, infra_only=False):

    from ucsmsdk.ucseventhandler import UcsEventHandle

    try:
        # create version string
        ver_split = version.split('(')
        version_bundle = ver_split[0] + "." + ver_split[1].strip(')')

        bundles = []
        cco_image_list = []

        # create firmware file name for the respective version
        aseries_bundle = "ucs-k9-bundles-infra." + version_bundle + ".A.bin"
        bundles.append(aseries_bundle)

        if not infra_only:
            bseries_bundle = "ucs-k9-bundles-b-series." + version_bundle + \
                             ".B.bin"
            bundles.append(bseries_bundle)

            cseries_bundle = "ucs-k9-bundles-c-series." + version_bundle + \
                             ".C.bin"
            bundles.append(cseries_bundle)

        print("Starting Firmware download process to local directory: %s" %
              image_dir)

        # adding files to cco image list if not available in local directory
        for bundle in bundles:
            file_path = os.path.join(image_dir, bundle)
            if os.path.exists(file_path):
                print("Image already exist in image directory ")
            else:
                cco_image_list.append(bundle)

        # if image not available raising exception to download
        if cco_image_list:
            raise ValueError("Download images %s using firmware_download" %
                             cco_image_list)

        # check if image is already uploaded to ucs domain
        for image in bundles:
            print("Checking if image file: '%s' is already uploaded to UCS "
                  "Domain" % image)

            deleted = False
            filter_str = '(name, %s, type="eq")' % image
            firmware_package = handle.query_classid(
                class_id="FirmwareDistributable", filter_str=filter_str)[0]
            if firmware_package:
                firmware_dist_image = handle.query_children(
                    in_mo=firmware_package, class_id="FirmwareDistImage")[0]
                if firmware_dist_image:
                    if firmware_dist_image.image_deleted != "":
                        deleted = True

            # image does not exist then upload
            if deleted or not firmware_package:
                print("Uploading file to UCSM.")
                firmware = firmware_add_local(handle, image_dir, image)
                eh = UcsEventHandle(handle)
                eh.add(managed_object=firmware,
                       prop="transfer_state",
                       success_value=['downloaded'],
                       poll_sec=30,
                       timeout_sec=600)
                print("Upload of image file '%s' is completed." % image)

            else:
                print("Image file '%s' is already upload available on UCSM" %
                      image)

        # Activate UCSM
        firmware_activate_ucsm(handle, version=version)

        if not infra_only:
            # Activate Blade
            firmware_activate_blade(handle, version=version)
    except:
        print("Error Occurred in Script.")
        handle.logout()
        raise