def print_out_iscsi_configuration(self,
                                      iscsiinitiatorname,
                                      devicealloc,
                                      pcideviceslist,
                                      disabled=False):
        """ Convert content to human readable and print out to std.out

        :param iscsiinitiatorname: iscsi initiator name
        :type iscsiinitiatorname: str.
        :param devicealloc: list of devices allocated
        :type devicealloc: list.
        :param pcideviceslist: current pci device list
        :type pcideviceslist: list.
        :param disabled: command line options
        :type disabled: boolean.
        """
        try:
            if iscsiinitiatorname is None:
                BootOrderMissingEntriesError(
                    'No entry found for the iscsi initiator name.\n\n')
            elif disabled:
                pass
            else:
                self.print_iscsi_config_helper(
                    iscsiinitiatorname["iSCSIInitiatorName"],
                    "\nIscsi Initiator Name: ")
        except Exception as excp:
            raise excp

        try:
            if devicealloc and pcideviceslist:
                if disabled:
                    self.rdmc.ui.printer(
                        "\nDisabled iSCSI Boot Network Interfaces: \n")
                    count = 'Disabled'
                else:
                    self.rdmc.ui.printer(
                        "Available iSCSI Boot Network Interfaces: \n")
                    count = 1

                for item in devicealloc:
                    for pcidevice in pcideviceslist:
                        if item["CorrelatableID"] == pcidevice[
                                "UEFIDevicePath"]:
                            self.rdmc.ui.printer("[%s] %s %s Port %s : %s\n" % \
                                (count, pcidevice["DeviceType"], pcidevice["DeviceInstance"],
                                 pcidevice["DeviceSubInstance"], pcidevice["Name"]))

                            if not disabled:
                                count += 1
            else:
                raise BootOrderMissingEntriesError(
                    'No entries found for'
                    ' iscsi configurations devices.\n')
        except Exception as excp:
            raise excp
    def print_out_boot_order(self, content, onetimecontent, uefionetimecontent,\
                              bootmode, bootsources, bootstatus, targetstatus):
        """ Convert content to human readable and print out to std.out

        :param content: current content
        :type content: string.
        :param onetimecontent: list of one time boot entries
        :type onetimecontent: list.
        :param uefionetimecontent: list of uefi one time boot entries
        :type uefionetimecontent: list.
        :param bootmode: current system boot mode
        :type bootmode: string.
        :param bootsources: current systems boot sources
        :type bootsources: list.
        """
        if content is None:
            raise BootOrderMissingEntriesError("No entries found in " \
                                                "current boot order.\n\n")
        else:
            self.print_boot_helper(content, "\nCurrent Persistent Boot "\
                                   "Order:", bootsources=bootsources)

        bootstatusval = bootstatus['Boot']['BootSourceOverrideEnabled']
        boottoval = targetstatus['Boot']['BootSourceOverrideTarget']
        if bootstatusval == 'Continuous':
            sys.stdout.write(
                'Current continuous boot: {0}\n\n'.format(boottoval))
        elif bootstatusval == 'Once':
            sys.stdout.write(
                'Current one time boot: {0}\n\n'.format(boottoval))

        if onetimecontent is None:
            raise BootOrderMissingEntriesError(
                "No entries found for one time boot options.\n\n")
        else:
            self.print_boot_helper(onetimecontent["Boot"], \
                                   "Continuous and one time boot options:")

        if bootmode and any(
            [boot.get("BootMode", None) == "Uefi" for boot in bootmode]):
            if uefionetimecontent is None:
                sys.stdout.write(
                    "Continuous and one time boot uefi options:\n")
                sys.stdout.write("No entries found for one-time UEFI options or boot source mode "\
                                 "is not set to UEFI.")
            else:
                self.print_boot_helper(uefionetimecontent["Boot"], \
                           "Continuous and one time boot uefi options:", bootsources=bootsources)
    def print_out_iscsi_configuration(self, iscsiinitiatorname, devicealloc, \
                                                pcideviceslist, disabled=False):
        """ Convert content to human readable and print out to std.out

        :param iscsiinitiatorname: iscsi initiator name
        :type iscsiinitiatorname: str.
        :param devicealloc: list of devices allocated
        :type devicealloc: list.
        :param pcideviceslist: current pci device list
        :type pcideviceslist: list.
        :param disabled: command line options
        :type disabled: boolean.
        """
        try:
            if iscsiinitiatorname is None:
                BootOrderMissingEntriesError(u'No entry found for the iscsi' \
                                                        ' initiator name.\n\n')
            elif disabled:
                pass
            else:
                self.print_iscsi_config_helper(\
                                   iscsiinitiatorname["iSCSIInitiatorName"], \
                                                    "\nIscsi Initiator Name: ")
        except Exception, excp:
            raise excp
    def print_out_boot_order(self, content, onetimecontent, uefionetimecontent,\
                              bootmode, bootsources):
        """ Convert content to human readable and print out to std.out

        :param content: current content
        :type content: string.
        :param onetimecontent: list of one time boot entries
        :type onetimecontent: list.
        :param uefionetimecontent: list of uefi one time boot entries
        :type uefionetimecontent: list.
        :param bootmode: current system boot mode
        :type bootmode: string.
        :param bootsources: current systems boot sources
        :type bootsources: list.
        """
        try:
            if content is None:
                raise BootOrderMissingEntriesError(u"No entries found in " \
                                                    "current boot order.\n\n")
            else:
                self.print_boot_helper(content, "\nCurrent Persistent Boot "\
                                       "Order:", bootsources=bootsources)

            if onetimecontent is None:
                raise BootOrderMissingEntriesError(u"No entries found for one" \
                                                    " time boot options.\n\n")
            else:
                self.print_boot_helper(onetimecontent["Boot"], \
                                       "Continuous and one time boot options:")

            if bootmode and bootmode["BootMode"] == "Uefi":
                if uefionetimecontent is None:
                    raise BootOrderMissingEntriesError(u"No entries found for" \
                                                   " one-time UEFI options.")
                else:
                    self.print_boot_helper(uefionetimecontent["Boot"], \
                               "Continuous and one time boot uefi options:",\
                               bootsources=bootsources)
        except Exception, excp:
            raise excp
    def listoptionhelper(self, options, iscsipath, iscsisettingspath, bootpath):
        """ Helper function to list options for iscsi

        :param options: command line options
        :type options: list.
        :param iscsipath: current iscsi path
        :type iscsipath: str.
        :param iscsisettingspath: current iscsi settings path
        :type iscsisettingspath: str.
        :param bootpath: current boot path
        :type bootpath: str.
        """
        self.selobj.selectfunction("HpBiosMapping.")
        pcisettingsmap = self.getobj.getworkerfunction(\
                                    "BiosPciSettingsMappings", options, \
                                    "BiosPciSettingsMappings", results=True,\
                                    uselist=True)

        devicealloc = list()
        for item in pcisettingsmap["BiosPciSettingsMappings"]:
            if "Associations" in item:
                if "EmbNicEnable" in item["Associations"] or \
                                        "EmbNicConfig" in item["Associations"]:
                    _ = [devicealloc.append(x) for x in item["Subinstances"]]

                for assoc in item["Associations"]:
                    if re.match("FlexLom[0-9]Enable", str(assoc)) or \
                                    re.match("PciSlot[0-9]Enable", str(assoc)):
                        _ = [devicealloc.append(x) for x in item["Subinstances"]]

        if self.typepath.defs.isgen10:
            newpcilist = []

            self.selobj.selectfunction("HpeServerPciDeviceCollection")
            pcideviceslist = self.getobj.getworkerfunction("Members", options, \
                                   "Members", results=True, uselist=False)

            for device in pcideviceslist["Members"]:
                newpcilist.append(self._rdmc.app.get_handler(\
                                         device['@odata.id'], silent=True).dict)

            pcideviceslist = newpcilist
        else:
            self.selobj.selectfunction(["Collection.", "--filter", \
                                            "MemberType=HpServerPciDevice."])
            pcideviceslist = self.getobj.getworkerfunction("Items", options, \
                            "Items", results=True, uselist=False)["Items"]

        self.selobj.selectfunction("HpiSCSISoftwareInitiator.")
        iscsibootsources = self.rawdatahandler(action="GET", silent=True, \
                        verbose=False, jsonflag=True, path=iscsisettingspath)
        structeredlist = list()

        self.pcidevicehelper(devicealloc, iscsipath, bootpath, pcideviceslist)

        for item in iscsibootsources[self.typepath.defs.iscsisource]:
            if item["iSCSINicSource"]:
                for device in devicealloc:
                    listval = 1 if isinstance(device["Associations"][0], dict) \
                                                                        else 0
                    if item["iSCSINicSource"] == \
                                                device["Associations"][listval]:
                        for pcidevice in pcideviceslist:
                            if device["CorrelatableID"] == \
                                                    pcidevice["UEFIDevicePath"]:
                                inputstring = pcidevice["DeviceType"] + " " + \
                                            str(pcidevice["DeviceInstance"]) + \
                                            " Port " + \
                                            str(pcidevice["DeviceSubInstance"])\
                                            + " : " + pcidevice["Name"]
                                structeredlist.append({inputstring: \
                                   {str("Attempt " + \
                                    str(item[self.typepath.defs.\
                                                    iscsiattemptinstance])): \
                                                    item}})
            else:
                structeredlist.append({"Not Added": {}})
        try:
            if iscsibootsources is None:
                raise BootOrderMissingEntriesError(u'No entries found for" \
                                                    " iscsi boot sources.\n\n')
            elif not options.filename:
                self.print_iscsi_config_helper(structeredlist, \
                                               "Current iSCSI Attempts: \n")
        except Exception, excp:
            raise excp
                    count = 1

                for item in devicealloc:
                    for pcidevice in pcideviceslist:
                        if item["CorrelatableID"] == \
                                                    pcidevice["UEFIDevicePath"]:
                            sys.stdout.write("[%s] %s %s Port %s : %s\n" % \
                                         (count, pcidevice["DeviceType"], \
                                          pcidevice["DeviceInstance"], \
                                          pcidevice["DeviceSubInstance"], \
                                          pcidevice["Name"]))

                            if not disabled:
                                count += 1
            else:
                raise BootOrderMissingEntriesError(u'No entries found for' \
                                           ' iscsi configurations devices.\n')
        except Exception, excp:
            raise excp

    def print_iscsi_config_helper(self, content, outstring, indent=0):
        """ Print iscsi configuration helper

        :param content: current content to be output
        :type content: string.
        :param outstring: current output string
        :type outstring: str.
        :param indent: current iscsi settings path
        :type indent: str.
        """
        sys.stdout.write('\t' * indent + outstring)
    def listoptionhelper(self, options, iscsipath, iscsisettingspath,
                         bootpath):
        """ Helper function to list options for iscsi

        :param options: command line options
        :type options: list.
        :param iscsipath: current iscsi path
        :type iscsipath: str.
        :param iscsisettingspath: current iscsi settings path
        :type iscsisettingspath: str.
        :param bootpath: current boot path
        :type bootpath: str.
        """
        self.auxcommands['select'].selectfunction("HpBiosMapping.")
        pcisettingsmap = next(
            iter(self.auxcommands['get'].getworkerfunction(
                "BiosPciSettingsMappings", options, results=True,
                uselist=True)), None)

        devicealloc = list()
        for item in pcisettingsmap["BiosPciSettingsMappings"]:
            if "Associations" in item:
                if "EmbNicEnable" in item[
                        "Associations"] or "EmbNicConfig" in item[
                            "Associations"]:
                    _ = [devicealloc.append(x) for x in item["Subinstances"]]

                if (re.match("FlexLom[0-9]+Enable", item["Associations"][0])
                        or re.match("PciSlot[0-9]+Enable",
                                    item["Associations"][0])
                        or re.match("Slot[0-9]+NicBoot[0-9]+",
                                    item["Associations"][0])):
                    _ = [devicealloc.append(x) for x in item["Subinstances"]]

        if self.rdmc.app.typepath.defs.isgen10:
            newpcilist = []

            self.auxcommands['select'].selectfunction(
                "HpeServerPciDeviceCollection")
            pcideviceslist = next(
                iter(self.auxcommands['get'].getworkerfunction("Members",
                                                               options,
                                                               results=True,
                                                               uselist=False)),
                None)

            for device in pcideviceslist["Members"]:
                newpcilist.append(
                    self.rdmc.app.get_handler(device['@odata.id'],
                                              silent=True).dict)

            pcideviceslist = newpcilist
        else:
            self.auxcommands['select'].selectfunction(["Collection."])
            pcideviceslist = next(
                iter(self.auxcommands['get'].getworkerfunction(
                    "Items",
                    options,
                    results=True,
                    uselist=False,
                    filtervals=("MemberType", "HpServerPciDevice.*"))),
                None)["Items"]

        self.auxcommands['select'].selectfunction("HpiSCSISoftwareInitiator.")
        iscsibootsources = self.rawdatahandler(action="GET",
                                               silent=True,
                                               jsonflag=True,
                                               path=iscsisettingspath)
        structeredlist = list()

        self.pcidevicehelper(devicealloc, iscsipath, bootpath, pcideviceslist)

        for item in iscsibootsources[self.rdmc.app.typepath.defs.iscsisource]:
            if item["iSCSINicSource"]:
                for device in devicealloc:
                    listval = 1 if isinstance(device["Associations"][0],
                                              dict) else 0
                    #self.rdmc.ui.printer("Compare1 '%s: %s'\n" % (item["iSCSINicSource"], device["Associations"][listval]))
                    if item["iSCSINicSource"] == device["Associations"][
                            listval]:
                        for pcidevice in pcideviceslist:
                            #self.rdmc.ui.printer("Compare2 '%s: %s'\n" % (device["CorrelatableID"],pcidevice["UEFIDevicePath"]))
                            #self.rdmc.ui.printer("Modified '%s'\n" % (str(pcidevice["UEFIDevicePath"])[: -2] + str('1)')))
                            if device["CorrelatableID"] == pcidevice[
                                    "UEFIDevicePath"]:
                                #self.rdmc.ui.printer("Match!!")
                                inputstring = pcidevice["DeviceType"] + " " + \
                                            str(pcidevice["DeviceInstance"]) + " Port " + \
                                            str(pcidevice["DeviceSubInstance"])\
                                            + " : " + pcidevice["Name"]
                                structeredlist.append({inputstring: {str("Attempt " + \
                                                str(item[self.rdmc.app.typepath.defs.iscsiattemptinstance])): item}})

            else:
                structeredlist.append({"Not Added": {}})
        try:
            if iscsibootsources is None:
                raise BootOrderMissingEntriesError(
                    'No entries found for iscsi boot sources.\n\n')
            elif not options.filename:
                self.print_iscsi_config_helper(structeredlist,
                                               "Current iSCSI Attempts: \n")
        except Exception as excp:
            raise excp

        if structeredlist is None:
            self.rdmc.ui.error('No entries found for iscsi boot sources.\n\n')
        elif options.filename:
            output = json.dumps(structeredlist,
                                indent=2,
                                cls=redfish.ris.JSONEncoder,
                                sort_keys=True)
            filehndl = open(options.filename[0], "w")
            filehndl.write(output)
            filehndl.close()

            self.rdmc.ui.printer("Results written out to '%s'\n" %
                                 options.filename[0])