def getsesprivs(self, availableprivsopts=False):
        """Finds and returns the curent session's privileges
        
        :param availableprivsopts: return available privileges
        :type availableprivsopts: boolean.
        """
        if self._rdmc.app.current_client:
            sespath = self._rdmc.app.current_client.session_location
            sespath = self._rdmc.app.current_client.default_prefix + \
                                sespath.split(self._rdmc.app.current_client.\
                                              default_prefix)[-1]

            ses = self._rdmc.app.get_handler(sespath, service=False, silent=True)

            if not ses:
                raise SessionExpired("Invalid session. Please logout and "\
                                    "log back in or include credentials.")

            sesprivs = ses.dict['Oem'][self.typepath.defs.oemhp]['Privileges']
            availableprivs = ses.dict['Oem'][self.typepath.defs.oemhp]['Privileges'].keys()
            for priv, val in sesprivs.items():
                if not val:
                    del sesprivs[priv]
        else:
            sesprivs = None
        if availableprivsopts:
            return availableprivs
        else:
            return sesprivs
예제 #2
0
    def getsesprivs(self, availableprivsopts=False):
        """Finds and returns the curent session's privileges

        :param availableprivsopts: return available privileges
        :type availableprivsopts: boolean.
        """
        if self.rdmc.app.current_client:
            sespath = self.rdmc.app.current_client.session_location
            sespath = self.rdmc.app.current_client.default_prefix + \
                                sespath.split(self.rdmc.app.current_client.\
                                              default_prefix)[-1]

            ses = self.rdmc.app.get_handler(sespath,
                                            service=False,
                                            silent=True)

            if not ses:
                raise SessionExpired("Invalid session. Please logout and "\
                                    "log back in or include credentials.")

            sesoemhp = ses.dict['Oem'][self.rdmc.app.typepath.defs.oemhp]
            if 'Privileges' in sesoemhp.keys():
                sesprivs = sesoemhp['Privileges']
            else:
                sesprivs = {
                    'HostBIOSConfigPriv': True,
                    'HostNICConfigPriv': True,
                    'HostStorageConfigPriv': True,
                    'LoginPriv': True,
                    'RemoteConsolePriv': True,
                    'SystemRecoveryConfigPriv': True,
                    'UserConfigPriv': True,
                    'VirtualMediaPriv': True,
                    'VirtualPowerAndResetPriv': True,
                    'iLOConfigPriv': True
                }
            availableprivs = sesprivs.keys()
            updated_privs = dict()
            for priv, val in sesprivs.items():
                if val:
                    updated_privs[priv] = sesprivs[priv]
            sesprivs = updated_privs
            del updated_privs
        else:
            sesprivs = None
        if availableprivsopts:
            return availableprivs
        else:
            return sesprivs
예제 #3
0
    def output_resp(self, response, dl_reg=False, verbosity=None):
        """Prints or logs parsed MessageId response. Will raise an IloResponseError or return
        a list of message response data which includes the information returned from
        message_handler.

        :param response: message response of a call.
        :type response: :class:`redfish.rest.containers.RestResponse`
        :param dl_reg: Flag to download registry. If this is set to True a generic message response
                       will be returned instead of gathered from registries.
        :type dl_reg: bool
        :param verbosity: Optional verbosity level. Only modifies what is output to log or screen.
        :type verbosity: int
        :returns: List of error response dictionaries.
        """
        retdata = None

        if response.status > 299:
            message_text = "No error message returned or unable to parse error response."
        else:
            message_text = "The operation completed successfully."

        if response.status < 300 and (response._rest_request.method == 'GET'
                                      or not response.read):
            warning_handler(self.verbosity_levels(message=message_text, response_status=\
                                    response.status, verbosity=verbosity, dl_reg=dl_reg))
        elif response.status == 401:
            raise SessionExpired()
        elif response.status == 403:
            raise IdTokenError()
        elif response.status == 412:
            warning_handler("The property you are trying to change has been updated. " \
                            "Please check entry again before manipulating it.\n")
            raise ValueChangedError()
        else:
            retdata = self.message_handler(response_data=response, verbosity=verbosity, \
                    message_text=message_text, dl_reg=dl_reg)
        if response.status > 299:
            raise IloResponseError("")
        else:
            return retdata
    def _invalid_return_handler(self,
                                results,
                                print_code=None,
                                errmessages=None):
        """Main worker function for printing/raising all error messages

        :param results: dict of the results.
        :type results: sict.
        :param errmessages: dict of lists containing the systems error messages.
        :type errmessages: dict.
        :param print_code: Flag to also always print the return code.
        :type print_code: boolean.

        """

        output = ''
        try:
            contents = results.dict["Messages"][0]["MessageID"].split('.')
        except Exception:
            try:
                contents = results.dict["error"]["@Message.ExtendedInfo"][0][
                    "MessageId"].split('.')
            except Exception:
                if results.status == 200 or results.status == 201:
                    if print_code:
                        warning_handler("[%d] The operation completed " \
                                            "successfully.\n" % results.status)
                    else:
                        warning_handler("[%d] The operation completed " \
                                            "successfully.\n" % results.status)
                elif results.status == 412:
                    warning_handler("The property you are trying to " \
                                         "change has been updated. Please " \
                                         "check entry again before manipulating it.\n")
                    raise ValueChangedError("")
                elif results.status == 403:
                    raise IdTokenError()
                else:
                    warning_handler("[%d] No message returned by iLO.\n" %
                                    results.status)

                    raise IloResponseError("")
                return

        if results.status == 401 and not contents[-1].lower(
        ) == 'insufficientprivilege':
            raise SessionExpired()
        elif results.status == 403:
            raise IdTokenError()
        elif results.status == 412:
            warning_handler("The property you are trying to change " \
                                 "has been updated. Please check entry again " \
                                 " before manipulating it.\n")
            raise ValueChangedError()
        elif errmessages:
            for messagetype in list(errmessages.keys()):
                if contents[0] == messagetype:
                    try:
                        if errmessages[messagetype][
                                contents[-1]]["NumberOfArgs"] == 0:
                            output = errmessages[messagetype][
                                contents[-1]]["Message"]
                        else:
                            output = errmessages[messagetype][
                                contents[-1]]["Description"]

                        if print_code:
                            warning_handler("[%d] %s\n" %
                                            (results.status, output))
                        if results.status == 200 or results.status == 201:
                            warning_handler("{0}\n".format(output))
                        if not results.status == 200 and not results.status == 201:
                            warning_handler("iLO response with code [%d]:"\
                                                 " %s\n" % (results.status, output))
                            raise IloResponseError("")
                        break

                    except IloResponseError as excp:
                        raise excp
                    except Exception:
                        pass
            if not output:
                if results.status == 200 or results.status == 201:
                    warning_handler(
                        "[%d] The operation completed successfully.\n" %
                        results.status)
                else:
                    warning_handler("[{0}] iLO error response: {1}\n".\
                                         format(results.status, contents))
                    raise IloResponseError("")
        else:
            if results.status == 200 or results.status == 201:
                if print_code:
                    warning_handler(
                        "[%d] The operation completed successfully.\n" %
                        results.status)
                else:
                    warning_handler("The operation completed successfully.\n")
            elif contents:
                warning_handler("iLO response with code [{0}]: {1}\n".\
                                     format(results.status, contents))
                raise IloResponseError("")
            else:
                warning_handler("[%d] No message returned.\n" % results.status)