• Iustin Pop's avatar
    Big rewrite of the OS-related functions · 255dcebd
    Iustin Pop authored
    Currently the OSes have a special, customized error handling: the OS
    object can represent either a valid OS, or an invalid OS. The associated
    function, instead of raising other exception or failing, create custom
    OS objects representing failed OSes.
    While this was good when no other RPC had failure handling, it's
    extremely different from how other function in backend.py expect
    failures to be signalled.
    This patch reworks this completely:
      - the OS object always represents valid OSes (the next patch will
        remove the valid/invalid field and associated constants)
      - the call_os_diagnose returns instead of a list of OS objects, a list
        of (name, path, status, diagnose_msg); the status is then used in
        cmdlib to determine validity and the status and diagnose_msg values
        are used in gnt-os for display
      - call_os_get returns either a valid OS or a RPC remote failure (with
        the error message)
      - the other functions in backend.py now just call backend.OSFromDisk()
        which will return either a valid OS object or raise an exception
      - the bulk of the OSFromDisk was moved to _TryOSFromDisk which returns
        status, value for the functions which don't want an exception raised
    The gnt-os list and diagnose commands still work after this patch.
    Signed-off-by: default avatarIustin Pop <iustin@google.com>
    Reviewed-by: default avatarGuido Trotter <ultrotter@google.com>