# -*- perl -*-
#
# Copyright (C) 2006 Red Hat
# Copyright (C) 2006-2007 Daniel P. Berrange
#
# This program is free software; You can redistribute it and/or modify
# it under either:
#
# a) the GNU General Public License as published by the Free
# Software Foundation; either version 2, or (at your option) any
# later version,
#
# or
#
# b) the "Artistic License"
#
# The file "LICENSE" distributed along with this file provides full
# details of the terms and conditions of the two licenses.
=pod
=head1 NAME
Sys::Virt::Error - error object for libvirt APIs
=head1 DESCRIPTION
The C<Sys::Virt::Error> class provides an encoding of the
libvirt errors. Instances of this object can be thrown by
pretty much any of the Sys::Virt APIs.
=head1 METHODS
=over 4
=cut
package Sys::Virt::Error;
use strict;
use warnings;
use overload ('""' => 'stringify');
=item $err->stringify
Convert the object into string format suitable for printing on a
console to inform a user of the error.
=cut
sub stringify {
my $self = shift;
return "libvirt error code: " . $self->{code} . ", message: " . $self->{message} . ($self->{message} =~ /\n$/ ? "" : "\n");
}
=item my $code = $err->level
Return the raw error level represented by this error. One of the
ERROR LEVEL CONSTANTS
=cut
sub level {
my $self = shift;
return $self->{code}
}
=item my $code = $err->code
Return the raw error code represented by this error. One of the
ERROR CODE CONSTANTS
=cut
sub code {
my $self = shift;
return $self->{code}
}
=item my $from = $err->domain
Return the error domain raising this error. One of the ERROR
DOMAIN CONSTANTS
=cut
sub domain {
my $self = shift;
return $self->{domain}
}
=item my $msg = $err->message
Return an informative message describing the error condition.
=cut
sub message {
my $self = shift;
return $self->{message}
}
1;
=back
=head1 CONSTANTS
=head2 ERROR LEVEL CONSTANTS
=over 4
=item Sys::Virt::Error::LEVEL_NONE
Undefined error level
=item Sys::Virt::Error::LEVEL_WARNING
Warning error level
=item Sys::Virt::Error::LEVEL_ERROR
Fatal error level
=back
=head2 ERROR DOMAIN CONSTANTS
The error domain indicates which internal part of libvirt the error
report was raised from.
=over 4
=item Sys::Virt::Error::FROM_CONF
Configuration file handling
=item Sys::Virt::Error::FROM_DOM
Error while operating on a domain
=item Sys::Virt::Error::FROM_DOMAIN
Domain configuration handling
=item Sys::Virt::Error::FROM_LXC
LXC virtualization driver
=item Sys::Virt::Error::FROM_NET
Error while operating on a network
=item Sys::Virt::Error::FROM_NETWORK
Network configuration handling
=item Sys::Virt::Error::FROM_NODEDEV
Node device configuration handling
=item Sys::Virt::Error::FROM_NONE
No specific error domain.
=item Sys::Virt::Error::FROM_OPENVZ
OpenVZ virtualization driver
=item Sys::Virt::Error::FROM_PROXY
Xen proxy virtualization driver
=item Sys::Virt::Error::FROM_QEMU
QEMU virtualization driver
=item Sys::Virt::Error::FROM_REMOTE
Remote client virtualization driver
=item Sys::Virt::Error::FROM_RPC
XML-RPC handling code
=item Sys::Virt::Error::FROM_SECURITY
Security services driver
=item Sys::Virt::Error::FROM_SEXPR
SEXPR parsing code
=item Sys::Virt::Error::FROM_STATS_LINUX
Device statistics code
=item Sys::Virt::Error::FROM_STORAGE
Storage configuration handling
=item Sys::Virt::Error::FROM_TEST
Test virtualization driver
=item Sys::Virt::Error::FROM_UML
UML virtualization driver
=item Sys::Virt::Error::FROM_XEN
Xen hypervisor driver
=item Sys::Virt::Error::FROM_XEND
XenD daemon driver
=item Sys::Virt::Error::FROM_XENSTORE
XenStore driver
=item Sys::Virt::Error::FROM_XENXM
Xen XM configuration file driver
=item Sys::Virt::Error::FROM_XEN_INOTIFY
Xen Inotify events driver
=item Sys::Virt::Error::FROM_XML
Low level XML parser
=item Sys::Virt::Error::FROM_ESX
The VMWare ESX driver
=item Sys::Virt::Error::FROM_INTERFACE
The host network interface driver
=item Sys::Virt::Error::FROM_ONE
The Open Nebula driver. This constant is no longer
used and retained only for backwards compatibility
=item Sys::Virt::Error::FROM_PHYP
The IBM Power Hypervisor driver
=item Sys::Virt::Error::FROM_SECRET
The secret management driver
=item Sys::Virt::Error::FROM_VBOX
The VirtualBox driver
=item Sys::Virt::Error::FROM_AUDIT
The audit driver
=item Sys::Virt::Error::FROM_CPU
The CPU information driver
=item Sys::Virt::Error::FROM_DOMAIN_SNAPSHOT
The domain snapshot driver
=item Sys::Virt::Error::FROM_HOOK
The daemon hook driver
=item Sys::Virt::Error::FROM_NWFILTER
The network filter driver
=item Sys::Virt::Error::FROM_STREAMS
The data streams driver
=item Sys::Virt::Error::FROM_SYSINFO
The system information driver
=item Sys::Virt::Error::FROM_VMWARE
The VMWare driver
=item Sys::Virt::Error::FROM_XENAPI
The XenAPI driver
=item Sys::Virt::Error::FROM_EVENT
The event driver
=item Sys::Virt::Error::FROM_LIBXL
The libxl Xen driver
=item Sys::Virt::Error::FROM_LOCKING
The lock manager drivers
=item Sys::Virt::Error::FROM_HYPERV
The Hyper-V driver
=item Sys::Virt::Error::FROM_CAPABILITIES
The capabilities driver
=item Sys::Virt::Error::FROM_AUTH
The authentication handling code
=item Sys::Virt::Error::FROM_URI
The URI handling code
=item Sys::Virt::Error::FROM_DBUS
The DBus handling code
=item Sys::Virt::Error::FROM_DEVICE
The device handling code
=item Sys::Virt::Error::FROM_SSH
The libSSH2 socket client
=item Sys::Virt::Error::FROM_PARALLELS
The Parallels virtualization driver
=item Sys::Virt::Error::FROM_LOCKSPACE
The lockspace handling code
=item Sys::Virt::Error::FROM_INITCTL
The initctl client code
=item Sys::Virt::Error::FROM_CGROUP
The cgroups code
=item Sys::Virt::Error::FROM_IDENTITY
The identity management code
=item Sys::Virt::Error::FROM_ACCESS
The access control code
=item Sys::Virt::Error::FROM_SYSTEMD
The systemd init service
=item Sys::Virt::Error::FROM_BHYVE
The FreeBSD BHyve driver
=item Sys::Virt::Error::FROM_CRYPTO
The cryptographic helper APIs.
=item Sys::Virt::Error::FROM_FIREWALL
The firewall helper APIs.
=item Sys::Virt::Error::FROM_POLKIT
The polkit authentication / authorization APIs
=item Sys::Virt::Error::FROM_THREAD
The thread helper utils
=item Sys::Virt::Error::FROM_ADMIN
The administrative service
=item Sys::Virt::Error::FROM_LOGGING
The logging service
=item Sys::Virt::Error::FROM_XENXL
The Xen XL driver
=item Sys::Virt::Error::FROM_PERF
The performance events subsystem
=item Sys::Virt::Error::FROM_LIBSSH
The libSSH socket client
=item Sys::Virt::Error::FROM_RESCTRL
The resource control subsystem
=item Sys::Virt::Error::FROM_FIREWALLD
The firewalld service
=item Sys::Virt::Error::FROM_DOMAIN_CHECKPOINT
The domain checkpoint
=item Sys::Virt::Error::FROM_TPM
The TPM subsystem
=item Sys::Virt::Error::FROM_BPF
The BPF subsystem
=item Sys::Virt::Error::FROM_CH
The Cloud Hypervisor driver
=back
=head2 ERROR CODE CONSTANTS
The error codes allow for specific problems to be identified and
handled separately from generic error handling.
=over 4
=item Sys::Virt::Error::ERR_AUTH_FAILED
Authentication falure when connecting to a driver
=item Sys::Virt::Error::ERR_CALL_FAILED
Operation not supported by driver (DEPRECATED & unused)
=item Sys::Virt::Error::ERR_CONF_SYNTAX
Configuration file syntax error
=item Sys::Virt::Error::ERR_DOM_EXIST
The domain already exists
=item Sys::Virt::Error::ERR_DRIVER_FULL
Too many hypervisor drivers have been registered
=item Sys::Virt::Error::ERR_GET_FAILED
HTTP GET command failed talking to XenD
=item Sys::Virt::Error::ERR_GNUTLS_ERROR
GNUTLS encryption error in RPC driver
=item Sys::Virt::Error::ERR_HTTP_ERROR
Unexpected HTTP error code from XenD
=item Sys::Virt::Error::ERR_INTERNAL_ERROR
Generic internal error
=item Sys::Virt::Error::ERR_INVALID_ARG
Invalid argument supplied to function
=item Sys::Virt::Error::ERR_INVALID_CONN
Invalid connection object
=item Sys::Virt::Error::ERR_INVALID_DOMAIN
Invalid domain object
=item Sys::Virt::Error::ERR_INVALID_MAC
Invalid MAC address string
=item Sys::Virt::Error::ERR_INVALID_NETWORK
Invalid network object
=item Sys::Virt::Error::ERR_INVALID_NODE_DEVICE
Invalid node device object
=item Sys::Virt::Error::ERR_INVALID_STORAGE_POOL
Invalid storage pool object
=item Sys::Virt::Error::ERR_INVALID_STORAGE_VOL
Invalid storage vol object
=item Sys::Virt::Error::ERR_NETWORK_EXIST
Network with this name/uuid already exists
=item Sys::Virt::Error::ERR_NO_CONNECT
Unable to connect to requested hypervisor driver
=item Sys::Virt::Error::ERR_NO_DEVICE
Missing device information
=item Sys::Virt::Error::ERR_NO_DOMAIN
No such domain with that name/uuid/id
=item Sys::Virt::Error::ERR_NO_KERNEL
Missing kernel information in domain configuration
=item Sys::Virt::Error::ERR_NO_MEMORY
Missing memory information in domain configuration
=item Sys::Virt::Error::ERR_NO_NAME
Missing name in object configuration
=item Sys::Virt::Error::ERR_NO_NETWORK
No such network with that name/uuid
=item Sys::Virt::Error::ERR_NO_NODE_DEVICE
No such node device with that name
=item Sys::Virt::Error::ERR_NO_OS
Missing OS information in domain configuration
=item Sys::Virt::Error::ERR_NO_ROOT
Missing root device information in domain configuration
=item Sys::Virt::Error::ERR_NO_SECURITY_MODEL
Missing security model information in domain configuratio
=item Sys::Virt::Error::ERR_NO_SOURCE
Missing source device information in domain configuration
=item Sys::Virt::Error::ERR_NO_STORAGE_POOL
No such storage pool with that name/uuid
=item Sys::Virt::Error::ERR_NO_STORAGE_VOL
No such storage volume with that name/path/key
=item Sys::Virt::Error::ERR_NO_SUPPORT
This operation is not supported by the active driver
=item Sys::Virt::Error::ERR_NO_TARGET
Missing target device information in domain configuration
=item Sys::Virt::Error::ERR_NO_XEN
Unable to connect to Xen hypervisor
=item Sys::Virt::Error::ERR_NO_XENSTORE
Unable to connect to XenStorage daemon
=item Sys::Virt::Error::ERR_OK
No error code. This should never be see
=item Sys::Virt::Error::ERR_OPEN_FAILED
Unable to open a configuration file
=item Sys::Virt::Error::ERR_OPERATIONED_DENIED
The operation is forbidden for the current connection
=item Sys::Virt::Error::ERR_OPERATION_FAILED
The operation failed to complete
=item Sys::Virt::Error::ERR_OS_TYPE
Missing/incorrect OS type in domain configuration
=item Sys::Virt::Error::ERR_PARSE_FAILED
Failed to parse configuration file
=item Sys::Virt::Error::ERR_POST_FAILED
HTTP POST failure talking to XenD
=item Sys::Virt::Error::ERR_READ_FAILED
Unable to read from configuration file
=item Sys::Virt::Error::ERR_RPC
Generic RPC error talking to XenD
=item Sys::Virt::Error::ERR_SEXPR_SERIAL
Failed to generic SEXPR for XenD
=item Sys::Virt::Error::ERR_SYSTEM_ERROR
Generic operating system error
=item Sys::Virt::Error::ERR_UNKNOWN_HOST
Unknown hostname
=item Sys::Virt::Error::ERR_WRITE_FAILED
Failed to write to configuration file
=item Sys::Virt::Error::ERR_XEN_CALL
Failure while talking to Xen hypervisor
=item Sys::Virt::Error::ERR_XML_DETAIL
Detailed XML parsing error
=item Sys::Virt::Error::ERR_XML_ERROR
Generic XML parsing error
=item Sys::Virt::Error::WAR_NO_NETWORK
Warning that no network driver is activated
=item Sys::Virt::Error::WAR_NO_NODE
Warning that no node device driver is activated
=item Sys::Virt::Error::WAR_NO_STORAGE
Warning that no storage driver is activated
=item Sys::Virt::Error::ERR_INVALID_INTERFACE
Invalid network interface object
=item Sys::Virt::Error::ERR_NO_INTERFACE
No interface with the matching name / mac address
=item Sys::Virt::Error::ERR_OPERATION_INVALID
The requested operation is not valid for the current object state
=item Sys::Virt::Error::WAR_NO_INTERFACE
The network interface driver is not available
=item Sys::Virt::Error::ERR_MULTIPLE_INTERFACES
There are multiple interfaces with the requested MAC address
=item Sys::Virt::Error::ERR_BUILD_FIREWALL
The firwall could not be constructed
=item Sys::Virt::Error::WAR_NO_NWFILTER
The network filter driver could not be activated
=item Sys::Virt::Error::ERR_NO_NWFILTER
There is no network filter driver available
=item Sys::Virt::Error::ERR_INVALID_NWFILTER
The network filter object was invalid
=item Sys::Virt::Error::WAR_NO_SECRET
There secret management driver is not available
=item Sys::Virt::Error::ERR_NO_SECRET
No secret with the matching uuid / usage ID
=item Sys::Virt::Error::ERR_INVALID_SECRET
Invalid secret object
=item Sys::Virt::Error::ERR_CONFIG_UNSUPPORTED
The requested XML configuration is not supported by the hypervisor
=item Sys::Virt::Error::ERR_OPERATION_TIMEOUT
The operation could not be completed in a satisfactory time
=item Sys::Virt::Error::ERR_MIGRATE_PERSIST_FAILED
Unable to persistent the domain configuration after migration
successfully completed
=item Sys::Virt::Error::ERR_HOOK_SCRIPT_FAILED
Execution of a daemon hook script failed
=item Sys::Virt::Error::ERR_INVALID_DOMAIN_SNAPSHOT
The domain snapshot object pointer was invalid
=item Sys::Virt::Error::ERR_NO_DOMAIN_SNAPSHOT
No matching domain snapshot was found
=item Sys::Virt::Error::ERR_INVALID_STREAM
The stream object pointer was invalid
=item Sys::Virt::Error::ERR_ARGUMENT_UNSUPPORTED
The argument value was not supported by the driver
=item Sys::Virt::Error::ERR_STORAGE_POOL_BUILT
The storage pool has already been built
=item Sys::Virt::Error::ERR_STORAGE_PROBE_FAILED
Probing the storage pool failed
=item Sys::Virt::Error::ERR_SNAPSHOT_REVERT_RISKY
Reverting the snapshot could cause data loss
=item Sys::Virt::Error::ERR_OPERATION_ABORTED
The asynchronous operation was aborted at admin request
=item Sys::Virt::Error::ERR_AUTH_CANCELLED
The user cancelled the authentication process
=item Sys::Virt::Error::ERR_NO_DOMAIN_METADATA
The requested metadata does not exist
=item Sys::Virt::Error::ERR_MIGRATE_UNSAFE
The migration operation would be unsafe to perform
=item Sys::Virt::Error::ERR_OVERFLOW
The calculation would overflow
=item Sys::Virt::Error::ERR_BLOCK_COPY_ACTIVE
Action prevented by block copy job
=item Sys::Virt::Error::ERR_AGENT_UNRESPONSIVE
The guest agent is not responding
=item Sys::Virt::Error::ERR_OPERATION_UNSUPPORTED
The operation is not supported on this host
=item Sys::Virt::Error::ERR_SSH
The SSH operation failed
=item Sys::Virt::Error::ERR_RESOURCE_BUSY
The resource requested is already in use
=item Sys::Virt::Error::ERR_ACCESS_DENIED
Not authorized to perform the operation
=item Sys::Virt::Error::ERR_DBUS_SERVICE
An error from a DBus service API
=item Sys::Virt::Error::ERR_STORAGE_VOL_EXIST
The storage volume already exists
=item Sys::Virt::Error::ERR_CPU_INCOMPATIBLE
The CPUs are not compatible
=item Sys::Virt::Error::ERR_INVALID_SCHEMA
The XML document does not comply with the XML schema
=item Sys::Virt::Error::ERR_MIGRATE_FINISH_OK
Migration finished but expected to return NULL domain.
=item Sys::Virt::Error::ERR_AUTH_UNAVAILABLE
Authentication services were not available
=item Sys::Virt::Error::ERR_NO_SERVER
Libvirt server was not found
=item Sys::Virt::Error::ERR_NO_CLIENT
Libvirt client was not found
=item Sys::Virt::Error::ERR_AGENT_UNSYNCED
Libvirt guest agent replies with wrong id to guest-sync command
=item Sys::Virt::Error::ERR_LIBSSH
The libSSH operation failed
=item Sys::Virt::Error::ERR_DEVICE_MISSING
Libvirt fail to find the desired device.
=item Sys::Virt::Error::ERR_INVALID_NWFILTER_BINDING
Invalid nwfilter binding
=item Sys::Virt::Error::ERR_NO_NWFILTER_BINDING
No nwfilter binding
=item Sys::Virt::Error::ERR_INVALID_DOMAIN_CHECKPOINT
Invalid domain checkpoint
=item Sys::Virt::Error::ERR_NO_DOMAIN_BACKUP
Domain checkpoint not found
=item Sys::Virt::Error::ERR_NO_DOMAIN_CHECKPOINT
Domain backup job id not found
=item Sys::Virt::Error::ERR_NO_NETWORK_PORT
No matching network port
=item Sys::Virt::Error::ERR_INVALID_NETWORK_PORT
Invalid network port object
=item Sys::Virt::Error::ERR_NETWORK_PORT_EXIST
Network port already exists
=item Sys::Virt::Error::ERR_NO_HOSTNAME
No domain hostname found
=item Sys::Virt::Error::ERR_CHECKPOINT_INCONSISTENT
The checkpoint is inconsistent
=item Sys::Virt::Error::ERR_MULTIPLE_DOMAINS
More than one matching domain found
=back
=head1 AUTHORS
Daniel P. Berrange <berrange@redhat.com>
=head1 COPYRIGHT
Copyright (C) 2006 Red Hat
Copyright (C) 2006-2007 Daniel P. Berrange
=head1 LICENSE
This program is free software; you can redistribute it and/or modify
it under the terms of either the GNU General Public License as published
by the Free Software Foundation (either version 2 of the License, or at
your option any later version), or, the Artistic License, as specified
in the Perl README file.
=head1 SEE ALSO
L<Sys::Virt::Domain>, L<Sys::Virt>, C<http://libvirt.org>
=cut