mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-09-24 21:44:59 +03:00
Compare commits
7 Commits
v4.10.0-rc
...
v4.6-maint
Author | SHA1 | Date | |
---|---|---|---|
|
890965e894 | ||
|
93edb0ea63 | ||
|
00e673c93f | ||
|
a27659643b | ||
|
0a9c2082e6 | ||
|
223167124c | ||
|
99decb0a65 |
1
.ctags
1
.ctags
@@ -3,4 +3,3 @@
|
||||
--exclude=*.html
|
||||
--exclude=*.html.in
|
||||
--langmap=c:+.h.in
|
||||
--c-kinds=+p
|
||||
|
@@ -46,7 +46,7 @@ script:
|
||||
-e VIR_TEST_DEBUG="$VIR_TEST_DEBUG"
|
||||
-e MINGW="$MINGW"
|
||||
-e DISTCHECK_CONFIGURE_FLAGS="$DISTCHECK_CONFIGURE_FLAGS"
|
||||
"quay.io/libvirt/buildenv-$IMAGE:master"
|
||||
"libvirt/buildenv-$IMAGE"
|
||||
/bin/sh -xc "$DOCKER_CMD"
|
||||
|
||||
git:
|
||||
|
@@ -126,7 +126,6 @@ vc-list-files
|
||||
vsnprintf
|
||||
waitpid
|
||||
warnings
|
||||
wcwidth
|
||||
'
|
||||
|
||||
SKIP_PO=true
|
||||
|
@@ -45,6 +45,9 @@ foreach my $file (@ARGV) {
|
||||
# Kill any quoted strings
|
||||
$data =~ s,"(?:[^\\\"]|\\.)*","XXX",g;
|
||||
|
||||
# Kill any C++ style comments
|
||||
$data =~ s,//.*$,//,;
|
||||
|
||||
next if $data =~ /^#/;
|
||||
|
||||
# Kill contents of multi-line comments
|
||||
|
5
cfg.mk
5
cfg.mk
@@ -472,7 +472,6 @@ sc_prohibit_canonicalize_file_name:
|
||||
# Insist on correct types for [pug]id.
|
||||
sc_correct_id_types:
|
||||
@prohibit='\<(int|long) *[pug]id\>' \
|
||||
exclude='exempt from syntax-check' \
|
||||
halt='use pid_t for pid, uid_t for uid, gid_t for gid' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
@@ -1064,7 +1063,7 @@ sc_prohibit_backslash_alignment:
|
||||
# Rule to ensure that varibales declared using a cleanup macro are
|
||||
# always initialized.
|
||||
sc_require_attribute_cleanup_initialization:
|
||||
@prohibit='VIR_AUTO((FREE|PTR)\(.+\)|CLOSE) *[^=]+;' \
|
||||
@prohibit='VIR_AUTO(FREE|PTR)\(.+\) *[^=]+;' \
|
||||
in_vc_files='\.[chx]$$' \
|
||||
halt='variable declared with a cleanup macro must be initialized' \
|
||||
$(_sc_search_regexp)
|
||||
@@ -1228,7 +1227,7 @@ exclude_file_name_regexp--sc_prohibit_select = \
|
||||
^cfg\.mk$$
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_canonicalize_file_name = \
|
||||
^(cfg\.mk|tests/virfilemock\.c)$$
|
||||
^cfg\.mk$$
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_raw_allocation = \
|
||||
^(docs/hacking\.html\.in|src/util/viralloc\.[ch]|examples/.*|tests/(securityselinuxhelper|(vircgroup|nss)mock|commandhelper)\.c|tools/wireshark/src/packet-libvirt\.c)$$
|
||||
|
@@ -36,6 +36,7 @@
|
||||
# undef WITH_DEVMAPPER
|
||||
# undef WITH_DTRACE_PROBES
|
||||
# undef WITH_GNUTLS
|
||||
# undef WITH_JANSSON
|
||||
# undef WITH_LIBSSH
|
||||
# undef WITH_MACVTAP
|
||||
# undef WITH_NUMACTL
|
||||
@@ -43,8 +44,6 @@
|
||||
# undef WITH_SSH2
|
||||
# undef WITH_SYSTEMD_DAEMON
|
||||
# undef WITH_VIRTUALPORT
|
||||
# undef WITH_YAJL
|
||||
# undef WITH_YAJL2
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
64
configure.ac
64
configure.ac
@@ -16,7 +16,7 @@ dnl You should have received a copy of the GNU Lesser General Public
|
||||
dnl License along with this library. If not, see
|
||||
dnl <http://www.gnu.org/licenses/>.
|
||||
|
||||
AC_INIT([libvirt], [4.10.0], [libvir-list@redhat.com], [], [https://libvirt.org])
|
||||
AC_INIT([libvirt], [4.6.0], [libvir-list@redhat.com], [], [https://libvirt.org])
|
||||
AC_CONFIG_SRCDIR([src/libvirt.c])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
@@ -250,7 +250,7 @@ LIBVIRT_ARG_FIREWALLD
|
||||
LIBVIRT_ARG_FUSE
|
||||
LIBVIRT_ARG_GLUSTER
|
||||
LIBVIRT_ARG_HAL
|
||||
LIBVIRT_ARG_LIBISCSI
|
||||
LIBVIRT_ARG_JANSSON
|
||||
LIBVIRT_ARG_LIBPCAP
|
||||
LIBVIRT_ARG_LIBSSH
|
||||
LIBVIRT_ARG_LIBXML
|
||||
@@ -291,7 +291,7 @@ LIBVIRT_CHECK_FUSE
|
||||
LIBVIRT_CHECK_GLUSTER
|
||||
LIBVIRT_CHECK_GNUTLS
|
||||
LIBVIRT_CHECK_HAL
|
||||
LIBVIRT_CHECK_LIBISCSI
|
||||
LIBVIRT_CHECK_JANSSON
|
||||
LIBVIRT_CHECK_LIBNL
|
||||
LIBVIRT_CHECK_LIBPARTED
|
||||
LIBVIRT_CHECK_LIBPCAP
|
||||
@@ -322,49 +322,17 @@ AC_CHECK_SIZEOF([long])
|
||||
|
||||
dnl Availability of various common functions (non-fatal if missing),
|
||||
dnl and various less common threadsafe functions
|
||||
AC_CHECK_FUNCS_ONCE([\
|
||||
cfmakeraw \
|
||||
fallocate \
|
||||
geteuid \
|
||||
getgid \
|
||||
getifaddrs \
|
||||
getmntent_r \
|
||||
getpwuid_r \
|
||||
getrlimit \
|
||||
getuid \
|
||||
if_indextoname \
|
||||
mmap \
|
||||
newlocale \
|
||||
posix_fallocate \
|
||||
posix_memalign \
|
||||
prlimit \
|
||||
sched_getaffinity \
|
||||
sched_setscheduler \
|
||||
setgroups \
|
||||
setns \
|
||||
setrlimit \
|
||||
symlink \
|
||||
sysctlbyname \
|
||||
unshare \
|
||||
])
|
||||
AC_CHECK_FUNCS_ONCE([cfmakeraw fallocate geteuid getgid getgrnam_r \
|
||||
getmntent_r getpwuid_r getrlimit getuid if_indextoname kill mmap \
|
||||
newlocale posix_fallocate posix_memalign prlimit regexec \
|
||||
sched_getaffinity setgroups setns setrlimit symlink sysctlbyname \
|
||||
getifaddrs sched_setscheduler unshare])
|
||||
|
||||
dnl Availability of various common headers (non-fatal if missing).
|
||||
AC_CHECK_HEADERS([\
|
||||
ifaddrs.h \
|
||||
libtasn1.h \
|
||||
linux/magic.h \
|
||||
mntent.h \
|
||||
net/ethernet.h \
|
||||
netinet/tcp.h \
|
||||
pwd.h \
|
||||
stdarg.h \
|
||||
syslog.h \
|
||||
sys/mount.h \
|
||||
sys/syscall.h \
|
||||
sys/sysctl.h \
|
||||
sys/ucred.h \
|
||||
sys/un.h \
|
||||
])
|
||||
AC_CHECK_HEADERS([pwd.h regex.h sys/un.h \
|
||||
sys/poll.h syslog.h mntent.h net/ethernet.h linux/magic.h \
|
||||
sys/un.h sys/syscall.h sys/sysctl.h netinet/tcp.h ifaddrs.h \
|
||||
libtasn1.h sys/ucred.h sys/mount.h stdarg.h])
|
||||
dnl Check whether endian provides handy macros.
|
||||
AC_CHECK_DECLS([htole64], [], [], [[#include <endian.h>]])
|
||||
AC_CHECK_FUNCS([stat stat64 __xstat __xstat64 lstat lstat64 __lxstat __lxstat64])
|
||||
@@ -596,7 +564,6 @@ LIBVIRT_STORAGE_ARG_DIR
|
||||
LIBVIRT_STORAGE_ARG_FS
|
||||
LIBVIRT_STORAGE_ARG_LVM
|
||||
LIBVIRT_STORAGE_ARG_ISCSI
|
||||
LIBVIRT_STORAGE_ARG_ISCSI_DIRECT
|
||||
LIBVIRT_STORAGE_ARG_SCSI
|
||||
LIBVIRT_STORAGE_ARG_MPATH
|
||||
LIBVIRT_STORAGE_ARG_DISK
|
||||
@@ -611,7 +578,6 @@ if test "$with_libvirtd" = "no"; then
|
||||
with_storage_fs=no
|
||||
with_storage_lvm=no
|
||||
with_storage_iscsi=no
|
||||
with_storage_iscsi_direct=no
|
||||
with_storage_scsi=no
|
||||
with_storage_mpath=no
|
||||
with_storage_disk=no
|
||||
@@ -632,7 +598,6 @@ LIBVIRT_STORAGE_CHECK_DIR
|
||||
LIBVIRT_STORAGE_CHECK_FS
|
||||
LIBVIRT_STORAGE_CHECK_LVM
|
||||
LIBVIRT_STORAGE_CHECK_ISCSI
|
||||
LIBVIRT_STORAGE_CHECK_ISCSI_DIRECT
|
||||
LIBVIRT_STORAGE_CHECK_SCSI
|
||||
LIBVIRT_STORAGE_CHECK_MPATH
|
||||
LIBVIRT_STORAGE_CHECK_DISK
|
||||
@@ -643,7 +608,7 @@ LIBVIRT_STORAGE_CHECK_ZFS
|
||||
LIBVIRT_STORAGE_CHECK_VSTORAGE
|
||||
|
||||
with_storage=no
|
||||
for backend in dir fs lvm iscsi iscsi_direct scsi mpath rbd disk; do
|
||||
for backend in dir fs lvm iscsi scsi mpath rbd disk; do
|
||||
if eval test \$with_storage_$backend = yes; then
|
||||
with_storage=yes
|
||||
break
|
||||
@@ -971,7 +936,6 @@ LIBVIRT_STORAGE_RESULT_DIR
|
||||
LIBVIRT_STORAGE_RESULT_FS
|
||||
LIBVIRT_STORAGE_RESULT_LVM
|
||||
LIBVIRT_STORAGE_RESULT_ISCSI
|
||||
LIBVIRT_STORAGE_RESULT_ISCSI_DIRECT
|
||||
LIBVIRT_STORAGE_RESULT_SCSI
|
||||
LIBVIRT_STORAGE_RESULT_MPATH
|
||||
LIBVIRT_STORAGE_RESULT_DISK
|
||||
@@ -1008,7 +972,7 @@ LIBVIRT_RESULT_FUSE
|
||||
LIBVIRT_RESULT_GLUSTER
|
||||
LIBVIRT_RESULT_GNUTLS
|
||||
LIBVIRT_RESULT_HAL
|
||||
LIBVIRT_RESULT_LIBISCSI
|
||||
LIBVIRT_RESULT_JANSSON
|
||||
LIBVIRT_RESULT_LIBNL
|
||||
LIBVIRT_RESULT_LIBPCAP
|
||||
LIBVIRT_RESULT_LIBSSH
|
||||
|
@@ -132,6 +132,8 @@ dot_php_in = $(notdir $(wildcard $(srcdir)/*.php.in))
|
||||
dot_php_code_in = $(dot_php_in:%.php.in=%.php.code.in)
|
||||
dot_php = $(dot_php_in:%.php.in=%.php)
|
||||
|
||||
patches = $(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/api_extension/*.patch))
|
||||
|
||||
xml = \
|
||||
libvirt-api.xml \
|
||||
libvirt-refs.xml
|
||||
@@ -175,7 +177,7 @@ EXTRA_DIST= \
|
||||
$(dot_html) $(dot_html_in) $(gif) $(apihtml) $(apipng) \
|
||||
$(devhelphtml) $(devhelppng) $(devhelpcss) $(devhelpxsl) \
|
||||
$(xml) $(qemu_xml) $(lxc_xml) $(admin_xml) $(fig) $(png) $(css) \
|
||||
$(logofiles) $(dot_php_in) $(dot_php_code_in) $(dot_php)\
|
||||
$(logofiles) $(patches) $(dot_php_in) $(dot_php_code_in) $(dot_php)\
|
||||
$(internals_html_in) $(internals_html) $(fonts) \
|
||||
aclperms.htmlinc \
|
||||
hvsupport.pl \
|
||||
|
@@ -287,123 +287,6 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2><a id="connect_driver">Hypervisor Driver connect_driver</a></h2>
|
||||
<p>
|
||||
The <code>connect_driver</code> parameter describes the
|
||||
client's <a href="remote.html">remote Connection Driver</a>
|
||||
name based on the <a href="uri.html">URI</a> used for the
|
||||
connection.
|
||||
</p>
|
||||
<p>
|
||||
<span class="since">Since 4.1.0</span>, when calling an API
|
||||
outside the scope of the primary connection driver, the
|
||||
primary driver will attempt to open a secondary connection
|
||||
to the specific API driver in order to process the API. For
|
||||
example, when hypervisor domain processing needs to make an
|
||||
API call within the storage driver or the network filter driver
|
||||
an attempt to open a connection to the "storage" or "nwfilter"
|
||||
driver will be made. Similarly, a "storage" primary connection
|
||||
may need to create a connection to the "secret" driver in order
|
||||
to process secrets for the API. If successful, then calls to
|
||||
those API's will occur in the <code>connect_driver</code> context
|
||||
of the secondary connection driver rather than in the context of
|
||||
the primary driver. This affects the <code>connect_driver</code>
|
||||
returned from rule generation from the <code>action.loookup</code>
|
||||
function. The following table provides a list of the various
|
||||
connection drivers and the <code>connect_driver</code> name
|
||||
used by each regardless of primary or secondary connection.
|
||||
The access denied error message from libvirt will list the
|
||||
connection driver by name that denied the access.
|
||||
</p>
|
||||
|
||||
<h3><a id="object_connect_driver">Connection Driver Name</a></h3>
|
||||
<table class="acl">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Connection Driver</th>
|
||||
<th><code>connect_driver</code> name</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>bhyve</td>
|
||||
<td>bhyve</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>esx</td>
|
||||
<td>ESX</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>hyperv</td>
|
||||
<td>Hyper-V</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>interface</td>
|
||||
<td>interface</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>libxl</td>
|
||||
<td>xenlight</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>lxc</td>
|
||||
<td>LXC</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>network</td>
|
||||
<td>network</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>nodedev</td>
|
||||
<td>nodedev</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>nwfilter</td>
|
||||
<td>NWFilter</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>openvz</td>
|
||||
<td>OPENVZ</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>phyp</td>
|
||||
<td>PHYP</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>qemu</td>
|
||||
<td>QEMU</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>secret</td>
|
||||
<td>secret</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>storage</td>
|
||||
<td>storage</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>uml</td>
|
||||
<td>UML</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>vbox</td>
|
||||
<td>VBOX</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>vmware</td>
|
||||
<td>VMWARE</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>vz</td>
|
||||
<td>vz</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>xenapi</td>
|
||||
<td>XenAPI</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<h2><a id="user">User identity attributes</a></h2>
|
||||
|
||||
|
@@ -8,9 +8,14 @@
|
||||
|
||||
<p>
|
||||
This document walks you through the process of implementing a new
|
||||
API in libvirt. Remember that new API consists of any new public
|
||||
functions, as well as the addition of flags or extensions of XML used by
|
||||
existing functions.
|
||||
API in libvirt. It uses as an example the addition of an API for
|
||||
separating maximum from current vcpu usage of a domain, over
|
||||
the course of a fifteen-patch series.
|
||||
Remember that new API consists of any new public functions, as
|
||||
well as the addition of flags or extensions of XML used by
|
||||
existing functions. The example in this document adds both new
|
||||
functions and an XML extension. Not all libvirt API additions
|
||||
require quite as many patches.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -22,7 +27,12 @@
|
||||
added to libvirt. Someone may already be working on the feature you
|
||||
want. Also, recognize that everything you write is likely to undergo
|
||||
significant rework as you discuss it with the other developers, so
|
||||
don't wait too long before getting feedback.
|
||||
don't wait too long before getting feedback. In the vcpu example
|
||||
below, list feedback was first requested
|
||||
<a href="https://www.redhat.com/archives/libvir-list/2010-September/msg00423.html">here</a>
|
||||
and resulted in several rounds of improvements before coding
|
||||
began. In turn, this example is slightly rearranged from the actual
|
||||
order of the commits.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -71,12 +81,14 @@
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Submit new code in the form of one patch per step. That's not to say
|
||||
submit patches before you have working functionality--get the whole thing
|
||||
working and make sure you're happy with it. Then use git to break the
|
||||
changes into pieces so you don't drop a big blob of code on the
|
||||
mailing list in one go. Also, you should follow the upstream tree, and
|
||||
rebase your series to adapt your patches to work with any other changes
|
||||
Submit new code in the form shown in the example code: one patch
|
||||
per step. That's not to say submit patches before you have working
|
||||
functionality--get the whole thing working and make sure you're happy
|
||||
with it. Then use git or some other version control system that lets
|
||||
you rewrite your commit history and break patches into pieces so you
|
||||
don't drop a big blob of code on the mailing list in one go.
|
||||
Also, you should follow the upstream tree, and rebase your
|
||||
series to adapt your patches to work with any other changes
|
||||
that were accepted upstream during your development.
|
||||
</p>
|
||||
|
||||
@@ -89,6 +101,8 @@
|
||||
separately.
|
||||
</p>
|
||||
|
||||
<p>With that said, let's begin.</p>
|
||||
|
||||
<h2><a name='publicapi'>Defining the public API</a></h2>
|
||||
|
||||
<p>The first task is to define the public API. If the new API
|
||||
@@ -96,7 +110,7 @@
|
||||
schema and document the new elements or attributes:</p>
|
||||
|
||||
<p><code>
|
||||
docs/schemas/domaincommon.rng<br/>
|
||||
docs/schemas/domain.rng<br/>
|
||||
docs/formatdomain.html.in
|
||||
</code></p>
|
||||
|
||||
@@ -106,7 +120,7 @@
|
||||
libvirt library and call the new function:</p>
|
||||
|
||||
<p><code>
|
||||
include/libvirt/libvirt-$MODULE.h.in
|
||||
include/libvirt/libvirt.h.in
|
||||
src/libvirt_public.syms
|
||||
</code></p>
|
||||
|
||||
@@ -119,6 +133,10 @@
|
||||
rework it as you go through the process of implementing it.
|
||||
</p>
|
||||
|
||||
<p class="example">See <a href="api_extension/0001-add-to-xml.patch">0001-add-to-xml.patch</a>
|
||||
and <a href="api_extension/0002-add-new-public-API.patch">0002-add-new-public-API.patch</a>
|
||||
for example code.</p>
|
||||
|
||||
<h2><a name='internalapi'>Defining the internal API</a></h2>
|
||||
|
||||
<p>
|
||||
@@ -137,7 +155,7 @@
|
||||
|
||||
<p>The driver structs are defined in:</p>
|
||||
|
||||
<p><code>src/driver-$MODULE.h</code></p>
|
||||
<p><code>src/driver.h</code></p>
|
||||
|
||||
<p>
|
||||
To define the internal API, first typedef the driver function
|
||||
@@ -146,6 +164,8 @@
|
||||
provide a <code>NULL</code> stub for the new function.
|
||||
</p>
|
||||
|
||||
<p class="example">See <a href="api_extension/0003-define-internal-driver-API.patch">0003-define-internal-driver-API.patch</a></p>
|
||||
|
||||
<h2><a name='implpublic'>Implementing the public API</a></h2>
|
||||
|
||||
<p>
|
||||
@@ -177,16 +197,22 @@
|
||||
|
||||
<p>The public API calls are implemented in:</p>
|
||||
|
||||
<p><code>src/libvirt-$MODULE.c</code></p>
|
||||
<p><code>src/libvirt.c</code></p>
|
||||
|
||||
<p class="example">See <a href="api_extension/0004-implement-the-public-APIs.patch">0004-implement-the-public-APIs.patch</a></p>
|
||||
|
||||
<h2><a name='remoteproto'>Implementing the remote protocol</a></h2>
|
||||
|
||||
<p>
|
||||
Implementing the remote protocol is essentially a
|
||||
straightforward exercise which is probably most easily
|
||||
understood by referring to the existing code.
|
||||
understood by referring to the existing code and the example
|
||||
patch. It involves several related changes, including the
|
||||
regeneration of derived files, with further details below.
|
||||
</p>
|
||||
|
||||
<p class="example">See <a href="api_extension/0005-implement-the-remote-protocol.patch">0005-implement-the-remote-protocol.patch</a></p>
|
||||
|
||||
<h3><a name='wireproto'>Defining the wire protocol format</a></h3>
|
||||
|
||||
<p>
|
||||
@@ -219,9 +245,9 @@
|
||||
</p>
|
||||
|
||||
<p><code>
|
||||
src/remote/remote_daemon_dispatch_stubs.h
|
||||
src/remote/remote_daemon_dispatch.h
|
||||
src/remote/remote_daemon_dispatch.c
|
||||
daemon/remote_dispatch_args.h
|
||||
daemon/remote_dispatch_prototypes.h
|
||||
daemon/remote_dispatch_table.h
|
||||
src/remote/remote_protocol.c
|
||||
src/remote/remote_protocol.h
|
||||
</code></p>
|
||||
@@ -233,7 +259,7 @@
|
||||
method calls go in:
|
||||
</p>
|
||||
|
||||
<p><code>src/remote/remote_driver.c</code></p>
|
||||
<p><code>src/remote/remote_internal.c</code></p>
|
||||
|
||||
<p>Each remote method invocation does the following:</p>
|
||||
|
||||
@@ -256,7 +282,7 @@
|
||||
The server side dispatchers are implemented in:
|
||||
</p>
|
||||
|
||||
<p><code>src/remote/daemon_dispatch.c</code></p>
|
||||
<p><code>daemon/remote.c</code></p>
|
||||
|
||||
<p>Again, this step uses the .h files generated by make rpcgen.</p>
|
||||
|
||||
@@ -272,6 +298,8 @@
|
||||
existing lines probably imply a backwards-incompatible API change.
|
||||
</p>
|
||||
|
||||
<p class="example">See <a href="api_extension/0005-implement-the-remote-protocol.patch">0005-implement-the-remote-protocol.patch</a></p>
|
||||
|
||||
<h2><a id="internaluseapi">Use the new API internally</a></h2>
|
||||
|
||||
<p>
|
||||
@@ -284,6 +312,8 @@
|
||||
not necessary if the new API has no relation to existing API.
|
||||
</p>
|
||||
|
||||
<p class="example">See <a href="api_extension/0006-make-old-API-trivially-wrap-to-new-API.patch">0006-make-old-API-trivially-wrap-to-new-API.patch</a></p>
|
||||
|
||||
<h2><a id="virshuseapi">Expose the new API in virsh</a></h2>
|
||||
|
||||
<p>
|
||||
@@ -309,10 +339,12 @@
|
||||
</p>
|
||||
|
||||
<p><code>
|
||||
tools/virsh-$MODULE.c<br/>
|
||||
tools/virsh.c<br/>
|
||||
tools/virsh.pod
|
||||
</code></p>
|
||||
|
||||
<p class="example">See <a href="api_extension/0007-add-virsh-support.patch">0007-add-virsh-support.patch</a></p>
|
||||
|
||||
<h2><a id="driverimpl">Implement the driver methods</a></h2>
|
||||
|
||||
<p>
|
||||
@@ -339,6 +371,8 @@
|
||||
the same way as the older API wrappers.
|
||||
</p>
|
||||
|
||||
<p class="example">See <a href="api_extension/0008-support-new-xml.patch">0008-support-new-xml.patch</a></p>
|
||||
|
||||
<h3><a id="drivercode">Implement driver handling</a></h3>
|
||||
|
||||
<p>
|
||||
@@ -350,14 +384,41 @@
|
||||
</p>
|
||||
|
||||
<p>
|
||||
It is always a good idea to patch the test driver in addition to the
|
||||
target driver, to prove that the API can be used for more than one
|
||||
driver.
|
||||
In the example patches, three separate drivers are supported:
|
||||
test, qemu, and xen. It is always a good idea to patch the test
|
||||
driver in addition to the target driver, to prove that the API
|
||||
can be used for more than one driver. The example updates the
|
||||
test driver in one patch:
|
||||
</p>
|
||||
|
||||
<p class="example">See <a href="api_extension/0009-support-all-flags-in-test-driver.patch">0009-support-all-flags-in-test-driver.patch</a></p>
|
||||
|
||||
<p>
|
||||
Any cleanups resulting from the changes should be added as separate
|
||||
patches at the end of the series.
|
||||
The qemu changes were easier to split into two phases, one for
|
||||
updating the mapping between the new XML and the hypervisor
|
||||
command line arguments, and one for supporting all possible
|
||||
flags of the new API:
|
||||
</p>
|
||||
|
||||
<p class="example">See <a href="api_extension/0010-improve-vcpu-support-in-qemu-command-line.patch">0010-improve-vcpu-support-in-qemu-command-line.patch</a>
|
||||
and <a href="api_extension/0011-complete-vcpu-support-in-qemu-driver.patch">0011-complete-vcpu-support-in-qemu-driver.patch</a></p>
|
||||
|
||||
<p>
|
||||
Finally, the example breaks the xen driver changes across four
|
||||
patches. One maps the XML changes to the hypervisor command,
|
||||
the next two are independently implementing the getter and
|
||||
setter APIs, and the last one provides cleanup of code that was
|
||||
rendered dead by the new API.
|
||||
</p>
|
||||
|
||||
<p class="example">See <a href="api_extension/0012-improve-vcpu-support-in-xen-command-line.patch">0012-improve-vcpu-support-in-xen-command-line.patch</a>,
|
||||
<a href="api_extension/0013-improve-getting-xen-vcpu-counts.patch">0013-improve-getting-xen-vcpu-counts.patch</a>,
|
||||
<a href="api_extension/0014-improve-setting-xen-vcpu-counts.patch">0014-improve-setting-xen-vcpu-counts.patch</a>,
|
||||
and <a href="api_extension/0015-remove-dead-xen-code.patch">0015-remove-dead-xen-code.patch</a></p>
|
||||
|
||||
<p>
|
||||
The exact details of the example code are probably uninteresting
|
||||
unless you're concerned with virtual cpu management.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
145
docs/api_extension/0001-add-to-xml.patch
Normal file
145
docs/api_extension/0001-add-to-xml.patch
Normal file
@@ -0,0 +1,145 @@
|
||||
From a74f4e44649906dcd82151f7ef837f66d7fa2ab1 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Blake <eblake@redhat.com>
|
||||
Date: Mon, 27 Sep 2010 17:36:06 -0600
|
||||
Subject: [PATCH 01/15] vcpu: add current attribute to <vcpu> element
|
||||
|
||||
Syntax agreed on in
|
||||
https://www.redhat.com/archives/libvir-list/2010-September/msg00476.html
|
||||
|
||||
<domain ...>
|
||||
<vcpu current='x'>y</vcpu>
|
||||
...
|
||||
|
||||
can now be used to specify 1 <= x <= y current vcpus, in relation
|
||||
to the boot-time max of y vcpus. If current is omitted, then
|
||||
current and max are assumed to be the same value.
|
||||
|
||||
* docs/schemas/domain.rng: Add new attribute.
|
||||
* docs/formatdomain.html.in: Document it.
|
||||
* tests/qemuxml2argvdata/qemuxml2argv-smp.xml: Add to
|
||||
domainschematest.
|
||||
* tests/xml2sexprdata/xml2sexpr-pv-vcpus.xml: Likewise.
|
||||
---
|
||||
docs/formatdomain.html.in | 9 +++++--
|
||||
docs/schemas/domain.rng | 5 ++++
|
||||
tests/qemuxml2argvdata/qemuxml2argv-smp.xml | 28 +++++++++++++++++++++++++++
|
||||
tests/xml2sexprdata/xml2sexpr-pv-vcpus.xml | 22 +++++++++++++++++++++
|
||||
4 files changed, 61 insertions(+), 3 deletions(-)
|
||||
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-smp.xml
|
||||
create mode 100644 tests/xml2sexprdata/xml2sexpr-pv-vcpus.xml
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index a8a1fac..96de121 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -200,7 +200,7 @@
|
||||
<swap_hard_limit>2097152</swap_hard_limit>
|
||||
<min_guarantee>65536</min_guarantee>
|
||||
</memtune>
|
||||
- <vcpu cpuset="1-4,^3,6">2</vcpu>
|
||||
+ <vcpu cpuset="1-4,^3,6" current="1">2</vcpu>
|
||||
...</pre>
|
||||
|
||||
<dl>
|
||||
@@ -238,7 +238,7 @@
|
||||
minimum memory allocation for the guest. The units for this value are
|
||||
kilobytes (i.e. blocks of 1024 bytes)</dd>
|
||||
<dt><code>vcpu</code></dt>
|
||||
- <dd>The content of this element defines the number of virtual
|
||||
+ <dd>The content of this element defines the maximum number of virtual
|
||||
CPUs allocated for the guest OS, which must be between 1 and
|
||||
the maximum supported by the hypervisor. <span class="since">Since
|
||||
0.4.4</span>, this element can contain an optional
|
||||
@@ -246,7 +246,10 @@
|
||||
list of physical CPU numbers that virtual CPUs can be pinned
|
||||
to. Each element in that list is either a single CPU number,
|
||||
a range of CPU numbers, or a caret followed by a CPU number to
|
||||
- be excluded from a previous range.
|
||||
+ be excluded from a previous range. <span class="since">Since
|
||||
+ 0.8.5</span>, the optional attribute <code>current</code> can
|
||||
+ be used to specify whether fewer than the maximum number of
|
||||
+ virtual CPUs should be enabled.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng
|
||||
index f230263..a934a77 100644
|
||||
--- a/docs/schemas/domain.rng
|
||||
+++ b/docs/schemas/domain.rng
|
||||
@@ -337,6 +337,11 @@
|
||||
<ref name="cpuset"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <attribute name="current">
|
||||
+ <ref name="countCPU"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
<ref name="countCPU"/>
|
||||
</element>
|
||||
</optional>
|
||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smp.xml b/tests/qemuxml2argvdata/qemuxml2argv-smp.xml
|
||||
new file mode 100644
|
||||
index 0000000..975f873
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-smp.xml
|
||||
@@ -0,0 +1,28 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory>219200</memory>
|
||||
+ <currentMemory>219200</currentMemory>
|
||||
+ <vcpu current='1'>2</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='i686' machine='pc'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <cpu>
|
||||
+ <topology sockets='2' cores='1' threads='1'/>
|
||||
+ </cpu>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu</emulator>
|
||||
+ <disk type='block' device='disk'>
|
||||
+ <source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
+ <target dev='hda' bus='ide'/>
|
||||
+ <address type='drive' controller='0' bus='0' unit='0'/>
|
||||
+ </disk>
|
||||
+ <controller type='ide' index='0'/>
|
||||
+ <memballoon model='virtio'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/xml2sexprdata/xml2sexpr-pv-vcpus.xml b/tests/xml2sexprdata/xml2sexpr-pv-vcpus.xml
|
||||
new file mode 100644
|
||||
index 0000000..d061e11
|
||||
--- /dev/null
|
||||
+++ b/tests/xml2sexprdata/xml2sexpr-pv-vcpus.xml
|
||||
@@ -0,0 +1,22 @@
|
||||
+<domain type='xen' id='15'>
|
||||
+ <name>pvtest</name>
|
||||
+ <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid>
|
||||
+ <os>
|
||||
+ <type>linux</type>
|
||||
+ <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel>
|
||||
+ <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd>
|
||||
+ <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os </cmdline>
|
||||
+ </os>
|
||||
+ <memory>430080</memory>
|
||||
+ <vcpu current='2'>4</vcpu>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>destroy</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <disk type='file' device='disk'>
|
||||
+ <source file='/root/some.img'/>
|
||||
+ <target dev='xvda'/>
|
||||
+ </disk>
|
||||
+ <console tty='/dev/pts/4'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
--
|
||||
1.7.2.3
|
||||
|
62
docs/api_extension/0002-add-new-public-API.patch
Normal file
62
docs/api_extension/0002-add-new-public-API.patch
Normal file
@@ -0,0 +1,62 @@
|
||||
From ea3f5c68093429c6ad507b45689cdf209c2c257b Mon Sep 17 00:00:00 2001
|
||||
From: Eric Blake <eblake@redhat.com>
|
||||
Date: Fri, 24 Sep 2010 16:48:45 -0600
|
||||
Subject: [PATCH 02/15] vcpu: add new public API
|
||||
|
||||
API agreed on in
|
||||
https://www.redhat.com/archives/libvir-list/2010-September/msg00456.html,
|
||||
but modified for enum names to be consistent with virDomainDeviceModifyFlags.
|
||||
|
||||
* include/libvirt/libvirt.h.in (virDomainVcpuFlags)
|
||||
(virDomainSetVcpusFlags, virDomainGetVcpusFlags): New
|
||||
declarations.
|
||||
* src/libvirt_public.syms: Export new symbols.
|
||||
---
|
||||
include/libvirt/libvirt.h.in | 15 +++++++++++++++
|
||||
src/libvirt_public.syms | 2 ++
|
||||
2 files changed, 17 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
|
||||
index 2eba61e..d0cc4c0 100644
|
||||
--- a/include/libvirt/libvirt.h.in
|
||||
+++ b/include/libvirt/libvirt.h.in
|
||||
@@ -915,8 +915,23 @@ struct _virVcpuInfo {
|
||||
};
|
||||
typedef virVcpuInfo *virVcpuInfoPtr;
|
||||
|
||||
+/* Flags for controlling virtual CPU hot-plugging. */
|
||||
+typedef enum {
|
||||
+ /* Must choose at least one of these two bits; SetVcpus can choose both */
|
||||
+ VIR_DOMAIN_VCPU_LIVE = (1 << 0), /* Affect active domain */
|
||||
+ VIR_DOMAIN_VCPU_CONFIG = (1 << 1), /* Affect next boot */
|
||||
+
|
||||
+ /* Additional flags to be bit-wise OR'd in */
|
||||
+ VIR_DOMAIN_VCPU_MAXIMUM = (1 << 2), /* Max rather than current count */
|
||||
+} virDomainVcpuFlags;
|
||||
+
|
||||
int virDomainSetVcpus (virDomainPtr domain,
|
||||
unsigned int nvcpus);
|
||||
+int virDomainSetVcpusFlags (virDomainPtr domain,
|
||||
+ unsigned int nvcpus,
|
||||
+ unsigned int flags);
|
||||
+int virDomainGetVcpusFlags (virDomainPtr domain,
|
||||
+ unsigned int flags);
|
||||
|
||||
int virDomainPinVcpu (virDomainPtr domain,
|
||||
unsigned int vcpu,
|
||||
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
|
||||
index fceb516..a8091b1 100644
|
||||
--- a/src/libvirt_public.syms
|
||||
+++ b/src/libvirt_public.syms
|
||||
@@ -409,6 +409,8 @@ LIBVIRT_0.8.5 {
|
||||
global:
|
||||
virDomainSetMemoryParameters;
|
||||
virDomainGetMemoryParameters;
|
||||
+ virDomainGetVcpusFlags;
|
||||
+ virDomainSetVcpusFlags;
|
||||
} LIBVIRT_0.8.2;
|
||||
|
||||
# .... define new API here using predicted next version number ....
|
||||
--
|
||||
1.7.2.3
|
||||
|
222
docs/api_extension/0003-define-internal-driver-API.patch
Normal file
222
docs/api_extension/0003-define-internal-driver-API.patch
Normal file
@@ -0,0 +1,222 @@
|
||||
From dd255d64053e9960cd375994ce8f056522e12acc Mon Sep 17 00:00:00 2001
|
||||
From: Eric Blake <eblake@redhat.com>
|
||||
Date: Mon, 27 Sep 2010 09:18:22 -0600
|
||||
Subject: [PATCH 03/15] vcpu: define internal driver API
|
||||
|
||||
* src/driver.h (virDrvDomainSetVcpusFlags)
|
||||
(virDrvDomainGetVcpusFlags): New typedefs.
|
||||
(_virDriver): New callback members.
|
||||
* src/esx/esx_driver.c (esxDriver): Add stub for driver.
|
||||
* src/lxc/lxc_driver.c (lxcDriver): Likewise.
|
||||
* src/opennebula/one_driver.c (oneDriver): Likewise.
|
||||
* src/openvz/openvz_driver.c (openvzDriver): Likewise.
|
||||
* src/phyp/phyp_driver.c (phypDriver): Likewise.
|
||||
* src/qemu/qemu_driver.c (qemuDriver): Likewise.
|
||||
* src/remote/remote_driver.c (remote_driver): Likewise.
|
||||
* src/test/test_driver.c (testDriver): Likewise.
|
||||
* src/uml/uml_driver.c (umlDriver): Likewise.
|
||||
* src/vbox/vbox_tmpl.c (Driver): Likewise.
|
||||
* src/xen/xen_driver.c (xenUnifiedDriver): Likewise.
|
||||
* src/xenapi/xenapi_driver.c (xenapiDriver): Likewise.
|
||||
---
|
||||
src/driver.h | 9 +++++++++
|
||||
src/esx/esx_driver.c | 2 ++
|
||||
src/lxc/lxc_driver.c | 2 ++
|
||||
src/opennebula/one_driver.c | 2 ++
|
||||
src/openvz/openvz_driver.c | 2 ++
|
||||
src/phyp/phyp_driver.c | 2 ++
|
||||
src/qemu/qemu_driver.c | 2 ++
|
||||
src/remote/remote_driver.c | 2 ++
|
||||
src/test/test_driver.c | 2 ++
|
||||
src/uml/uml_driver.c | 2 ++
|
||||
src/vbox/vbox_tmpl.c | 2 ++
|
||||
src/xen/xen_driver.c | 2 ++
|
||||
src/xenapi/xenapi_driver.c | 2 ++
|
||||
13 files changed, 33 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/src/driver.h b/src/driver.h
|
||||
index 32aeb04..79a96c1 100644
|
||||
--- a/src/driver.h
|
||||
+++ b/src/driver.h
|
||||
@@ -185,6 +185,13 @@ typedef int
|
||||
(*virDrvDomainSetVcpus) (virDomainPtr domain,
|
||||
unsigned int nvcpus);
|
||||
typedef int
|
||||
+ (*virDrvDomainSetVcpusFlags) (virDomainPtr domain,
|
||||
+ unsigned int nvcpus,
|
||||
+ unsigned int flags);
|
||||
+typedef int
|
||||
+ (*virDrvDomainGetVcpusFlags) (virDomainPtr domain,
|
||||
+ unsigned int flags);
|
||||
+typedef int
|
||||
(*virDrvDomainPinVcpu) (virDomainPtr domain,
|
||||
unsigned int vcpu,
|
||||
unsigned char *cpumap,
|
||||
@@ -520,6 +527,8 @@ struct _virDriver {
|
||||
virDrvDomainRestore domainRestore;
|
||||
virDrvDomainCoreDump domainCoreDump;
|
||||
virDrvDomainSetVcpus domainSetVcpus;
|
||||
+ virDrvDomainSetVcpusFlags domainSetVcpusFlags;
|
||||
+ virDrvDomainGetVcpusFlags domainGetVcpusFlags;
|
||||
virDrvDomainPinVcpu domainPinVcpu;
|
||||
virDrvDomainGetVcpus domainGetVcpus;
|
||||
virDrvDomainGetMaxVcpus domainGetMaxVcpus;
|
||||
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
|
||||
index 1b4ee29..2a32374 100644
|
||||
--- a/src/esx/esx_driver.c
|
||||
+++ b/src/esx/esx_driver.c
|
||||
@@ -4160,6 +4160,8 @@ static virDriver esxDriver = {
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
esxDomainSetVcpus, /* domainSetVcpus */
|
||||
+ NULL, /* domainSetVcpusFlags */
|
||||
+ NULL, /* domainGetVcpusFlags */
|
||||
NULL, /* domainPinVcpu */
|
||||
NULL, /* domainGetVcpus */
|
||||
esxDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
|
||||
index df814da..7563a8c 100644
|
||||
--- a/src/lxc/lxc_driver.c
|
||||
+++ b/src/lxc/lxc_driver.c
|
||||
@@ -2768,6 +2768,8 @@ static virDriver lxcDriver = {
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
NULL, /* domainSetVcpus */
|
||||
+ NULL, /* domainSetVcpusFlags */
|
||||
+ NULL, /* domainGetVcpusFlags */
|
||||
NULL, /* domainPinVcpu */
|
||||
NULL, /* domainGetVcpus */
|
||||
NULL, /* domainGetMaxVcpus */
|
||||
diff --git a/src/opennebula/one_driver.c b/src/opennebula/one_driver.c
|
||||
index ced9a38..199fca3 100644
|
||||
--- a/src/opennebula/one_driver.c
|
||||
+++ b/src/opennebula/one_driver.c
|
||||
@@ -751,6 +751,8 @@ static virDriver oneDriver = {
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
NULL, /* domainSetVcpus */
|
||||
+ NULL, /* domainSetVcpusFlags */
|
||||
+ NULL, /* domainGetVcpusFlags */
|
||||
NULL, /* domainPinVcpu */
|
||||
NULL, /* domainGetVcpus */
|
||||
NULL, /* domainGetMaxVcpus */
|
||||
diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
|
||||
index 92cf4a1..9d19aeb 100644
|
||||
--- a/src/openvz/openvz_driver.c
|
||||
+++ b/src/openvz/openvz_driver.c
|
||||
@@ -1590,6 +1590,8 @@ static virDriver openvzDriver = {
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
openvzDomainSetVcpus, /* domainSetVcpus */
|
||||
+ NULL, /* domainSetVcpusFlags */
|
||||
+ NULL, /* domainGetVcpusFlags */
|
||||
NULL, /* domainPinVcpu */
|
||||
NULL, /* domainGetVcpus */
|
||||
openvzDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
|
||||
index e63d8d9..6e0a5e9 100644
|
||||
--- a/src/phyp/phyp_driver.c
|
||||
+++ b/src/phyp/phyp_driver.c
|
||||
@@ -3941,6 +3941,8 @@ static virDriver phypDriver = {
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
phypDomainSetCPU, /* domainSetVcpus */
|
||||
+ NULL, /* domainSetVcpusFlags */
|
||||
+ NULL, /* domainGetVcpusFlags */
|
||||
NULL, /* domainPinVcpu */
|
||||
NULL, /* domainGetVcpus */
|
||||
phypGetLparCPUMAX, /* domainGetMaxVcpus */
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index abd8e9d..3d17e04 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -12938,6 +12938,8 @@ static virDriver qemuDriver = {
|
||||
qemudDomainRestore, /* domainRestore */
|
||||
qemudDomainCoreDump, /* domainCoreDump */
|
||||
qemudDomainSetVcpus, /* domainSetVcpus */
|
||||
+ NULL, /* domainSetVcpusFlags */
|
||||
+ NULL, /* domainGetVcpusFlags */
|
||||
qemudDomainPinVcpu, /* domainPinVcpu */
|
||||
qemudDomainGetVcpus, /* domainGetVcpus */
|
||||
qemudDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
|
||||
index 0b10406..1a687ad 100644
|
||||
--- a/src/remote/remote_driver.c
|
||||
+++ b/src/remote/remote_driver.c
|
||||
@@ -10468,6 +10468,8 @@ static virDriver remote_driver = {
|
||||
remoteDomainRestore, /* domainRestore */
|
||||
remoteDomainCoreDump, /* domainCoreDump */
|
||||
remoteDomainSetVcpus, /* domainSetVcpus */
|
||||
+ NULL, /* domainSetVcpusFlags */
|
||||
+ NULL, /* domainGetVcpusFlags */
|
||||
remoteDomainPinVcpu, /* domainPinVcpu */
|
||||
remoteDomainGetVcpus, /* domainGetVcpus */
|
||||
remoteDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
|
||||
index 7d4d119..6a00558 100644
|
||||
--- a/src/test/test_driver.c
|
||||
+++ b/src/test/test_driver.c
|
||||
@@ -5260,6 +5260,8 @@ static virDriver testDriver = {
|
||||
testDomainRestore, /* domainRestore */
|
||||
testDomainCoreDump, /* domainCoreDump */
|
||||
testSetVcpus, /* domainSetVcpus */
|
||||
+ NULL, /* domainSetVcpusFlags */
|
||||
+ NULL, /* domainGetVcpusFlags */
|
||||
testDomainPinVcpu, /* domainPinVcpu */
|
||||
testDomainGetVcpus, /* domainGetVcpus */
|
||||
testDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c
|
||||
index 3dcd321..5161012 100644
|
||||
--- a/src/uml/uml_driver.c
|
||||
+++ b/src/uml/uml_driver.c
|
||||
@@ -2129,6 +2129,8 @@ static virDriver umlDriver = {
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
NULL, /* domainSetVcpus */
|
||||
+ NULL, /* domainSetVcpusFlags */
|
||||
+ NULL, /* domainGetVcpusFlags */
|
||||
NULL, /* domainPinVcpu */
|
||||
NULL, /* domainGetVcpus */
|
||||
NULL, /* domainGetMaxVcpus */
|
||||
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
|
||||
index 7e7d8e4..cb9193a 100644
|
||||
--- a/src/vbox/vbox_tmpl.c
|
||||
+++ b/src/vbox/vbox_tmpl.c
|
||||
@@ -8267,6 +8267,8 @@ virDriver NAME(Driver) = {
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
vboxDomainSetVcpus, /* domainSetVcpus */
|
||||
+ NULL, /* domainSetVcpusFlags */
|
||||
+ NULL, /* domainGetVcpusFlags */
|
||||
NULL, /* domainPinVcpu */
|
||||
NULL, /* domainGetVcpus */
|
||||
vboxDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
|
||||
index c2a4de3..7d67ced 100644
|
||||
--- a/src/xen/xen_driver.c
|
||||
+++ b/src/xen/xen_driver.c
|
||||
@@ -1951,6 +1951,8 @@ static virDriver xenUnifiedDriver = {
|
||||
xenUnifiedDomainRestore, /* domainRestore */
|
||||
xenUnifiedDomainCoreDump, /* domainCoreDump */
|
||||
xenUnifiedDomainSetVcpus, /* domainSetVcpus */
|
||||
+ NULL, /* domainSetVcpusFlags */
|
||||
+ NULL, /* domainGetVcpusFlags */
|
||||
xenUnifiedDomainPinVcpu, /* domainPinVcpu */
|
||||
xenUnifiedDomainGetVcpus, /* domainGetVcpus */
|
||||
xenUnifiedDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c
|
||||
index e62a139..753169c 100644
|
||||
--- a/src/xenapi/xenapi_driver.c
|
||||
+++ b/src/xenapi/xenapi_driver.c
|
||||
@@ -1754,6 +1754,8 @@ static virDriver xenapiDriver = {
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
xenapiDomainSetVcpus, /* domainSetVcpus */
|
||||
+ NULL, /* domainSetVcpusFlags */
|
||||
+ NULL, /* domainGetVcpusFlags */
|
||||
xenapiDomainPinVcpu, /* domainPinVcpu */
|
||||
xenapiDomainGetVcpus, /* domainGetVcpus */
|
||||
xenapiDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
--
|
||||
1.7.2.3
|
||||
|
188
docs/api_extension/0004-implement-the-public-APIs.patch
Normal file
188
docs/api_extension/0004-implement-the-public-APIs.patch
Normal file
@@ -0,0 +1,188 @@
|
||||
From 9d2c60799271d605f82dfd4bfa6ed7d14ad87e26 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Blake <eblake@redhat.com>
|
||||
Date: Mon, 27 Sep 2010 09:37:22 -0600
|
||||
Subject: [PATCH 04/15] vcpu: implement the public APIs
|
||||
|
||||
Factors common checks (such as nonzero vcpu count) up front, but
|
||||
drivers will still need to do additional flag checks.
|
||||
|
||||
* src/libvirt.c (virDomainSetVcpusFlags, virDomainGetVcpusFlags):
|
||||
New functions.
|
||||
(virDomainSetVcpus, virDomainGetMaxVcpus): Refer to new API.
|
||||
---
|
||||
src/libvirt.c | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
|
||||
1 files changed, 134 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/libvirt.c b/src/libvirt.c
|
||||
index 629d97b..1b39210 100644
|
||||
--- a/src/libvirt.c
|
||||
+++ b/src/libvirt.c
|
||||
@@ -5192,7 +5192,9 @@ error:
|
||||
* This function requires privileged access to the hypervisor.
|
||||
*
|
||||
* This command only changes the runtime configuration of the domain,
|
||||
- * so can only be called on an active domain.
|
||||
+ * so can only be called on an active domain. It is hypervisor-dependent
|
||||
+ * whether it also affects persistent configuration; for more control,
|
||||
+ * use virDomainSetVcpusFlags().
|
||||
*
|
||||
* Returns 0 in case of success, -1 in case of failure.
|
||||
*/
|
||||
@@ -5237,13 +5239,139 @@ error:
|
||||
}
|
||||
|
||||
/**
|
||||
+ * virDomainSetVcpusFlags:
|
||||
+ * @domain: pointer to domain object, or NULL for Domain0
|
||||
+ * @nvcpus: the new number of virtual CPUs for this domain, must be at least 1
|
||||
+ * @flags: an OR'ed set of virDomainVcpuFlags
|
||||
+ *
|
||||
+ * Dynamically change the number of virtual CPUs used by the domain.
|
||||
+ * Note that this call may fail if the underlying virtualization hypervisor
|
||||
+ * does not support it or if growing the number is arbitrary limited.
|
||||
+ * This function requires privileged access to the hypervisor.
|
||||
+ *
|
||||
+ * @flags must include VIR_DOMAIN_VCPU_LIVE to affect a running
|
||||
+ * domain (which may fail if domain is not active), or
|
||||
+ * VIR_DOMAIN_VCPU_CONFIG to affect the next boot via the XML
|
||||
+ * description of the domain. Both flags may be set.
|
||||
+ *
|
||||
+ * If @flags includes VIR_DOMAIN_VCPU_MAXIMUM, then
|
||||
+ * VIR_DOMAIN_VCPU_LIVE must be clear, and only the maximum virtual
|
||||
+ * CPU limit is altered; generally, this value must be less than or
|
||||
+ * equal to virConnectGetMaxVcpus(). Otherwise, this call affects the
|
||||
+ * current virtual CPU limit, which must be less than or equal to the
|
||||
+ * maximum limit.
|
||||
+ *
|
||||
+ * Returns 0 in case of success, -1 in case of failure.
|
||||
+ */
|
||||
+
|
||||
+int
|
||||
+virDomainSetVcpusFlags(virDomainPtr domain, unsigned int nvcpus,
|
||||
+ unsigned int flags)
|
||||
+{
|
||||
+ virConnectPtr conn;
|
||||
+ VIR_DEBUG("domain=%p, nvcpus=%u, flags=%u", domain, nvcpus, flags);
|
||||
+
|
||||
+ virResetLastError();
|
||||
+
|
||||
+ if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
|
||||
+ virLibDomainError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
||||
+ virDispatchError(NULL);
|
||||
+ return (-1);
|
||||
+ }
|
||||
+ if (domain->conn->flags & VIR_CONNECT_RO) {
|
||||
+ virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
|
||||
+ goto error;
|
||||
+ }
|
||||
+
|
||||
+ /* Perform some argument validation common to all implementations. */
|
||||
+ if (nvcpus < 1 || (unsigned short) nvcpus != nvcpus ||
|
||||
+ (flags & (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG)) == 0) {
|
||||
+ virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ conn = domain->conn;
|
||||
+
|
||||
+ if (conn->driver->domainSetVcpusFlags) {
|
||||
+ int ret;
|
||||
+ ret = conn->driver->domainSetVcpusFlags (domain, nvcpus, flags);
|
||||
+ if (ret < 0)
|
||||
+ goto error;
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
|
||||
+
|
||||
+error:
|
||||
+ virDispatchError(domain->conn);
|
||||
+ return -1;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * virDomainGetVcpusFlags:
|
||||
+ * @domain: pointer to domain object, or NULL for Domain0
|
||||
+ * @flags: an OR'ed set of virDomainVcpuFlags
|
||||
+ *
|
||||
+ * Query the number of virtual CPUs used by the domain. Note that
|
||||
+ * this call may fail if the underlying virtualization hypervisor does
|
||||
+ * not support it. This function requires privileged access to the
|
||||
+ * hypervisor.
|
||||
+ *
|
||||
+ * @flags must include either VIR_DOMAIN_VCPU_ACTIVE to query a
|
||||
+ * running domain (which will fail if domain is not active), or
|
||||
+ * VIR_DOMAIN_VCPU_PERSISTENT to query the XML description of the
|
||||
+ * domain. It is an error to set both flags.
|
||||
+ *
|
||||
+ * If @flags includes VIR_DOMAIN_VCPU_MAXIMUM, then the maximum
|
||||
+ * virtual CPU limit is queried. Otherwise, this call queries the
|
||||
+ * current virtual CPU limit.
|
||||
+ *
|
||||
+ * Returns 0 in case of success, -1 in case of failure.
|
||||
+ */
|
||||
+
|
||||
+int
|
||||
+virDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
|
||||
+{
|
||||
+ virConnectPtr conn;
|
||||
+ VIR_DEBUG("domain=%p, flags=%u", domain, flags);
|
||||
+
|
||||
+ virResetLastError();
|
||||
+
|
||||
+ if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
|
||||
+ virLibDomainError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
||||
+ virDispatchError(NULL);
|
||||
+ return (-1);
|
||||
+ }
|
||||
+
|
||||
+ /* Exactly one of these two flags should be set. */
|
||||
+ if (!(flags & VIR_DOMAIN_VCPU_LIVE) == !(flags & VIR_DOMAIN_VCPU_CONFIG)) {
|
||||
+ virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ conn = domain->conn;
|
||||
+
|
||||
+ if (conn->driver->domainGetVcpusFlags) {
|
||||
+ int ret;
|
||||
+ ret = conn->driver->domainGetVcpusFlags (domain, flags);
|
||||
+ if (ret < 0)
|
||||
+ goto error;
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
|
||||
+
|
||||
+error:
|
||||
+ virDispatchError(domain->conn);
|
||||
+ return -1;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
* virDomainPinVcpu:
|
||||
* @domain: pointer to domain object, or NULL for Domain0
|
||||
* @vcpu: virtual CPU number
|
||||
* @cpumap: pointer to a bit map of real CPUs (in 8-bit bytes) (IN)
|
||||
- * Each bit set to 1 means that corresponding CPU is usable.
|
||||
- * Bytes are stored in little-endian order: CPU0-7, 8-15...
|
||||
- * In each byte, lowest CPU number is least significant bit.
|
||||
+ * Each bit set to 1 means that corresponding CPU is usable.
|
||||
+ * Bytes are stored in little-endian order: CPU0-7, 8-15...
|
||||
+ * In each byte, lowest CPU number is least significant bit.
|
||||
* @maplen: number of bytes in cpumap, from 1 up to size of CPU map in
|
||||
* underlying virtualization system (Xen...).
|
||||
* If maplen < size, missing bytes are set to zero.
|
||||
@@ -5371,9 +5499,9 @@ error:
|
||||
*
|
||||
* Provides the maximum number of virtual CPUs supported for
|
||||
* the guest VM. If the guest is inactive, this is basically
|
||||
- * the same as virConnectGetMaxVcpus. If the guest is running
|
||||
+ * the same as virConnectGetMaxVcpus(). If the guest is running
|
||||
* this will reflect the maximum number of virtual CPUs the
|
||||
- * guest was booted with.
|
||||
+ * guest was booted with. For more details, see virDomainGetVcpusFlags().
|
||||
*
|
||||
* Returns the maximum of virtual CPU or -1 in case of error.
|
||||
*/
|
||||
--
|
||||
1.7.2.3
|
||||
|
421
docs/api_extension/0005-implement-the-remote-protocol.patch
Normal file
421
docs/api_extension/0005-implement-the-remote-protocol.patch
Normal file
@@ -0,0 +1,421 @@
|
||||
From eb826444f90c2563dadf148630b0cd6a9b41ba1e Mon Sep 17 00:00:00 2001
|
||||
From: Eric Blake <eblake@redhat.com>
|
||||
Date: Mon, 27 Sep 2010 10:10:06 -0600
|
||||
Subject: [PATCH 05/15] vcpu: implement the remote protocol
|
||||
|
||||
Done by editing the first three files, then running
|
||||
'make -C src rpcgen', then editing src/remote_protocol-structs
|
||||
to match.
|
||||
|
||||
* daemon/remote.c (remoteDispatchDomainSetVcpusFlags)
|
||||
(remoteDispatchDomainGetVcpusFlags): New functions.
|
||||
* src/remote/remote_driver.c (remoteDomainSetVcpusFlags)
|
||||
(remoteDomainGetVcpusFlags, remote_driver): Client side
|
||||
serialization.
|
||||
* src/remote/remote_protocol.x
|
||||
(remote_domain_set_vcpus_flags_args)
|
||||
(remote_domain_get_vcpus_flags_args)
|
||||
(remote_domain_get_vcpus_flags_ret)
|
||||
(REMOTE_PROC_DOMAIN_SET_VCPUS_FLAGS)
|
||||
(REMOTE_PROC_DOMAIN_GET_VCPUS_FLAGS): Define wire format.
|
||||
* daemon/remote_dispatch_args.h: Regenerate.
|
||||
* daemon/remote_dispatch_prototypes.h: Likewise.
|
||||
* daemon/remote_dispatch_table.h: Likewise.
|
||||
* src/remote/remote_protocol.c: Likewise.
|
||||
* src/remote/remote_protocol.h: Likewise.
|
||||
* src/remote_protocol-structs: Likewise.
|
||||
---
|
||||
daemon/remote.c | 53 ++++++++++++++++++++++++++++++++
|
||||
daemon/remote_dispatch_args.h | 2 +
|
||||
daemon/remote_dispatch_prototypes.h | 16 ++++++++++
|
||||
daemon/remote_dispatch_ret.h | 1 +
|
||||
daemon/remote_dispatch_table.h | 10 ++++++
|
||||
src/remote/remote_driver.c | 57 +++++++++++++++++++++++++++++++++-
|
||||
src/remote/remote_protocol.c | 33 ++++++++++++++++++++
|
||||
src/remote/remote_protocol.h | 26 ++++++++++++++++
|
||||
src/remote/remote_protocol.x | 19 +++++++++++-
|
||||
src/remote_protocol-structs | 12 +++++++
|
||||
10 files changed, 226 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/daemon/remote.c b/daemon/remote.c
|
||||
index 7a96e29..323f00c 100644
|
||||
--- a/daemon/remote.c
|
||||
+++ b/daemon/remote.c
|
||||
@@ -1751,6 +1751,33 @@ oom:
|
||||
}
|
||||
|
||||
static int
|
||||
+remoteDispatchDomainGetVcpusFlags (struct qemud_server *server ATTRIBUTE_UNUSED,
|
||||
+ struct qemud_client *client ATTRIBUTE_UNUSED,
|
||||
+ virConnectPtr conn,
|
||||
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
|
||||
+ remote_error *rerr,
|
||||
+ remote_domain_get_vcpus_flags_args *args,
|
||||
+ remote_domain_get_vcpus_flags_ret *ret)
|
||||
+{
|
||||
+ virDomainPtr dom;
|
||||
+
|
||||
+ dom = get_nonnull_domain (conn, args->dom);
|
||||
+ if (dom == NULL) {
|
||||
+ remoteDispatchConnError(rerr, conn);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ ret->num = virDomainGetVcpusFlags (dom, args->flags);
|
||||
+ if (ret->num == -1) {
|
||||
+ virDomainFree(dom);
|
||||
+ remoteDispatchConnError(rerr, conn);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ virDomainFree(dom);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
remoteDispatchDomainMigratePrepare (struct qemud_server *server ATTRIBUTE_UNUSED,
|
||||
struct qemud_client *client ATTRIBUTE_UNUSED,
|
||||
virConnectPtr conn,
|
||||
@@ -2568,6 +2595,32 @@ remoteDispatchDomainSetVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
|
||||
}
|
||||
|
||||
static int
|
||||
+remoteDispatchDomainSetVcpusFlags (struct qemud_server *server ATTRIBUTE_UNUSED,
|
||||
+ struct qemud_client *client ATTRIBUTE_UNUSED,
|
||||
+ virConnectPtr conn,
|
||||
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
|
||||
+ remote_error *rerr,
|
||||
+ remote_domain_set_vcpus_flags_args *args,
|
||||
+ void *ret ATTRIBUTE_UNUSED)
|
||||
+{
|
||||
+ virDomainPtr dom;
|
||||
+
|
||||
+ dom = get_nonnull_domain (conn, args->dom);
|
||||
+ if (dom == NULL) {
|
||||
+ remoteDispatchConnError(rerr, conn);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (virDomainSetVcpusFlags (dom, args->nvcpus, args->flags) == -1) {
|
||||
+ virDomainFree(dom);
|
||||
+ remoteDispatchConnError(rerr, conn);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ virDomainFree(dom);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
remoteDispatchDomainShutdown (struct qemud_server *server ATTRIBUTE_UNUSED,
|
||||
struct qemud_client *client ATTRIBUTE_UNUSED,
|
||||
virConnectPtr conn,
|
||||
diff --git a/daemon/remote_dispatch_args.h b/daemon/remote_dispatch_args.h
|
||||
index d8528b6..9583e9c 100644
|
||||
--- a/daemon/remote_dispatch_args.h
|
||||
+++ b/daemon/remote_dispatch_args.h
|
||||
@@ -167,3 +167,5 @@
|
||||
remote_domain_create_with_flags_args val_remote_domain_create_with_flags_args;
|
||||
remote_domain_set_memory_parameters_args val_remote_domain_set_memory_parameters_args;
|
||||
remote_domain_get_memory_parameters_args val_remote_domain_get_memory_parameters_args;
|
||||
+ remote_domain_set_vcpus_flags_args val_remote_domain_set_vcpus_flags_args;
|
||||
+ remote_domain_get_vcpus_flags_args val_remote_domain_get_vcpus_flags_args;
|
||||
diff --git a/daemon/remote_dispatch_prototypes.h b/daemon/remote_dispatch_prototypes.h
|
||||
index b674bb4..6b35851 100644
|
||||
--- a/daemon/remote_dispatch_prototypes.h
|
||||
+++ b/daemon/remote_dispatch_prototypes.h
|
||||
@@ -306,6 +306,14 @@ static int remoteDispatchDomainGetVcpus(
|
||||
remote_error *err,
|
||||
remote_domain_get_vcpus_args *args,
|
||||
remote_domain_get_vcpus_ret *ret);
|
||||
+static int remoteDispatchDomainGetVcpusFlags(
|
||||
+ struct qemud_server *server,
|
||||
+ struct qemud_client *client,
|
||||
+ virConnectPtr conn,
|
||||
+ remote_message_header *hdr,
|
||||
+ remote_error *err,
|
||||
+ remote_domain_get_vcpus_flags_args *args,
|
||||
+ remote_domain_get_vcpus_flags_ret *ret);
|
||||
static int remoteDispatchDomainHasCurrentSnapshot(
|
||||
struct qemud_server *server,
|
||||
struct qemud_client *client,
|
||||
@@ -554,6 +562,14 @@ static int remoteDispatchDomainSetVcpus(
|
||||
remote_error *err,
|
||||
remote_domain_set_vcpus_args *args,
|
||||
void *ret);
|
||||
+static int remoteDispatchDomainSetVcpusFlags(
|
||||
+ struct qemud_server *server,
|
||||
+ struct qemud_client *client,
|
||||
+ virConnectPtr conn,
|
||||
+ remote_message_header *hdr,
|
||||
+ remote_error *err,
|
||||
+ remote_domain_set_vcpus_flags_args *args,
|
||||
+ void *ret);
|
||||
static int remoteDispatchDomainShutdown(
|
||||
struct qemud_server *server,
|
||||
struct qemud_client *client,
|
||||
diff --git a/daemon/remote_dispatch_ret.h b/daemon/remote_dispatch_ret.h
|
||||
index 17c9bca..3723b00 100644
|
||||
--- a/daemon/remote_dispatch_ret.h
|
||||
+++ b/daemon/remote_dispatch_ret.h
|
||||
@@ -136,3 +136,4 @@
|
||||
remote_domain_get_block_info_ret val_remote_domain_get_block_info_ret;
|
||||
remote_domain_create_with_flags_ret val_remote_domain_create_with_flags_ret;
|
||||
remote_domain_get_memory_parameters_ret val_remote_domain_get_memory_parameters_ret;
|
||||
+ remote_domain_get_vcpus_flags_ret val_remote_domain_get_vcpus_flags_ret;
|
||||
diff --git a/daemon/remote_dispatch_table.h b/daemon/remote_dispatch_table.h
|
||||
index 47d95eb..dd2adc7 100644
|
||||
--- a/daemon/remote_dispatch_table.h
|
||||
+++ b/daemon/remote_dispatch_table.h
|
||||
@@ -997,3 +997,13 @@
|
||||
.args_filter = (xdrproc_t) xdr_remote_domain_get_memory_parameters_args,
|
||||
.ret_filter = (xdrproc_t) xdr_remote_domain_get_memory_parameters_ret,
|
||||
},
|
||||
+{ /* DomainSetVcpusFlags => 199 */
|
||||
+ .fn = (dispatch_fn) remoteDispatchDomainSetVcpusFlags,
|
||||
+ .args_filter = (xdrproc_t) xdr_remote_domain_set_vcpus_flags_args,
|
||||
+ .ret_filter = (xdrproc_t) xdr_void,
|
||||
+},
|
||||
+{ /* DomainGetVcpusFlags => 200 */
|
||||
+ .fn = (dispatch_fn) remoteDispatchDomainGetVcpusFlags,
|
||||
+ .args_filter = (xdrproc_t) xdr_remote_domain_get_vcpus_flags_args,
|
||||
+ .ret_filter = (xdrproc_t) xdr_remote_domain_get_vcpus_flags_ret,
|
||||
+},
|
||||
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
|
||||
index 1a687ad..37c37ef 100644
|
||||
--- a/src/remote/remote_driver.c
|
||||
+++ b/src/remote/remote_driver.c
|
||||
@@ -2580,6 +2580,59 @@ done:
|
||||
}
|
||||
|
||||
static int
|
||||
+remoteDomainSetVcpusFlags (virDomainPtr domain, unsigned int nvcpus,
|
||||
+ unsigned int flags)
|
||||
+{
|
||||
+ int rv = -1;
|
||||
+ remote_domain_set_vcpus_flags_args args;
|
||||
+ struct private_data *priv = domain->conn->privateData;
|
||||
+
|
||||
+ remoteDriverLock(priv);
|
||||
+
|
||||
+ make_nonnull_domain (&args.dom, domain);
|
||||
+ args.nvcpus = nvcpus;
|
||||
+ args.flags = flags;
|
||||
+
|
||||
+ if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_VCPUS_FLAGS,
|
||||
+ (xdrproc_t) xdr_remote_domain_set_vcpus_flags_args,
|
||||
+ (char *) &args,
|
||||
+ (xdrproc_t) xdr_void, (char *) NULL) == -1)
|
||||
+ goto done;
|
||||
+
|
||||
+ rv = 0;
|
||||
+
|
||||
+done:
|
||||
+ remoteDriverUnlock(priv);
|
||||
+ return rv;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+remoteDomainGetVcpusFlags (virDomainPtr domain, unsigned int flags)
|
||||
+{
|
||||
+ int rv = -1;
|
||||
+ remote_domain_get_vcpus_flags_args args;
|
||||
+ remote_domain_get_vcpus_flags_ret ret;
|
||||
+ struct private_data *priv = domain->conn->privateData;
|
||||
+
|
||||
+ remoteDriverLock(priv);
|
||||
+
|
||||
+ make_nonnull_domain (&args.dom, domain);
|
||||
+ args.flags = flags;
|
||||
+
|
||||
+ memset (&ret, 0, sizeof ret);
|
||||
+ if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_VCPUS_FLAGS,
|
||||
+ (xdrproc_t) xdr_remote_domain_get_vcpus_flags_args, (char *) &args,
|
||||
+ (xdrproc_t) xdr_remote_domain_get_vcpus_flags_ret, (char *) &ret) == -1)
|
||||
+ goto done;
|
||||
+
|
||||
+ rv = ret.num;
|
||||
+
|
||||
+done:
|
||||
+ remoteDriverUnlock(priv);
|
||||
+ return rv;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
remoteDomainPinVcpu (virDomainPtr domain,
|
||||
unsigned int vcpu,
|
||||
unsigned char *cpumap,
|
||||
@@ -10468,8 +10521,8 @@ static virDriver remote_driver = {
|
||||
remoteDomainRestore, /* domainRestore */
|
||||
remoteDomainCoreDump, /* domainCoreDump */
|
||||
remoteDomainSetVcpus, /* domainSetVcpus */
|
||||
- NULL, /* domainSetVcpusFlags */
|
||||
- NULL, /* domainGetVcpusFlags */
|
||||
+ remoteDomainSetVcpusFlags, /* domainSetVcpusFlags */
|
||||
+ remoteDomainGetVcpusFlags, /* domainGetVcpusFlags */
|
||||
remoteDomainPinVcpu, /* domainPinVcpu */
|
||||
remoteDomainGetVcpus, /* domainGetVcpus */
|
||||
remoteDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
diff --git a/src/remote/remote_protocol.c b/src/remote/remote_protocol.c
|
||||
index 5c55713..38ea050 100644
|
||||
--- a/src/remote/remote_protocol.c
|
||||
+++ b/src/remote/remote_protocol.c
|
||||
@@ -1355,6 +1355,39 @@ xdr_remote_domain_set_vcpus_args (XDR *xdrs, remote_domain_set_vcpus_args *objp)
|
||||
}
|
||||
|
||||
bool_t
|
||||
+xdr_remote_domain_set_vcpus_flags_args (XDR *xdrs, remote_domain_set_vcpus_flags_args *objp)
|
||||
+{
|
||||
+
|
||||
+ if (!xdr_remote_nonnull_domain (xdrs, &objp->dom))
|
||||
+ return FALSE;
|
||||
+ if (!xdr_u_int (xdrs, &objp->nvcpus))
|
||||
+ return FALSE;
|
||||
+ if (!xdr_u_int (xdrs, &objp->flags))
|
||||
+ return FALSE;
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+bool_t
|
||||
+xdr_remote_domain_get_vcpus_flags_args (XDR *xdrs, remote_domain_get_vcpus_flags_args *objp)
|
||||
+{
|
||||
+
|
||||
+ if (!xdr_remote_nonnull_domain (xdrs, &objp->dom))
|
||||
+ return FALSE;
|
||||
+ if (!xdr_u_int (xdrs, &objp->flags))
|
||||
+ return FALSE;
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+bool_t
|
||||
+xdr_remote_domain_get_vcpus_flags_ret (XDR *xdrs, remote_domain_get_vcpus_flags_ret *objp)
|
||||
+{
|
||||
+
|
||||
+ if (!xdr_int (xdrs, &objp->num))
|
||||
+ return FALSE;
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+bool_t
|
||||
xdr_remote_domain_pin_vcpu_args (XDR *xdrs, remote_domain_pin_vcpu_args *objp)
|
||||
{
|
||||
char **objp_cpp0 = (char **) (void *) &objp->cpumap.cpumap_val;
|
||||
diff --git a/src/remote/remote_protocol.h b/src/remote/remote_protocol.h
|
||||
index 756da11..d75e76c 100644
|
||||
--- a/src/remote/remote_protocol.h
|
||||
+++ b/src/remote/remote_protocol.h
|
||||
@@ -750,6 +750,24 @@ struct remote_domain_set_vcpus_args {
|
||||
};
|
||||
typedef struct remote_domain_set_vcpus_args remote_domain_set_vcpus_args;
|
||||
|
||||
+struct remote_domain_set_vcpus_flags_args {
|
||||
+ remote_nonnull_domain dom;
|
||||
+ u_int nvcpus;
|
||||
+ u_int flags;
|
||||
+};
|
||||
+typedef struct remote_domain_set_vcpus_flags_args remote_domain_set_vcpus_flags_args;
|
||||
+
|
||||
+struct remote_domain_get_vcpus_flags_args {
|
||||
+ remote_nonnull_domain dom;
|
||||
+ u_int flags;
|
||||
+};
|
||||
+typedef struct remote_domain_get_vcpus_flags_args remote_domain_get_vcpus_flags_args;
|
||||
+
|
||||
+struct remote_domain_get_vcpus_flags_ret {
|
||||
+ int num;
|
||||
+};
|
||||
+typedef struct remote_domain_get_vcpus_flags_ret remote_domain_get_vcpus_flags_ret;
|
||||
+
|
||||
struct remote_domain_pin_vcpu_args {
|
||||
remote_nonnull_domain dom;
|
||||
int vcpu;
|
||||
@@ -2281,6 +2299,8 @@ enum remote_procedure {
|
||||
REMOTE_PROC_DOMAIN_CREATE_WITH_FLAGS = 196,
|
||||
REMOTE_PROC_DOMAIN_SET_MEMORY_PARAMETERS = 197,
|
||||
REMOTE_PROC_DOMAIN_GET_MEMORY_PARAMETERS = 198,
|
||||
+ REMOTE_PROC_DOMAIN_SET_VCPUS_FLAGS = 199,
|
||||
+ REMOTE_PROC_DOMAIN_GET_VCPUS_FLAGS = 200,
|
||||
};
|
||||
typedef enum remote_procedure remote_procedure;
|
||||
|
||||
@@ -2422,6 +2442,9 @@ extern bool_t xdr_remote_domain_define_xml_args (XDR *, remote_domain_define_xm
|
||||
extern bool_t xdr_remote_domain_define_xml_ret (XDR *, remote_domain_define_xml_ret*);
|
||||
extern bool_t xdr_remote_domain_undefine_args (XDR *, remote_domain_undefine_args*);
|
||||
extern bool_t xdr_remote_domain_set_vcpus_args (XDR *, remote_domain_set_vcpus_args*);
|
||||
+extern bool_t xdr_remote_domain_set_vcpus_flags_args (XDR *, remote_domain_set_vcpus_flags_args*);
|
||||
+extern bool_t xdr_remote_domain_get_vcpus_flags_args (XDR *, remote_domain_get_vcpus_flags_args*);
|
||||
+extern bool_t xdr_remote_domain_get_vcpus_flags_ret (XDR *, remote_domain_get_vcpus_flags_ret*);
|
||||
extern bool_t xdr_remote_domain_pin_vcpu_args (XDR *, remote_domain_pin_vcpu_args*);
|
||||
extern bool_t xdr_remote_domain_get_vcpus_args (XDR *, remote_domain_get_vcpus_args*);
|
||||
extern bool_t xdr_remote_domain_get_vcpus_ret (XDR *, remote_domain_get_vcpus_ret*);
|
||||
@@ -2762,6 +2785,9 @@ extern bool_t xdr_remote_domain_define_xml_args ();
|
||||
extern bool_t xdr_remote_domain_define_xml_ret ();
|
||||
extern bool_t xdr_remote_domain_undefine_args ();
|
||||
extern bool_t xdr_remote_domain_set_vcpus_args ();
|
||||
+extern bool_t xdr_remote_domain_set_vcpus_flags_args ();
|
||||
+extern bool_t xdr_remote_domain_get_vcpus_flags_args ();
|
||||
+extern bool_t xdr_remote_domain_get_vcpus_flags_ret ();
|
||||
extern bool_t xdr_remote_domain_pin_vcpu_args ();
|
||||
extern bool_t xdr_remote_domain_get_vcpus_args ();
|
||||
extern bool_t xdr_remote_domain_get_vcpus_ret ();
|
||||
diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
|
||||
index e80fb5f..d57e6d0 100644
|
||||
--- a/src/remote/remote_protocol.x
|
||||
+++ b/src/remote/remote_protocol.x
|
||||
@@ -768,6 +768,21 @@ struct remote_domain_set_vcpus_args {
|
||||
int nvcpus;
|
||||
};
|
||||
|
||||
+struct remote_domain_set_vcpus_flags_args {
|
||||
+ remote_nonnull_domain dom;
|
||||
+ unsigned int nvcpus;
|
||||
+ unsigned int flags;
|
||||
+};
|
||||
+
|
||||
+struct remote_domain_get_vcpus_flags_args {
|
||||
+ remote_nonnull_domain dom;
|
||||
+ unsigned int flags;
|
||||
+};
|
||||
+
|
||||
+struct remote_domain_get_vcpus_flags_ret {
|
||||
+ int num;
|
||||
+};
|
||||
+
|
||||
struct remote_domain_pin_vcpu_args {
|
||||
remote_nonnull_domain dom;
|
||||
int vcpu;
|
||||
@@ -2062,7 +2077,9 @@ enum remote_procedure {
|
||||
REMOTE_PROC_DOMAIN_EVENT_IO_ERROR_REASON = 195,
|
||||
REMOTE_PROC_DOMAIN_CREATE_WITH_FLAGS = 196,
|
||||
REMOTE_PROC_DOMAIN_SET_MEMORY_PARAMETERS = 197,
|
||||
- REMOTE_PROC_DOMAIN_GET_MEMORY_PARAMETERS = 198
|
||||
+ REMOTE_PROC_DOMAIN_GET_MEMORY_PARAMETERS = 198,
|
||||
+ REMOTE_PROC_DOMAIN_SET_VCPUS_FLAGS = 199,
|
||||
+ REMOTE_PROC_DOMAIN_GET_VCPUS_FLAGS = 200
|
||||
|
||||
/*
|
||||
* Notice how the entries are grouped in sets of 10 ?
|
||||
diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs
|
||||
index 838423e..d505886 100644
|
||||
--- a/src/remote_protocol-structs
|
||||
+++ b/src/remote_protocol-structs
|
||||
@@ -461,6 +461,18 @@ struct remote_domain_set_vcpus_args {
|
||||
remote_nonnull_domain dom;
|
||||
int nvcpus;
|
||||
};
|
||||
+struct remote_domain_set_vcpus_flags_args {
|
||||
+ remote_nonnull_domain dom;
|
||||
+ u_int nvcpus;
|
||||
+ u_int flags;
|
||||
+};
|
||||
+struct remote_domain_get_vcpus_flags_args {
|
||||
+ remote_nonnull_domain dom;
|
||||
+ u_int flags;
|
||||
+};
|
||||
+struct remote_domain_get_vcpus_flags_ret {
|
||||
+ int num;
|
||||
+};
|
||||
struct remote_domain_pin_vcpu_args {
|
||||
remote_nonnull_domain dom;
|
||||
int vcpu;
|
||||
--
|
||||
1.7.2.3
|
||||
|
@@ -0,0 +1,735 @@
|
||||
From 50c51f13e2af04afac46e181c4ed62581545a488 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Blake <eblake@redhat.com>
|
||||
Date: Mon, 27 Sep 2010 16:37:53 -0600
|
||||
Subject: [PATCH 06/15] vcpu: make old API trivially wrap to new API
|
||||
|
||||
Note - this wrapping is completely mechanical; the old API will
|
||||
function identically, since the new API validates that the exact
|
||||
same flags are provided by the old API. On a per-driver basis,
|
||||
it may make sense to have the old API pass a different set of flags,
|
||||
but that should be done in the per-driver patch that implements
|
||||
the full range of flag support in the new API.
|
||||
|
||||
* src/esx/esx_driver.c (esxDomainSetVcpus, escDomainGetMaxVpcus):
|
||||
Move guts...
|
||||
(esxDomainSetVcpusFlags, esxDomainGetVcpusFlags): ...to new
|
||||
functions.
|
||||
(esxDriver): Trivially support the new API.
|
||||
* src/openvz/openvz_driver.c (openvzDomainSetVcpus)
|
||||
(openvzDomainSetVcpusFlags, openvzDomainGetMaxVcpus)
|
||||
(openvzDomainGetVcpusFlags, openvzDriver): Likewise.
|
||||
* src/phyp/phyp_driver.c (phypDomainSetCPU)
|
||||
(phypDomainSetVcpusFlags, phypGetLparCPUMAX)
|
||||
(phypDomainGetVcpusFlags, phypDriver): Likewise.
|
||||
* src/qemu/qemu_driver.c (qemudDomainSetVcpus)
|
||||
(qemudDomainSetVcpusFlags, qemudDomainGetMaxVcpus)
|
||||
(qemudDomainGetVcpusFlags, qemuDriver): Likewise.
|
||||
* src/test/test_driver.c (testSetVcpus, testDomainSetVcpusFlags)
|
||||
(testDomainGetMaxVcpus, testDomainGetVcpusFlags, testDriver):
|
||||
Likewise.
|
||||
* src/vbox/vbox_tmpl.c (vboxDomainSetVcpus)
|
||||
(vboxDomainSetVcpusFlags, virDomainGetMaxVcpus)
|
||||
(virDomainGetVcpusFlags, virDriver): Likewise.
|
||||
* src/xen/xen_driver.c (xenUnifiedDomainSetVcpus)
|
||||
(xenUnifiedDomainSetVcpusFlags, xenUnifiedDomainGetMaxVcpus)
|
||||
(xenUnifiedDomainGetVcpusFlags, xenUnifiedDriver): Likewise.
|
||||
* src/xenapi/xenapi_driver.c (xenapiDomainSetVcpus)
|
||||
(xenapiDomainSetVcpusFlags, xenapiDomainGetMaxVcpus)
|
||||
(xenapiDomainGetVcpusFlags, xenapiDriver): Likewise.
|
||||
(xenapiError): New helper macro.
|
||||
---
|
||||
src/esx/esx_driver.c | 32 +++++++++++++++++++---
|
||||
src/openvz/openvz_driver.c | 34 +++++++++++++++++++++---
|
||||
src/phyp/phyp_driver.c | 32 ++++++++++++++++++++---
|
||||
src/qemu/qemu_driver.c | 38 +++++++++++++++++++++++++---
|
||||
src/test/test_driver.c | 36 ++++++++++++++++++++++---
|
||||
src/vbox/vbox_tmpl.c | 36 +++++++++++++++++++++++---
|
||||
src/xen/xen_driver.c | 34 ++++++++++++++++++++++---
|
||||
src/xenapi/xenapi_driver.c | 60 ++++++++++++++++++++++++++++++++++++++------
|
||||
8 files changed, 263 insertions(+), 39 deletions(-)
|
||||
|
||||
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
|
||||
index 2a32374..b3e1284 100644
|
||||
--- a/src/esx/esx_driver.c
|
||||
+++ b/src/esx/esx_driver.c
|
||||
@@ -2384,7 +2384,8 @@ esxDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
|
||||
|
||||
|
||||
static int
|
||||
-esxDomainSetVcpus(virDomainPtr domain, unsigned int nvcpus)
|
||||
+esxDomainSetVcpusFlags(virDomainPtr domain, unsigned int nvcpus,
|
||||
+ unsigned int flags)
|
||||
{
|
||||
int result = -1;
|
||||
esxPrivate *priv = domain->conn->privateData;
|
||||
@@ -2394,6 +2395,11 @@ esxDomainSetVcpus(virDomainPtr domain, unsigned int nvcpus)
|
||||
esxVI_ManagedObjectReference *task = NULL;
|
||||
esxVI_TaskInfoState taskInfoState;
|
||||
|
||||
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
|
||||
+ ESX_ERROR(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
if (nvcpus < 1) {
|
||||
ESX_ERROR(VIR_ERR_INVALID_ARG, "%s",
|
||||
_("Requested number of virtual CPUs must at least be 1"));
|
||||
@@ -2453,15 +2459,26 @@ esxDomainSetVcpus(virDomainPtr domain, unsigned int nvcpus)
|
||||
}
|
||||
|
||||
|
||||
+static int
|
||||
+esxDomainSetVcpus(virDomainPtr domain, unsigned int nvcpus)
|
||||
+{
|
||||
+ return esxDomainSetVcpusFlags(domain, nvcpus, VIR_DOMAIN_VCPU_LIVE);
|
||||
+}
|
||||
+
|
||||
|
||||
static int
|
||||
-esxDomainGetMaxVcpus(virDomainPtr domain)
|
||||
+esxDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
|
||||
{
|
||||
esxPrivate *priv = domain->conn->privateData;
|
||||
esxVI_String *propertyNameList = NULL;
|
||||
esxVI_ObjectContent *hostSystem = NULL;
|
||||
esxVI_DynamicProperty *dynamicProperty = NULL;
|
||||
|
||||
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
|
||||
+ ESX_ERROR(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
if (priv->maxVcpus > 0) {
|
||||
return priv->maxVcpus;
|
||||
}
|
||||
@@ -2507,7 +2524,12 @@ esxDomainGetMaxVcpus(virDomainPtr domain)
|
||||
return priv->maxVcpus;
|
||||
}
|
||||
|
||||
-
|
||||
+static int
|
||||
+esxDomainGetMaxVcpus(virDomainPtr domain)
|
||||
+{
|
||||
+ return esxDomainGetVcpusFlags(domain, (VIR_DOMAIN_VCPU_LIVE |
|
||||
+ VIR_DOMAIN_VCPU_MAXIMUM));
|
||||
+}
|
||||
|
||||
static char *
|
||||
esxDomainDumpXML(virDomainPtr domain, int flags)
|
||||
@@ -4160,8 +4182,8 @@ static virDriver esxDriver = {
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
esxDomainSetVcpus, /* domainSetVcpus */
|
||||
- NULL, /* domainSetVcpusFlags */
|
||||
- NULL, /* domainGetVcpusFlags */
|
||||
+ esxDomainSetVcpusFlags, /* domainSetVcpusFlags */
|
||||
+ esxDomainGetVcpusFlags, /* domainGetVcpusFlags */
|
||||
NULL, /* domainPinVcpu */
|
||||
NULL, /* domainGetVcpus */
|
||||
esxDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
|
||||
index 9d19aeb..0f3cfdf 100644
|
||||
--- a/src/openvz/openvz_driver.c
|
||||
+++ b/src/openvz/openvz_driver.c
|
||||
@@ -67,7 +67,6 @@
|
||||
static int openvzGetProcessInfo(unsigned long long *cpuTime, int vpsid);
|
||||
static int openvzGetMaxVCPUs(virConnectPtr conn, const char *type);
|
||||
static int openvzDomainGetMaxVcpus(virDomainPtr dom);
|
||||
-static int openvzDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus);
|
||||
static int openvzDomainSetVcpusInternal(virDomainObjPtr vm,
|
||||
unsigned int nvcpus);
|
||||
static int openvzDomainSetMemoryInternal(virDomainObjPtr vm,
|
||||
@@ -1211,11 +1210,24 @@ static int openvzGetMaxVCPUs(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
return -1;
|
||||
}
|
||||
|
||||
+static int
|
||||
+openvzDomainGetVcpusFlags(virDomainPtr dom ATTRIBUTE_UNUSED,
|
||||
+ unsigned int flags)
|
||||
+{
|
||||
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
|
||||
+ openvzError(VIR_ERR_INVALID_ARG, _("unsupported flags (0x%x)"), flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
-static int openvzDomainGetMaxVcpus(virDomainPtr dom ATTRIBUTE_UNUSED) {
|
||||
return openvzGetMaxVCPUs(NULL, "openvz");
|
||||
}
|
||||
|
||||
+static int openvzDomainGetMaxVcpus(virDomainPtr dom)
|
||||
+{
|
||||
+ return openvzDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_LIVE |
|
||||
+ VIR_DOMAIN_VCPU_MAXIMUM));
|
||||
+}
|
||||
+
|
||||
static int openvzDomainSetVcpusInternal(virDomainObjPtr vm,
|
||||
unsigned int nvcpus)
|
||||
{
|
||||
@@ -1241,12 +1253,18 @@ static int openvzDomainSetVcpusInternal(virDomainObjPtr vm,
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int openvzDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus)
|
||||
+static int openvzDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
|
||||
+ unsigned int flags)
|
||||
{
|
||||
virDomainObjPtr vm;
|
||||
struct openvz_driver *driver = dom->conn->privateData;
|
||||
int ret = -1;
|
||||
|
||||
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
|
||||
+ openvzError(VIR_ERR_INVALID_ARG, _("unsupported flags (0x%x)"), flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
openvzDriverLock(driver);
|
||||
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
|
||||
openvzDriverUnlock(driver);
|
||||
@@ -1272,6 +1290,12 @@ cleanup:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int
|
||||
+openvzDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus)
|
||||
+{
|
||||
+ return openvzDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE);
|
||||
+}
|
||||
+
|
||||
static virDrvOpenStatus openvzOpen(virConnectPtr conn,
|
||||
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
||||
int flags ATTRIBUTE_UNUSED)
|
||||
@@ -1590,8 +1614,8 @@ static virDriver openvzDriver = {
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
openvzDomainSetVcpus, /* domainSetVcpus */
|
||||
- NULL, /* domainSetVcpusFlags */
|
||||
- NULL, /* domainGetVcpusFlags */
|
||||
+ openvzDomainSetVcpusFlags, /* domainSetVcpusFlags */
|
||||
+ openvzDomainGetVcpusFlags, /* domainGetVcpusFlags */
|
||||
NULL, /* domainPinVcpu */
|
||||
NULL, /* domainGetVcpus */
|
||||
openvzDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
|
||||
index 6e0a5e9..e284ae0 100644
|
||||
--- a/src/phyp/phyp_driver.c
|
||||
+++ b/src/phyp/phyp_driver.c
|
||||
@@ -1497,15 +1497,27 @@ phypGetLparCPU(virConnectPtr conn, const char *managed_system, int lpar_id)
|
||||
}
|
||||
|
||||
static int
|
||||
-phypGetLparCPUMAX(virDomainPtr dom)
|
||||
+phypDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
|
||||
{
|
||||
phyp_driverPtr phyp_driver = dom->conn->privateData;
|
||||
char *managed_system = phyp_driver->managed_system;
|
||||
|
||||
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
|
||||
+ PHYP_ERROR(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
return phypGetLparCPUGeneric(dom->conn, managed_system, dom->id, 1);
|
||||
}
|
||||
|
||||
static int
|
||||
+phypGetLparCPUMAX(virDomainPtr dom)
|
||||
+{
|
||||
+ return phypDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_LIVE |
|
||||
+ VIR_DOMAIN_VCPU_MAXIMUM));
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
phypGetRemoteSlot(virConnectPtr conn, const char *managed_system,
|
||||
const char *lpar_name)
|
||||
{
|
||||
@@ -3831,7 +3843,8 @@ phypConnectGetCapabilities(virConnectPtr conn)
|
||||
}
|
||||
|
||||
static int
|
||||
-phypDomainSetCPU(virDomainPtr dom, unsigned int nvcpus)
|
||||
+phypDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
|
||||
+ unsigned int flags)
|
||||
{
|
||||
ConnectionData *connection_data = dom->conn->networkPrivateData;
|
||||
phyp_driverPtr phyp_driver = dom->conn->privateData;
|
||||
@@ -3846,6 +3859,11 @@ phypDomainSetCPU(virDomainPtr dom, unsigned int nvcpus)
|
||||
unsigned int amount = 0;
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
|
||||
+ PHYP_ERROR(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
if ((ncpus = phypGetLparCPU(dom->conn, managed_system, dom->id)) == 0)
|
||||
return 0;
|
||||
|
||||
@@ -3891,6 +3909,12 @@ phypDomainSetCPU(virDomainPtr dom, unsigned int nvcpus)
|
||||
|
||||
}
|
||||
|
||||
+static int
|
||||
+phypDomainSetCPU(virDomainPtr dom, unsigned int nvcpus)
|
||||
+{
|
||||
+ return phypDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE);
|
||||
+}
|
||||
+
|
||||
static virDrvOpenStatus
|
||||
phypVIOSDriverOpen(virConnectPtr conn,
|
||||
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
|
||||
@@ -3941,8 +3965,8 @@ static virDriver phypDriver = {
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
phypDomainSetCPU, /* domainSetVcpus */
|
||||
- NULL, /* domainSetVcpusFlags */
|
||||
- NULL, /* domainGetVcpusFlags */
|
||||
+ phypDomainSetVcpusFlags, /* domainSetVcpusFlags */
|
||||
+ phypDomainGetVcpusFlags, /* domainGetVcpusFlags */
|
||||
NULL, /* domainPinVcpu */
|
||||
NULL, /* domainGetVcpus */
|
||||
phypGetLparCPUMAX, /* domainGetMaxVcpus */
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 3d17e04..7a2ea8f 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -5934,13 +5934,22 @@ unsupported:
|
||||
}
|
||||
|
||||
|
||||
-static int qemudDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) {
|
||||
+static int
|
||||
+qemudDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
|
||||
+ unsigned int flags)
|
||||
+{
|
||||
struct qemud_driver *driver = dom->conn->privateData;
|
||||
virDomainObjPtr vm;
|
||||
const char * type;
|
||||
int max;
|
||||
int ret = -1;
|
||||
|
||||
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
|
||||
+ qemuReportError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
|
||||
+ flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
qemuDriverLock(driver);
|
||||
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
|
||||
qemuDriverUnlock(driver);
|
||||
@@ -5994,6 +6003,12 @@ cleanup:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int
|
||||
+qemudDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus)
|
||||
+{
|
||||
+ return qemudDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE);
|
||||
+}
|
||||
+
|
||||
|
||||
static int
|
||||
qemudDomainPinVcpu(virDomainPtr dom,
|
||||
@@ -6150,12 +6165,20 @@ cleanup:
|
||||
}
|
||||
|
||||
|
||||
-static int qemudDomainGetMaxVcpus(virDomainPtr dom) {
|
||||
+static int
|
||||
+qemudDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
|
||||
+{
|
||||
struct qemud_driver *driver = dom->conn->privateData;
|
||||
virDomainObjPtr vm;
|
||||
const char *type;
|
||||
int ret = -1;
|
||||
|
||||
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
|
||||
+ qemuReportError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
|
||||
+ flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
qemuDriverLock(driver);
|
||||
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
|
||||
qemuDriverUnlock(driver);
|
||||
@@ -6183,6 +6206,13 @@ cleanup:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int
|
||||
+qemudDomainGetMaxVcpus(virDomainPtr dom)
|
||||
+{
|
||||
+ return qemudDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_LIVE |
|
||||
+ VIR_DOMAIN_VCPU_MAXIMUM));
|
||||
+}
|
||||
+
|
||||
static int qemudDomainGetSecurityLabel(virDomainPtr dom, virSecurityLabelPtr seclabel)
|
||||
{
|
||||
struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData;
|
||||
@@ -12938,8 +12968,8 @@ static virDriver qemuDriver = {
|
||||
qemudDomainRestore, /* domainRestore */
|
||||
qemudDomainCoreDump, /* domainCoreDump */
|
||||
qemudDomainSetVcpus, /* domainSetVcpus */
|
||||
- NULL, /* domainSetVcpusFlags */
|
||||
- NULL, /* domainGetVcpusFlags */
|
||||
+ qemudDomainSetVcpusFlags, /* domainSetVcpusFlags */
|
||||
+ qemudDomainGetVcpusFlags, /* domainGetVcpusFlags */
|
||||
qemudDomainPinVcpu, /* domainPinVcpu */
|
||||
qemudDomainGetVcpus, /* domainGetVcpus */
|
||||
qemudDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
|
||||
index 6a00558..b70c80d 100644
|
||||
--- a/src/test/test_driver.c
|
||||
+++ b/src/test/test_driver.c
|
||||
@@ -2029,17 +2029,37 @@ cleanup:
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static int testDomainGetMaxVcpus(virDomainPtr domain)
|
||||
+static int
|
||||
+testDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
|
||||
{
|
||||
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
|
||||
+ testError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
return testGetMaxVCPUs(domain->conn, "test");
|
||||
}
|
||||
|
||||
-static int testSetVcpus(virDomainPtr domain,
|
||||
- unsigned int nrCpus) {
|
||||
+static int
|
||||
+testDomainGetMaxVcpus(virDomainPtr domain)
|
||||
+{
|
||||
+ return testDomainGetVcpusFlags(domain, (VIR_DOMAIN_VCPU_LIVE |
|
||||
+ VIR_DOMAIN_VCPU_MAXIMUM));
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+testDomainSetVcpusFlags(virDomainPtr domain, unsigned int nrCpus,
|
||||
+ unsigned int flags)
|
||||
+{
|
||||
testConnPtr privconn = domain->conn->privateData;
|
||||
virDomainObjPtr privdom = NULL;
|
||||
int ret = -1, maxvcpus;
|
||||
|
||||
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
|
||||
+ testError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
/* Do this first before locking */
|
||||
maxvcpus = testDomainGetMaxVcpus(domain);
|
||||
if (maxvcpus < 0)
|
||||
@@ -2082,6 +2102,12 @@ cleanup:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int
|
||||
+testSetVcpus(virDomainPtr domain, unsigned int nrCpus)
|
||||
+{
|
||||
+ return testDomainSetVcpusFlags(domain, nrCpus, VIR_DOMAIN_VCPU_LIVE);
|
||||
+}
|
||||
+
|
||||
static int testDomainGetVcpus(virDomainPtr domain,
|
||||
virVcpuInfoPtr info,
|
||||
int maxinfo,
|
||||
@@ -5260,8 +5286,8 @@ static virDriver testDriver = {
|
||||
testDomainRestore, /* domainRestore */
|
||||
testDomainCoreDump, /* domainCoreDump */
|
||||
testSetVcpus, /* domainSetVcpus */
|
||||
- NULL, /* domainSetVcpusFlags */
|
||||
- NULL, /* domainGetVcpusFlags */
|
||||
+ testDomainSetVcpusFlags, /* domainSetVcpusFlags */
|
||||
+ testDomainGetVcpusFlags, /* domainGetVcpusFlags */
|
||||
testDomainPinVcpu, /* domainPinVcpu */
|
||||
testDomainGetVcpus, /* domainGetVcpus */
|
||||
testDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
|
||||
index cb9193a..0cbe8b3 100644
|
||||
--- a/src/vbox/vbox_tmpl.c
|
||||
+++ b/src/vbox/vbox_tmpl.c
|
||||
@@ -1839,13 +1839,21 @@ cleanup:
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static int vboxDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) {
|
||||
+static int
|
||||
+vboxDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
|
||||
+ unsigned int flags)
|
||||
+{
|
||||
VBOX_OBJECT_CHECK(dom->conn, int, -1);
|
||||
IMachine *machine = NULL;
|
||||
vboxIID *iid = NULL;
|
||||
PRUint32 CPUCount = nvcpus;
|
||||
nsresult rc;
|
||||
|
||||
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
|
||||
+ vboxError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
#if VBOX_API_VERSION == 2002
|
||||
if (VIR_ALLOC(iid) < 0) {
|
||||
virReportOOMError();
|
||||
@@ -1887,11 +1895,24 @@ cleanup:
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static int vboxDomainGetMaxVcpus(virDomainPtr dom) {
|
||||
+static int
|
||||
+vboxDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus)
|
||||
+{
|
||||
+ return vboxDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE);
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+vboxDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
|
||||
+{
|
||||
VBOX_OBJECT_CHECK(dom->conn, int, -1);
|
||||
ISystemProperties *systemProperties = NULL;
|
||||
PRUint32 maxCPUCount = 0;
|
||||
|
||||
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
|
||||
+ vboxError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
/* Currently every domain supports the same number of max cpus
|
||||
* as that supported by vbox and thus take it directly from
|
||||
* the systemproperties.
|
||||
@@ -1909,6 +1930,13 @@ static int vboxDomainGetMaxVcpus(virDomainPtr dom) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int
|
||||
+vboxDomainGetMaxVcpus(virDomainPtr dom)
|
||||
+{
|
||||
+ return vboxDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_LIVE |
|
||||
+ VIR_DOMAIN_VCPU_MAXIMUM));
|
||||
+}
|
||||
+
|
||||
static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
|
||||
VBOX_OBJECT_CHECK(dom->conn, char *, NULL);
|
||||
virDomainDefPtr def = NULL;
|
||||
@@ -8267,8 +8295,8 @@ virDriver NAME(Driver) = {
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
vboxDomainSetVcpus, /* domainSetVcpus */
|
||||
- NULL, /* domainSetVcpusFlags */
|
||||
- NULL, /* domainGetVcpusFlags */
|
||||
+ vboxDomainSetVcpusFlags, /* domainSetVcpusFlags */
|
||||
+ vboxDomainGetVcpusFlags, /* domainGetVcpusFlags */
|
||||
NULL, /* domainPinVcpu */
|
||||
NULL, /* domainGetVcpus */
|
||||
vboxDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
|
||||
index 7d67ced..d6c9c57 100644
|
||||
--- a/src/xen/xen_driver.c
|
||||
+++ b/src/xen/xen_driver.c
|
||||
@@ -1069,11 +1069,18 @@ xenUnifiedDomainCoreDump (virDomainPtr dom, const char *to, int flags)
|
||||
}
|
||||
|
||||
static int
|
||||
-xenUnifiedDomainSetVcpus (virDomainPtr dom, unsigned int nvcpus)
|
||||
+xenUnifiedDomainSetVcpusFlags (virDomainPtr dom, unsigned int nvcpus,
|
||||
+ unsigned int flags)
|
||||
{
|
||||
GET_PRIVATE(dom->conn);
|
||||
int i;
|
||||
|
||||
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
|
||||
+ xenUnifiedError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
|
||||
+ flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
/* Try non-hypervisor methods first, then hypervisor direct method
|
||||
* as a last resort.
|
||||
*/
|
||||
@@ -1093,6 +1100,12 @@ xenUnifiedDomainSetVcpus (virDomainPtr dom, unsigned int nvcpus)
|
||||
}
|
||||
|
||||
static int
|
||||
+xenUnifiedDomainSetVcpus (virDomainPtr dom, unsigned int nvcpus)
|
||||
+{
|
||||
+ return xenUnifiedDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE);
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
xenUnifiedDomainPinVcpu (virDomainPtr dom, unsigned int vcpu,
|
||||
unsigned char *cpumap, int maplen)
|
||||
{
|
||||
@@ -1126,11 +1139,17 @@ xenUnifiedDomainGetVcpus (virDomainPtr dom,
|
||||
}
|
||||
|
||||
static int
|
||||
-xenUnifiedDomainGetMaxVcpus (virDomainPtr dom)
|
||||
+xenUnifiedDomainGetVcpusFlags (virDomainPtr dom, unsigned int flags)
|
||||
{
|
||||
GET_PRIVATE(dom->conn);
|
||||
int i, ret;
|
||||
|
||||
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
|
||||
+ xenUnifiedError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
|
||||
+ flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
|
||||
if (priv->opened[i] && drivers[i]->domainGetMaxVcpus) {
|
||||
ret = drivers[i]->domainGetMaxVcpus (dom);
|
||||
@@ -1140,6 +1159,13 @@ xenUnifiedDomainGetMaxVcpus (virDomainPtr dom)
|
||||
return -1;
|
||||
}
|
||||
|
||||
+static int
|
||||
+xenUnifiedDomainGetMaxVcpus (virDomainPtr dom)
|
||||
+{
|
||||
+ return xenUnifiedDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_LIVE |
|
||||
+ VIR_DOMAIN_VCPU_MAXIMUM));
|
||||
+}
|
||||
+
|
||||
static char *
|
||||
xenUnifiedDomainDumpXML (virDomainPtr dom, int flags)
|
||||
{
|
||||
@@ -1951,8 +1977,8 @@ static virDriver xenUnifiedDriver = {
|
||||
xenUnifiedDomainRestore, /* domainRestore */
|
||||
xenUnifiedDomainCoreDump, /* domainCoreDump */
|
||||
xenUnifiedDomainSetVcpus, /* domainSetVcpus */
|
||||
- NULL, /* domainSetVcpusFlags */
|
||||
- NULL, /* domainGetVcpusFlags */
|
||||
+ xenUnifiedDomainSetVcpusFlags, /* domainSetVcpusFlags */
|
||||
+ xenUnifiedDomainGetVcpusFlags, /* domainGetVcpusFlags */
|
||||
xenUnifiedDomainPinVcpu, /* domainPinVcpu */
|
||||
xenUnifiedDomainGetVcpus, /* domainGetVcpus */
|
||||
xenUnifiedDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c
|
||||
index 753169c..7d4ab8d 100644
|
||||
--- a/src/xenapi/xenapi_driver.c
|
||||
+++ b/src/xenapi/xenapi_driver.c
|
||||
@@ -40,6 +40,11 @@
|
||||
#include "xenapi_driver_private.h"
|
||||
#include "xenapi_utils.h"
|
||||
|
||||
+#define VIR_FROM_THIS VIR_FROM_XENAPI
|
||||
+
|
||||
+#define xenapiError(code, ...) \
|
||||
+ virReportErrorHelper(NULL, VIR_FROM_THIS, code, __FILE__, \
|
||||
+ __FUNCTION__, __LINE__, __VA_ARGS__)
|
||||
|
||||
/*
|
||||
* getCapsObject
|
||||
@@ -987,19 +992,26 @@ xenapiDomainGetInfo (virDomainPtr dom, virDomainInfoPtr info)
|
||||
|
||||
|
||||
/*
|
||||
- * xenapiDomainSetVcpus
|
||||
+ * xenapiDomainSetVcpusFlags
|
||||
*
|
||||
* Sets the VCPUs on the domain
|
||||
* Return 0 on success or -1 in case of error
|
||||
*/
|
||||
static int
|
||||
-xenapiDomainSetVcpus (virDomainPtr dom, unsigned int nvcpus)
|
||||
+xenapiDomainSetVcpusFlags (virDomainPtr dom, unsigned int nvcpus,
|
||||
+ unsigned int flags)
|
||||
{
|
||||
-
|
||||
/* vm.set_vcpus_max */
|
||||
xen_vm vm;
|
||||
xen_vm_set *vms;
|
||||
xen_session *session = ((struct _xenapiPrivate *)(dom->conn->privateData))->session;
|
||||
+
|
||||
+ if (flags != VIR_DOMAIN_VCPU_LIVE) {
|
||||
+ xenapiError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
|
||||
+ flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
if (xen_vm_get_by_name_label(session, &vms, dom->name) && vms->size > 0) {
|
||||
if (vms->size != 1) {
|
||||
xenapiSessionErrorHandler(dom->conn, VIR_ERR_INTERNAL_ERROR,
|
||||
@@ -1019,6 +1031,18 @@ xenapiDomainSetVcpus (virDomainPtr dom, unsigned int nvcpus)
|
||||
}
|
||||
|
||||
/*
|
||||
+ * xenapiDomainSetVcpus
|
||||
+ *
|
||||
+ * Sets the VCPUs on the domain
|
||||
+ * Return 0 on success or -1 in case of error
|
||||
+ */
|
||||
+static int
|
||||
+xenapiDomainSetVcpus (virDomainPtr dom, unsigned int nvcpus)
|
||||
+{
|
||||
+ return xenapiDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* xenapiDomainPinVcpu
|
||||
*
|
||||
* Dynamically change the real CPUs which can be allocated to a virtual CPU
|
||||
@@ -1140,19 +1164,26 @@ xenapiDomainGetVcpus (virDomainPtr dom,
|
||||
}
|
||||
|
||||
/*
|
||||
- * xenapiDomainGetMaxVcpus
|
||||
+ * xenapiDomainGetVcpusFlags
|
||||
*
|
||||
*
|
||||
- * Returns maximum number of Vcpus on success or -1 in case of error
|
||||
+ * Returns Vcpus count on success or -1 in case of error
|
||||
*/
|
||||
static int
|
||||
-xenapiDomainGetMaxVcpus (virDomainPtr dom)
|
||||
+xenapiDomainGetVcpusFlags (virDomainPtr dom, unsigned int flags)
|
||||
{
|
||||
xen_vm vm;
|
||||
xen_vm_set *vms;
|
||||
int64_t maxvcpu = 0;
|
||||
enum xen_vm_power_state state;
|
||||
xen_session *session = ((struct _xenapiPrivate *)(dom->conn->privateData))->session;
|
||||
+
|
||||
+ if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
|
||||
+ xenapiError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
|
||||
+ flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
if (xen_vm_get_by_name_label(session, &vms, dom->name) && vms->size > 0) {
|
||||
if (vms->size != 1) {
|
||||
xenapiSessionErrorHandler(dom->conn, VIR_ERR_INTERNAL_ERROR,
|
||||
@@ -1176,6 +1207,19 @@ xenapiDomainGetMaxVcpus (virDomainPtr dom)
|
||||
}
|
||||
|
||||
/*
|
||||
+ * xenapiDomainGetMaxVcpus
|
||||
+ *
|
||||
+ *
|
||||
+ * Returns maximum number of Vcpus on success or -1 in case of error
|
||||
+ */
|
||||
+static int
|
||||
+xenapiDomainGetMaxVcpus (virDomainPtr dom)
|
||||
+{
|
||||
+ return xenapiDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_LIVE |
|
||||
+ VIR_DOMAIN_VCPU_MAXIMUM));
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* xenapiDomainDumpXML
|
||||
*
|
||||
*
|
||||
@@ -1754,8 +1798,8 @@ static virDriver xenapiDriver = {
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
xenapiDomainSetVcpus, /* domainSetVcpus */
|
||||
- NULL, /* domainSetVcpusFlags */
|
||||
- NULL, /* domainGetVcpusFlags */
|
||||
+ xenapiDomainSetVcpusFlags, /* domainSetVcpusFlags */
|
||||
+ xenapiDomainGetVcpusFlags, /* domainGetVcpusFlags */
|
||||
xenapiDomainPinVcpu, /* domainPinVcpu */
|
||||
xenapiDomainGetVcpus, /* domainGetVcpus */
|
||||
xenapiDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||
--
|
||||
1.7.2.3
|
||||
|
388
docs/api_extension/0007-add-virsh-support.patch
Normal file
388
docs/api_extension/0007-add-virsh-support.patch
Normal file
@@ -0,0 +1,388 @@
|
||||
From bf945ee97b72d3b0c4fc2da04530f5294f529d66 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Blake <eblake@redhat.com>
|
||||
Date: Wed, 29 Sep 2010 15:20:23 -0600
|
||||
Subject: [PATCH 08/15] vcpu: add virsh support
|
||||
|
||||
* tools/virsh.c (cmdSetvcpus): Add new flags. Let invalid
|
||||
commands through to driver, to ease testing of hypervisor argument
|
||||
validation.
|
||||
(cmdMaxvcpus, cmdVcpucount): New commands.
|
||||
(commands): Add new commands.
|
||||
* tools/virsh.pod (setvcpus, vcpucount, maxvcpus): Document new
|
||||
behavior.
|
||||
---
|
||||
tools/virsh.c | 247 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
|
||||
tools/virsh.pod | 38 ++++++++-
|
||||
2 files changed, 262 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/tools/virsh.c b/tools/virsh.c
|
||||
index 4f8c495..7fb7fbd 100644
|
||||
--- a/tools/virsh.c
|
||||
+++ b/tools/virsh.c
|
||||
@@ -2281,10 +2281,216 @@ cmdFreecell(vshControl *ctl, const vshCmd *cmd)
|
||||
}
|
||||
|
||||
/*
|
||||
+ * "maxvcpus" command
|
||||
+ */
|
||||
+static const vshCmdInfo info_maxvcpus[] = {
|
||||
+ {"help", N_("connection vcpu maximum")},
|
||||
+ {"desc", N_("Show maximum number of virtual CPUs for guests on this connection.")},
|
||||
+ {NULL, NULL}
|
||||
+};
|
||||
+
|
||||
+static const vshCmdOptDef opts_maxvcpus[] = {
|
||||
+ {"type", VSH_OT_STRING, 0, N_("domain type")},
|
||||
+ {NULL, 0, 0, NULL}
|
||||
+};
|
||||
+
|
||||
+static int
|
||||
+cmdMaxvcpus(vshControl *ctl, const vshCmd *cmd)
|
||||
+{
|
||||
+ char *type;
|
||||
+ int vcpus;
|
||||
+
|
||||
+ type = vshCommandOptString(cmd, "type", NULL);
|
||||
+
|
||||
+ if (!vshConnectionUsability(ctl, ctl->conn))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ vcpus = virConnectGetMaxVcpus(ctl->conn, type);
|
||||
+ if (vcpus < 0)
|
||||
+ return FALSE;
|
||||
+ vshPrint(ctl, "%d\n", vcpus);
|
||||
+
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * "vcpucount" command
|
||||
+ */
|
||||
+static const vshCmdInfo info_vcpucount[] = {
|
||||
+ {"help", N_("domain vcpu counts")},
|
||||
+ {"desc", N_("Returns the number of virtual CPUs used by the domain.")},
|
||||
+ {NULL, NULL}
|
||||
+};
|
||||
+
|
||||
+static const vshCmdOptDef opts_vcpucount[] = {
|
||||
+ {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")},
|
||||
+ {"maximum", VSH_OT_BOOL, 0, N_("get maximum cap on vcpus")},
|
||||
+ {"current", VSH_OT_BOOL, 0, N_("get current vcpu usage")},
|
||||
+ {"config", VSH_OT_BOOL, 0, N_("get value to be used on next boot")},
|
||||
+ {"live", VSH_OT_BOOL, 0, N_("get value from running domain")},
|
||||
+ {NULL, 0, 0, NULL}
|
||||
+};
|
||||
+
|
||||
+static int
|
||||
+cmdVcpucount(vshControl *ctl, const vshCmd *cmd)
|
||||
+{
|
||||
+ virDomainPtr dom;
|
||||
+ int ret = TRUE;
|
||||
+ int maximum = vshCommandOptBool(cmd, "maximum");
|
||||
+ int current = vshCommandOptBool(cmd, "current");
|
||||
+ int config = vshCommandOptBool(cmd, "config");
|
||||
+ int live = vshCommandOptBool(cmd, "live");
|
||||
+ bool all = maximum + current + config + live == 0;
|
||||
+ int count;
|
||||
+
|
||||
+ if (maximum && current) {
|
||||
+ vshError(ctl, "%s",
|
||||
+ _("--maximum and --current cannot both be specified"));
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ if (config && live) {
|
||||
+ vshError(ctl, "%s",
|
||||
+ _("--config and --live cannot both be specified"));
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ /* We want one of each pair of mutually exclusive options; that
|
||||
+ * is, use of flags requires exactly two options. */
|
||||
+ if (maximum + current + config + live == 1) {
|
||||
+ vshError(ctl,
|
||||
+ _("when using --%s, either --%s or --%s must be specified"),
|
||||
+ (maximum ? "maximum" : current ? "current"
|
||||
+ : config ? "config" : "live"),
|
||||
+ maximum + current ? "config" : "maximum",
|
||||
+ maximum + current ? "live" : "current");
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ if (!vshConnectionUsability(ctl, ctl->conn))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ /* In all cases, try the new API first; if it fails because we are
|
||||
+ * talking to an older client, try a fallback API before giving
|
||||
+ * up. */
|
||||
+ if (all || (maximum && config)) {
|
||||
+ count = virDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_MAXIMUM |
|
||||
+ VIR_DOMAIN_VCPU_CONFIG));
|
||||
+ if (count < 0 && (last_error->code == VIR_ERR_NO_SUPPORT
|
||||
+ || last_error->code == VIR_ERR_INVALID_ARG)) {
|
||||
+ char *tmp;
|
||||
+ char *xml = virDomainGetXMLDesc(dom, VIR_DOMAIN_XML_INACTIVE);
|
||||
+ if (xml && (tmp = strstr(xml, "<vcpu"))) {
|
||||
+ tmp = strchr(tmp, '>');
|
||||
+ if (!tmp || virStrToLong_i(tmp + 1, &tmp, 10, &count) < 0)
|
||||
+ count = -1;
|
||||
+ }
|
||||
+ VIR_FREE(xml);
|
||||
+ }
|
||||
+
|
||||
+ if (count < 0) {
|
||||
+ virshReportError(ctl);
|
||||
+ ret = FALSE;
|
||||
+ } else if (all) {
|
||||
+ vshPrint(ctl, "%-12s %-12s %3d\n", _("maximum"), _("config"),
|
||||
+ count);
|
||||
+ } else {
|
||||
+ vshPrint(ctl, "%d\n", count);
|
||||
+ }
|
||||
+ virFreeError(last_error);
|
||||
+ last_error = NULL;
|
||||
+ }
|
||||
+
|
||||
+ if (all || (maximum && live)) {
|
||||
+ count = virDomainGetVcpusFlags(dom, (VIR_DOMAIN_VCPU_MAXIMUM |
|
||||
+ VIR_DOMAIN_VCPU_LIVE));
|
||||
+ if (count < 0 && (last_error->code == VIR_ERR_NO_SUPPORT
|
||||
+ || last_error->code == VIR_ERR_INVALID_ARG)) {
|
||||
+ count = virDomainGetMaxVcpus(dom);
|
||||
+ }
|
||||
+
|
||||
+ if (count < 0) {
|
||||
+ virshReportError(ctl);
|
||||
+ ret = FALSE;
|
||||
+ } else if (all) {
|
||||
+ vshPrint(ctl, "%-12s %-12s %3d\n", _("maximum"), _("live"),
|
||||
+ count);
|
||||
+ } else {
|
||||
+ vshPrint(ctl, "%d\n", count);
|
||||
+ }
|
||||
+ virFreeError(last_error);
|
||||
+ last_error = NULL;
|
||||
+ }
|
||||
+
|
||||
+ if (all || (current && config)) {
|
||||
+ count = virDomainGetVcpusFlags(dom, VIR_DOMAIN_VCPU_CONFIG);
|
||||
+ if (count < 0 && (last_error->code == VIR_ERR_NO_SUPPORT
|
||||
+ || last_error->code == VIR_ERR_INVALID_ARG)) {
|
||||
+ char *tmp, *end;
|
||||
+ char *xml = virDomainGetXMLDesc(dom, VIR_DOMAIN_XML_INACTIVE);
|
||||
+ if (xml && (tmp = strstr(xml, "<vcpu"))) {
|
||||
+ end = strchr(tmp, '>');
|
||||
+ if (end) {
|
||||
+ *end = '\0';
|
||||
+ tmp = strstr(tmp, "current=");
|
||||
+ if (!tmp)
|
||||
+ tmp = end + 1;
|
||||
+ else {
|
||||
+ tmp += strlen("current=");
|
||||
+ tmp += *tmp == '\'' || *tmp == '"';
|
||||
+ }
|
||||
+ }
|
||||
+ if (!tmp || virStrToLong_i(tmp, &tmp, 10, &count) < 0)
|
||||
+ count = -1;
|
||||
+ }
|
||||
+ VIR_FREE(xml);
|
||||
+ }
|
||||
+
|
||||
+ if (count < 0) {
|
||||
+ virshReportError(ctl);
|
||||
+ ret = FALSE;
|
||||
+ } else if (all) {
|
||||
+ vshPrint(ctl, "%-12s %-12s %3d\n", _("current"), _("config"),
|
||||
+ count);
|
||||
+ } else {
|
||||
+ vshPrint(ctl, "%d\n", count);
|
||||
+ }
|
||||
+ virFreeError(last_error);
|
||||
+ last_error = NULL;
|
||||
+ }
|
||||
+
|
||||
+ if (all || (current && live)) {
|
||||
+ count = virDomainGetVcpusFlags(dom, VIR_DOMAIN_VCPU_LIVE);
|
||||
+ if (count < 0 && (last_error->code == VIR_ERR_NO_SUPPORT
|
||||
+ || last_error->code == VIR_ERR_INVALID_ARG)) {
|
||||
+ virDomainInfo info;
|
||||
+ if (virDomainGetInfo(dom, &info) == 0)
|
||||
+ count = info.nrVirtCpu;
|
||||
+ }
|
||||
+
|
||||
+ if (count < 0) {
|
||||
+ virshReportError(ctl);
|
||||
+ ret = FALSE;
|
||||
+ } else if (all) {
|
||||
+ vshPrint(ctl, "%-12s %-12s %3d\n", _("current"), _("live"),
|
||||
+ count);
|
||||
+ } else {
|
||||
+ vshPrint(ctl, "%d\n", count);
|
||||
+ }
|
||||
+ virFreeError(last_error);
|
||||
+ last_error = NULL;
|
||||
+ }
|
||||
+
|
||||
+ virDomainFree(dom);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* "vcpuinfo" command
|
||||
*/
|
||||
static const vshCmdInfo info_vcpuinfo[] = {
|
||||
- {"help", N_("domain vcpu information")},
|
||||
+ {"help", N_("detailed domain vcpu information")},
|
||||
{"desc", N_("Returns basic information about the domain virtual CPUs.")},
|
||||
{NULL, NULL}
|
||||
};
|
||||
@@ -2514,6 +2720,9 @@ static const vshCmdInfo info_setvcpus[] = {
|
||||
static const vshCmdOptDef opts_setvcpus[] = {
|
||||
{"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")},
|
||||
{"count", VSH_OT_DATA, VSH_OFLAG_REQ, N_("number of virtual CPUs")},
|
||||
+ {"maximum", VSH_OT_BOOL, 0, N_("set maximum limit on next boot")},
|
||||
+ {"config", VSH_OT_BOOL, 0, N_("affect next boot")},
|
||||
+ {"live", VSH_OT_BOOL, 0, N_("affect running domain")},
|
||||
{NULL, 0, 0, NULL}
|
||||
};
|
||||
|
||||
@@ -2522,8 +2731,13 @@ cmdSetvcpus(vshControl *ctl, const vshCmd *cmd)
|
||||
{
|
||||
virDomainPtr dom;
|
||||
int count;
|
||||
- int maxcpu;
|
||||
int ret = TRUE;
|
||||
+ int maximum = vshCommandOptBool(cmd, "maximum");
|
||||
+ int config = vshCommandOptBool(cmd, "config");
|
||||
+ int live = vshCommandOptBool(cmd, "live");
|
||||
+ int flags = ((maximum ? VIR_DOMAIN_VCPU_MAXIMUM : 0) |
|
||||
+ (config ? VIR_DOMAIN_VCPU_CONFIG : 0) |
|
||||
+ (live ? VIR_DOMAIN_VCPU_LIVE : 0));
|
||||
|
||||
if (!vshConnectionUsability(ctl, ctl->conn))
|
||||
return FALSE;
|
||||
@@ -2532,26 +2746,15 @@ cmdSetvcpus(vshControl *ctl, const vshCmd *cmd)
|
||||
return FALSE;
|
||||
|
||||
count = vshCommandOptInt(cmd, "count", &count);
|
||||
- if (count <= 0) {
|
||||
- vshError(ctl, "%s", _("Invalid number of virtual CPUs."));
|
||||
- virDomainFree(dom);
|
||||
- return FALSE;
|
||||
- }
|
||||
-
|
||||
- maxcpu = virDomainGetMaxVcpus(dom);
|
||||
- if (maxcpu <= 0) {
|
||||
- virDomainFree(dom);
|
||||
- return FALSE;
|
||||
- }
|
||||
-
|
||||
- if (count > maxcpu) {
|
||||
- vshError(ctl, "%s", _("Too many virtual CPUs."));
|
||||
- virDomainFree(dom);
|
||||
- return FALSE;
|
||||
- }
|
||||
|
||||
- if (virDomainSetVcpus(dom, count) != 0) {
|
||||
- ret = FALSE;
|
||||
+ if (!flags) {
|
||||
+ if (virDomainSetVcpus(dom, count) != 0) {
|
||||
+ ret = FALSE;
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (virDomainSetVcpusFlags(dom, count, flags) < 0) {
|
||||
+ ret = FALSE;
|
||||
+ }
|
||||
}
|
||||
|
||||
virDomainFree(dom);
|
||||
@@ -9642,6 +9845,7 @@ static const vshCmdDef commands[] = {
|
||||
{"freecell", cmdFreecell, opts_freecell, info_freecell},
|
||||
{"hostname", cmdHostname, NULL, info_hostname},
|
||||
{"list", cmdList, opts_list, info_list},
|
||||
+ {"maxvcpus", cmdMaxvcpus, opts_maxvcpus, info_maxvcpus},
|
||||
{"migrate", cmdMigrate, opts_migrate, info_migrate},
|
||||
{"migrate-setmaxdowntime", cmdMigrateSetMaxDowntime, opts_migrate_setmaxdowntime, info_migrate_setmaxdowntime},
|
||||
|
||||
@@ -9748,6 +9952,7 @@ static const vshCmdDef commands[] = {
|
||||
{"vol-name", cmdVolName, opts_vol_name, info_vol_name},
|
||||
{"vol-key", cmdVolKey, opts_vol_key, info_vol_key},
|
||||
|
||||
+ {"vcpucount", cmdVcpucount, opts_vcpucount, info_vcpucount},
|
||||
{"vcpuinfo", cmdVcpuinfo, opts_vcpuinfo, info_vcpuinfo},
|
||||
{"vcpupin", cmdVcpupin, opts_vcpupin, info_vcpupin},
|
||||
{"version", cmdVersion, NULL, info_version},
|
||||
diff --git a/tools/virsh.pod b/tools/virsh.pod
|
||||
index 943a563..dbcc680 100644
|
||||
--- a/tools/virsh.pod
|
||||
+++ b/tools/virsh.pod
|
||||
@@ -443,7 +443,14 @@ Remove the managed save file for a domain if it exists. The next time the
|
||||
domain is started it will not restore to its previous state but instead will
|
||||
do a full boot.
|
||||
|
||||
-=item B<migrate> optional I<--live> I<--suspend> I<domain-id> I<desturi> I<migrateuri>
|
||||
+=item B<maxvcpus> optional I<type>
|
||||
+
|
||||
+Provide the maximum number of virtual CPUs supported for a guest VM on
|
||||
+this connection. If provided, the I<type> parameter must be a valid
|
||||
+type attribute for the <domain> element of XML.
|
||||
+
|
||||
+=item B<migrate> optional I<--live> I<--suspend> I<domain-id> I<desturi>
|
||||
+I<migrateuri>
|
||||
|
||||
Migrate domain to another host. Add --live for live migration; --suspend
|
||||
leaves the domain paused on the destination host. The I<desturi> is the
|
||||
@@ -521,7 +528,8 @@ Displays the domain memory parameters.
|
||||
|
||||
Allows you to set the domain memory parameters. LXC and QEMU/KVM supports these parameters.
|
||||
|
||||
-=item B<setvcpus> I<domain-id> I<count>
|
||||
+=item B<setvcpus> I<domain-id> I<count> optional I<--maximum> I<--config>
|
||||
+I<--live>
|
||||
|
||||
Change the number of virtual CPUs active in the guest domain. Note that
|
||||
I<count> may be limited by host, hypervisor or limit coming from the
|
||||
@@ -530,6 +538,17 @@ original description of domain.
|
||||
For Xen, you can only adjust the virtual CPUs of a running domain if
|
||||
the domain is paravirtualized.
|
||||
|
||||
+If I<--config> is specified, the change will only affect the next
|
||||
+boot of a domain. If I<--live> is specified, the domain must be
|
||||
+running, and the change takes place immediately. Both flags may be
|
||||
+specified, if supported by the hypervisor. If neither flag is given,
|
||||
+then I<--live> is implied and it is up to the hypervisor whether
|
||||
+I<--config> is also implied.
|
||||
+
|
||||
+If I<--maximum> is specified, then you must use I<--config> and
|
||||
+avoid I<--live>; this flag controls the maximum limit of vcpus that
|
||||
+can be hot-plugged the next time the domain is booted.
|
||||
+
|
||||
=item B<shutdown> I<domain-id>
|
||||
|
||||
Gracefully shuts down a domain. This coordinates with the domain OS
|
||||
@@ -568,6 +587,21 @@ is not available the processes will provide an exit code of 1.
|
||||
Undefine the configuration for an inactive domain. Since it's not running
|
||||
the domain name or UUID must be used as the I<domain-id>.
|
||||
|
||||
+=item B<vcpucount> I<domain-id> optional I<--maximum> I<--current>
|
||||
+I<--config> I<--live>
|
||||
+
|
||||
+Print information about the virtual cpu counts of the given
|
||||
+I<domain-id>. If no flags are specified, all possible counts are
|
||||
+listed in a table; otherwise, the output is limited to just the
|
||||
+numeric value requested.
|
||||
+
|
||||
+I<--maximum> requests information on the maximum cap of vcpus that a
|
||||
+domain can add via B<setvcpus>, while I<--current> shows the current
|
||||
+usage; these two flags cannot both be specified. I<--config>
|
||||
+requests information regarding the next time the domain will be
|
||||
+booted, while I<--live> requires a running domain and lists current
|
||||
+values; these two flags cannot both be specified.
|
||||
+
|
||||
=item B<vcpuinfo> I<domain-id>
|
||||
|
||||
Returns basic information about the domain virtual CPUs, like the number of
|
||||
--
|
||||
1.7.2.3
|
||||
|
519
docs/api_extension/0008-support-new-xml.patch
Normal file
519
docs/api_extension/0008-support-new-xml.patch
Normal file
@@ -0,0 +1,519 @@
|
||||
From 4617eedfaeee2b187a1f14691d25746ba3ff31b6 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Blake <eblake@redhat.com>
|
||||
Date: Wed, 29 Sep 2010 10:20:07 -0600
|
||||
Subject: [PATCH 07/15] vcpu: support maxvcpu in domain_conf
|
||||
|
||||
Although this patch adds a distinction between maximum vcpus and
|
||||
current vcpus in the XML, the values should be identical for all
|
||||
drivers at this point. Only in subsequent per-driver patches will
|
||||
a distinction be made.
|
||||
|
||||
In general, virDomainGetInfo should prefer the current vcpus.
|
||||
|
||||
* src/conf/domain_conf.h (_virDomainDef): Adjust vcpus to unsigned
|
||||
short, to match virDomainGetInfo limit. Add maxvcpus member.
|
||||
* src/conf/domain_conf.c (virDomainDefParseXML)
|
||||
(virDomainDefFormat): parse and print out vcpu details.
|
||||
* src/xen/xend_internal.c (xenDaemonParseSxpr)
|
||||
(xenDaemonFormatSxpr): Manage both vcpu numbers, and require them
|
||||
to be equal for now.
|
||||
* src/xen/xm_internal.c (xenXMDomainConfigParse)
|
||||
(xenXMDomainConfigFormat): Likewise.
|
||||
* src/phyp/phyp_driver.c (phypDomainDumpXML): Likewise.
|
||||
* src/openvz/openvz_conf.c (openvzLoadDomains): Likewise.
|
||||
* src/openvz/openvz_driver.c (openvzDomainDefineXML)
|
||||
(openvzDomainCreateXML, openvzDomainSetVcpusInternal): Likewise.
|
||||
* src/vbox/vbox_tmpl.c (vboxDomainDumpXML, vboxDomainDefineXML):
|
||||
Likewise.
|
||||
* src/xenapi/xenapi_driver.c (xenapiDomainDumpXML): Likewise.
|
||||
* src/xenapi/xenapi_utils.c (createVMRecordFromXml): Likewise.
|
||||
* src/esx/esx_vmx.c (esxVMX_ParseConfig, esxVMX_FormatConfig):
|
||||
Likewise.
|
||||
* src/qemu/qemu_conf.c (qemuBuildSmpArgStr)
|
||||
(qemuParseCommandLineSmp, qemuParseCommandLine): Likewise.
|
||||
* src/qemu/qemu_driver.c (qemudDomainHotplugVcpus): Likewise.
|
||||
* src/opennebula/one_conf.c (xmlOneTemplate): Likewise.
|
||||
---
|
||||
src/conf/domain_conf.c | 45 +++++++++++++++++++++++++++++++++++++------
|
||||
src/conf/domain_conf.h | 3 +-
|
||||
src/esx/esx_vmx.c | 24 ++++++++++++++--------
|
||||
src/opennebula/one_conf.c | 9 +++++--
|
||||
src/openvz/openvz_conf.c | 7 +++--
|
||||
src/openvz/openvz_driver.c | 15 +++++++++----
|
||||
src/phyp/phyp_driver.c | 2 +-
|
||||
src/qemu/qemu_conf.c | 14 +++++++++++-
|
||||
src/qemu/qemu_driver.c | 5 ++-
|
||||
src/vbox/vbox_tmpl.c | 12 +++++++---
|
||||
src/xen/xend_internal.c | 9 ++++---
|
||||
src/xen/xm_internal.c | 11 ++++++---
|
||||
src/xenapi/xenapi_driver.c | 2 +-
|
||||
src/xenapi/xenapi_utils.c | 4 +-
|
||||
14 files changed, 114 insertions(+), 48 deletions(-)
|
||||
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 78d7a6a..a997e06 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -4203,6 +4203,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
|
||||
int i, n;
|
||||
long id = -1;
|
||||
virDomainDefPtr def;
|
||||
+ unsigned long count;
|
||||
|
||||
if (VIR_ALLOC(def) < 0) {
|
||||
virReportOOMError();
|
||||
@@ -4287,8 +4288,37 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
|
||||
&def->mem.swap_hard_limit) < 0)
|
||||
def->mem.swap_hard_limit = 0;
|
||||
|
||||
- if (virXPathULong("string(./vcpu[1])", ctxt, &def->vcpus) < 0)
|
||||
- def->vcpus = 1;
|
||||
+ n = virXPathULong("string(./vcpu[1])", ctxt, &count);
|
||||
+ if (n == -2) {
|
||||
+ virDomainReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
+ _("maximum vcpus must be an integer"));
|
||||
+ goto error;
|
||||
+ } else if (n < 0) {
|
||||
+ def->maxvcpus = 1;
|
||||
+ } else {
|
||||
+ def->maxvcpus = count;
|
||||
+ if (def->maxvcpus != count || count == 0) {
|
||||
+ virDomainReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("invalid maxvcpus %lu"), count);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ n = virXPathULong("string(./vcpu[1]/@current)", ctxt, &count);
|
||||
+ if (n == -2) {
|
||||
+ virDomainReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
+ _("current vcpus must be an integer"));
|
||||
+ goto error;
|
||||
+ } else if (n < 0) {
|
||||
+ def->vcpus = def->maxvcpus;
|
||||
+ } else {
|
||||
+ def->vcpus = count;
|
||||
+ if (def->vcpus != count || count == 0 || def->maxvcpus < count) {
|
||||
+ virDomainReportError(VIR_ERR_XML_ERROR,
|
||||
+ _("invalid current vcpus %lu"), count);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
tmp = virXPathString("string(./vcpu[1]/@cpuset)", ctxt);
|
||||
if (tmp) {
|
||||
@@ -6462,17 +6492,18 @@ char *virDomainDefFormat(virDomainDefPtr def,
|
||||
if (def->cpumask[n] != 1)
|
||||
allones = 0;
|
||||
|
||||
- if (allones) {
|
||||
- virBufferAsprintf(&buf, " <vcpu>%lu</vcpu>\n", def->vcpus);
|
||||
- } else {
|
||||
+ virBufferAddLit(&buf, " <vcpu");
|
||||
+ if (!allones) {
|
||||
char *cpumask = NULL;
|
||||
if ((cpumask =
|
||||
virDomainCpuSetFormat(def->cpumask, def->cpumasklen)) == NULL)
|
||||
goto cleanup;
|
||||
- virBufferAsprintf(&buf, " <vcpu cpuset='%s'>%lu</vcpu>\n",
|
||||
- cpumask, def->vcpus);
|
||||
+ virBufferAsprintf(&buf, " cpuset='%s'", cpumask);
|
||||
VIR_FREE(cpumask);
|
||||
}
|
||||
+ if (def->vcpus != def->maxvcpus)
|
||||
+ virBufferAsprintf(&buf, " current='%u'", def->vcpus);
|
||||
+ virBufferAsprintf(&buf, ">%u</vcpu>\n", def->maxvcpus);
|
||||
|
||||
if (def->os.bootloader) {
|
||||
virBufferEscapeString(&buf, " <bootloader>%s</bootloader>\n",
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index db09c23..5499f28 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -885,7 +885,8 @@ struct _virDomainDef {
|
||||
unsigned long min_guarantee;
|
||||
unsigned long swap_hard_limit;
|
||||
} mem;
|
||||
- unsigned long vcpus;
|
||||
+ unsigned short vcpus;
|
||||
+ unsigned short maxvcpus;
|
||||
int cpumasklen;
|
||||
char *cpumask;
|
||||
|
||||
diff --git a/src/esx/esx_vmx.c b/src/esx/esx_vmx.c
|
||||
index 7ec8c0e..0a26614 100644
|
||||
--- a/src/esx/esx_vmx.c
|
||||
+++ b/src/esx/esx_vmx.c
|
||||
@@ -50,7 +50,7 @@ def->uuid = <value> <=> uuid.bios = "<value>"
|
||||
def->name = <value> <=> displayName = "<value>"
|
||||
def->mem.max_balloon = <value kilobyte> <=> memsize = "<value megabyte>" # must be a multiple of 4, defaults to 32
|
||||
def->mem.cur_balloon = <value kilobyte> <=> sched.mem.max = "<value megabyte>" # defaults to "unlimited" -> def->mem.cur_balloon = def->mem.max_balloon
|
||||
-def->vcpus = <value> <=> numvcpus = "<value>" # must be 1 or a multiple of 2, defaults to 1
|
||||
+def->maxvcpus = <value> <=> numvcpus = "<value>" # must be 1 or a multiple of 2, defaults to 1
|
||||
def->cpumask = <uint list> <=> sched.cpu.affinity = "<uint list>"
|
||||
|
||||
|
||||
@@ -1075,7 +1075,7 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- def->vcpus = numvcpus;
|
||||
+ def->maxvcpus = def->vcpus = numvcpus;
|
||||
|
||||
/* vmx:sched.cpu.affinity -> def:cpumask */
|
||||
// VirtualMachine:config.cpuAffinity.affinitySet
|
||||
@@ -2609,16 +2609,22 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
|
||||
(int)(def->mem.cur_balloon / 1024));
|
||||
}
|
||||
|
||||
- /* def:vcpus -> vmx:numvcpus */
|
||||
- if (def->vcpus <= 0 || (def->vcpus % 2 != 0 && def->vcpus != 1)) {
|
||||
+ /* def:maxvcpus -> vmx:numvcpus */
|
||||
+ if (def->vcpus != def->maxvcpus) {
|
||||
+ ESX_ERROR(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("No support for domain XML entry 'vcpu' attribute "
|
||||
+ "'current'"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ if (def->maxvcpus <= 0 || (def->maxvcpus % 2 != 0 && def->maxvcpus != 1)) {
|
||||
ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Expecting domain XML entry 'vcpu' to be an unsigned "
|
||||
"integer (1 or a multiple of 2) but found %d"),
|
||||
- (int)def->vcpus);
|
||||
+ def->maxvcpus);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- virBufferAsprintf(&buffer, "numvcpus = \"%d\"\n", (int)def->vcpus);
|
||||
+ virBufferAsprintf(&buffer, "numvcpus = \"%d\"\n", def->maxvcpus);
|
||||
|
||||
/* def:cpumask -> vmx:sched.cpu.affinity */
|
||||
if (def->cpumasklen > 0) {
|
||||
@@ -2632,11 +2638,11 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
|
||||
}
|
||||
}
|
||||
|
||||
- if (sched_cpu_affinity_length < def->vcpus) {
|
||||
+ if (sched_cpu_affinity_length < def->maxvcpus) {
|
||||
ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Expecting domain XML attribute 'cpuset' of entry "
|
||||
- "'vcpu' to contains at least %d CPU(s)"),
|
||||
- (int)def->vcpus);
|
||||
+ "'vcpu' to contain at least %d CPU(s)"),
|
||||
+ def->maxvcpus);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
diff --git a/src/opennebula/one_conf.c b/src/opennebula/one_conf.c
|
||||
index 44e28dc..2079c51 100644
|
||||
--- a/src/opennebula/one_conf.c
|
||||
+++ b/src/opennebula/one_conf.c
|
||||
@@ -1,5 +1,7 @@
|
||||
/*----------------------------------------------------------------------------------*/
|
||||
-/* Copyright 2002-2009, Distributed Systems Architecture Group, Universidad
|
||||
+/*
|
||||
+ * Copyright (C) 2010 Red Hat, Inc.
|
||||
+ * Copyright 2002-2009, Distributed Systems Architecture Group, Universidad
|
||||
* Complutense de Madrid (dsa-research.org)
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@@ -169,9 +171,10 @@ char* xmlOneTemplate(virDomainDefPtr def)
|
||||
{
|
||||
int i;
|
||||
virBuffer buf= VIR_BUFFER_INITIALIZER;
|
||||
- virBufferAsprintf(&buf,"#OpenNebula Template automatically generated by libvirt\nNAME = %s\nCPU = %ld\nMEMORY = %ld\n",
|
||||
+ virBufferAsprintf(&buf,"#OpenNebula Template automatically generated "
|
||||
+ "by libvirt\nNAME = %s\nCPU = %d\nMEMORY = %ld\n",
|
||||
def->name,
|
||||
- def->vcpus,
|
||||
+ def->maxvcpus,
|
||||
(def->mem.max_balloon)/1024);
|
||||
|
||||
/*Optional Booting OpenNebula Information:*/
|
||||
diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c
|
||||
index ec11bbc..c84a6f3 100644
|
||||
--- a/src/openvz/openvz_conf.c
|
||||
+++ b/src/openvz/openvz_conf.c
|
||||
@@ -507,11 +507,12 @@ int openvzLoadDomains(struct openvz_driver *driver) {
|
||||
veid);
|
||||
goto cleanup;
|
||||
} else if (ret > 0) {
|
||||
- dom->def->vcpus = strtoI(temp);
|
||||
+ dom->def->maxvcpus = strtoI(temp);
|
||||
}
|
||||
|
||||
- if (ret == 0 || dom->def->vcpus == 0)
|
||||
- dom->def->vcpus = openvzGetNodeCPUs();
|
||||
+ if (ret == 0 || dom->def->maxvcpus == 0)
|
||||
+ dom->def->maxvcpus = openvzGetNodeCPUs();
|
||||
+ dom->def->vcpus = dom->def->maxvcpus;
|
||||
|
||||
/* XXX load rest of VM config data .... */
|
||||
|
||||
diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
|
||||
index 0f3cfdf..b7c2754 100644
|
||||
--- a/src/openvz/openvz_driver.c
|
||||
+++ b/src/openvz/openvz_driver.c
|
||||
@@ -925,8 +925,13 @@ openvzDomainDefineXML(virConnectPtr conn, const char *xml)
|
||||
if (openvzDomainSetNetworkConfig(conn, vm->def) < 0)
|
||||
goto cleanup;
|
||||
|
||||
- if (vm->def->vcpus > 0) {
|
||||
- if (openvzDomainSetVcpusInternal(vm, vm->def->vcpus) < 0) {
|
||||
+ if (vm->def->vcpus != vm->def->maxvcpus) {
|
||||
+ openvzError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("current vcpu count must equal maximum"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ if (vm->def->maxvcpus > 0) {
|
||||
+ if (openvzDomainSetVcpusInternal(vm, vm->def->maxvcpus) < 0) {
|
||||
openvzError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("Could not set number of virtual cpu"));
|
||||
goto cleanup;
|
||||
@@ -1019,8 +1024,8 @@ openvzDomainCreateXML(virConnectPtr conn, const char *xml,
|
||||
vm->def->id = vm->pid;
|
||||
vm->state = VIR_DOMAIN_RUNNING;
|
||||
|
||||
- if (vm->def->vcpus > 0) {
|
||||
- if (openvzDomainSetVcpusInternal(vm, vm->def->vcpus) < 0) {
|
||||
+ if (vm->def->maxvcpus > 0) {
|
||||
+ if (openvzDomainSetVcpusInternal(vm, vm->def->maxvcpus) < 0) {
|
||||
openvzError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("Could not set number of virtual cpu"));
|
||||
goto cleanup;
|
||||
@@ -1249,7 +1254,7 @@ static int openvzDomainSetVcpusInternal(virDomainObjPtr vm,
|
||||
return -1;
|
||||
}
|
||||
|
||||
- vm->def->vcpus = nvcpus;
|
||||
+ vm->def->maxvcpus = vm->def->vcpus = nvcpus;
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
|
||||
index e284ae0..3d0ed11 100644
|
||||
--- a/src/phyp/phyp_driver.c
|
||||
+++ b/src/phyp/phyp_driver.c
|
||||
@@ -3540,7 +3540,7 @@ phypDomainDumpXML(virDomainPtr dom, int flags)
|
||||
goto err;
|
||||
}
|
||||
|
||||
- if ((def.vcpus =
|
||||
+ if ((def.maxvcpus = def.vcpus =
|
||||
phypGetLparCPU(dom->conn, managed_system, dom->id)) == 0) {
|
||||
VIR_ERROR0(_("Unable to determine domain's CPU."));
|
||||
goto err;
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index 83c0f83..38c8351 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -3711,7 +3711,7 @@ qemuBuildSmpArgStr(const virDomainDefPtr def,
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
- virBufferAsprintf(&buf, "%lu", def->vcpus);
|
||||
+ virBufferAsprintf(&buf, "%u", def->vcpus);
|
||||
|
||||
if ((qemuCmdFlags & QEMUD_CMD_FLAG_SMP_TOPOLOGY)) {
|
||||
/* sockets, cores, and threads are either all zero
|
||||
@@ -3722,11 +3722,18 @@ qemuBuildSmpArgStr(const virDomainDefPtr def,
|
||||
virBufferAsprintf(&buf, ",threads=%u", def->cpu->threads);
|
||||
}
|
||||
else {
|
||||
- virBufferAsprintf(&buf, ",sockets=%lu", def->vcpus);
|
||||
+ virBufferAsprintf(&buf, ",sockets=%u", def->maxvcpus);
|
||||
virBufferAsprintf(&buf, ",cores=%u", 1);
|
||||
virBufferAsprintf(&buf, ",threads=%u", 1);
|
||||
}
|
||||
}
|
||||
+ if (def->vcpus != def->maxvcpus) {
|
||||
+ virBufferFreeAndReset(&buf);
|
||||
+ qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("setting current vcpu count less than maximum is "
|
||||
+ "not supported yet"));
|
||||
+ return NULL;
|
||||
+ }
|
||||
|
||||
if (virBufferError(&buf)) {
|
||||
virBufferFreeAndReset(&buf);
|
||||
@@ -6178,6 +6185,8 @@ qemuParseCommandLineSmp(virDomainDefPtr dom,
|
||||
}
|
||||
}
|
||||
|
||||
+ dom->maxvcpus = dom->vcpus;
|
||||
+
|
||||
if (sockets && cores && threads) {
|
||||
virCPUDefPtr cpu;
|
||||
|
||||
@@ -6247,6 +6256,7 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr caps,
|
||||
|
||||
def->id = -1;
|
||||
def->mem.cur_balloon = def->mem.max_balloon = 64 * 1024;
|
||||
+ def->maxvcpus = 1;
|
||||
def->vcpus = 1;
|
||||
def->clock.offset = VIR_DOMAIN_CLOCK_OFFSET_UTC;
|
||||
def->features = (1 << VIR_DOMAIN_FEATURE_ACPI)
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index 7a2ea8f..c66dc04 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -2425,8 +2425,9 @@ qemuDetectVcpuPIDs(struct qemud_driver *driver,
|
||||
|
||||
if (ncpupids != vm->def->vcpus) {
|
||||
qemuReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- _("got wrong number of vCPU pids from QEMU monitor. got %d, wanted %d"),
|
||||
- ncpupids, (int)vm->def->vcpus);
|
||||
+ _("got wrong number of vCPU pids from QEMU monitor. "
|
||||
+ "got %d, wanted %d"),
|
||||
+ ncpupids, vm->def->vcpus);
|
||||
VIR_FREE(cpupids);
|
||||
return -1;
|
||||
}
|
||||
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
|
||||
index 0cbe8b3..5a859a4 100644
|
||||
--- a/src/vbox/vbox_tmpl.c
|
||||
+++ b/src/vbox/vbox_tmpl.c
|
||||
@@ -2028,7 +2028,7 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
|
||||
def->mem.max_balloon = memorySize * 1024;
|
||||
|
||||
machine->vtbl->GetCPUCount(machine, &CPUCount);
|
||||
- def->vcpus = CPUCount;
|
||||
+ def->maxvcpus = def->vcpus = CPUCount;
|
||||
|
||||
/* Skip cpumasklen, cpumask, onReboot, onPoweroff, onCrash */
|
||||
|
||||
@@ -4598,11 +4598,15 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
|
||||
def->mem.cur_balloon, (unsigned)rc);
|
||||
}
|
||||
|
||||
- rc = machine->vtbl->SetCPUCount(machine, def->vcpus);
|
||||
+ if (def->vcpus != def->maxvcpus) {
|
||||
+ vboxError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("current vcpu count must equal maximum"));
|
||||
+ }
|
||||
+ rc = machine->vtbl->SetCPUCount(machine, def->maxvcpus);
|
||||
if (NS_FAILED(rc)) {
|
||||
vboxError(VIR_ERR_INTERNAL_ERROR,
|
||||
- _("could not set the number of virtual CPUs to: %lu, rc=%08x"),
|
||||
- def->vcpus, (unsigned)rc);
|
||||
+ _("could not set the number of virtual CPUs to: %u, rc=%08x"),
|
||||
+ def->maxvcpus, (unsigned)rc);
|
||||
}
|
||||
|
||||
#if VBOX_API_VERSION < 3001
|
||||
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
|
||||
index 5ffc3c8..456b477 100644
|
||||
--- a/src/xen/xend_internal.c
|
||||
+++ b/src/xen/xend_internal.c
|
||||
@@ -2190,7 +2190,8 @@ xenDaemonParseSxpr(virConnectPtr conn,
|
||||
}
|
||||
}
|
||||
|
||||
- def->vcpus = sexpr_int(root, "domain/vcpus");
|
||||
+ def->maxvcpus = sexpr_int(root, "domain/vcpus");
|
||||
+ def->vcpus = def->maxvcpus;
|
||||
|
||||
tmp = sexpr_node(root, "domain/on_poweroff");
|
||||
if (tmp != NULL) {
|
||||
@@ -5649,7 +5650,7 @@ xenDaemonFormatSxprInput(virDomainInputDefPtr input,
|
||||
*
|
||||
* Generate an SEXPR representing the domain configuration.
|
||||
*
|
||||
- * Returns the 0 terminatedi S-Expr string or NULL in case of error.
|
||||
+ * Returns the 0 terminated S-Expr string or NULL in case of error.
|
||||
* the caller must free() the returned value.
|
||||
*/
|
||||
char *
|
||||
@@ -5666,7 +5667,7 @@ xenDaemonFormatSxpr(virConnectPtr conn,
|
||||
virBufferAsprintf(&buf, "(name '%s')", def->name);
|
||||
virBufferAsprintf(&buf, "(memory %lu)(maxmem %lu)",
|
||||
def->mem.cur_balloon/1024, def->mem.max_balloon/1024);
|
||||
- virBufferAsprintf(&buf, "(vcpus %lu)", def->vcpus);
|
||||
+ virBufferAsprintf(&buf, "(vcpus %u)", def->maxvcpus);
|
||||
|
||||
if (def->cpumask) {
|
||||
char *ranges = virDomainCpuSetFormat(def->cpumask, def->cpumasklen);
|
||||
@@ -5761,7 +5762,7 @@ xenDaemonFormatSxpr(virConnectPtr conn,
|
||||
else
|
||||
virBufferAsprintf(&buf, "(kernel '%s')", def->os.loader);
|
||||
|
||||
- virBufferAsprintf(&buf, "(vcpus %lu)", def->vcpus);
|
||||
+ virBufferAsprintf(&buf, "(vcpus %u)", def->maxvcpus);
|
||||
|
||||
for (i = 0 ; i < def->os.nBootDevs ; i++) {
|
||||
switch (def->os.bootDevs[i]) {
|
||||
diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
|
||||
index 8e42a1c..bf20a64 100644
|
||||
--- a/src/xen/xm_internal.c
|
||||
+++ b/src/xen/xm_internal.c
|
||||
@@ -678,6 +678,7 @@ xenXMDomainConfigParse(virConnectPtr conn, virConfPtr conf) {
|
||||
int i;
|
||||
const char *defaultArch, *defaultMachine;
|
||||
int vmlocaltime = 0;
|
||||
+ unsigned long count;
|
||||
|
||||
if (VIR_ALLOC(def) < 0) {
|
||||
virReportOOMError();
|
||||
@@ -770,9 +771,11 @@ xenXMDomainConfigParse(virConnectPtr conn, virConfPtr conf) {
|
||||
def->mem.cur_balloon *= 1024;
|
||||
def->mem.max_balloon *= 1024;
|
||||
|
||||
-
|
||||
- if (xenXMConfigGetULong(conf, "vcpus", &def->vcpus, 1) < 0)
|
||||
+ if (xenXMConfigGetULong(conf, "vcpus", &count, 1) < 0 ||
|
||||
+ (unsigned short) count != count)
|
||||
goto cleanup;
|
||||
+ def->maxvcpus = count;
|
||||
+ def->vcpus = def->maxvcpus;
|
||||
|
||||
if (xenXMConfigGetString(conf, "cpus", &str, NULL) < 0)
|
||||
goto cleanup;
|
||||
@@ -1650,7 +1653,7 @@ int xenXMDomainSetVcpus(virDomainPtr domain, unsigned int vcpus) {
|
||||
if (!(entry = virHashLookup(priv->configCache, filename)))
|
||||
goto cleanup;
|
||||
|
||||
- entry->def->vcpus = vcpus;
|
||||
+ entry->def->maxvcpus = entry->def->vcpus = vcpus;
|
||||
|
||||
/* If this fails, should we try to undo our changes to the
|
||||
* in-memory representation of the config file. I say not!
|
||||
@@ -2241,7 +2244,7 @@ virConfPtr xenXMDomainConfigFormat(virConnectPtr conn,
|
||||
if (xenXMConfigSetInt(conf, "memory", def->mem.cur_balloon / 1024) < 0)
|
||||
goto no_memory;
|
||||
|
||||
- if (xenXMConfigSetInt(conf, "vcpus", def->vcpus) < 0)
|
||||
+ if (xenXMConfigSetInt(conf, "vcpus", def->maxvcpus) < 0)
|
||||
goto no_memory;
|
||||
|
||||
if ((def->cpumask != NULL) &&
|
||||
diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c
|
||||
index 7d4ab8d..5ccdede 100644
|
||||
--- a/src/xenapi/xenapi_driver.c
|
||||
+++ b/src/xenapi/xenapi_driver.c
|
||||
@@ -1335,7 +1335,7 @@ xenapiDomainDumpXML (virDomainPtr dom, int flags ATTRIBUTE_UNUSED)
|
||||
} else {
|
||||
defPtr->mem.cur_balloon = memory;
|
||||
}
|
||||
- defPtr->vcpus = xenapiDomainGetMaxVcpus(dom);
|
||||
+ defPtr->maxvcpus = defPtr->vcpus = xenapiDomainGetMaxVcpus(dom);
|
||||
enum xen_on_normal_exit action;
|
||||
if (xen_vm_get_actions_after_shutdown(session, &action, vm)) {
|
||||
defPtr->onPoweroff = xenapiNormalExitEnum2virDomainLifecycle(action);
|
||||
diff --git a/src/xenapi/xenapi_utils.c b/src/xenapi/xenapi_utils.c
|
||||
index be55491..a7e2a4b 100644
|
||||
--- a/src/xenapi/xenapi_utils.c
|
||||
+++ b/src/xenapi/xenapi_utils.c
|
||||
@@ -510,8 +510,8 @@ createVMRecordFromXml (virConnectPtr conn, virDomainDefPtr def,
|
||||
else
|
||||
(*record)->memory_dynamic_max = (*record)->memory_static_max;
|
||||
|
||||
- if (def->vcpus) {
|
||||
- (*record)->vcpus_max = (int64_t) def->vcpus;
|
||||
+ if (def->maxvcpus) {
|
||||
+ (*record)->vcpus_max = (int64_t) def->maxvcpus;
|
||||
(*record)->vcpus_at_startup = (int64_t) def->vcpus;
|
||||
}
|
||||
if (def->onPoweroff)
|
||||
--
|
||||
1.7.2.3
|
||||
|
197
docs/api_extension/0009-support-all-flags-in-test-driver.patch
Normal file
197
docs/api_extension/0009-support-all-flags-in-test-driver.patch
Normal file
@@ -0,0 +1,197 @@
|
||||
From 6c9e6b956453d0f0c4ff542ef8a184d663a39266 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Blake <eblake@redhat.com>
|
||||
Date: Mon, 4 Oct 2010 17:01:12 -0600
|
||||
Subject: [PATCH 09/15] vcpu: support all flags in test driver
|
||||
|
||||
* src/test/test_driver.c (testDomainGetVcpusFlags)
|
||||
(testDomainSetVcpusFlags): Support all flags.
|
||||
(testDomainUpdateVCPUs): Update cpu count here.
|
||||
---
|
||||
src/test/test_driver.c | 128 ++++++++++++++++++++++++++++++++++++++++-------
|
||||
1 files changed, 109 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
|
||||
index b70c80d..a9d3d89 100644
|
||||
--- a/src/test/test_driver.c
|
||||
+++ b/src/test/test_driver.c
|
||||
@@ -450,6 +450,7 @@ testDomainUpdateVCPUs(virConnectPtr conn,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
+ dom->def->vcpus = nvcpus;
|
||||
ret = 0;
|
||||
cleanup:
|
||||
return ret;
|
||||
@@ -2032,12 +2033,51 @@ cleanup:
|
||||
static int
|
||||
testDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
|
||||
{
|
||||
- if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
|
||||
- testError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
|
||||
+ testConnPtr privconn = domain->conn->privateData;
|
||||
+ virDomainObjPtr vm;
|
||||
+ virDomainDefPtr def;
|
||||
+ int ret = -1;
|
||||
+
|
||||
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
|
||||
+ VIR_DOMAIN_VCPU_CONFIG |
|
||||
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
|
||||
+
|
||||
+ /* Exactly one of LIVE or CONFIG must be set. */
|
||||
+ if (!(flags & VIR_DOMAIN_VCPU_LIVE) == !(flags & VIR_DOMAIN_VCPU_CONFIG)) {
|
||||
+ testError(VIR_ERR_INVALID_ARG,
|
||||
+ _("invalid flag combination: (0x%x)"), flags);
|
||||
return -1;
|
||||
}
|
||||
|
||||
- return testGetMaxVCPUs(domain->conn, "test");
|
||||
+ testDriverLock(privconn);
|
||||
+ vm = virDomainFindByUUID(&privconn->domains, domain->uuid);
|
||||
+ testDriverUnlock(privconn);
|
||||
+
|
||||
+ if (!vm) {
|
||||
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
|
||||
+ virUUIDFormat(domain->uuid, uuidstr);
|
||||
+ testError(VIR_ERR_NO_DOMAIN,
|
||||
+ _("no domain with matching uuid '%s'"), uuidstr);
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+
|
||||
+ if (flags & VIR_DOMAIN_VCPU_LIVE) {
|
||||
+ if (!virDomainObjIsActive(vm)) {
|
||||
+ testError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
+ _("domain not active"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ def = vm->def;
|
||||
+ } else {
|
||||
+ def = vm->newDef ? vm->newDef : vm->def;
|
||||
+ }
|
||||
+
|
||||
+ ret = (flags & VIR_DOMAIN_VCPU_MAXIMUM) ? def->maxvcpus : def->vcpus;
|
||||
+
|
||||
+cleanup:
|
||||
+ if (vm)
|
||||
+ virDomainObjUnlock(vm);
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -2053,21 +2093,30 @@ testDomainSetVcpusFlags(virDomainPtr domain, unsigned int nrCpus,
|
||||
{
|
||||
testConnPtr privconn = domain->conn->privateData;
|
||||
virDomainObjPtr privdom = NULL;
|
||||
+ virDomainDefPtr def;
|
||||
int ret = -1, maxvcpus;
|
||||
|
||||
- if (flags != VIR_DOMAIN_VCPU_LIVE) {
|
||||
- testError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
|
||||
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
|
||||
+ VIR_DOMAIN_VCPU_CONFIG |
|
||||
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
|
||||
+
|
||||
+ /* At least one of LIVE or CONFIG must be set. MAXIMUM cannot be
|
||||
+ * mixed with LIVE. */
|
||||
+ if ((flags & (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG)) == 0 ||
|
||||
+ (flags & (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) ==
|
||||
+ (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) {
|
||||
+ testError(VIR_ERR_INVALID_ARG,
|
||||
+ _("invalid flag combination: (0x%x)"), flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ if (!nrCpus || (maxvcpus = testGetMaxVCPUs(domain->conn, NULL)) < nrCpus) {
|
||||
+ testError(VIR_ERR_INVALID_ARG,
|
||||
+ _("argument out of range: %d"), nrCpus);
|
||||
return -1;
|
||||
}
|
||||
-
|
||||
- /* Do this first before locking */
|
||||
- maxvcpus = testDomainGetMaxVcpus(domain);
|
||||
- if (maxvcpus < 0)
|
||||
- goto cleanup;
|
||||
|
||||
testDriverLock(privconn);
|
||||
- privdom = virDomainFindByName(&privconn->domains,
|
||||
- domain->name);
|
||||
+ privdom = virDomainFindByUUID(&privconn->domains, domain->uuid);
|
||||
testDriverUnlock(privconn);
|
||||
|
||||
if (privdom == NULL) {
|
||||
@@ -2075,13 +2124,17 @@ testDomainSetVcpusFlags(virDomainPtr domain, unsigned int nrCpus,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- if (!virDomainObjIsActive(privdom)) {
|
||||
+ if (!virDomainObjIsActive(privdom) && (flags & VIR_DOMAIN_VCPU_LIVE)) {
|
||||
testError(VIR_ERR_OPERATION_INVALID,
|
||||
"%s", _("cannot hotplug vcpus for an inactive domain"));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- /* We allow more cpus in guest than host */
|
||||
+ /* We allow more cpus in guest than host, but not more than the
|
||||
+ * domain's starting limit. */
|
||||
+ if ((flags & (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) ==
|
||||
+ VIR_DOMAIN_VCPU_LIVE && privdom->def->maxvcpus < maxvcpus)
|
||||
+ maxvcpus = privdom->def->maxvcpus;
|
||||
if (nrCpus > maxvcpus) {
|
||||
testError(VIR_ERR_INVALID_ARG,
|
||||
"requested cpu amount exceeds maximum (%d > %d)",
|
||||
@@ -2089,12 +2142,49 @@ testDomainSetVcpusFlags(virDomainPtr domain, unsigned int nrCpus,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- /* Update VCPU state for the running domain */
|
||||
- if (testDomainUpdateVCPUs(domain->conn, privdom, nrCpus, 0) < 0)
|
||||
- goto cleanup;
|
||||
+ switch (flags) {
|
||||
+ case VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_CONFIG:
|
||||
+ def = privdom->def;
|
||||
+ if (virDomainObjIsActive(privdom)) {
|
||||
+ if (privdom->newDef)
|
||||
+ def = privdom->newDef;
|
||||
+ else {
|
||||
+ testError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
+ _("no persistent state"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ }
|
||||
+ def->maxvcpus = nrCpus;
|
||||
+ if (nrCpus < def->vcpus)
|
||||
+ def->vcpus = nrCpus;
|
||||
+ ret = 0;
|
||||
+ break;
|
||||
|
||||
- privdom->def->vcpus = nrCpus;
|
||||
- ret = 0;
|
||||
+ case VIR_DOMAIN_VCPU_CONFIG:
|
||||
+ def = privdom->def;
|
||||
+ if (virDomainObjIsActive(privdom)) {
|
||||
+ if (privdom->newDef)
|
||||
+ def = privdom->newDef;
|
||||
+ else {
|
||||
+ testError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
+ _("no persistent state"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ }
|
||||
+ def->vcpus = nrCpus;
|
||||
+ ret = 0;
|
||||
+ break;
|
||||
+
|
||||
+ case VIR_DOMAIN_VCPU_LIVE:
|
||||
+ ret = testDomainUpdateVCPUs(domain->conn, privdom, nrCpus, 0);
|
||||
+ break;
|
||||
+
|
||||
+ case VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG:
|
||||
+ ret = testDomainUpdateVCPUs(domain->conn, privdom, nrCpus, 0);
|
||||
+ if (ret == 0 && privdom->newDef)
|
||||
+ privdom->newDef->vcpus = nrCpus;
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
cleanup:
|
||||
if (privdom)
|
||||
--
|
||||
1.7.2.3
|
||||
|
@@ -0,0 +1,122 @@
|
||||
From d67c189e80e6aef7adf13e5763365555cfc1a02a Mon Sep 17 00:00:00 2001
|
||||
From: Eric Blake <eblake@redhat.com>
|
||||
Date: Wed, 29 Sep 2010 15:58:47 -0600
|
||||
Subject: [PATCH 10/15] vcpu: improve vcpu support in qemu command line
|
||||
|
||||
* src/qemu/qemu_conf.c (qemuParseCommandLineSmp): Distinguish
|
||||
between vcpus and maxvcpus, for new enough qemu.
|
||||
* tests/qemuargv2xmltest.c (mymain): Add new test.
|
||||
* tests/qemuxml2argvtest.c (mymain): Likewise.
|
||||
* tests/qemuxml2xmltest.c (mymain): Likewise.
|
||||
* tests/qemuxml2argvdata/qemuxml2argv-smp.args: New file.
|
||||
---
|
||||
src/qemu/qemu_conf.c | 13 +++++++++----
|
||||
tests/qemuargv2xmltest.c | 2 ++
|
||||
tests/qemuxml2argvdata/qemuxml2argv-smp.args | 1 +
|
||||
tests/qemuxml2argvtest.c | 2 ++
|
||||
tests/qemuxml2xmltest.c | 2 ++
|
||||
5 files changed, 16 insertions(+), 4 deletions(-)
|
||||
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-smp.args
|
||||
|
||||
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
|
||||
index 38c8351..ffe184b 100644
|
||||
--- a/src/qemu/qemu_conf.c
|
||||
+++ b/src/qemu/qemu_conf.c
|
||||
@@ -3714,6 +3714,8 @@ qemuBuildSmpArgStr(const virDomainDefPtr def,
|
||||
virBufferAsprintf(&buf, "%u", def->vcpus);
|
||||
|
||||
if ((qemuCmdFlags & QEMUD_CMD_FLAG_SMP_TOPOLOGY)) {
|
||||
+ if (def->vcpus != def->maxvcpus)
|
||||
+ virBufferAsprintf(&buf, ",maxcpus=%u", def->maxvcpus);
|
||||
/* sockets, cores, and threads are either all zero
|
||||
* or all non-zero, thus checking one of them is enough */
|
||||
if (def->cpu && def->cpu->sockets) {
|
||||
@@ -3726,12 +3728,12 @@ qemuBuildSmpArgStr(const virDomainDefPtr def,
|
||||
virBufferAsprintf(&buf, ",cores=%u", 1);
|
||||
virBufferAsprintf(&buf, ",threads=%u", 1);
|
||||
}
|
||||
- }
|
||||
- if (def->vcpus != def->maxvcpus) {
|
||||
+ } else if (def->vcpus != def->maxvcpus) {
|
||||
virBufferFreeAndReset(&buf);
|
||||
+ /* FIXME - consider hot-unplugging cpus after boot for older qemu */
|
||||
qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("setting current vcpu count less than maximum is "
|
||||
- "not supported yet"));
|
||||
+ "not supported with this QEMU binary"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -6153,6 +6155,7 @@ qemuParseCommandLineSmp(virDomainDefPtr dom,
|
||||
unsigned int sockets = 0;
|
||||
unsigned int cores = 0;
|
||||
unsigned int threads = 0;
|
||||
+ unsigned int maxcpus = 0;
|
||||
int i;
|
||||
int nkws;
|
||||
char **kws;
|
||||
@@ -6180,12 +6183,14 @@ qemuParseCommandLineSmp(virDomainDefPtr dom,
|
||||
cores = n;
|
||||
else if (STREQ(kws[i], "threads"))
|
||||
threads = n;
|
||||
+ else if (STREQ(kws[i], "maxcpus"))
|
||||
+ maxcpus = n;
|
||||
else
|
||||
goto syntax;
|
||||
}
|
||||
}
|
||||
|
||||
- dom->maxvcpus = dom->vcpus;
|
||||
+ dom->maxvcpus = maxcpus ? maxcpus : dom->vcpus;
|
||||
|
||||
if (sockets && cores && threads) {
|
||||
virCPUDefPtr cpu;
|
||||
diff --git a/tests/qemuargv2xmltest.c b/tests/qemuargv2xmltest.c
|
||||
index 4f9ec84..d941b0b 100644
|
||||
--- a/tests/qemuargv2xmltest.c
|
||||
+++ b/tests/qemuargv2xmltest.c
|
||||
@@ -221,6 +221,8 @@ mymain(int argc, char **argv)
|
||||
|
||||
DO_TEST("hostdev-pci-address");
|
||||
|
||||
+ DO_TEST("smp");
|
||||
+
|
||||
DO_TEST_FULL("restore-v1", 0, "stdio");
|
||||
DO_TEST_FULL("restore-v2", 0, "stdio");
|
||||
DO_TEST_FULL("restore-v2", 0, "exec:cat");
|
||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smp.args b/tests/qemuxml2argvdata/qemuxml2argv-smp.args
|
||||
new file mode 100644
|
||||
index 0000000..3ec8f15
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-smp.args
|
||||
@@ -0,0 +1 @@
|
||||
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1,maxcpus=2,sockets=2,cores=1,threads=1 -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb
|
||||
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
|
||||
index 92d5b18..551d6c4 100644
|
||||
--- a/tests/qemuxml2argvtest.c
|
||||
+++ b/tests/qemuxml2argvtest.c
|
||||
@@ -385,6 +385,8 @@ mymain(int argc, char **argv)
|
||||
|
||||
DO_TEST("qemu-ns", 0);
|
||||
|
||||
+ DO_TEST("smp", QEMUD_CMD_FLAG_SMP_TOPOLOGY);
|
||||
+
|
||||
free(driver.stateDir);
|
||||
virCapabilitiesFree(driver.caps);
|
||||
|
||||
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
|
||||
index a33d435..cdc4390 100644
|
||||
--- a/tests/qemuxml2xmltest.c
|
||||
+++ b/tests/qemuxml2xmltest.c
|
||||
@@ -180,6 +180,8 @@ mymain(int argc, char **argv)
|
||||
DO_TEST("encrypted-disk");
|
||||
DO_TEST("memtune");
|
||||
|
||||
+ DO_TEST("smp");
|
||||
+
|
||||
/* These tests generate different XML */
|
||||
DO_TEST_DIFFERENT("balloon-device-auto");
|
||||
DO_TEST_DIFFERENT("channel-virtio-auto");
|
||||
--
|
||||
1.7.2.3
|
||||
|
@@ -0,0 +1,169 @@
|
||||
From 28a3605906385cba43df77051dc26e865f237b09 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Blake <eblake@redhat.com>
|
||||
Date: Wed, 29 Sep 2010 17:40:45 -0600
|
||||
Subject: [PATCH 11/15] vcpu: complete vcpu support in qemu driver
|
||||
|
||||
* src/qemu/qemu_driver.c (qemudDomainSetVcpusFlags)
|
||||
(qemudDomainGetVcpusFlags): Support all feasible flag
|
||||
combinations.
|
||||
---
|
||||
src/qemu/qemu_driver.c | 100 ++++++++++++++++++++++++++++++++++++++++-------
|
||||
1 files changed, 85 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||
index c66dc04..a9e057f 100644
|
||||
--- a/src/qemu/qemu_driver.c
|
||||
+++ b/src/qemu/qemu_driver.c
|
||||
@@ -5941,13 +5941,27 @@ qemudDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
|
||||
{
|
||||
struct qemud_driver *driver = dom->conn->privateData;
|
||||
virDomainObjPtr vm;
|
||||
+ virDomainDefPtr def;
|
||||
const char * type;
|
||||
int max;
|
||||
int ret = -1;
|
||||
|
||||
- if (flags != VIR_DOMAIN_VCPU_LIVE) {
|
||||
- qemuReportError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
|
||||
- flags);
|
||||
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
|
||||
+ VIR_DOMAIN_VCPU_CONFIG |
|
||||
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
|
||||
+
|
||||
+ /* At least one of LIVE or CONFIG must be set. MAXIMUM cannot be
|
||||
+ * mixed with LIVE. */
|
||||
+ if ((flags & (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG)) == 0 ||
|
||||
+ (flags & (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) ==
|
||||
+ (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) {
|
||||
+ qemuReportError(VIR_ERR_INVALID_ARG,
|
||||
+ _("invalid flag combination: (0x%x)"), flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ if (!nvcpus || (unsigned short) nvcpus != nvcpus) {
|
||||
+ qemuReportError(VIR_ERR_INVALID_ARG,
|
||||
+ _("argument out of range: %d"), nvcpus);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -5966,7 +5980,7 @@ qemudDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
|
||||
if (qemuDomainObjBeginJob(vm) < 0)
|
||||
goto cleanup;
|
||||
|
||||
- if (!virDomainObjIsActive(vm)) {
|
||||
+ if (!virDomainObjIsActive(vm) && (flags & VIR_DOMAIN_VCPU_LIVE)) {
|
||||
qemuReportError(VIR_ERR_OPERATION_INVALID,
|
||||
"%s", _("domain is not running"));
|
||||
goto endjob;
|
||||
@@ -5985,6 +5999,11 @@ qemudDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
|
||||
goto endjob;
|
||||
}
|
||||
|
||||
+ if ((flags & (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) ==
|
||||
+ VIR_DOMAIN_VCPU_LIVE && vm->def->maxvcpus < max) {
|
||||
+ max = vm->def->maxvcpus;
|
||||
+ }
|
||||
+
|
||||
if (nvcpus > max) {
|
||||
qemuReportError(VIR_ERR_INVALID_ARG,
|
||||
_("requested vcpus is greater than max allowable"
|
||||
@@ -5992,7 +6011,49 @@ qemudDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
|
||||
goto endjob;
|
||||
}
|
||||
|
||||
- ret = qemudDomainHotplugVcpus(vm, nvcpus);
|
||||
+ switch (flags) {
|
||||
+ case VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_CONFIG:
|
||||
+ def = vm->def;
|
||||
+ if (virDomainObjIsActive(vm)) {
|
||||
+ if (vm->newDef)
|
||||
+ def = vm->newDef;
|
||||
+ else{
|
||||
+ qemuReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
+ _("no persistent state"));
|
||||
+ goto endjob;
|
||||
+ }
|
||||
+ }
|
||||
+ def->maxvcpus = nvcpus;
|
||||
+ if (nvcpus < vm->newDef->vcpus)
|
||||
+ def->vcpus = nvcpus;
|
||||
+ ret = 0;
|
||||
+ break;
|
||||
+
|
||||
+ case VIR_DOMAIN_VCPU_CONFIG:
|
||||
+ def = vm->def;
|
||||
+ if (virDomainObjIsActive(vm)) {
|
||||
+ if (vm->newDef)
|
||||
+ def = vm->newDef;
|
||||
+ else {
|
||||
+ qemuReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
+ _("no persistent state"));
|
||||
+ goto endjob;
|
||||
+ }
|
||||
+ }
|
||||
+ def->vcpus = nvcpus;
|
||||
+ ret = 0;
|
||||
+ break;
|
||||
+
|
||||
+ case VIR_DOMAIN_VCPU_LIVE:
|
||||
+ ret = qemudDomainHotplugVcpus(vm, nvcpus);
|
||||
+ break;
|
||||
+
|
||||
+ case VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG:
|
||||
+ ret = qemudDomainHotplugVcpus(vm, nvcpus);
|
||||
+ if (ret == 0 && vm->newDef)
|
||||
+ vm->newDef->vcpus = nvcpus;
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
endjob:
|
||||
if (qemuDomainObjEndJob(vm) == 0)
|
||||
@@ -6171,12 +6232,17 @@ qemudDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
|
||||
{
|
||||
struct qemud_driver *driver = dom->conn->privateData;
|
||||
virDomainObjPtr vm;
|
||||
- const char *type;
|
||||
+ virDomainDefPtr def;
|
||||
int ret = -1;
|
||||
|
||||
- if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
|
||||
- qemuReportError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
|
||||
- flags);
|
||||
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
|
||||
+ VIR_DOMAIN_VCPU_CONFIG |
|
||||
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
|
||||
+
|
||||
+ /* Exactly one of LIVE or CONFIG must be set. */
|
||||
+ if (!(flags & VIR_DOMAIN_VCPU_LIVE) == !(flags & VIR_DOMAIN_VCPU_CONFIG)) {
|
||||
+ qemuReportError(VIR_ERR_INVALID_ARG,
|
||||
+ _("invalid flag combination: (0x%x)"), flags);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -6192,14 +6258,18 @@ qemudDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
- if (!(type = virDomainVirtTypeToString(vm->def->virtType))) {
|
||||
- qemuReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
- _("unknown virt type in domain definition '%d'"),
|
||||
- vm->def->virtType);
|
||||
- goto cleanup;
|
||||
+ if (flags & VIR_DOMAIN_VCPU_LIVE) {
|
||||
+ if (!virDomainObjIsActive(vm)) {
|
||||
+ qemuReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
+ _("domain not active"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ def = vm->def;
|
||||
+ } else {
|
||||
+ def = vm->newDef ? vm->newDef : vm->def;
|
||||
}
|
||||
|
||||
- ret = qemudGetMaxVCPUs(NULL, type);
|
||||
+ ret = (flags & VIR_DOMAIN_VCPU_MAXIMUM) ? def->maxvcpus : def->vcpus;
|
||||
|
||||
cleanup:
|
||||
if (vm)
|
||||
--
|
||||
1.7.2.3
|
||||
|
@@ -0,0 +1,294 @@
|
||||
From 0fab10e5ed971ab4f960a53e9640b0672f4b8ac3 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Blake <eblake@redhat.com>
|
||||
Date: Tue, 5 Oct 2010 08:18:52 -0600
|
||||
Subject: [PATCH 12/15] vcpu: improve vcpu support in xen command line
|
||||
|
||||
This patch series focuses on xendConfigVersion 2 (xm_internal) and 3
|
||||
(xend_internal), but leaves out changes for xenapi drivers.
|
||||
|
||||
See this link for more details about vcpu_avail for xm usage.
|
||||
http://lists.xensource.com/archives/html/xen-devel/2009-11/msg01061.html
|
||||
|
||||
This relies on the fact that def->maxvcpus can be at most 32 with xen.
|
||||
|
||||
* src/xen/xend_internal.c (xenDaemonParseSxpr)
|
||||
(sexpr_to_xend_domain_info, xenDaemonFormatSxpr): Use vcpu_avail
|
||||
when current vcpus is less than maximum.
|
||||
* src/xen/xm_internal.c (xenXMDomainConfigParse)
|
||||
(xenXMDomainConfigFormat): Likewise.
|
||||
* tests/xml2sexprdata/xml2sexpr-pv-vcpus.sexpr: New file.
|
||||
* tests/sexpr2xmldata/sexpr2xml-pv-vcpus.sexpr: Likewise.
|
||||
* tests/sexpr2xmldata/sexpr2xml-pv-vcpus.xml: Likewise.
|
||||
* tests/xmconfigdata/test-paravirt-vcpu.cfg: Likewise.
|
||||
* tests/xmconfigdata/test-paravirt-vcpu.xml: Likewise.
|
||||
* tests/xml2sexprtest.c (mymain): New test.
|
||||
* tests/sexpr2xmltest.c (mymain): Likewise.
|
||||
* tests/xmconfigtest.c (mymain): Likewise.
|
||||
---
|
||||
src/xen/xend_internal.c | 19 +++++++++++++--
|
||||
src/xen/xm_internal.c | 10 ++++++-
|
||||
tests/sexpr2xmldata/sexpr2xml-pv-vcpus.sexpr | 1 +
|
||||
tests/sexpr2xmldata/sexpr2xml-pv-vcpus.xml | 27 +++++++++++++++++++++
|
||||
tests/sexpr2xmltest.c | 1 +
|
||||
tests/xmconfigdata/test-paravirt-vcpu.cfg | 17 +++++++++++++
|
||||
tests/xmconfigdata/test-paravirt-vcpu.xml | 32 ++++++++++++++++++++++++++
|
||||
tests/xmconfigtest.c | 1 +
|
||||
tests/xml2sexprdata/xml2sexpr-pv-vcpus.sexpr | 1 +
|
||||
tests/xml2sexprtest.c | 1 +
|
||||
10 files changed, 105 insertions(+), 5 deletions(-)
|
||||
create mode 100644 tests/sexpr2xmldata/sexpr2xml-pv-vcpus.sexpr
|
||||
create mode 100644 tests/sexpr2xmldata/sexpr2xml-pv-vcpus.xml
|
||||
create mode 100644 tests/xmconfigdata/test-paravirt-vcpu.cfg
|
||||
create mode 100644 tests/xmconfigdata/test-paravirt-vcpu.xml
|
||||
create mode 100644 tests/xml2sexprdata/xml2sexpr-pv-vcpus.sexpr
|
||||
|
||||
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
|
||||
index 456b477..dfc6415 100644
|
||||
--- a/src/xen/xend_internal.c
|
||||
+++ b/src/xen/xend_internal.c
|
||||
@@ -44,6 +44,7 @@
|
||||
#include "xen_hypervisor.h"
|
||||
#include "xs_internal.h" /* To extract VNC port & Serial console TTY */
|
||||
#include "memory.h"
|
||||
+#include "count-one-bits.h"
|
||||
|
||||
/* required for cpumap_t */
|
||||
#include <xen/dom0_ops.h>
|
||||
@@ -2191,7 +2192,9 @@ xenDaemonParseSxpr(virConnectPtr conn,
|
||||
}
|
||||
|
||||
def->maxvcpus = sexpr_int(root, "domain/vcpus");
|
||||
- def->vcpus = def->maxvcpus;
|
||||
+ def->vcpus = count_one_bits(sexpr_int(root, "domain/vcpu_avail"));
|
||||
+ if (!def->vcpus || def->maxvcpus < def->vcpus)
|
||||
+ def->vcpus = def->maxvcpus;
|
||||
|
||||
tmp = sexpr_node(root, "domain/on_poweroff");
|
||||
if (tmp != NULL) {
|
||||
@@ -2433,7 +2436,7 @@ sexpr_to_xend_domain_info(virDomainPtr domain, const struct sexpr *root,
|
||||
virDomainInfoPtr info)
|
||||
{
|
||||
const char *flags;
|
||||
-
|
||||
+ int vcpus;
|
||||
|
||||
if ((root == NULL) || (info == NULL))
|
||||
return (-1);
|
||||
@@ -2464,7 +2467,11 @@ sexpr_to_xend_domain_info(virDomainPtr domain, const struct sexpr *root,
|
||||
info->state = VIR_DOMAIN_NOSTATE;
|
||||
}
|
||||
info->cpuTime = sexpr_float(root, "domain/cpu_time") * 1000000000;
|
||||
- info->nrVirtCpu = sexpr_int(root, "domain/vcpus");
|
||||
+ vcpus = sexpr_int(root, "domain/vcpus");
|
||||
+ info->nrVirtCpu = count_one_bits(sexpr_int(root, "domain/vcpu_avail"));
|
||||
+ if (!info->nrVirtCpu || vcpus < info->nrVirtCpu)
|
||||
+ info->nrVirtCpu = vcpus;
|
||||
+
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -5668,6 +5675,9 @@ xenDaemonFormatSxpr(virConnectPtr conn,
|
||||
virBufferAsprintf(&buf, "(memory %lu)(maxmem %lu)",
|
||||
def->mem.cur_balloon/1024, def->mem.max_balloon/1024);
|
||||
virBufferAsprintf(&buf, "(vcpus %u)", def->maxvcpus);
|
||||
+ /* Computing the vcpu_avail bitmask works because MAX_VIRT_CPUS is 32. */
|
||||
+ if (def->vcpus < def->maxvcpus)
|
||||
+ virBufferAsprintf(&buf, "(vcpu_avail %u)", (1U << def->vcpus) - 1);
|
||||
|
||||
if (def->cpumask) {
|
||||
char *ranges = virDomainCpuSetFormat(def->cpumask, def->cpumasklen);
|
||||
@@ -5763,6 +5773,9 @@ xenDaemonFormatSxpr(virConnectPtr conn,
|
||||
virBufferAsprintf(&buf, "(kernel '%s')", def->os.loader);
|
||||
|
||||
virBufferAsprintf(&buf, "(vcpus %u)", def->maxvcpus);
|
||||
+ if (def->vcpus < def->maxvcpus)
|
||||
+ virBufferAsprintf(&buf, "(vcpu_avail %u)",
|
||||
+ (1U << def->vcpus) - 1);
|
||||
|
||||
for (i = 0 ; i < def->os.nBootDevs ; i++) {
|
||||
switch (def->os.bootDevs[i]) {
|
||||
diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
|
||||
index bf20a64..f7121ab 100644
|
||||
--- a/src/xen/xm_internal.c
|
||||
+++ b/src/xen/xm_internal.c
|
||||
@@ -46,6 +46,7 @@
|
||||
#include "util.h"
|
||||
#include "memory.h"
|
||||
#include "logging.h"
|
||||
+#include "count-one-bits.h"
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_XENXM
|
||||
|
||||
@@ -772,10 +773,12 @@ xenXMDomainConfigParse(virConnectPtr conn, virConfPtr conf) {
|
||||
def->mem.max_balloon *= 1024;
|
||||
|
||||
if (xenXMConfigGetULong(conf, "vcpus", &count, 1) < 0 ||
|
||||
- (unsigned short) count != count)
|
||||
+ MAX_VIRT_CPUS < count)
|
||||
goto cleanup;
|
||||
def->maxvcpus = count;
|
||||
- def->vcpus = def->maxvcpus;
|
||||
+ if (xenXMConfigGetULong(conf, "vcpu_avail", &count, -1) < 0)
|
||||
+ goto cleanup;
|
||||
+ def->vcpus = MIN(count_one_bits(count), def->maxvcpus);
|
||||
|
||||
if (xenXMConfigGetString(conf, "cpus", &str, NULL) < 0)
|
||||
goto cleanup;
|
||||
@@ -2246,6 +2249,9 @@ virConfPtr xenXMDomainConfigFormat(virConnectPtr conn,
|
||||
|
||||
if (xenXMConfigSetInt(conf, "vcpus", def->maxvcpus) < 0)
|
||||
goto no_memory;
|
||||
+ if (def->vcpus < def->maxvcpus &&
|
||||
+ xenXMConfigSetInt(conf, "vcpu_avail", (1U << def->vcpus) - 1) < 0)
|
||||
+ goto no_memory;
|
||||
|
||||
if ((def->cpumask != NULL) &&
|
||||
((cpus = virDomainCpuSetFormat(def->cpumask,
|
||||
diff --git a/tests/sexpr2xmldata/sexpr2xml-pv-vcpus.sexpr b/tests/sexpr2xmldata/sexpr2xml-pv-vcpus.sexpr
|
||||
new file mode 100644
|
||||
index 0000000..2be6822
|
||||
--- /dev/null
|
||||
+++ b/tests/sexpr2xmldata/sexpr2xml-pv-vcpus.sexpr
|
||||
@@ -0,0 +1 @@
|
||||
+(domain (domid 6)(name 'pvtest')(memory 420)(maxmem 420)(vcpus 4)(vcpu_avail 3)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w'))))
|
||||
diff --git a/tests/sexpr2xmldata/sexpr2xml-pv-vcpus.xml b/tests/sexpr2xmldata/sexpr2xml-pv-vcpus.xml
|
||||
new file mode 100644
|
||||
index 0000000..0d6bf11
|
||||
--- /dev/null
|
||||
+++ b/tests/sexpr2xmldata/sexpr2xml-pv-vcpus.xml
|
||||
@@ -0,0 +1,27 @@
|
||||
+<domain type='xen' id='6'>
|
||||
+ <name>pvtest</name>
|
||||
+ <uuid>596a5d21-71f4-8fb2-e068-e2386a5c413e</uuid>
|
||||
+ <memory>430080</memory>
|
||||
+ <currentMemory>430080</currentMemory>
|
||||
+ <vcpu current='2'>4</vcpu>
|
||||
+ <os>
|
||||
+ <type>linux</type>
|
||||
+ <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel>
|
||||
+ <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd>
|
||||
+ <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os </cmdline>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>destroy</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <disk type='file' device='disk'>
|
||||
+ <driver name='file'/>
|
||||
+ <source file='/root/some.img'/>
|
||||
+ <target dev='xvda' bus='xen'/>
|
||||
+ </disk>
|
||||
+ <console type='pty'>
|
||||
+ <target type='xen' port='0'/>
|
||||
+ </console>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/sexpr2xmltest.c b/tests/sexpr2xmltest.c
|
||||
index d62b44f..f100dd8 100644
|
||||
--- a/tests/sexpr2xmltest.c
|
||||
+++ b/tests/sexpr2xmltest.c
|
||||
@@ -132,6 +132,7 @@ mymain(int argc, char **argv)
|
||||
DO_TEST("pv-vfb-type-crash", "pv-vfb-type-crash", 3);
|
||||
DO_TEST("fv-autoport", "fv-autoport", 3);
|
||||
DO_TEST("pv-bootloader", "pv-bootloader", 1);
|
||||
+ DO_TEST("pv-vcpus", "pv-vcpus", 1);
|
||||
|
||||
DO_TEST("disk-file", "disk-file", 2);
|
||||
DO_TEST("disk-block", "disk-block", 2);
|
||||
diff --git a/tests/xmconfigdata/test-paravirt-vcpu.cfg b/tests/xmconfigdata/test-paravirt-vcpu.cfg
|
||||
new file mode 100644
|
||||
index 0000000..24c78f4
|
||||
--- /dev/null
|
||||
+++ b/tests/xmconfigdata/test-paravirt-vcpu.cfg
|
||||
@@ -0,0 +1,17 @@
|
||||
+name = "XenGuest1"
|
||||
+uuid = "c7a5fdb0-cdaf-9455-926a-d65c16db1809"
|
||||
+maxmem = 579
|
||||
+memory = 394
|
||||
+vcpus = 4
|
||||
+vcpu_avail = 3
|
||||
+bootloader = "/usr/bin/pygrub"
|
||||
+on_poweroff = "destroy"
|
||||
+on_reboot = "restart"
|
||||
+on_crash = "restart"
|
||||
+sdl = 0
|
||||
+vnc = 1
|
||||
+vncunused = 1
|
||||
+vnclisten = "127.0.0.1"
|
||||
+vncpasswd = "123poi"
|
||||
+disk = [ "phy:/dev/HostVG/XenGuest1,xvda,w" ]
|
||||
+vif = [ "mac=00:16:3e:66:94:9c,bridge=br0,script=vif-bridge" ]
|
||||
diff --git a/tests/xmconfigdata/test-paravirt-vcpu.xml b/tests/xmconfigdata/test-paravirt-vcpu.xml
|
||||
new file mode 100644
|
||||
index 0000000..0be9456
|
||||
--- /dev/null
|
||||
+++ b/tests/xmconfigdata/test-paravirt-vcpu.xml
|
||||
@@ -0,0 +1,32 @@
|
||||
+<domain type='xen'>
|
||||
+ <name>XenGuest1</name>
|
||||
+ <uuid>c7a5fdb0-cdaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory>592896</memory>
|
||||
+ <currentMemory>403456</currentMemory>
|
||||
+ <vcpu current='2'>4</vcpu>
|
||||
+ <bootloader>/usr/bin/pygrub</bootloader>
|
||||
+ <os>
|
||||
+ <type arch='i686' machine='xenpv'>linux</type>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>restart</on_crash>
|
||||
+ <devices>
|
||||
+ <disk type='block' device='disk'>
|
||||
+ <driver name='phy'/>
|
||||
+ <source dev='/dev/HostVG/XenGuest1'/>
|
||||
+ <target dev='xvda' bus='xen'/>
|
||||
+ </disk>
|
||||
+ <interface type='bridge'>
|
||||
+ <mac address='00:16:3e:66:94:9c'/>
|
||||
+ <source bridge='br0'/>
|
||||
+ <script path='vif-bridge'/>
|
||||
+ </interface>
|
||||
+ <console type='pty'>
|
||||
+ <target type='xen' port='0'/>
|
||||
+ </console>
|
||||
+ <input type='mouse' bus='xen'/>
|
||||
+ <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1' passwd='123poi'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/xmconfigtest.c b/tests/xmconfigtest.c
|
||||
index 221b322..ea00747 100644
|
||||
--- a/tests/xmconfigtest.c
|
||||
+++ b/tests/xmconfigtest.c
|
||||
@@ -210,6 +210,7 @@ mymain(int argc, char **argv)
|
||||
DO_TEST("paravirt-new-pvfb-vncdisplay", 3);
|
||||
DO_TEST("paravirt-net-e1000", 3);
|
||||
DO_TEST("paravirt-net-vifname", 3);
|
||||
+ DO_TEST("paravirt-vcpu", 2);
|
||||
DO_TEST("fullvirt-old-cdrom", 1);
|
||||
DO_TEST("fullvirt-new-cdrom", 2);
|
||||
DO_TEST("fullvirt-utc", 2);
|
||||
diff --git a/tests/xml2sexprdata/xml2sexpr-pv-vcpus.sexpr b/tests/xml2sexprdata/xml2sexpr-pv-vcpus.sexpr
|
||||
new file mode 100644
|
||||
index 0000000..e886545
|
||||
--- /dev/null
|
||||
+++ b/tests/xml2sexprdata/xml2sexpr-pv-vcpus.sexpr
|
||||
@@ -0,0 +1 @@
|
||||
+(vm (name 'pvtest')(memory 420)(maxmem 420)(vcpus 4)(vcpu_avail 3)(uuid '596a5d21-71f4-8fb2-e068-e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os ')))(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w'))))
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/xml2sexprtest.c b/tests/xml2sexprtest.c
|
||||
index 77cf760..9cf8d39 100644
|
||||
--- a/tests/xml2sexprtest.c
|
||||
+++ b/tests/xml2sexprtest.c
|
||||
@@ -118,6 +118,7 @@ mymain(int argc, char **argv)
|
||||
DO_TEST("pv-vfb-new", "pv-vfb-new", "pvtest", 3);
|
||||
DO_TEST("pv-vfb-new-auto", "pv-vfb-new-auto", "pvtest", 3);
|
||||
DO_TEST("pv-bootloader", "pv-bootloader", "pvtest", 1);
|
||||
+ DO_TEST("pv-vcpus", "pv-vcpus", "pvtest", 1);
|
||||
|
||||
DO_TEST("disk-file", "disk-file", "pvtest", 2);
|
||||
DO_TEST("disk-block", "disk-block", "pvtest", 2);
|
||||
--
|
||||
1.7.2.3
|
||||
|
216
docs/api_extension/0013-improve-getting-xen-vcpu-counts.patch
Normal file
216
docs/api_extension/0013-improve-getting-xen-vcpu-counts.patch
Normal file
@@ -0,0 +1,216 @@
|
||||
From 290ea33111be7bdf1f1381b90de33eb0e67c1a15 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Blake <eblake@redhat.com>
|
||||
Date: Wed, 6 Oct 2010 17:54:41 -0600
|
||||
Subject: [PATCH 13/15] vcpu: improve support for getting xen vcpu counts
|
||||
|
||||
* src/xen/xen_driver.c (xenUnifiedDomainGetVcpusFlags): Support
|
||||
more flags.
|
||||
* src/xen/xend_internal.h (xenDaemonDomainGetVcpusFlags): New
|
||||
prototype.
|
||||
* src/xen/xm_internal.h (xenXMDomainGetVcpusFlags): Likewise.
|
||||
* src/xen/xend_internal.c (virDomainGetVcpusFlags): New function.
|
||||
* src/xen/xm_internal.c (xenXMDomainGetVcpusFlags): Likewise.
|
||||
---
|
||||
src/xen/xen_driver.c | 31 +++++++++++++++++++--------
|
||||
src/xen/xend_internal.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||
src/xen/xend_internal.h | 2 +
|
||||
src/xen/xm_internal.c | 47 ++++++++++++++++++++++++++++++++++++++++++
|
||||
src/xen/xm_internal.h | 1 +
|
||||
5 files changed, 124 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
|
||||
index d6c9c57..fe2ff86 100644
|
||||
--- a/src/xen/xen_driver.c
|
||||
+++ b/src/xen/xen_driver.c
|
||||
@@ -1142,20 +1142,33 @@ static int
|
||||
xenUnifiedDomainGetVcpusFlags (virDomainPtr dom, unsigned int flags)
|
||||
{
|
||||
GET_PRIVATE(dom->conn);
|
||||
- int i, ret;
|
||||
+ int ret;
|
||||
|
||||
- if (flags != (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_MAXIMUM)) {
|
||||
- xenUnifiedError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
|
||||
- flags);
|
||||
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
|
||||
+ VIR_DOMAIN_VCPU_CONFIG |
|
||||
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
|
||||
+
|
||||
+ /* Exactly one of LIVE or CONFIG must be set. */
|
||||
+ if (!(flags & VIR_DOMAIN_VCPU_LIVE) == !(flags & VIR_DOMAIN_VCPU_CONFIG)) {
|
||||
+ xenUnifiedError(VIR_ERR_INVALID_ARG,
|
||||
+ _("invalid flag combination: (0x%x)"), flags);
|
||||
return -1;
|
||||
}
|
||||
|
||||
- for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
|
||||
- if (priv->opened[i] && drivers[i]->domainGetMaxVcpus) {
|
||||
- ret = drivers[i]->domainGetMaxVcpus (dom);
|
||||
- if (ret != 0) return ret;
|
||||
- }
|
||||
+ if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) {
|
||||
+ ret = xenDaemonDomainGetVcpusFlags(dom, flags);
|
||||
+ if (ret != -2)
|
||||
+ return ret;
|
||||
+ }
|
||||
+ if (priv->opened[XEN_UNIFIED_XM_OFFSET]) {
|
||||
+ ret = xenXMDomainGetVcpusFlags(dom, flags);
|
||||
+ if (ret != -2)
|
||||
+ return ret;
|
||||
+ }
|
||||
+ if (flags == (VIR_DOMAIN_VCPU_CONFIG | VIR_DOMAIN_VCPU_MAXIMUM))
|
||||
+ return xenHypervisorGetVcpuMax(dom);
|
||||
|
||||
+ xenUnifiedError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
|
||||
index dfc6415..3642296 100644
|
||||
--- a/src/xen/xend_internal.c
|
||||
+++ b/src/xen/xend_internal.c
|
||||
@@ -3620,6 +3620,58 @@ xenDaemonDomainPinVcpu(virDomainPtr domain, unsigned int vcpu,
|
||||
}
|
||||
|
||||
/**
|
||||
+ * xenDaemonDomainGetVcpusFlags:
|
||||
+ * @domain: pointer to domain object
|
||||
+ * @flags: bitwise-ORd from virDomainVcpuFlags
|
||||
+ *
|
||||
+ * Extract information about virtual CPUs of domain according to flags.
|
||||
+ *
|
||||
+ * Returns the number of vcpus on success, -1 if an error message was
|
||||
+ * issued, and -2 if the unified driver should keep trying.
|
||||
+
|
||||
+ */
|
||||
+int
|
||||
+xenDaemonDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
|
||||
+{
|
||||
+ struct sexpr *root;
|
||||
+ int ret;
|
||||
+ xenUnifiedPrivatePtr priv;
|
||||
+
|
||||
+ if (domain == NULL || domain->conn == NULL || domain->name == NULL) {
|
||||
+ virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
|
||||
+
|
||||
+ /* If xendConfigVersion is 2, then we can only report _LIVE (and
|
||||
+ * xm_internal reports _CONFIG). If it is 3, then _LIVE and
|
||||
+ * _CONFIG are always in sync for a running system. */
|
||||
+ if (domain->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
|
||||
+ return -2;
|
||||
+ if (domain->id < 0 && (flags & VIR_DOMAIN_VCPU_LIVE)) {
|
||||
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
+ _("domain not active"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ root = sexpr_get(domain->conn, "/xend/domain/%s?detail=1", domain->name);
|
||||
+ if (root == NULL)
|
||||
+ return -1;
|
||||
+
|
||||
+ ret = sexpr_int(root, "domain/vcpus");
|
||||
+ if (!(flags & VIR_DOMAIN_VCPU_MAXIMUM)) {
|
||||
+ int vcpus = count_one_bits(sexpr_int(root, "domain/vcpu_avail"));
|
||||
+ if (vcpus)
|
||||
+ ret = MIN(vcpus, ret);
|
||||
+ }
|
||||
+ if (!ret)
|
||||
+ ret = -2;
|
||||
+ sexpr_free(root);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
* virDomainGetVcpus:
|
||||
* @domain: pointer to domain object, or NULL for Domain0
|
||||
* @info: pointer to an array of virVcpuInfo structures (OUT)
|
||||
diff --git a/src/xen/xend_internal.h b/src/xen/xend_internal.h
|
||||
index c757716..923cebd 100644
|
||||
--- a/src/xen/xend_internal.h
|
||||
+++ b/src/xen/xend_internal.h
|
||||
@@ -155,6 +155,8 @@ int xenDaemonDomainPinVcpu (virDomainPtr domain,
|
||||
unsigned int vcpu,
|
||||
unsigned char *cpumap,
|
||||
int maplen);
|
||||
+int xenDaemonDomainGetVcpusFlags (virDomainPtr domain,
|
||||
+ unsigned int flags);
|
||||
int xenDaemonDomainGetVcpus (virDomainPtr domain,
|
||||
virVcpuInfoPtr info,
|
||||
int maxinfo,
|
||||
diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
|
||||
index f7121ab..4ea4245 100644
|
||||
--- a/src/xen/xm_internal.c
|
||||
+++ b/src/xen/xm_internal.c
|
||||
@@ -1671,6 +1671,53 @@ cleanup:
|
||||
}
|
||||
|
||||
/**
|
||||
+ * xenXMDomainGetVcpusFlags:
|
||||
+ * @domain: pointer to domain object
|
||||
+ * @flags: bitwise-ORd from virDomainVcpuFlags
|
||||
+ *
|
||||
+ * Extract information about virtual CPUs of domain according to flags.
|
||||
+ *
|
||||
+ * Returns the number of vcpus on success, -1 if an error message was
|
||||
+ * issued, and -2 if the unified driver should keep trying.
|
||||
+ */
|
||||
+int
|
||||
+xenXMDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
|
||||
+{
|
||||
+ xenUnifiedPrivatePtr priv;
|
||||
+ const char *filename;
|
||||
+ xenXMConfCachePtr entry;
|
||||
+ int ret = -2;
|
||||
+
|
||||
+ if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
||||
+ xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (domain->id != -1)
|
||||
+ return -2;
|
||||
+ if (flags & VIR_DOMAIN_VCPU_LIVE) {
|
||||
+ xenXMError(VIR_ERR_OPERATION_FAILED, "%s", _("domain not active"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ priv = domain->conn->privateData;
|
||||
+ xenUnifiedLock(priv);
|
||||
+
|
||||
+ if (!(filename = virHashLookup(priv->nameConfigMap, domain->name)))
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ if (!(entry = virHashLookup(priv->configCache, filename)))
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ ret = ((flags & VIR_DOMAIN_VCPU_MAXIMUM) ? entry->def->maxvcpus
|
||||
+ : entry->def->vcpus);
|
||||
+
|
||||
+cleanup:
|
||||
+ xenUnifiedUnlock(priv);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
* xenXMDomainPinVcpu:
|
||||
* @domain: pointer to domain object
|
||||
* @vcpu: virtual CPU number (reserved)
|
||||
diff --git a/src/xen/xm_internal.h b/src/xen/xm_internal.h
|
||||
index 3ad3456..3295fbd 100644
|
||||
--- a/src/xen/xm_internal.h
|
||||
+++ b/src/xen/xm_internal.h
|
||||
@@ -45,6 +45,7 @@ int xenXMDomainSetMemory(virDomainPtr domain, unsigned long memory);
|
||||
int xenXMDomainSetMaxMemory(virDomainPtr domain, unsigned long memory);
|
||||
unsigned long xenXMDomainGetMaxMemory(virDomainPtr domain);
|
||||
int xenXMDomainSetVcpus(virDomainPtr domain, unsigned int vcpus);
|
||||
+int xenXMDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags);
|
||||
int xenXMDomainPinVcpu(virDomainPtr domain, unsigned int vcpu,
|
||||
unsigned char *cpumap, int maplen);
|
||||
virDomainPtr xenXMDomainLookupByName(virConnectPtr conn, const char *domname);
|
||||
--
|
||||
1.7.2.3
|
||||
|
342
docs/api_extension/0014-improve-setting-xen-vcpu-counts.patch
Normal file
342
docs/api_extension/0014-improve-setting-xen-vcpu-counts.patch
Normal file
@@ -0,0 +1,342 @@
|
||||
From e443a003129a172a7332f3cb6e40b3c39363ed5e Mon Sep 17 00:00:00 2001
|
||||
From: Eric Blake <eblake@redhat.com>
|
||||
Date: Thu, 14 Oct 2010 16:17:18 -0600
|
||||
Subject: [PATCH 14/15] vcpu: improve support for setting xen vcpu counts
|
||||
|
||||
Tested with RHEL 5.6 (xendConfigVersion 2, where xend_internal
|
||||
controls live domains and xm_internal controls inactive domains).
|
||||
Hopefully this works with xendConfigVersion 3 (where xend_internal
|
||||
controls everything).
|
||||
|
||||
* src/xen/xen_driver.c (xenUnifiedDomainSetVcpusFlags): Support
|
||||
more flags.
|
||||
(xenUnifiedGetMaxVcpus): Export.
|
||||
* src/xen/xm_internal.h (xenXMDomainSetVcpusFlags): New prototype.
|
||||
* src/xen/xend_internal.h (xenDaemonDomainSetVcpusFlags): Likewise.
|
||||
* src/xen/xen_driver.h (xenUnifiedGetMaxVcpus): Likewise.
|
||||
* src/xen/xm_internal.c (xenXMDomainSetVcpusFlags): New function.
|
||||
* src/xen/xend_internal.c (xenDaemonDomainSetVcpusFlags): Likewise.
|
||||
---
|
||||
src/xen/xen_driver.c | 60 ++++++++++++++++++++++++---------
|
||||
src/xen/xen_driver.h | 1 +
|
||||
src/xen/xend_internal.c | 76 +++++++++++++++++++++++++++++++++++++++++++
|
||||
src/xen/xend_internal.h | 3 ++
|
||||
src/xen/xm_internal.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||
src/xen/xm_internal.h | 2 +
|
||||
6 files changed, 208 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
|
||||
index fe2ff86..66e8518 100644
|
||||
--- a/src/xen/xen_driver.c
|
||||
+++ b/src/xen/xen_driver.c
|
||||
@@ -508,7 +508,7 @@ xenUnifiedIsSecure(virConnectPtr conn)
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static int
|
||||
+int
|
||||
xenUnifiedGetMaxVcpus (virConnectPtr conn, const char *type)
|
||||
{
|
||||
GET_PRIVATE(conn);
|
||||
@@ -1073,36 +1073,62 @@ xenUnifiedDomainSetVcpusFlags (virDomainPtr dom, unsigned int nvcpus,
|
||||
unsigned int flags)
|
||||
{
|
||||
GET_PRIVATE(dom->conn);
|
||||
- int i;
|
||||
+ int ret;
|
||||
+
|
||||
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
|
||||
+ VIR_DOMAIN_VCPU_CONFIG |
|
||||
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
|
||||
|
||||
- if (flags != VIR_DOMAIN_VCPU_LIVE) {
|
||||
- xenUnifiedError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"),
|
||||
- flags);
|
||||
+ /* At least one of LIVE or CONFIG must be set. MAXIMUM cannot be
|
||||
+ * mixed with LIVE. */
|
||||
+ if ((flags & (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG)) == 0 ||
|
||||
+ (flags & (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) ==
|
||||
+ (VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_LIVE)) {
|
||||
+ xenUnifiedError(VIR_ERR_INVALID_ARG,
|
||||
+ _("invalid flag combination: (0x%x)"), flags);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ if (!nvcpus || (unsigned short) nvcpus != nvcpus) {
|
||||
+ xenUnifiedError(VIR_ERR_INVALID_ARG,
|
||||
+ _("argument out of range: %d"), nvcpus);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Try non-hypervisor methods first, then hypervisor direct method
|
||||
* as a last resort.
|
||||
*/
|
||||
- for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
|
||||
- if (i != XEN_UNIFIED_HYPERVISOR_OFFSET &&
|
||||
- priv->opened[i] &&
|
||||
- drivers[i]->domainSetVcpus &&
|
||||
- drivers[i]->domainSetVcpus (dom, nvcpus) == 0)
|
||||
- return 0;
|
||||
-
|
||||
- if (priv->opened[XEN_UNIFIED_HYPERVISOR_OFFSET] &&
|
||||
- drivers[XEN_UNIFIED_HYPERVISOR_OFFSET]->domainSetVcpus &&
|
||||
- drivers[XEN_UNIFIED_HYPERVISOR_OFFSET]->domainSetVcpus (dom, nvcpus) == 0)
|
||||
- return 0;
|
||||
+ if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) {
|
||||
+ ret = xenDaemonDomainSetVcpusFlags(dom, nvcpus, flags);
|
||||
+ if (ret != -2)
|
||||
+ return ret;
|
||||
+ }
|
||||
+ if (priv->opened[XEN_UNIFIED_XM_OFFSET]) {
|
||||
+ ret = xenXMDomainSetVcpusFlags(dom, nvcpus, flags);
|
||||
+ if (ret != -2)
|
||||
+ return ret;
|
||||
+ }
|
||||
+ if (flags == VIR_DOMAIN_VCPU_LIVE)
|
||||
+ return xenHypervisorSetVcpus(dom, nvcpus);
|
||||
|
||||
+ xenUnifiedError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int
|
||||
xenUnifiedDomainSetVcpus (virDomainPtr dom, unsigned int nvcpus)
|
||||
{
|
||||
- return xenUnifiedDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE);
|
||||
+ unsigned int flags = VIR_DOMAIN_VCPU_LIVE;
|
||||
+ xenUnifiedPrivatePtr priv;
|
||||
+
|
||||
+ /* Per the documented API, it is hypervisor-dependent whether this
|
||||
+ * affects just _LIVE or _LIVE|_CONFIG; in xen's case, that
|
||||
+ * depends on xendConfigVersion. */
|
||||
+ if (dom) {
|
||||
+ priv = dom->conn->privateData;
|
||||
+ if (priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
|
||||
+ flags |= VIR_DOMAIN_VCPU_CONFIG;
|
||||
+ }
|
||||
+ return xenUnifiedDomainSetVcpusFlags(dom, nvcpus, flags);
|
||||
}
|
||||
|
||||
static int
|
||||
diff --git a/src/xen/xen_driver.h b/src/xen/xen_driver.h
|
||||
index 3e7c1d0..115a26a 100644
|
||||
--- a/src/xen/xen_driver.h
|
||||
+++ b/src/xen/xen_driver.h
|
||||
@@ -220,6 +220,7 @@ int xenUnifiedRemoveDomainInfo(xenUnifiedDomainInfoListPtr info,
|
||||
void xenUnifiedDomainEventDispatch (xenUnifiedPrivatePtr priv,
|
||||
virDomainEventPtr event);
|
||||
unsigned long xenUnifiedVersion(void);
|
||||
+int xenUnifiedGetMaxVcpus(virConnectPtr conn, const char *type);
|
||||
|
||||
# ifndef PROXY
|
||||
void xenUnifiedLock(xenUnifiedPrivatePtr priv);
|
||||
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
|
||||
index 3642296..55c2cc4 100644
|
||||
--- a/src/xen/xend_internal.c
|
||||
+++ b/src/xen/xend_internal.c
|
||||
@@ -3535,6 +3535,82 @@ xenDaemonLookupByID(virConnectPtr conn, int id) {
|
||||
}
|
||||
|
||||
/**
|
||||
+ * xenDaemonDomainSetVcpusFlags:
|
||||
+ * @domain: pointer to domain object
|
||||
+ * @nvcpus: the new number of virtual CPUs for this domain
|
||||
+ * @flags: bitwise-ORd from virDomainVcpuFlags
|
||||
+ *
|
||||
+ * Change virtual CPUs allocation of domain according to flags.
|
||||
+ *
|
||||
+ * Returns 0 on success, -1 if an error message was issued, and -2 if
|
||||
+ * the unified driver should keep trying.
|
||||
+ */
|
||||
+int
|
||||
+xenDaemonDomainSetVcpusFlags(virDomainPtr domain, unsigned int vcpus,
|
||||
+ unsigned int flags)
|
||||
+{
|
||||
+ char buf[VIR_UUID_BUFLEN];
|
||||
+ xenUnifiedPrivatePtr priv;
|
||||
+ int max;
|
||||
+
|
||||
+ if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)
|
||||
+ || (vcpus < 1)) {
|
||||
+ virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||
+ return (-1);
|
||||
+ }
|
||||
+
|
||||
+ priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
|
||||
+
|
||||
+ if ((domain->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) ||
|
||||
+ (flags & VIR_DOMAIN_VCPU_MAXIMUM))
|
||||
+ return -2;
|
||||
+
|
||||
+ /* With xendConfigVersion 2, only _LIVE is supported. With
|
||||
+ * xendConfigVersion 3, only _LIVE|_CONFIG is supported for
|
||||
+ * running domains, or _CONFIG for inactive domains. */
|
||||
+ if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
|
||||
+ if (flags & VIR_DOMAIN_VCPU_CONFIG) {
|
||||
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
+ _("Xend version does not support modifying "
|
||||
+ "persistent config"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+ } else if (domain->id < 0) {
|
||||
+ if (flags & VIR_DOMAIN_VCPU_LIVE) {
|
||||
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
+ _("domain not running"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+ } else {
|
||||
+ if ((flags & (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG)) !=
|
||||
+ (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG)) {
|
||||
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
+ _("Xend only supports modifying both live and "
|
||||
+ "persistent config"));
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* Unfortunately, xend_op does not validate whether this exceeds
|
||||
+ * the maximum. */
|
||||
+ flags |= VIR_DOMAIN_VCPU_MAXIMUM;
|
||||
+ if ((max = xenDaemonDomainGetVcpusFlags(domain, flags)) < 0) {
|
||||
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
+ _("could not determin max vcpus for the domain"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+ if (vcpus > max) {
|
||||
+ virXendError(VIR_ERR_INVALID_ARG,
|
||||
+ _("requested vcpus is greater than max allowable"
|
||||
+ " vcpus for the domain: %d > %d"), vcpus, max);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ snprintf(buf, sizeof(buf), "%d", vcpus);
|
||||
+ return xend_op(domain->conn, domain->name, "op", "set_vcpus", "vcpus",
|
||||
+ buf, NULL);
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
* xenDaemonDomainSetVcpus:
|
||||
* @domain: pointer to domain object
|
||||
* @nvcpus: the new number of virtual CPUs for this domain
|
||||
diff --git a/src/xen/xend_internal.h b/src/xen/xend_internal.h
|
||||
index 923cebd..53f5d2c 100644
|
||||
--- a/src/xen/xend_internal.h
|
||||
+++ b/src/xen/xend_internal.h
|
||||
@@ -151,6 +151,9 @@ int xenDaemonDomainUndefine(virDomainPtr domain);
|
||||
|
||||
int xenDaemonDomainSetVcpus (virDomainPtr domain,
|
||||
unsigned int vcpus);
|
||||
+int xenDaemonDomainSetVcpusFlags (virDomainPtr domain,
|
||||
+ unsigned int vcpus,
|
||||
+ unsigned int flags);
|
||||
int xenDaemonDomainPinVcpu (virDomainPtr domain,
|
||||
unsigned int vcpu,
|
||||
unsigned char *cpumap,
|
||||
diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
|
||||
index 4ea4245..2b8e51e 100644
|
||||
--- a/src/xen/xm_internal.c
|
||||
+++ b/src/xen/xm_internal.c
|
||||
@@ -1670,6 +1670,89 @@ cleanup:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * xenXMDomainSetVcpusFlags:
|
||||
+ * @domain: pointer to domain object
|
||||
+ * @nvcpus: number of vcpus
|
||||
+ * @flags: bitwise-ORd from virDomainVcpuFlags
|
||||
+ *
|
||||
+ * Change virtual CPUs allocation of domain according to flags.
|
||||
+ *
|
||||
+ * Returns 0 on success, -1 if an error message was issued, and -2 if
|
||||
+ * the unified driver should keep trying.
|
||||
+ */
|
||||
+int
|
||||
+xenXMDomainSetVcpusFlags(virDomainPtr domain, unsigned int vcpus,
|
||||
+ unsigned int flags)
|
||||
+{
|
||||
+ xenUnifiedPrivatePtr priv;
|
||||
+ const char *filename;
|
||||
+ xenXMConfCachePtr entry;
|
||||
+ int ret = -1;
|
||||
+ int max;
|
||||
+
|
||||
+ if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
||||
+ xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ if (domain->conn->flags & VIR_CONNECT_RO) {
|
||||
+ xenXMError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ if (domain->id != -1)
|
||||
+ return -2;
|
||||
+ if (flags & VIR_DOMAIN_VCPU_LIVE) {
|
||||
+ xenXMError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
+ _("domain is not running"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ priv = domain->conn->privateData;
|
||||
+ xenUnifiedLock(priv);
|
||||
+
|
||||
+ if (!(filename = virHashLookup(priv->nameConfigMap, domain->name)))
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ if (!(entry = virHashLookup(priv->configCache, filename)))
|
||||
+ goto cleanup;
|
||||
+
|
||||
+ /* Hypervisor maximum. */
|
||||
+ if ((max = xenUnifiedGetMaxVcpus(domain->conn, NULL)) < 0) {
|
||||
+ xenXMError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
+ _("could not determin max vcpus for the domain"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ /* Can't specify a current larger than stored maximum; but
|
||||
+ * reducing maximum can silently reduce current. */
|
||||
+ if (!(flags & VIR_DOMAIN_VCPU_MAXIMUM))
|
||||
+ max = entry->def->maxvcpus;
|
||||
+ if (vcpus > max) {
|
||||
+ xenXMError(VIR_ERR_INVALID_ARG,
|
||||
+ _("requested vcpus is greater than max allowable"
|
||||
+ " vcpus for the domain: %d > %d"), vcpus, max);
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+
|
||||
+ if (flags & VIR_DOMAIN_VCPU_MAXIMUM) {
|
||||
+ entry->def->maxvcpus = vcpus;
|
||||
+ if (entry->def->vcpus > vcpus)
|
||||
+ entry->def->vcpus = vcpus;
|
||||
+ } else {
|
||||
+ entry->def->vcpus = vcpus;
|
||||
+ }
|
||||
+
|
||||
+ /* If this fails, should we try to undo our changes to the
|
||||
+ * in-memory representation of the config file. I say not!
|
||||
+ */
|
||||
+ if (xenXMConfigSaveFile(domain->conn, entry->filename, entry->def) < 0)
|
||||
+ goto cleanup;
|
||||
+ ret = 0;
|
||||
+
|
||||
+cleanup:
|
||||
+ xenUnifiedUnlock(priv);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* xenXMDomainGetVcpusFlags:
|
||||
* @domain: pointer to domain object
|
||||
diff --git a/src/xen/xm_internal.h b/src/xen/xm_internal.h
|
||||
index 3295fbd..a46e1a2 100644
|
||||
--- a/src/xen/xm_internal.h
|
||||
+++ b/src/xen/xm_internal.h
|
||||
@@ -45,6 +45,8 @@ int xenXMDomainSetMemory(virDomainPtr domain, unsigned long memory);
|
||||
int xenXMDomainSetMaxMemory(virDomainPtr domain, unsigned long memory);
|
||||
unsigned long xenXMDomainGetMaxMemory(virDomainPtr domain);
|
||||
int xenXMDomainSetVcpus(virDomainPtr domain, unsigned int vcpus);
|
||||
+int xenXMDomainSetVcpusFlags(virDomainPtr domain, unsigned int vcpus,
|
||||
+ unsigned int flags);
|
||||
int xenXMDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags);
|
||||
int xenXMDomainPinVcpu(virDomainPtr domain, unsigned int vcpu,
|
||||
unsigned char *cpumap, int maplen);
|
||||
--
|
||||
1.7.2.3
|
||||
|
228
docs/api_extension/0015-remove-dead-xen-code.patch
Normal file
228
docs/api_extension/0015-remove-dead-xen-code.patch
Normal file
@@ -0,0 +1,228 @@
|
||||
From b013788742183afec9aa5068d3cfd185a3b5c62e Mon Sep 17 00:00:00 2001
|
||||
From: Eric Blake <eblake@redhat.com>
|
||||
Date: Thu, 7 Oct 2010 08:59:27 -0600
|
||||
Subject: [PATCH 15/15] vcpu: remove dead xen code
|
||||
|
||||
* src/xen/xen_driver.h (xenUnifiedDriver): Remove now-unused
|
||||
domainGetMaxVcpus, domainSetVcpus.
|
||||
* src/xen/proxy_internal.c (xenProxyDriver): Likewise.
|
||||
* src/xen/xen_hypervisor.c (xenHypervisorDriver): Likewise.
|
||||
* src/xen/xen_inotify.c (xenInotifyDriver): Likewise.
|
||||
* src/xen/xend_internal.c (xenDaemonDriver)
|
||||
(xenDaemonDomainSetVcpus): Likewise.
|
||||
* src/xen/xm_internal.c (xenXMDriver, xenXMDomainSetVcpus):
|
||||
Likewise.
|
||||
* src/xen/xs_internal.c (xenStoreDriver): Likewise.
|
||||
---
|
||||
src/xen/proxy_internal.c | 2 --
|
||||
src/xen/xen_driver.h | 4 +---
|
||||
src/xen/xen_hypervisor.c | 2 --
|
||||
src/xen/xen_inotify.c | 2 --
|
||||
src/xen/xend_internal.c | 33 ---------------------------------
|
||||
src/xen/xm_internal.c | 43 -------------------------------------------
|
||||
src/xen/xs_internal.c | 2 --
|
||||
7 files changed, 1 insertions(+), 87 deletions(-)
|
||||
|
||||
diff --git a/src/xen/proxy_internal.c b/src/xen/proxy_internal.c
|
||||
index 335dfc4..4033727 100644
|
||||
--- a/src/xen/proxy_internal.c
|
||||
+++ b/src/xen/proxy_internal.c
|
||||
@@ -67,10 +67,8 @@ struct xenUnifiedDriver xenProxyDriver = {
|
||||
NULL, /* domainSave */
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
- NULL, /* domainSetVcpus */
|
||||
NULL, /* domainPinVcpu */
|
||||
NULL, /* domainGetVcpus */
|
||||
- NULL, /* domainGetMaxVcpus */
|
||||
NULL, /* listDefinedDomains */
|
||||
NULL, /* numOfDefinedDomains */
|
||||
NULL, /* domainCreate */
|
||||
diff --git a/src/xen/xen_driver.h b/src/xen/xen_driver.h
|
||||
index 115a26a..53f97d4 100644
|
||||
--- a/src/xen/xen_driver.h
|
||||
+++ b/src/xen/xen_driver.h
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* xen_unified.c: Unified Xen driver.
|
||||
*
|
||||
- * Copyright (C) 2007 Red Hat, Inc.
|
||||
+ * Copyright (C) 2007, 2010 Red Hat, Inc.
|
||||
*
|
||||
* See COPYING.LIB for the License of this software
|
||||
*
|
||||
@@ -84,10 +84,8 @@ struct xenUnifiedDriver {
|
||||
virDrvDomainSave domainSave;
|
||||
virDrvDomainRestore domainRestore;
|
||||
virDrvDomainCoreDump domainCoreDump;
|
||||
- virDrvDomainSetVcpus domainSetVcpus;
|
||||
virDrvDomainPinVcpu domainPinVcpu;
|
||||
virDrvDomainGetVcpus domainGetVcpus;
|
||||
- virDrvDomainGetMaxVcpus domainGetMaxVcpus;
|
||||
virDrvListDefinedDomains listDefinedDomains;
|
||||
virDrvNumOfDefinedDomains numOfDefinedDomains;
|
||||
virDrvDomainCreate domainCreate;
|
||||
diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c
|
||||
index 6246513..3797865 100644
|
||||
--- a/src/xen/xen_hypervisor.c
|
||||
+++ b/src/xen/xen_hypervisor.c
|
||||
@@ -784,10 +784,8 @@ struct xenUnifiedDriver xenHypervisorDriver = {
|
||||
NULL, /* domainSave */
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
- xenHypervisorSetVcpus, /* domainSetVcpus */
|
||||
xenHypervisorPinVcpu, /* domainPinVcpu */
|
||||
xenHypervisorGetVcpus, /* domainGetVcpus */
|
||||
- xenHypervisorGetVcpuMax, /* domainGetMaxVcpus */
|
||||
NULL, /* listDefinedDomains */
|
||||
NULL, /* numOfDefinedDomains */
|
||||
NULL, /* domainCreate */
|
||||
diff --git a/src/xen/xen_inotify.c b/src/xen/xen_inotify.c
|
||||
index d24b20f..9507061 100644
|
||||
--- a/src/xen/xen_inotify.c
|
||||
+++ b/src/xen/xen_inotify.c
|
||||
@@ -71,10 +71,8 @@ struct xenUnifiedDriver xenInotifyDriver = {
|
||||
NULL, /* domainSave */
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
- NULL, /* domainSetVcpus */
|
||||
NULL, /* domainPinVcpu */
|
||||
NULL, /* domainGetVcpus */
|
||||
- NULL, /* domainGetMaxVcpus */
|
||||
NULL, /* listDefinedDomains */
|
||||
NULL, /* numOfDefinedDomains */
|
||||
NULL, /* domainCreate */
|
||||
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
|
||||
index 55c2cc4..b90c331 100644
|
||||
--- a/src/xen/xend_internal.c
|
||||
+++ b/src/xen/xend_internal.c
|
||||
@@ -3611,37 +3611,6 @@ xenDaemonDomainSetVcpusFlags(virDomainPtr domain, unsigned int vcpus,
|
||||
}
|
||||
|
||||
/**
|
||||
- * xenDaemonDomainSetVcpus:
|
||||
- * @domain: pointer to domain object
|
||||
- * @nvcpus: the new number of virtual CPUs for this domain
|
||||
- *
|
||||
- * Dynamically change the number of virtual CPUs used by the domain.
|
||||
- *
|
||||
- * Returns 0 for success; -1 (with errno) on error
|
||||
- */
|
||||
-int
|
||||
-xenDaemonDomainSetVcpus(virDomainPtr domain, unsigned int vcpus)
|
||||
-{
|
||||
- char buf[VIR_UUID_BUFLEN];
|
||||
- xenUnifiedPrivatePtr priv;
|
||||
-
|
||||
- if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)
|
||||
- || (vcpus < 1)) {
|
||||
- virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||
- return (-1);
|
||||
- }
|
||||
-
|
||||
- priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
|
||||
-
|
||||
- if (domain->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
|
||||
- return(-1);
|
||||
-
|
||||
- snprintf(buf, sizeof(buf), "%d", vcpus);
|
||||
- return(xend_op(domain->conn, domain->name, "op", "set_vcpus", "vcpus",
|
||||
- buf, NULL));
|
||||
-}
|
||||
-
|
||||
-/**
|
||||
* xenDaemonDomainPinCpu:
|
||||
* @domain: pointer to domain object
|
||||
* @vcpu: virtual CPU number
|
||||
@@ -5213,10 +5182,8 @@ struct xenUnifiedDriver xenDaemonDriver = {
|
||||
xenDaemonDomainSave, /* domainSave */
|
||||
xenDaemonDomainRestore, /* domainRestore */
|
||||
xenDaemonDomainCoreDump, /* domainCoreDump */
|
||||
- xenDaemonDomainSetVcpus, /* domainSetVcpus */
|
||||
xenDaemonDomainPinVcpu, /* domainPinVcpu */
|
||||
xenDaemonDomainGetVcpus, /* domainGetVcpus */
|
||||
- NULL, /* domainGetMaxVcpus */
|
||||
xenDaemonListDefinedDomains, /* listDefinedDomains */
|
||||
xenDaemonNumOfDefinedDomains,/* numOfDefinedDomains */
|
||||
xenDaemonDomainCreate, /* domainCreate */
|
||||
diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
|
||||
index 2b8e51e..430d40b 100644
|
||||
--- a/src/xen/xm_internal.c
|
||||
+++ b/src/xen/xm_internal.c
|
||||
@@ -103,10 +103,8 @@ struct xenUnifiedDriver xenXMDriver = {
|
||||
NULL, /* domainSave */
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
- xenXMDomainSetVcpus, /* domainSetVcpus */
|
||||
xenXMDomainPinVcpu, /* domainPinVcpu */
|
||||
NULL, /* domainGetVcpus */
|
||||
- NULL, /* domainGetMaxVcpus */
|
||||
xenXMListDefinedDomains, /* listDefinedDomains */
|
||||
xenXMNumOfDefinedDomains, /* numOfDefinedDomains */
|
||||
xenXMDomainCreate, /* domainCreate */
|
||||
@@ -1630,47 +1628,6 @@ cleanup:
|
||||
}
|
||||
|
||||
/*
|
||||
- * Set the VCPU count in config
|
||||
- */
|
||||
-int xenXMDomainSetVcpus(virDomainPtr domain, unsigned int vcpus) {
|
||||
- xenUnifiedPrivatePtr priv;
|
||||
- const char *filename;
|
||||
- xenXMConfCachePtr entry;
|
||||
- int ret = -1;
|
||||
-
|
||||
- if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
|
||||
- xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
||||
- return (-1);
|
||||
- }
|
||||
- if (domain->conn->flags & VIR_CONNECT_RO)
|
||||
- return (-1);
|
||||
- if (domain->id != -1)
|
||||
- return (-1);
|
||||
-
|
||||
- priv = domain->conn->privateData;
|
||||
- xenUnifiedLock(priv);
|
||||
-
|
||||
- if (!(filename = virHashLookup(priv->nameConfigMap, domain->name)))
|
||||
- goto cleanup;
|
||||
-
|
||||
- if (!(entry = virHashLookup(priv->configCache, filename)))
|
||||
- goto cleanup;
|
||||
-
|
||||
- entry->def->maxvcpus = entry->def->vcpus = vcpus;
|
||||
-
|
||||
- /* If this fails, should we try to undo our changes to the
|
||||
- * in-memory representation of the config file. I say not!
|
||||
- */
|
||||
- if (xenXMConfigSaveFile(domain->conn, entry->filename, entry->def) < 0)
|
||||
- goto cleanup;
|
||||
- ret = 0;
|
||||
-
|
||||
-cleanup:
|
||||
- xenUnifiedUnlock(priv);
|
||||
- return ret;
|
||||
-}
|
||||
-
|
||||
-/*
|
||||
* xenXMDomainSetVcpusFlags:
|
||||
* @domain: pointer to domain object
|
||||
* @nvcpus: number of vcpus
|
||||
diff --git a/src/xen/xs_internal.c b/src/xen/xs_internal.c
|
||||
index 9296f25..a9817b1 100644
|
||||
--- a/src/xen/xs_internal.c
|
||||
+++ b/src/xen/xs_internal.c
|
||||
@@ -67,10 +67,8 @@ struct xenUnifiedDriver xenStoreDriver = {
|
||||
NULL, /* domainSave */
|
||||
NULL, /* domainRestore */
|
||||
NULL, /* domainCoreDump */
|
||||
- NULL, /* domainSetVcpus */
|
||||
NULL, /* domainPinVcpu */
|
||||
NULL, /* domainGetVcpus */
|
||||
- NULL, /* domainGetMaxVcpus */
|
||||
NULL, /* listDefinedDomains */
|
||||
NULL, /* numOfDefinedDomains */
|
||||
NULL, /* domainCreate */
|
||||
--
|
||||
1.7.2.3
|
||||
|
@@ -23,13 +23,12 @@
|
||||
|
||||
<p>
|
||||
The QEMU driver is capable of using the <code>cpuset</code>,
|
||||
<code>cpu</code>, <code>cpuacct</code>, <code>memory</code>,
|
||||
<code>blkio</code> and <code>devices</code> controllers.
|
||||
None of them are compulsory. If any controller is not mounted,
|
||||
the resource management APIs which use it will cease to operate.
|
||||
It is possible to explicitly turn off use of a controller,
|
||||
even when mounted, via the <code>/etc/libvirt/qemu.conf</code>
|
||||
configuration file.
|
||||
<code>cpu</code>, <code>memory</code>, <code>blkio</code> and
|
||||
<code>devices</code> controllers. None of them are compulsory.
|
||||
If any controller is not mounted, the resource management APIs
|
||||
which use it will cease to operate. It is possible to explicitly
|
||||
turn off use of a controller, even when mounted, via the
|
||||
<code>/etc/libvirt/qemu.conf</code> configuration file.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -76,13 +75,11 @@
|
||||
<p>
|
||||
The systemd convention is for the scope name of virtual machines / containers
|
||||
to be of the general format <code>machine-$NAME.scope</code>. Libvirt forms the
|
||||
<code>$NAME</code> part of this by concatenating the driver type with the id
|
||||
and truncated name of the guest, and then escaping any systemd reserved
|
||||
characters.
|
||||
<code>$NAME</code> part of this by concatenating the driver type with the name
|
||||
of the guest, and then escaping any systemd reserved characters.
|
||||
So for a guest <code>demo</code> running under the <code>lxc</code> driver,
|
||||
we get a <code>$NAME</code> of <code>lxc-12345-demo</code> which when escaped
|
||||
is <code>lxc\x2d12345\x2ddemo</code>. So the complete scope name is
|
||||
<code>machine-lxc\x2d12345\x2ddemo.scope</code>.
|
||||
we get a <code>$NAME</code> of <code>lxc-demo</code> which when escaped is
|
||||
<code>lxc\x2ddemo</code>. So the complete scope name is <code>machine-lxc\x2ddemo.scope</code>.
|
||||
The scope names map directly to the cgroup directory names.
|
||||
</p>
|
||||
|
||||
@@ -115,19 +112,19 @@ $ROOT
|
||||
|
|
||||
+- machine.slice
|
||||
|
|
||||
+- machine-qemu\x2d1\x2dvm1.scope
|
||||
+- machine-qemu\x2dvm1.scope
|
||||
| |
|
||||
| +- emulator
|
||||
| +- vcpu0
|
||||
| +- vcpu1
|
||||
|
|
||||
+- machine-qemu\x2d2\x2dvm2.scope
|
||||
+- machine-qemu\x2dvm2.scope
|
||||
| |
|
||||
| +- emulator
|
||||
| +- vcpu0
|
||||
| +- vcpu1
|
||||
|
|
||||
+- machine-qemu\x2d3\x2dvm3.scope
|
||||
+- machine-qemu\x2dvm3.scope
|
||||
| |
|
||||
| +- emulator
|
||||
| +- vcpu0
|
||||
@@ -137,15 +134,15 @@ $ROOT
|
||||
| |
|
||||
| +- machine-engineering-testing.slice
|
||||
| | |
|
||||
| | +- machine-lxc\x2d11111\x2dcontainer1.scope
|
||||
| | +- machine-lxc\x2dcontainer1.scope
|
||||
| |
|
||||
| +- machine-engineering-production.slice
|
||||
| |
|
||||
| +- machine-lxc\x2d22222\x2dcontainer2.scope
|
||||
| +- machine-lxc\x2dcontainer2.scope
|
||||
|
|
||||
+- machine-marketing.slice
|
||||
|
|
||||
+- machine-lxc\x2d33333\x2dcontainer3.scope
|
||||
+- machine-lxc\x2dcontainer3.scope
|
||||
</pre>
|
||||
|
||||
<h3><a id="currentLayoutGeneric">Non-systemd cgroups layout</a></h3>
|
||||
@@ -176,19 +173,19 @@ $ROOT
|
||||
|
|
||||
+- machine
|
||||
|
|
||||
+- qemu-1-vm1.libvirt-qemu
|
||||
+- vm1.libvirt-qemu
|
||||
| |
|
||||
| +- emulator
|
||||
| +- vcpu0
|
||||
| +- vcpu1
|
||||
|
|
||||
+- qeme-2-vm2.libvirt-qemu
|
||||
+- vm2.libvirt-qemu
|
||||
| |
|
||||
| +- emulator
|
||||
| +- vcpu0
|
||||
| +- vcpu1
|
||||
|
|
||||
+- qemu-3-vm3.libvirt-qemu
|
||||
+- vm3.libvirt-qemu
|
||||
| |
|
||||
| +- emulator
|
||||
| +- vcpu0
|
||||
@@ -198,15 +195,15 @@ $ROOT
|
||||
| |
|
||||
| +- testing.partition
|
||||
| | |
|
||||
| | +- lxc-11111-container1.libvirt-lxc
|
||||
| | +- container1.libvirt-lxc
|
||||
| |
|
||||
| +- production.partition
|
||||
| |
|
||||
| +- lxc-22222-container2.libvirt-lxc
|
||||
| +- container2.libvirt-lxc
|
||||
|
|
||||
+- marketing.partition
|
||||
|
|
||||
+- lxc-33333-container3.libvirt-lxc
|
||||
+- container3.libvirt-lxc
|
||||
</pre>
|
||||
|
||||
<h2><a id="customPartiton">Using custom partitions</a></h2>
|
||||
|
@@ -8,7 +8,7 @@
|
||||
|
||||
<p>
|
||||
The libvirt KVM/QEMU driver can manage any QEMU emulator from
|
||||
version 1.5.0 or later.
|
||||
version 0.12.0 or later.
|
||||
</p>
|
||||
|
||||
<h2><a id="project">Project Links</a></h2>
|
||||
|
@@ -8,7 +8,7 @@
|
||||
|
||||
<p>
|
||||
The libvirt libxl driver provides the ability to manage virtual
|
||||
machines on any Xen release from 4.6.0 onwards.
|
||||
machines on any Xen release from 4.4.0 onwards.
|
||||
</p>
|
||||
|
||||
<h2><a id="project">Project Links</a></h2>
|
||||
|
@@ -74,14 +74,11 @@
|
||||
is able to run. Possible values are:
|
||||
<dl>
|
||||
<dt><code>xen</code></dt>
|
||||
<dd>for XEN PV</dd>
|
||||
<dd>for XEN</dd>
|
||||
|
||||
<dt><code>linux</code></dt>
|
||||
<dd>legacy alias for <code>xen</code></dd>
|
||||
|
||||
<dt><code>xenpvh</code></dt>
|
||||
<dd>for XEN PVH</dd>
|
||||
|
||||
<dt><code>hvm</code></dt>
|
||||
<dd>Unmodified operating system</dd>
|
||||
|
||||
@@ -94,27 +91,7 @@
|
||||
</dd>
|
||||
|
||||
<dt><code>arch</code></dt>
|
||||
<dd>This element brings some information on supported guest
|
||||
architecture. Possible subelements are:
|
||||
<dl>
|
||||
<dt><code>wordsize</code></dt><dd>Size of CPU word in bits, for example 64.</dd>
|
||||
<dt><code>emulator</code></dt><dd>Emulator (device model) path, for
|
||||
use in <a href="formatdomain.html#elementEmulator">emulator</a>
|
||||
element of domain XML.</dd>
|
||||
<dt><code>loader</code></dt><dd>Loader path, for use in
|
||||
<a href="formatdomain.html#elementLoader">loader</a> element of domain
|
||||
XML.</dd>
|
||||
<dt><code>machine</code></dt><dd>Machine type, for use in
|
||||
<a href="formatdomain.html#attributeOSTypeMachine">machine</a>
|
||||
attribute of os/type element in domain XML. For example Xen
|
||||
supports <code>xenfv</code> for HVM, <code>xenpv</code> for
|
||||
PV, or <code>xenpvh</code> for PVH.</dd>
|
||||
<dt><code>domain</code></dt><dd>The <code>type</code> attribute of
|
||||
this element specifies the type of hypervisor required to run the
|
||||
domain. Use in <a href="formatdomain.html#attributeDomainType">type</a>
|
||||
attribute of the domain root element.</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
<dd>This element brings some information on supported guest architecture.</dd>
|
||||
|
||||
<dt><code>features</code></dt>
|
||||
<dd>This optional element encases possible features that can be used
|
||||
|
@@ -19,8 +19,7 @@
|
||||
<p>
|
||||
The root element required for all virtual machines is
|
||||
named <code>domain</code>. It has two attributes, the
|
||||
<a id="attributeDomainType"><code>type</code></a>
|
||||
specifies the hypervisor used for running
|
||||
<code>type</code> specifies the hypervisor used for running
|
||||
the domain. The allowed values are driver specific, but
|
||||
include "xen", "kvm", "qemu", "lxc" and "kqemu". The
|
||||
second attribute is <code>id</code> which is a unique
|
||||
@@ -149,11 +148,11 @@
|
||||
(badly named!) refers to an OS that supports the Xen 3 hypervisor
|
||||
guest ABI. There are also two optional attributes, <code>arch</code>
|
||||
specifying the CPU architecture to virtualization,
|
||||
and <a id="attributeOSTypeMachine"><code>machine</code></a> referring
|
||||
to the machine type. The <a href="formatcaps.html">Capabilities XML</a>
|
||||
and <code>machine</code> referring to the machine
|
||||
type. The <a href="formatcaps.html">Capabilities XML</a>
|
||||
provides details on allowed values for
|
||||
these. <span class="since">Since 0.0.1</span></dd>
|
||||
<dt><a id="elementLoader"><code>loader</code></a></dt>
|
||||
<dt><code>loader</code></dt>
|
||||
<dd>The optional <code>loader</code> tag refers to a firmware blob,
|
||||
which is specified by absolute path,
|
||||
used to assist the domain creation process. It is used by Xen
|
||||
@@ -759,17 +758,7 @@
|
||||
<cachetune vcpus='0-3'>
|
||||
<cache id='0' level='3' type='both' size='3' unit='MiB'/>
|
||||
<cache id='1' level='3' type='both' size='3' unit='MiB'/>
|
||||
<monitor level='3' vcpus='1'/>
|
||||
<monitor level='3' vcpus='0-3'/>
|
||||
</cachetune>
|
||||
<cachetune vcpus='4-5'>
|
||||
<monitor level='3' vcpus='4'/>
|
||||
<monitor level='3' vcpus='5'/>
|
||||
</cachetune>
|
||||
<memorytune vcpus='0-3'>
|
||||
<node id='0' bandwidth='60'/>
|
||||
</memorytune>
|
||||
|
||||
</cputune>
|
||||
...
|
||||
</domain>
|
||||
@@ -831,7 +820,7 @@
|
||||
<dt><code>period</code></dt>
|
||||
<dd>
|
||||
The optional <code>period</code> element specifies the enforcement
|
||||
interval (unit: microseconds). Within <code>period</code>, each vCPU of
|
||||
interval(unit: microseconds). Within <code>period</code>, each vCPU of
|
||||
the domain will not be allowed to consume more than <code>quota</code>
|
||||
worth of runtime. The value should be in range [1000, 1000000]. A period
|
||||
with value 0 means no value.
|
||||
@@ -841,7 +830,7 @@
|
||||
<dt><code>quota</code></dt>
|
||||
<dd>
|
||||
The optional <code>quota</code> element specifies the maximum allowed
|
||||
bandwidth (unit: microseconds). A domain with <code>quota</code> as any
|
||||
bandwidth(unit: microseconds). A domain with <code>quota</code> as any
|
||||
negative value indicates that the domain has infinite bandwidth for
|
||||
vCPU threads, which means that it is not bandwidth controlled. The value
|
||||
should be in range [1000, 18446744073709551] or less than 0. A quota
|
||||
@@ -874,8 +863,8 @@
|
||||
<dt><code>emulator_period</code></dt>
|
||||
<dd>
|
||||
The optional <code>emulator_period</code> element specifies the enforcement
|
||||
interval (unit: microseconds). Within <code>emulator_period</code>, emulator
|
||||
threads (those excluding vCPUs) of the domain will not be allowed to consume
|
||||
interval(unit: microseconds). Within <code>emulator_period</code>, emulator
|
||||
threads(those excluding vCPUs) of the domain will not be allowed to consume
|
||||
more than <code>emulator_quota</code> worth of runtime. The value should be
|
||||
in range [1000, 1000000]. A period with value 0 means no value.
|
||||
<span class="since">Only QEMU driver support since 0.10.0</span>
|
||||
@@ -883,7 +872,7 @@
|
||||
<dt><code>emulator_quota</code></dt>
|
||||
<dd>
|
||||
The optional <code>emulator_quota</code> element specifies the maximum
|
||||
allowed bandwidth (unit: microseconds) for domain's emulator threads (those
|
||||
allowed bandwidth(unit: microseconds) for domain's emulator threads(those
|
||||
excluding vCPUs). A domain with <code>emulator_quota</code> as any negative
|
||||
value indicates that the domain has infinite bandwidth for emulator threads
|
||||
(those excluding vCPUs), which means that it is not bandwidth controlled.
|
||||
@@ -895,7 +884,7 @@
|
||||
<dt><code>iothread_period</code></dt>
|
||||
<dd>
|
||||
The optional <code>iothread_period</code> element specifies the
|
||||
enforcement interval (unit: microseconds) for IOThreads. Within
|
||||
enforcement interval(unit: microseconds) for IOThreads. Within
|
||||
<code>iothread_period</code>, each IOThread of the domain will
|
||||
not be allowed to consume more than <code>iothread_quota</code>
|
||||
worth of runtime. The value should be in range [1000, 1000000].
|
||||
@@ -905,7 +894,7 @@
|
||||
<dt><code>iothread_quota</code></dt>
|
||||
<dd>
|
||||
The optional <code>iothread_quota</code> element specifies the maximum
|
||||
allowed bandwidth (unit: microseconds) for IOThreads. A domain with
|
||||
allowed bandwidth(unit: microseconds) for IOThreads. A domain with
|
||||
<code>iothread_quota</code> as any negative value indicates that the
|
||||
domain IOThreads have infinite bandwidth, which means that it is
|
||||
not bandwidth controlled. The value should be in range
|
||||
@@ -943,14 +932,12 @@
|
||||
size and required granularity are reported as well. The required
|
||||
attribute <code>vcpus</code> specifies to which vCPUs this allocation
|
||||
applies. A vCPU can only be member of one <code>cachetune</code> element
|
||||
allocation. The vCPUs specified by cachetune can be identical with those
|
||||
in memorytune, however they are not allowed to overlap.
|
||||
Supported subelements are:
|
||||
allocations. Supported subelements are:
|
||||
<dl>
|
||||
<dt><code>cache</code></dt>
|
||||
<dd>
|
||||
This optional element controls the allocation of CPU cache and has
|
||||
the following attributes:
|
||||
This element controls the allocation of CPU cache and has the
|
||||
following attributes:
|
||||
<dl>
|
||||
<dt><code>level</code></dt>
|
||||
<dd>
|
||||
@@ -984,59 +971,8 @@
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
<dt><code>monitor</code><span class="since">Since 4.10.0</span></dt>
|
||||
<dd>
|
||||
The optional element <code>monitor</code> creates the cache
|
||||
monitor(s) for current cache allocation and has the following
|
||||
required attributes:
|
||||
<dl>
|
||||
<dt><code>level</code></dt>
|
||||
<dd>
|
||||
Host cache level the monitor belongs to.
|
||||
</dd>
|
||||
<dt><code>vcpus</code></dt>
|
||||
<dd>
|
||||
vCPU list the monitor applies to. A monitor's vCPU list
|
||||
can only be the member(s) of the vCPU list of the associated
|
||||
allocation. The default monitor has the same vCPU list as the
|
||||
associated allocation. For non-default monitors, overlapping
|
||||
vCPUs are not permitted.
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
|
||||
<dt><code>memorytune</code><span class="since">Since 4.7.0</span></dt>
|
||||
<dd>
|
||||
Optional <code>memorytune</code> element can control allocations for
|
||||
memory bandwidth using the resctrl on the host. Whether or not is this
|
||||
supported can be gathered from capabilities where some limitations like
|
||||
minimum bandwidth and required granularity are reported as well. The
|
||||
required attribute <code>vcpus</code> specifies to which vCPUs this
|
||||
allocation applies. A vCPU can only be member of one
|
||||
<code>memorytune</code> element allocation. The <code>vcpus</code> specified
|
||||
by <code>memorytune</code> can be identical to those specified by
|
||||
<code>cachetune</code>. However they are not allowed to overlap each other.
|
||||
Supported subelements are:
|
||||
<dl>
|
||||
<dt><code>node</code></dt>
|
||||
<dd>
|
||||
This element controls the allocation of CPU memory bandwidth and has the
|
||||
following attributes:
|
||||
<dl>
|
||||
<dt><code>id</code></dt>
|
||||
<dd>
|
||||
Host node id from which to allocate memory bandwidth.
|
||||
</dd>
|
||||
<dt><code>bandwidth</code></dt>
|
||||
<dd>
|
||||
The memory bandwidth to allocate from this node. The value by default
|
||||
is in percentage.
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
@@ -1126,7 +1062,7 @@
|
||||
</hugepages>
|
||||
<nosharepages/>
|
||||
<locked/>
|
||||
<source type="file|anonymous|memfd"/>
|
||||
<source type="file|anonymous"/>
|
||||
<access mode="shared|private"/>
|
||||
<allocation mode="immediate|ondemand"/>
|
||||
<discard/>
|
||||
@@ -1177,17 +1113,13 @@
|
||||
suitable for the specific environment at the same time to mitigate
|
||||
the risks described above. <span class="since">Since 1.0.6</span></dd>
|
||||
<dt><code>source</code></dt>
|
||||
<dd>Using the <code>type</code> attribute, it's possible to
|
||||
provide "file" to utilize file memorybacking or keep the
|
||||
default "anonymous". <span class="since">Since 4.10.0</span>,
|
||||
you may choose "memfd" backing. (QEMU/KVM only)</dd>
|
||||
<dd>In this attribute you can switch to file memorybacking or keep
|
||||
default anonymous.</dd>
|
||||
<dt><code>access</code></dt>
|
||||
<dd>Using the <code>mode</code> attribute, specify if the memory is
|
||||
to be "shared" or "private". This can be overridden per numa node by
|
||||
<code>memAccess</code>.</dd>
|
||||
<dd>Specify if memory is shared or private. This can be overridden per
|
||||
numa node by <code>memAccess</code></dd>
|
||||
<dt><code>allocation</code></dt>
|
||||
<dd>Using the <code>mode</code> attribute, specify when to allocate
|
||||
the memory by supplying either "immediate" or "ondemand".</dd>
|
||||
<dd>Specify when allocate the memory</dd>
|
||||
<dt><code>discard</code></dt>
|
||||
<dd>When set and supported by hypervisor the memory
|
||||
content is discarded just before guest shuts down (or
|
||||
@@ -2005,11 +1937,6 @@
|
||||
<synic state='on'/>
|
||||
<reset state='on'/>
|
||||
<vendor_id state='on' value='KVM Hv'/>
|
||||
<frequencies state='on'/>
|
||||
<reenlightenment state='on'/>
|
||||
<tlbflush state='on'/>
|
||||
<ipi state='on'/>
|
||||
<evmcs state='on'/>
|
||||
</hyperv>
|
||||
<kvm>
|
||||
<hidden state='on'/>
|
||||
@@ -2081,7 +2008,7 @@
|
||||
<tr>
|
||||
<td>relaxed</td>
|
||||
<td>Relax constraints on timers</td>
|
||||
<td>on, off</td>
|
||||
<td> on, off</td>
|
||||
<td><span class="since">1.0.0 (QEMU 2.0)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -2099,31 +2026,31 @@
|
||||
<tr>
|
||||
<td>vpindex</td>
|
||||
<td>Virtual processor index</td>
|
||||
<td>on, off</td>
|
||||
<td> on, off</td>
|
||||
<td><span class="since">1.3.3 (QEMU 2.5)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>runtime</td>
|
||||
<td>Processor time spent on running guest code and on behalf of guest code</td>
|
||||
<td>on, off</td>
|
||||
<td> on, off</td>
|
||||
<td><span class="since">1.3.3 (QEMU 2.5)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>synic</td>
|
||||
<td>Enable Synthetic Interrupt Controller (SyNIC)</td>
|
||||
<td>on, off</td>
|
||||
<td> on, off</td>
|
||||
<td><span class="since">1.3.3 (QEMU 2.6)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>stimer</td>
|
||||
<td>Enable SyNIC timers</td>
|
||||
<td>on, off</td>
|
||||
<td> on, off</td>
|
||||
<td><span class="since">1.3.3 (QEMU 2.6)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>reset</td>
|
||||
<td>Enable hypervisor reset</td>
|
||||
<td>on, off</td>
|
||||
<td> on, off</td>
|
||||
<td><span class="since">1.3.3 (QEMU 2.5)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -2132,36 +2059,6 @@
|
||||
<td>on, off; value - string, up to 12 characters</td>
|
||||
<td><span class="since">1.3.3 (QEMU 2.5)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>frequencies</td>
|
||||
<td>Expose frequency MSRs</td>
|
||||
<td>on, off</td>
|
||||
<td><span class="since">4.7.0 (QEMU 2.12)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>reenlightenment</td>
|
||||
<td>Enable re-enlightenment notification on migration</td>
|
||||
<td>on, off</td>
|
||||
<td><span class="since">4.7.0 (QEMU 3.0)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tlbflush</td>
|
||||
<td>Enable PV TLB flush support</td>
|
||||
<td>on, off</td>
|
||||
<td><span class="since">4.7.0 (QEMU 3.0)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ipi</td>
|
||||
<td>Enable PV IPI support</td>
|
||||
<td>on, off</td>
|
||||
<td><span class="since">4.10.0 (QEMU 3.1)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>evmcs</td>
|
||||
<td>Enable Enlightened VMCS</td>
|
||||
<td>on, off</td>
|
||||
<td><span class="since">4.10.0 (QEMU 3.1)</span></td>
|
||||
</tr>
|
||||
</table>
|
||||
</dd>
|
||||
<dt><code>pvspinlock</code></dt>
|
||||
@@ -2295,18 +2192,6 @@
|
||||
defined, the hypervisor default will be used.
|
||||
<span class="since">Since 4.6.0</span> (QEMU/KVM only)
|
||||
</dd>
|
||||
<dt><code>nested-hv</code></dt>
|
||||
<dd>Configure nested HV availability for pSeries guests. This needs to
|
||||
be enabled from the host (L0) in order to be effective; having HV
|
||||
support in the (L1) guest is very desiderable if it's planned to
|
||||
run nested (L2) guests inside it, because it will result in those
|
||||
nested guests having much better performance than they would when
|
||||
using KVM PR or TCG.
|
||||
Possible values for the <code>state</code> attribute are
|
||||
<code>on</code> and <code>off</code>. If the attribute is not
|
||||
defined, the hypervisor default will be used.
|
||||
<span class="since">Since 4.10.0</span> (QEMU/KVM only)
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h3><a id="elementsTime">Time keeping</a></h3>
|
||||
@@ -2675,7 +2560,7 @@
|
||||
...</pre>
|
||||
|
||||
<dl>
|
||||
<dt><a id="elementEmulator"><code>emulator</code></a></dt>
|
||||
<dt><code>emulator</code></dt>
|
||||
<dd>
|
||||
The contents of the <code>emulator</code> element specify
|
||||
the fully qualified path to the device model emulator binary.
|
||||
@@ -2848,16 +2733,6 @@
|
||||
</source>
|
||||
<target dev='sdb' bus='scsi'/>
|
||||
</disk>
|
||||
<disk type='network' device='lun'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-nopool/0'>
|
||||
<host name='example.com' port='3260'/>
|
||||
<initiator>
|
||||
<iqn name='iqn.2013-07.com.example:client'/>
|
||||
</initiator>
|
||||
</source>
|
||||
<target dev='sdb' bus='scsi'/>
|
||||
</disk>
|
||||
<disk type='volume' device='disk'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source pool='iscsi-pool' volume='unit:0:0:1' mode='host'/>
|
||||
@@ -3076,11 +2951,6 @@
|
||||
is only valid when the specified storage volume is of 'file' or
|
||||
'block' type).
|
||||
<p>
|
||||
The <code>source</code> element may also have the <code>index</code>
|
||||
attribute with same semantics the <a href='#elementsDiskBackingStoreIndex'>
|
||||
<code>index</code></a> attribute of <code>backingStore</code>
|
||||
</p>
|
||||
<p>
|
||||
The <code>source</code> element may contain the following sub elements:
|
||||
</p>
|
||||
|
||||
@@ -3220,15 +3090,6 @@
|
||||
It's recommended to allow libvirt manage the persistent
|
||||
reservations.
|
||||
</dd>
|
||||
<dt><code>initiator</code></dt>
|
||||
<dd><span class="since">Since libvirt 4.7.0</span>, the
|
||||
<code>initiator</code> element is supported for a disk
|
||||
<code>type</code> "network" that is using a <code>source</code>
|
||||
element with the <code>protocol</code> attribute "iscsi".
|
||||
If present, the <code>initiator</code> element provides the
|
||||
initiator IQN needed to access the source via mandatory
|
||||
attribute <code>name</code>.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
@@ -3289,7 +3150,7 @@
|
||||
by the backing store, see disk type attribute above for more
|
||||
details and possible values.
|
||||
</dd>
|
||||
<dt><code><a id="elementsDiskBackingStoreIndex">index</a></code></dt>
|
||||
<dt><code>index</code></dt>
|
||||
<dd>
|
||||
This attribute is only valid in output (and ignored on input) and
|
||||
it can be used to refer to a specific part of the disk chain when
|
||||
@@ -3977,15 +3838,7 @@
|
||||
(<span class="since">since 0.9.7, requires QEMU
|
||||
0.13</span>). <code>multifunction</code> defaults to 'off',
|
||||
but should be set to 'on' for function 0 of a slot that will
|
||||
have multiple functions used.
|
||||
(<span class="since">Since 4.10.0</span>), PCI address extensions
|
||||
depending on the architecture are supported. For example, PCI
|
||||
addresses for S390 guests will have a <code>zpci</code> child
|
||||
element, with two attributes: <code>uid</code> (a hex value
|
||||
between 0x0001 and 0xffff, inclusive), and <code>fid</code> (a
|
||||
hex value between 0x00000000 and 0xffffffff, inclusive) used by
|
||||
PCI devices on S390 for User-defined Identifiers and Function
|
||||
Identifiers.<br/>
|
||||
have multiple functions used.<br/>
|
||||
<span class="since">Since 1.3.5</span>, some hypervisor
|
||||
drivers may accept an <code><address type='pci'/></code>
|
||||
element with no other attributes as an explicit request to
|
||||
@@ -4532,8 +4385,8 @@
|
||||
<p>
|
||||
USB, PCI and SCSI devices attached to the host can be passed through
|
||||
to the guest using the <code>hostdev</code> element.
|
||||
<span class="since">since after 0.4.4 for USB, 0.6.0 for PCI (KVM only)
|
||||
and 1.0.6 for SCSI (KVM only)</span>:
|
||||
<span class="since">since after 0.4.4 for USB, 0.6.0 for PCI(KVM only)
|
||||
and 1.0.6 for SCSI(KVM only)</span>:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
@@ -4676,9 +4529,8 @@
|
||||
<dd>For mediated devices (<span class="since">Since 3.2.0</span>)
|
||||
the <code>model</code> attribute specifies the device API which
|
||||
determines how the host's vfio driver will expose the device to the
|
||||
guest. Currently, <code>model='vfio-pci'</code>,
|
||||
guest. Currently, <code>model='vfio-pci'</code> and
|
||||
<code>model='vfio-ccw'</code> (<span class="since">Since 4.4.0</span>)
|
||||
and <code>model='vfio-ap'</code> (<span class="since">Since 4.9.0</span>)
|
||||
is supported. <a href="drvnodedev.html#MDEV">MDEV</a> section
|
||||
provides more information about mediated devices as well as how to
|
||||
create mediated devices on the host.
|
||||
@@ -5228,6 +5080,7 @@
|
||||
<virtualport>
|
||||
<parameters instanceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/>
|
||||
</virtualport>
|
||||
|
||||
</interface>
|
||||
</devices>
|
||||
...</pre>
|
||||
@@ -5720,7 +5573,8 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
<host csum='off' gso='off' tso4='off' tso6='off' ecn='off' ufo='off' mrg_rxbuf='off'/>
|
||||
<guest csum='off' tso4='off' tso6='off' ecn='off' ufo='off'/>
|
||||
</driver>
|
||||
</b></interface>
|
||||
</b>
|
||||
</interface>
|
||||
</devices>
|
||||
...</pre>
|
||||
|
||||
@@ -6222,7 +6076,7 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
<b><route family='ipv4' address='192.168.122.0' prefix='24' gateway='192.168.122.1'/></b>
|
||||
<b><route family='ipv4' address='192.168.122.8' gateway='192.168.122.1'/></b>
|
||||
</hostdev>
|
||||
...
|
||||
|
||||
</devices>
|
||||
...
|
||||
</pre>
|
||||
@@ -7074,8 +6928,7 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
is available) and <code>pci-serial</code> (usable whenever PCI support
|
||||
is available); <span class="since">since 3.10.0</span>,
|
||||
<code>spapr-vio-serial</code> (usable with ppc64/pseries guests),
|
||||
<code>system-serial</code> (usable with aarch64/virt and,
|
||||
<span class="since">since 4.7.0</span>, riscv/virt guests) and
|
||||
<code>system-serial</code> (usable with aarch64/virt guests) and
|
||||
<code>sclp-serial</code> (usable with s390 and s390x guests) are
|
||||
available as well.
|
||||
</p>
|
||||
@@ -7089,11 +6942,10 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
target type); <code>pci-serial</code>
|
||||
(usable with the <code>pci-serial</code> target type);
|
||||
<code>spapr-vty</code> (usable with the <code>spapr-vio-serial</code>
|
||||
target type); <code>pl011</code> and,
|
||||
<span class="since">since 4.7.0</span>, <code>16550a</code> (usable
|
||||
with the <code>system-serial</code> target type);
|
||||
<code>sclpconsole</code> and <code>sclplmconsole</code> (usable with
|
||||
the <code>sclp-serial</code> target type).
|
||||
target type); <code>pl011</code> (usable with the
|
||||
<code>system-serial</code> target type); <code>sclpconsole</code> and
|
||||
<code>sclplmconsole</code> (usable with the <code>sclp-serial</code>
|
||||
target type).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -8242,9 +8094,7 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
<dt><code>shmem</code></dt>
|
||||
<dd>
|
||||
The <code>shmem</code> element has one mandatory attribute,
|
||||
<code>name</code> to identify the shared memory. This attribute cannot
|
||||
be directory specific to <code>.</code> or <code>..</code> as well as
|
||||
it cannot involve path separator <code>/</code>.
|
||||
<code>name</code> to identify the shared memory.
|
||||
</dd>
|
||||
<dt><code>model</code></dt>
|
||||
<dd>
|
||||
|
@@ -393,7 +393,6 @@ table.acl {
|
||||
|
||||
table.acl tr, table.acl td {
|
||||
padding: 0.3em;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
table.acl thead {
|
||||
|
323
docs/news.xml
323
docs/news.xml
@@ -33,329 +33,6 @@
|
||||
-->
|
||||
|
||||
<libvirt>
|
||||
<release version="v4.10.0" date="unreleased">
|
||||
<section title="New features">
|
||||
<change>
|
||||
<summary>
|
||||
qemu: Add Hyper-V PV IPI and Enlightened VMCS support
|
||||
</summary>
|
||||
<description>
|
||||
The QEMU driver now has support for Hyper-V PV IPI and Enlightened VMCS
|
||||
for Windows and Hyper-V guests.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
qemu: Added support for PCI devices on S390
|
||||
</summary>
|
||||
<description>
|
||||
PCI addresses can now include the new zpci element which contains
|
||||
uid (user-defined identifier) and fid (PCI function identifier)
|
||||
attributes and makes the corresponding devices usable by S390
|
||||
guests.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
Support changing IOThread polling parameters for a live guest
|
||||
</summary>
|
||||
<description>
|
||||
Introduced virDomainSetIOThreadParams which allows dynamically
|
||||
setting the IOThread polling parameters used by QEMU to manage
|
||||
the thread polling interval and the algorithm for growth or
|
||||
shrink of the polling time. The values only affect a running
|
||||
guest with IOThreads. The guest's IOThread polling values can
|
||||
be viewed via the domain statistics.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
Xen: Add support for PVH
|
||||
</summary>
|
||||
<description>
|
||||
The libxl driver now supports Xen's PVH virtual machine type.
|
||||
PVH machines are enabled with the new "xenpvh" OS type, e.g.
|
||||
<code><os><type>xenpvh</type></os></code>
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
qemu: Added support for CMT (Cache Monitoring Technology)
|
||||
</summary>
|
||||
<description>
|
||||
Introduced cache monitoring using the <code>monitor</code>
|
||||
element in <code>cachetune</code> for vCPU threads. Added
|
||||
interfaces to get and display the cache utilization statistics
|
||||
through the command 'virsh domstats' via the
|
||||
virConnectGetAllDomainStats API.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
qemu: Add support for nested HV for pSeries guests
|
||||
</summary>
|
||||
<description>
|
||||
Nested HV support makes it possible to run nested (L2) guests
|
||||
with minimal performance penalty when compared to regular (L1)
|
||||
guests on ppc64 hardware.
|
||||
</description>
|
||||
</change>
|
||||
</section>
|
||||
<section title="Improvements">
|
||||
</section>
|
||||
<section title="Bug fixes">
|
||||
<change>
|
||||
<summary>
|
||||
Xen: Handle soft reset shutdown event
|
||||
</summary>
|
||||
<description>
|
||||
The pvops Linux kernel uses soft reset to handle the crash
|
||||
machine operation. The libxl driver now supports the soft
|
||||
reset shutdown event, allowing proper crash handling of
|
||||
pvops-based HVM domains.
|
||||
</description>
|
||||
</change>
|
||||
</section>
|
||||
</release>
|
||||
<release version="v4.9.0" date="2018-11-04">
|
||||
<section title="New features">
|
||||
<change>
|
||||
<summary>
|
||||
util: Add cgroup v2 support
|
||||
</summary>
|
||||
<description>
|
||||
cgroup v2 support has been implemented in libvirt, with both
|
||||
"unified" (v2 only) and "hybrid" (v2 + v1) setups being usable;
|
||||
existing "legacy" (v1 only) setups will keep working.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
qemu: Add vfio AP support
|
||||
</summary>
|
||||
<description>
|
||||
The QEMU driver now has support to passthrough adjunct processors
|
||||
into QEMU guests on S390.
|
||||
</description>
|
||||
</change>
|
||||
</section>
|
||||
<section title="Improvements">
|
||||
<change>
|
||||
<summary>
|
||||
rpc: Make 'genprotocol' output reproducible
|
||||
</summary>
|
||||
<description>
|
||||
This is another step towards making libvirt builds fully
|
||||
reproducible.
|
||||
</description>
|
||||
</change>
|
||||
</section>
|
||||
<section title="Bug fixes">
|
||||
<change>
|
||||
<summary>
|
||||
security: Fix permissions for UNIX sockets
|
||||
</summary>
|
||||
<description>
|
||||
Since 4.5.0, libvirt is using FD passing to hand sockets over to
|
||||
QEMU, which in theory removes the need for them to be accessible by
|
||||
the user under which the QEMU process is running; however, other
|
||||
processes such as vdsm need to access the sockets as well, which
|
||||
means adjusting permissions is still necessary.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
cpu_map: Add Icelake model definitions
|
||||
</summary>
|
||||
<description>
|
||||
These CPU models will be available in the upcoming 3.1.0 QEMU
|
||||
release.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
util: Properly parse URIs with missing trailing slash
|
||||
</summary>
|
||||
<description>
|
||||
Some storage URIs were not parsed correctly, in which case libvirt
|
||||
ended up emitting XML that it would then refuse to parse back.
|
||||
</description>
|
||||
</change>
|
||||
</section>
|
||||
</release>
|
||||
<release version="v4.8.0" date="2018-10-01">
|
||||
<section title="New features">
|
||||
<change>
|
||||
<summary>
|
||||
Xen: Support PM Suspend and Wakeup
|
||||
</summary>
|
||||
<description>
|
||||
The libxl driver now supports the virDomainPMSuspendForDuration
|
||||
and virDomainPMWakeup APIs.
|
||||
</description>
|
||||
</change>
|
||||
</section>
|
||||
<section title="Removed features">
|
||||
<change>
|
||||
<summary>
|
||||
Xen: Drop support for Xen 4.4 and 4.5
|
||||
</summary>
|
||||
<description>
|
||||
Xen 4.4 and 4.5 are no longer supported by the Xen community.
|
||||
Drop support for these older versions and require Xen >= 4.6.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
nwfilter: Disallow binding creation in session mode
|
||||
</summary>
|
||||
<description>
|
||||
Ensure that a filter binding creation is not attempted in session
|
||||
mode and generates a proper error message.
|
||||
</description>
|
||||
</change>
|
||||
</section>
|
||||
<section title="Improvements">
|
||||
<change>
|
||||
<summary>
|
||||
qemu: Retrieve guest hostname through QEMU Guest Agent command
|
||||
</summary>
|
||||
<description>
|
||||
QEMU is now able to retrieve the guest hostname using a new QEMU-GA
|
||||
command called 'guest-get-host-name'. Virsh users can execute
|
||||
'domhostname' for QEMU driver for domains configured to use the
|
||||
Guest Agent.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
virsh: Implement vsh-table in virsh and virsh-admin
|
||||
</summary>
|
||||
<description>
|
||||
The new API fixes problems with table-alignment, making the tables
|
||||
more readable and deals with unicode.
|
||||
</description>
|
||||
</change>
|
||||
</section>
|
||||
<section title="Bug fixes">
|
||||
<change>
|
||||
<summary>
|
||||
storage: Allow inputvol to be encrypted
|
||||
</summary>
|
||||
<description>
|
||||
When creating a storage volume based on another volume, the base
|
||||
input volume is allowed to be encrypted.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
virsh: Require explicit --domain for domxml-to-native
|
||||
</summary>
|
||||
<description>
|
||||
The --domain option for domxml-to-native virsh command has always
|
||||
been documented as required, but commit v4.3.0-127-gd86531daf2
|
||||
accidentally made it optional.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
lxc_monitor: Avoid AB / BA lock race
|
||||
</summary>
|
||||
<description>
|
||||
A deadlock situation could occur when autostarting a LXC domain
|
||||
'guest' due to two threads attempting to take opposing locks while
|
||||
holding opposing locks (AB BA problem).
|
||||
</description>
|
||||
</change>
|
||||
</section>
|
||||
</release>
|
||||
<release version="v4.7.0" date="2018-09-03">
|
||||
<section title="New features">
|
||||
<change>
|
||||
<summary>
|
||||
storage: add storage pool iscsi-direct
|
||||
</summary>
|
||||
<description>
|
||||
Introduce a new storage pool backend that uses libiscsi instead of
|
||||
iscsiadm. It support basic pool operations: checkPool and refreshPool.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
Add support for MBA (Memory Bandwidth Allocation technology)
|
||||
</summary>
|
||||
<description>
|
||||
Domain vCPU threads can now have allocated some parts of host memory
|
||||
bandwidth by using the <code>memorytune</code> element in <code>cputune</code>.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
qemu: Add support for RISC-V guests
|
||||
</summary>
|
||||
<description>
|
||||
riscv32 and riscv64 guest architectures are now supported.
|
||||
</description>
|
||||
</change>
|
||||
</section>
|
||||
<section title="Improvements">
|
||||
<change>
|
||||
<summary>
|
||||
qemu: Add ccw support for vhost-vsock
|
||||
</summary>
|
||||
<description>
|
||||
Support the vhost-vsock-ccw device on S390.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
qemu: Make default machine type independent of QEMU
|
||||
</summary>
|
||||
<description>
|
||||
We can't control whether or not QEMU will change its default
|
||||
machine type in the future, or whether downstream distributions
|
||||
will decide to compile out some machine types, so our only option
|
||||
to provide a predictable behavior is taking care of the default
|
||||
ourselves; management applications and users are encouraged to
|
||||
explicitly pick a machine type when creating new guests.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
apparmor: Various improvements
|
||||
</summary>
|
||||
<description>
|
||||
Rules have been added to deal with a number of scenarios that
|
||||
didn't work correctly.
|
||||
</description>
|
||||
</change>
|
||||
</section>
|
||||
<section title="Bug fixes">
|
||||
<change>
|
||||
<summary>
|
||||
esx: Truncate CPU model name
|
||||
</summary>
|
||||
<description>
|
||||
Some CPU model names are too long to be stored into the
|
||||
corresponding property, and should be explicitly truncated
|
||||
to avoid unexpected behavior in users of the
|
||||
<code>virNodeGetInfo()</code> API such as
|
||||
<code>virsh nodeinfo</code>.
|
||||
</description>
|
||||
</change>
|
||||
<change>
|
||||
<summary>
|
||||
utils: Remove arbitrary limit on socket_id/core_id
|
||||
</summary>
|
||||
<description>
|
||||
Both values were assumed to be smaller than 4096, but in fact
|
||||
they are entirely hardware-dependent and there have been reports
|
||||
of machines presenting much bigger values, preventing libvirt from
|
||||
working correctly; all such limits have now been removed.
|
||||
</description>
|
||||
</change>
|
||||
</section>
|
||||
</release>
|
||||
<release version="v4.6.0" date="2018-08-06">
|
||||
<section title="New features">
|
||||
<change>
|
||||
|
@@ -39,7 +39,7 @@
|
||||
<ul>
|
||||
<li><a href="https://repology.org/metapackage/libvirt/versions">libvirt</a></li>
|
||||
<li><a href="https://repology.org/metapackage/qemu/versions">qemu</a></li>
|
||||
<li><a href="https://repology.org/metapackage/qemu-kvm/versions">qemu-kvm</a></li>
|
||||
<li><a href="https://repology.org/metapackage/qemu/versions">qemu-kvm</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
@@ -65,17 +65,6 @@
|
||||
</data>
|
||||
</choice>
|
||||
</define>
|
||||
<define name="uint32">
|
||||
<choice>
|
||||
<data type="string">
|
||||
<param name="pattern">(0x)?[0-9a-fA-F]{1,8}</param>
|
||||
</data>
|
||||
<data type="unsignedInt">
|
||||
<param name="minInclusive">0</param>
|
||||
<param name="maxInclusive">4294967295</param>
|
||||
</data>
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
<define name="UUID">
|
||||
<choice>
|
||||
@@ -122,22 +111,6 @@
|
||||
</attribute>
|
||||
</optional>
|
||||
</define>
|
||||
<define name="zpciaddress">
|
||||
<optional>
|
||||
<element name="zpci">
|
||||
<optional>
|
||||
<attribute name="uid">
|
||||
<ref name="uint16"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="fid">
|
||||
<ref name="uint32"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</element>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<!-- a 6 byte MAC address in ASCII-hex format, eg "12:34:56:78:9A:BC" -->
|
||||
<!-- The lowest bit of the 1st byte is the "multicast" bit. a -->
|
||||
@@ -425,8 +398,6 @@
|
||||
<value>ppc64</value>
|
||||
<value>ppc64le</value>
|
||||
<value>ppcemb</value>
|
||||
<value>riscv32</value>
|
||||
<value>riscv64</value>
|
||||
<value>s390</value>
|
||||
<value>s390x</value>
|
||||
<value>sh4</value>
|
||||
|
@@ -51,9 +51,6 @@
|
||||
<optional>
|
||||
<ref name='cache'/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='memory_bandwidth'/>
|
||||
</optional>
|
||||
<zeroOrMore>
|
||||
<ref name='secmodel'/>
|
||||
</zeroOrMore>
|
||||
@@ -316,9 +313,6 @@
|
||||
</zeroOrMore>
|
||||
</element>
|
||||
</oneOrMore>
|
||||
<optional>
|
||||
<ref name='cpuMonitor'/>
|
||||
</optional>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
@@ -332,68 +326,6 @@
|
||||
</attribute>
|
||||
</define>
|
||||
|
||||
<define name='memory_bandwidth'>
|
||||
<element name='memory_bandwidth'>
|
||||
<oneOrMore>
|
||||
<element name='node'>
|
||||
<attribute name='id'>
|
||||
<ref name='unsignedInt'/>
|
||||
</attribute>
|
||||
<attribute name='cpus'>
|
||||
<ref name='cpuset'/>
|
||||
</attribute>
|
||||
<zeroOrMore>
|
||||
<element name='control'>
|
||||
<attribute name='granularity'>
|
||||
<ref name='unsignedInt'/>
|
||||
</attribute>
|
||||
<optional>
|
||||
<attribute name='min'>
|
||||
<ref name='unsignedInt'/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<attribute name='maxAllocs'>
|
||||
<ref name='unsignedInt'/>
|
||||
</attribute>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</element>
|
||||
</oneOrMore>
|
||||
<optional>
|
||||
<ref name='cpuMonitor'/>
|
||||
</optional>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name='cpuMonitor'>
|
||||
<element name='monitor'>
|
||||
<optional>
|
||||
<attribute name='level'>
|
||||
<ref name='unsignedInt'/>
|
||||
</attribute>
|
||||
<attribute name='reuseThreshold'>
|
||||
<ref name='unsignedInt'/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<attribute name='maxMonitors'>
|
||||
<ref name='unsignedInt'/>
|
||||
</attribute>
|
||||
<oneOrMore>
|
||||
<element name='feature'>
|
||||
<attribute name='name'>
|
||||
<ref name='monitorFeature'/>
|
||||
</attribute>
|
||||
</element>
|
||||
</oneOrMore>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name='monitorFeature'>
|
||||
<data type='string'>
|
||||
<param name='pattern'>(llc_|mbm_)[a-zA-Z0-9\-_]+</param>
|
||||
</data>
|
||||
</define>
|
||||
|
||||
<define name='guestcaps'>
|
||||
<element name='guest'>
|
||||
<ref name='ostype'/>
|
||||
|
@@ -340,15 +340,13 @@
|
||||
<attribute name="machine">
|
||||
<choice>
|
||||
<value>xenpv</value>
|
||||
<value>xenfv</value>
|
||||
<value>xenpvh</value>
|
||||
<value>xenner</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
<choice>
|
||||
<value>xen</value>
|
||||
<value>linux</value>
|
||||
<value>xenpvh</value>
|
||||
</choice>
|
||||
</element>
|
||||
</define>
|
||||
@@ -657,7 +655,6 @@
|
||||
<choice>
|
||||
<value>file</value>
|
||||
<value>anonymous</value>
|
||||
<value>memfd</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</element>
|
||||
@@ -959,7 +956,7 @@
|
||||
<attribute name="vcpus">
|
||||
<ref name='cpuset'/>
|
||||
</attribute>
|
||||
<zeroOrMore>
|
||||
<oneOrMore>
|
||||
<element name="cache">
|
||||
<attribute name="id">
|
||||
<ref name='unsignedInt'/>
|
||||
@@ -983,33 +980,6 @@
|
||||
</attribute>
|
||||
</optional>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<zeroOrMore>
|
||||
<element name="monitor">
|
||||
<attribute name="level">
|
||||
<ref name='unsignedInt'/>
|
||||
</attribute>
|
||||
<attribute name="vcpus">
|
||||
<ref name='cpuset'/>
|
||||
</attribute>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<zeroOrMore>
|
||||
<element name="memorytune">
|
||||
<attribute name="vcpus">
|
||||
<ref name='cpuset'/>
|
||||
</attribute>
|
||||
<oneOrMore>
|
||||
<element name="node">
|
||||
<attribute name="id">
|
||||
<ref name='unsignedInt'/>
|
||||
</attribute>
|
||||
<attribute name="bandwidth">
|
||||
<ref name='unsignedInt'/>
|
||||
</attribute>
|
||||
</element>
|
||||
</oneOrMore>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
@@ -1558,14 +1528,6 @@
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name="diskSourceCommon">
|
||||
<optional>
|
||||
<attribute name="index">
|
||||
<ref name="positiveInteger"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name="diskSource">
|
||||
<choice>
|
||||
<ref name="diskSourceFile"/>
|
||||
@@ -1589,7 +1551,6 @@
|
||||
<ref name="absFilePath"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<optional>
|
||||
<ref name="storageStartupPolicy"/>
|
||||
</optional>
|
||||
@@ -1614,7 +1575,6 @@
|
||||
<ref name="absFilePath"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<optional>
|
||||
<ref name="storageStartupPolicy"/>
|
||||
</optional>
|
||||
@@ -1640,7 +1600,6 @@
|
||||
<attribute name="dir">
|
||||
<ref name="absFilePath"/>
|
||||
</attribute>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<optional>
|
||||
<ref name="storageStartupPolicy"/>
|
||||
</optional>
|
||||
@@ -1694,7 +1653,6 @@
|
||||
<attribute name="protocol">
|
||||
<value>rbd</value>
|
||||
</attribute>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<optional>
|
||||
<attribute name="name"/>
|
||||
</optional>
|
||||
@@ -1734,7 +1692,6 @@
|
||||
<value>iscsi</value>
|
||||
</attribute>
|
||||
<attribute name="name"/>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<ref name="diskSourceNetworkHost"/>
|
||||
<optional>
|
||||
<ref name="diskAuth"/>
|
||||
@@ -1742,9 +1699,6 @@
|
||||
<optional>
|
||||
<ref name="encryption"/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name="initiatorinfo"/>
|
||||
</optional>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
@@ -1757,7 +1711,6 @@
|
||||
</choice>
|
||||
</attribute>
|
||||
<attribute name="name"/>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<ref name="diskSourceNetworkHost"/>
|
||||
<optional>
|
||||
<ref name="encryption"/>
|
||||
@@ -1776,7 +1729,6 @@
|
||||
</choice>
|
||||
</attribute>
|
||||
<attribute name="name"/>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<ref name="diskSourceNetworkHost"/>
|
||||
<optional>
|
||||
<ref name="encryption"/>
|
||||
@@ -1797,7 +1749,6 @@
|
||||
<ref name="virYesNo"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<ref name="diskSourceNetworkHost"/>
|
||||
<optional>
|
||||
<ref name="encryption"/>
|
||||
@@ -1811,7 +1762,6 @@
|
||||
<value>gluster</value>
|
||||
</attribute>
|
||||
<attribute name="name"/>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<oneOrMore>
|
||||
<ref name="diskSourceNetworkHost"/>
|
||||
</oneOrMore>
|
||||
@@ -1829,7 +1779,6 @@
|
||||
</choice>
|
||||
</attribute>
|
||||
<attribute name="name"/>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<optional>
|
||||
<attribute name="tls">
|
||||
<ref name="virYesNo"/>
|
||||
@@ -1874,7 +1823,6 @@
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
<ref name="diskSourceCommon"/>
|
||||
<optional>
|
||||
<ref name="storageStartupPolicy"/>
|
||||
</optional>
|
||||
@@ -3746,7 +3694,6 @@
|
||||
<value>pci-serial</value>
|
||||
<value>spapr-vty</value>
|
||||
<value>pl011</value>
|
||||
<value>16550a</value>
|
||||
<value>sclpconsole</value>
|
||||
<value>sclplmconsole</value>
|
||||
</choice>
|
||||
@@ -4631,7 +4578,6 @@
|
||||
<choice>
|
||||
<value>vfio-pci</value>
|
||||
<value>vfio-ccw</value>
|
||||
<value>vfio-ap</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
<optional>
|
||||
@@ -4978,11 +4924,6 @@
|
||||
<ref name="featurestate"/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="nested-hv">
|
||||
<ref name="featurestate"/>
|
||||
</element>
|
||||
</optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</optional>
|
||||
@@ -5239,7 +5180,6 @@
|
||||
<value>pci</value>
|
||||
</attribute>
|
||||
<ref name="pciaddress"/>
|
||||
<ref name="zpciaddress"/>
|
||||
</group>
|
||||
<group>
|
||||
<attribute name="type">
|
||||
@@ -5773,31 +5713,6 @@
|
||||
</optional>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="frequencies">
|
||||
<ref name="featurestate"/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="reenlightenment">
|
||||
<ref name="featurestate"/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="tlbflush">
|
||||
<ref name="featurestate"/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="ipi">
|
||||
<ref name="featurestate"/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="evmcs">
|
||||
<ref name="featurestate"/>
|
||||
</element>
|
||||
</optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</define>
|
||||
|
@@ -39,17 +39,6 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name='initiatorinfo'>
|
||||
<element name='initiator'>
|
||||
<element name='iqn'>
|
||||
<attribute name='name'>
|
||||
<text/>
|
||||
</attribute>
|
||||
<empty/>
|
||||
</element>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name="reconnect">
|
||||
<element name="reconnect">
|
||||
<attribute name="enabled">
|
||||
|
@@ -18,7 +18,6 @@
|
||||
<ref name='poollogical'/>
|
||||
<ref name='pooldisk'/>
|
||||
<ref name='pooliscsi'/>
|
||||
<ref name='pooliscsidirect'/>
|
||||
<ref name='poolscsi'/>
|
||||
<ref name='poolmpath'/>
|
||||
<ref name='poolrbd'/>
|
||||
@@ -102,19 +101,6 @@
|
||||
</interleave>
|
||||
</define>
|
||||
|
||||
<define name='pooliscsidirect'>
|
||||
<attribute name='type'>
|
||||
<value>iscsi-direct</value>
|
||||
</attribute>
|
||||
<interleave>
|
||||
<ref name='commonmetadata'/>
|
||||
<optional>
|
||||
<ref name='sizing'/>
|
||||
</optional>
|
||||
<ref name='sourceiscsidirect'/>
|
||||
</interleave>
|
||||
</define>
|
||||
|
||||
<define name='poolscsi'>
|
||||
<attribute name='type'>
|
||||
<value>scsi</value>
|
||||
@@ -328,11 +314,14 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name='sourceinfodeviscsidirect'>
|
||||
<element name='device'>
|
||||
<attribute name='path'>
|
||||
<ref name='IscsiQualifiedName'/>
|
||||
</attribute>
|
||||
<define name='initiatorinfo'>
|
||||
<element name='initiator'>
|
||||
<element name='iqn'>
|
||||
<attribute name='name'>
|
||||
<text/>
|
||||
</attribute>
|
||||
<empty/>
|
||||
</element>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
@@ -606,19 +595,6 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name='sourceiscsidirect'>
|
||||
<element name='source'>
|
||||
<interleave>
|
||||
<ref name='sourceinfohost'/>
|
||||
<ref name='sourceinfodeviscsidirect'/>
|
||||
<ref name='initiatorinfo'/>
|
||||
<optional>
|
||||
<ref name='sourceinfoauth'/>
|
||||
</optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name='sourcescsi'>
|
||||
<element name='source'>
|
||||
<interleave>
|
||||
|
@@ -139,7 +139,6 @@
|
||||
</element>
|
||||
<ref name='format'/>
|
||||
<ref name='permissions'/>
|
||||
<ref name='timestamps'/>
|
||||
</interleave>
|
||||
</element>
|
||||
</define>
|
||||
|
@@ -310,7 +310,7 @@
|
||||
on the size and placement of volumes. The 'free extents'
|
||||
information will detail the regions which are available for creating
|
||||
new volumes. A volume cannot span across 2 different free extents.
|
||||
It will default to using <code>dos</code> as the pool source format.
|
||||
It will default to using <code>msdos</code> as the pool source format.
|
||||
</p>
|
||||
|
||||
<h3>Example pool input</h3>
|
||||
@@ -357,10 +357,8 @@
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
The formats <code>dos</code> ("msdos" in parted terminology,
|
||||
good for BIOS systems) or <code>gpt</code> (good for UEFI
|
||||
systems) are recommended for best portability - the latter is
|
||||
needed for disks larger than 2TB.
|
||||
The <code>dos</code> or <code>gpt</code> formats are recommended for
|
||||
best portability - the latter is needed for disks larger than 2TB.
|
||||
</p>
|
||||
|
||||
<h3>Valid volume format types</h3>
|
||||
@@ -435,36 +433,6 @@
|
||||
The iSCSI volume pool does not use the volume format type element.
|
||||
</p>
|
||||
|
||||
<h2><a id="StorageBackendISCSIDirect">iSCSI direct pool</a></h2>
|
||||
<p>
|
||||
This is a variant of the iSCSI pool. Instead of unsing iscsiadm, it uses
|
||||
libiscsi.
|
||||
It require a host, a path which is the target iqn and an initiator iqn.
|
||||
</p>
|
||||
|
||||
<h3>Example pool input</h3>
|
||||
<pre>
|
||||
<pool type="iscsi-direct">
|
||||
<name>virtimages</name>
|
||||
<source>
|
||||
<host name="iscsi.example.com"/>
|
||||
<device path="iqn.2013-06.com.example:iscsi-pool"/>
|
||||
<initiator>
|
||||
<iqn name="iqn.2013-06.com.example:iscsi-initiator"/>
|
||||
</initiator>
|
||||
</source>
|
||||
</pool></pre>
|
||||
|
||||
<h3>Valid pool format types</h3>
|
||||
<p>
|
||||
The iSCSI volume pool does not use the pool format type element.
|
||||
</p>
|
||||
|
||||
<h3>Valid volume format types</h3>
|
||||
<p>
|
||||
The iSCSI volume pool does not use the volume format type element.
|
||||
</p>
|
||||
|
||||
<h2><a id="StorageBackendSCSI">SCSI pool</a></h2>
|
||||
<p>
|
||||
This provides a pool based on a SCSI HBA. Volumes are preexisting SCSI
|
||||
|
@@ -94,11 +94,7 @@ install-apparmor-local:
|
||||
$(MKDIR_P) "$(APPARMOR_LOCAL_DIR)"
|
||||
echo "# Site-specific additions and overrides for \
|
||||
'usr.lib.libvirt.virt-aa-helper'" \
|
||||
>"$(APPARMOR_LOCAL_DIR)/usr.lib.libvirt.virt-aa-helper"
|
||||
|
||||
uninstall-apparmor-local:
|
||||
rm -f "$(APPARMOR_LOCAL_DIR)/usr.lib.libvirt.virt-aa-helper"
|
||||
rmdir "$(APPARMOR_LOCAL_DIR)" || :
|
||||
>$(APPARMOR_LOCAL_DIR)/usr.lib.libvirt.virt-aa-helper
|
||||
|
||||
INSTALL_DATA_LOCAL += install-apparmor-local
|
||||
UNINSTALL_LOCAL += uninstall-apparmor-local
|
||||
|
@@ -180,19 +180,6 @@
|
||||
# for rbd
|
||||
/etc/ceph/ceph.conf r,
|
||||
|
||||
# Various functions will need to enumerate /tmp (e.g. ceph), allow the base
|
||||
# dir and a few known functions like samba support.
|
||||
# We want to avoid to give blanket rw permission to everything under /tmp,
|
||||
# users are expected to add site specific addons for more uncommon cases.
|
||||
# Qemu processes usually all run as the same users, so the "owner"
|
||||
# restriction prevents access to other services files, but not across
|
||||
# different instances.
|
||||
# This is a tradeoff between usability and security - if paths would be more
|
||||
# predictable that would be preferred - at least for write rules we would
|
||||
# want more unique paths per rule.
|
||||
/{,var/}tmp/ r,
|
||||
owner /{,var/}tmp/**/ r,
|
||||
|
||||
# for file-posix getting limits since 9103f1ce
|
||||
/sys/devices/**/block/*/queue/max_segments r,
|
||||
|
||||
@@ -201,9 +188,6 @@
|
||||
@{PROC}/device-tree/** r,
|
||||
/sys/firmware/devicetree/** r,
|
||||
|
||||
# allow connect with openGraphicsFD to work
|
||||
unix (send, receive) type=stream addr=none peer=(label=/usr/sbin/libvirtd),
|
||||
|
||||
# for gathering information about available host resources
|
||||
/sys/devices/system/cpu/ r,
|
||||
/sys/devices/system/node/ r,
|
||||
|
@@ -33,11 +33,17 @@
|
||||
mount options=(rw,rslave) -> /,
|
||||
mount options=(rw, nosuid) -> /{var/,}run/libvirt/qemu/*.dev/,
|
||||
|
||||
# libvirt provides any mounts under /dev to qemu namespaces
|
||||
mount options=(rw, move) /dev/ -> /{,var/}run/libvirt/qemu/*.dev/,
|
||||
mount options=(rw, move) /dev/** -> /{,var/}run/libvirt/qemu/*{,/},
|
||||
mount options=(rw, move) /{,var/}run/libvirt/qemu/*.dev/ -> /dev/,
|
||||
mount options=(rw, move) /{,var/}run/libvirt/qemu/*{,/} -> /dev/**,
|
||||
mount options=(rw, move) /dev/ -> /{var/,}run/libvirt/qemu/*.dev/,
|
||||
mount options=(rw, move) /dev/hugepages/ -> /{var/,}run/libvirt/qemu/*.hugepages/,
|
||||
mount options=(rw, move) /dev/mqueue/ -> /{var/,}run/libvirt/qemu/*.mqueue/,
|
||||
mount options=(rw, move) /dev/pts/ -> /{var/,}run/libvirt/qemu/*.pts/,
|
||||
mount options=(rw, move) /dev/shm/ -> /{var/,}run/libvirt/qemu/*.shm/,
|
||||
|
||||
mount options=(rw, move) /{var/,}run/libvirt/qemu/*.dev/ -> /dev/,
|
||||
mount options=(rw, move) /{var/,}run/libvirt/qemu/*.hugepages/ -> /dev/hugepages/,
|
||||
mount options=(rw, move) /{var/,}run/libvirt/qemu/*.mqueue/ -> /dev/mqueue/,
|
||||
mount options=(rw, move) /{var/,}run/libvirt/qemu/*.pts/ -> /dev/pts/,
|
||||
mount options=(rw, move) /{var/,}run/libvirt/qemu/*.shm/ -> /dev/shm/,
|
||||
|
||||
network inet stream,
|
||||
network inet dgram,
|
||||
@@ -50,10 +56,10 @@
|
||||
# for --p2p migrations
|
||||
unix (send, receive) type=stream addr=none peer=(label=unconfined addr=none),
|
||||
|
||||
ptrace (read,trace) peer=unconfined,
|
||||
ptrace (read,trace) peer=/usr/sbin/libvirtd,
|
||||
ptrace (read,trace) peer=/usr/sbin/dnsmasq,
|
||||
ptrace (read,trace) peer=libvirt-*,
|
||||
ptrace (trace) peer=unconfined,
|
||||
ptrace (trace) peer=/usr/sbin/libvirtd,
|
||||
ptrace (trace) peer=/usr/sbin/dnsmasq,
|
||||
ptrace (trace) peer=libvirt-*,
|
||||
|
||||
signal (send) peer=/usr/sbin/dnsmasq,
|
||||
signal (read, send) peer=libvirt-*,
|
||||
@@ -63,14 +69,6 @@
|
||||
unix (send, receive) type=stream addr=none peer=(label=/usr/sbin/libvirtd//qemu_bridge_helper),
|
||||
signal (send) set=("term") peer=/usr/sbin/libvirtd//qemu_bridge_helper,
|
||||
|
||||
# allow connect with openGraphicsFD, direction reversed in newer versions
|
||||
unix (send, receive) type=stream addr=none peer=(label=libvirt-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*),
|
||||
# unconfined also required if guests run without security module
|
||||
unix (send, receive) type=stream addr=none peer=(label=unconfined),
|
||||
|
||||
# required if guests run unconfined seclabel type='none' but libvirtd is confined
|
||||
signal (read, send) peer=unconfined,
|
||||
|
||||
# Very lenient profile for libvirtd since we want to first focus on confining
|
||||
# the guests. Guests will have a very restricted profile.
|
||||
/ r,
|
||||
|
@@ -145,8 +145,6 @@ typedef enum {
|
||||
VIR_DOMAIN_SHUTOFF_FAILED = 6, /* domain failed to start */
|
||||
VIR_DOMAIN_SHUTOFF_FROM_SNAPSHOT = 7, /* restored from a snapshot which was
|
||||
* taken while domain was shutoff */
|
||||
VIR_DOMAIN_SHUTOFF_DAEMON = 8, /* daemon decides to kill domain
|
||||
during reconnection processing */
|
||||
# ifdef VIR_ENUM_SENTINELS
|
||||
VIR_DOMAIN_SHUTOFF_LAST
|
||||
# endif
|
||||
@@ -1913,50 +1911,6 @@ int virDomainDelIOThread(virDomainPtr domain,
|
||||
unsigned int iothread_id,
|
||||
unsigned int flags);
|
||||
|
||||
/* IOThread set parameters */
|
||||
|
||||
/**
|
||||
* VIR_DOMAIN_IOTHREAD_POLL_MAX_NS:
|
||||
*
|
||||
* The maximum polling time that can be used by polling algorithm in ns.
|
||||
* The polling time starts at 0 (zero) and is the time spent by the guest
|
||||
* to process IOThread data before returning the CPU to the host. The
|
||||
* polling time will be dynamically modified over time based on the
|
||||
* poll_grow and poll_shrink parameters provided. A value set too large
|
||||
* will cause more CPU time to be allocated the guest. A value set too
|
||||
* small will not provide enough cycles for the guest to process data.
|
||||
* The polling interval is not available for statistical purposes.
|
||||
*/
|
||||
# define VIR_DOMAIN_IOTHREAD_POLL_MAX_NS "poll_max_ns"
|
||||
|
||||
/**
|
||||
* VIR_DOMAIN_IOTHREAD_POLL_GROW:
|
||||
*
|
||||
* This provides a value for the dynamic polling adjustment algorithm to
|
||||
* use to grow its polling interval up to the poll_max_ns value. A value
|
||||
* of 0 (zero) allows the hypervisor to choose its own value. The algorithm
|
||||
* to use for adjustment is hypervisor specific.
|
||||
*/
|
||||
# define VIR_DOMAIN_IOTHREAD_POLL_GROW "poll_grow"
|
||||
|
||||
/**
|
||||
* VIR_DOMAIN_IOTHREAD_POLL_SHRINK:
|
||||
*
|
||||
* This provides a value for the dynamic polling adjustment algorithm to
|
||||
* use to shrink its polling interval when the polling interval exceeds
|
||||
* the poll_max_ns value. A value of 0 (zero) allows the hypervisor to
|
||||
* choose its own value. The algorithm to use for adjustment is hypervisor
|
||||
* specific.
|
||||
*/
|
||||
# define VIR_DOMAIN_IOTHREAD_POLL_SHRINK "poll_shrink"
|
||||
|
||||
int virDomainSetIOThreadParams(virDomainPtr domain,
|
||||
unsigned int iothread_id,
|
||||
virTypedParameterPtr params,
|
||||
int nparams,
|
||||
unsigned int flags);
|
||||
|
||||
|
||||
/**
|
||||
* VIR_USE_CPU:
|
||||
* @cpumap: pointer to a bit map of real CPUs (in 8-bit bytes) (IN/OUT)
|
||||
@@ -2094,7 +2048,6 @@ typedef enum {
|
||||
VIR_DOMAIN_STATS_INTERFACE = (1 << 4), /* return domain interfaces info */
|
||||
VIR_DOMAIN_STATS_BLOCK = (1 << 5), /* return domain block info */
|
||||
VIR_DOMAIN_STATS_PERF = (1 << 6), /* return domain perf event info */
|
||||
VIR_DOMAIN_STATS_IOTHREAD = (1 << 7), /* return iothread poll info */
|
||||
} virDomainStatsTypes;
|
||||
|
||||
typedef enum {
|
||||
|
145
libvirt.spec.in
145
libvirt.spec.in
@@ -4,7 +4,7 @@
|
||||
# that's still supported by the vendor. It may work on other distros
|
||||
# or versions, but no effort will be made to ensure that going forward.
|
||||
%define min_rhel 7
|
||||
%define min_fedora 28
|
||||
%define min_fedora 26
|
||||
|
||||
%if (0%{?fedora} && 0%{?fedora} >= %{min_fedora}) || (0%{?rhel} && 0%{?rhel} >= %{min_rhel})
|
||||
%define supported_platform 1
|
||||
@@ -71,13 +71,6 @@
|
||||
%define with_storage_zfs 0
|
||||
%endif
|
||||
|
||||
# We need a recent enough libiscsi (>= 1.18.0)
|
||||
%if 0%{?fedora} || 0%{?rhel} > 7
|
||||
%define with_storage_iscsi_direct 0%{!?_without_storage_iscsi_direct:1}
|
||||
%else
|
||||
%define with_storage_iscsi_direct 0
|
||||
%endif
|
||||
|
||||
# A few optional bits off by default, we enable later
|
||||
%define with_fuse 0%{!?_without_fuse:0}
|
||||
%define with_sanlock 0%{!?_without_sanlock:0}
|
||||
@@ -100,13 +93,27 @@
|
||||
%define with_vbox 0
|
||||
%endif
|
||||
|
||||
# Numactl is not available on many non-x86 archs
|
||||
%ifarch s390 s390x %{arm} riscv64
|
||||
# Numactl is not available on s390[x] and ARM
|
||||
%ifarch s390 s390x %{arm}
|
||||
%define with_numactl 0
|
||||
%endif
|
||||
|
||||
# libgfapi is built only on x86_64 on rhel
|
||||
%ifnarch x86_64
|
||||
%if 0%{?rhel}
|
||||
%define with_storage_gluster 0
|
||||
%endif
|
||||
%endif
|
||||
|
||||
# librados and librbd are built only on x86_64 on rhel
|
||||
%ifnarch x86_64
|
||||
%if 0%{?rhel}
|
||||
%define with_storage_rbd 0
|
||||
%endif
|
||||
%endif
|
||||
|
||||
# zfs-fuse is not available on some architectures
|
||||
%ifarch s390 s390x aarch64 riscv64
|
||||
%ifarch s390 s390x aarch64
|
||||
%define with_storage_zfs 0
|
||||
%endif
|
||||
|
||||
@@ -180,8 +187,8 @@
|
||||
|
||||
%if %{with_qemu} || %{with_lxc} || %{with_uml}
|
||||
# numad is used to manage the CPU and memory placement dynamically,
|
||||
# it's not available on many non-x86 architectures.
|
||||
%ifnarch s390 s390x %{arm} riscv64
|
||||
# it's not available on s390[x] and ARM.
|
||||
%ifnarch s390 s390x %{arm}
|
||||
%define with_numad 0%{!?_without_numad:1}
|
||||
%endif
|
||||
%endif
|
||||
@@ -200,10 +207,10 @@
|
||||
%define enable_werror --disable-werror
|
||||
%endif
|
||||
|
||||
%if 0%{?rhel} == 7
|
||||
%define tls_priority "NORMAL"
|
||||
%else
|
||||
%if 0%{?fedora}
|
||||
%define tls_priority "@LIBVIRT,SYSTEM"
|
||||
%else
|
||||
%define tls_priority "NORMAL"
|
||||
%endif
|
||||
|
||||
|
||||
@@ -258,7 +265,7 @@ BuildRequires: /usr/bin/pod2man
|
||||
%endif
|
||||
BuildRequires: gcc
|
||||
BuildRequires: git
|
||||
%if 0%{?fedora} || 0%{?rhel} > 7
|
||||
%if 0%{?fedora} >= 27 || 0%{?rhel} > 7
|
||||
BuildRequires: perl-interpreter
|
||||
%else
|
||||
BuildRequires: perl
|
||||
@@ -285,7 +292,7 @@ BuildRequires: libblkid-devel >= 2.17
|
||||
BuildRequires: augeas
|
||||
BuildRequires: systemd-devel >= 185
|
||||
BuildRequires: libpciaccess-devel >= 0.10.9
|
||||
BuildRequires: yajl-devel
|
||||
BuildRequires: jansson-devel
|
||||
%if %{with_sanlock}
|
||||
BuildRequires: sanlock-devel >= 2.4
|
||||
%endif
|
||||
@@ -310,12 +317,8 @@ BuildRequires: /usr/bin/qemu-img
|
||||
%endif
|
||||
# For LVM drivers
|
||||
BuildRequires: lvm2
|
||||
# For pool type=iscsi
|
||||
# For ISCSI driver
|
||||
BuildRequires: iscsi-initiator-utils
|
||||
%if %{with_storage_iscsi_direct}
|
||||
# For pool type=iscsi-direct
|
||||
BuildRequires: libiscsi-devel
|
||||
%endif
|
||||
# For disk driver
|
||||
BuildRequires: parted-devel
|
||||
# For Multipath support
|
||||
@@ -386,7 +389,7 @@ BuildRequires: wireshark-devel >= 2.1.0
|
||||
BuildRequires: libssh-devel >= 0.7.0
|
||||
%endif
|
||||
|
||||
%if 0%{?fedora} || 0%{?rhel} > 7
|
||||
%if 0%{?fedora} > 27 || 0%{?rhel} > 7
|
||||
BuildRequires: rpcgen
|
||||
BuildRequires: libtirpc-devel
|
||||
%endif
|
||||
@@ -588,19 +591,6 @@ The storage driver backend adding implementation of the storage APIs for iscsi
|
||||
volumes using the host iscsi stack.
|
||||
|
||||
|
||||
%if %{with_storage_iscsi_direct}
|
||||
%package daemon-driver-storage-iscsi-direct
|
||||
Summary: Storage driver plugin for iscsi-direct
|
||||
Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
|
||||
Requires: libvirt-libs = %{version}-%{release}
|
||||
Requires: libiscsi
|
||||
|
||||
%description daemon-driver-storage-iscsi-direct
|
||||
The storage driver backend adding implementation of the storage APIs for iscsi
|
||||
volumes using libiscsi direct connection.
|
||||
%endif
|
||||
|
||||
|
||||
%package daemon-driver-storage-mpath
|
||||
Summary: Storage driver plugin for multipath volumes
|
||||
Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
|
||||
@@ -678,9 +668,6 @@ Requires: libvirt-daemon-driver-storage-logical = %{version}-%{release}
|
||||
Requires: libvirt-daemon-driver-storage-scsi = %{version}-%{release}
|
||||
Requires: libvirt-daemon-driver-storage-iscsi = %{version}-%{release}
|
||||
Requires: libvirt-daemon-driver-storage-mpath = %{version}-%{release}
|
||||
%if %{with_storage_iscsi_direct}
|
||||
Requires: libvirt-daemon-driver-storage-iscsi-direct = %{version}-%{release}
|
||||
%endif
|
||||
%if %{with_storage_gluster}
|
||||
Requires: libvirt-daemon-driver-storage-gluster = %{version}-%{release}
|
||||
%endif
|
||||
@@ -911,6 +898,8 @@ Requires: ncurses
|
||||
Requires: gettext
|
||||
# Needed by virt-pki-validate script.
|
||||
Requires: gnutls-utils
|
||||
# We dlopen(libjansson.so.4), so need an explicit dep
|
||||
Requires: jansson
|
||||
%if %{with_bash_completion}
|
||||
Requires: %{name}-bash-completion = %{version}-%{release}
|
||||
%endif
|
||||
@@ -1004,7 +993,43 @@ Libvirt plugin for NSS for translating domain names into IP addresses.
|
||||
|
||||
%prep
|
||||
|
||||
%autosetup -S git_am
|
||||
%setup -q
|
||||
|
||||
# Patches have to be stored in a temporary file because RPM has
|
||||
# a limit on the length of the result of any macro expansion;
|
||||
# if the string is longer, it's silently cropped
|
||||
%{lua:
|
||||
tmp = os.tmpname();
|
||||
f = io.open(tmp, "w+");
|
||||
count = 0;
|
||||
for i, p in ipairs(patches) do
|
||||
f:write(p.."\n");
|
||||
count = count + 1;
|
||||
end;
|
||||
f:close();
|
||||
print("PATCHCOUNT="..count.."\n")
|
||||
print("PATCHLIST="..tmp.."\n")
|
||||
}
|
||||
|
||||
git init -q
|
||||
git config user.name rpm-build
|
||||
git config user.email rpm-build
|
||||
git config gc.auto 0
|
||||
git add .
|
||||
git commit -q -a --author 'rpm-build <rpm-build>' \
|
||||
-m '%{name}-%{version} base'
|
||||
|
||||
COUNT=$(grep '\.patch$' $PATCHLIST | wc -l)
|
||||
if [ $COUNT -ne $PATCHCOUNT ]; then
|
||||
echo "Found $COUNT patches in $PATCHLIST, expected $PATCHCOUNT"
|
||||
exit 1
|
||||
fi
|
||||
if [ $COUNT -gt 0 ]; then
|
||||
xargs git am <$PATCHLIST || exit 1
|
||||
fi
|
||||
echo "Applied $COUNT patches"
|
||||
rm -f $PATCHLIST
|
||||
rm -rf .git
|
||||
|
||||
%build
|
||||
%if ! %{supported_platform}
|
||||
@@ -1134,12 +1159,6 @@ exit 1
|
||||
%define arg_wireshark --without-wireshark-dissector
|
||||
%endif
|
||||
|
||||
%if %{with_storage_iscsi_direct}
|
||||
%define arg_storage_iscsi_direct --with-storage-iscsi-direct
|
||||
%else
|
||||
%define arg_storage_iscsi_direct --without-storage-iscsi-direct
|
||||
%endif
|
||||
|
||||
%define when %(date +"%%F-%%T")
|
||||
%define where %(hostname)
|
||||
%define who %{?packager}%{!?packager:Unknown}
|
||||
@@ -1149,23 +1168,14 @@ exit 1
|
||||
%define arg_selinux_mount --with-selinux-mount="/sys/fs/selinux"
|
||||
|
||||
%if 0%{?fedora}
|
||||
# Nightly edk2.git-ovmf-x64
|
||||
# Nightly firmware repo x86/OVMF
|
||||
LOADERS="/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd:/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd"
|
||||
# Nightly edk2.git-ovmf-ia32
|
||||
LOADERS="$LOADERS:/usr/share/edk2.git/ovmf-ia32/OVMF_CODE-pure-efi.fd:/usr/share/edk2.git/ovmf-ia32/OVMF_VARS-pure-efi.fd"
|
||||
# Nightly edk2.git-aarch64
|
||||
# Nightly firmware repo aarch64/AAVMF
|
||||
LOADERS="$LOADERS:/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2.git/aarch64/vars-template-pflash.raw"
|
||||
# Nightly edk2.git-arm
|
||||
LOADERS="$LOADERS:/usr/share/edk2.git/arm/QEMU_EFI-pflash.raw:/usr/share/edk2.git/arm/vars-template-pflash.raw"
|
||||
|
||||
# Fedora edk2-ovmf
|
||||
# Fedora official x86/OVMF
|
||||
LOADERS="$LOADERS:/usr/share/edk2/ovmf/OVMF_CODE.fd:/usr/share/edk2/ovmf/OVMF_VARS.fd"
|
||||
# Fedora edk2-ovmf-ia32
|
||||
LOADERS="$LOADERS:/usr/share/edk2/ovmf-ia32/OVMF_CODE.fd:/usr/share/edk2/ovmf-ia32/OVMF_VARS.fd"
|
||||
# Fedora edk2-aarch64
|
||||
# Fedora official aarch64/AAVMF
|
||||
LOADERS="$LOADERS:/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2/aarch64/vars-template-pflash.raw"
|
||||
# Fedora edk2-arm
|
||||
LOADERS="$LOADERS:/usr/share/edk2/arm/QEMU_EFI-pflash.raw:/usr/share/edk2/arm/vars-template-pflash.raw"
|
||||
%define arg_loader_nvram --with-loader-nvram="$LOADERS"
|
||||
%endif
|
||||
|
||||
@@ -1200,7 +1210,6 @@ rm -f po/stamp-po
|
||||
--with-storage-fs \
|
||||
--with-storage-lvm \
|
||||
--with-storage-iscsi \
|
||||
%{?arg_storage_iscsi_direct} \
|
||||
--with-storage-scsi \
|
||||
--with-storage-disk \
|
||||
--with-storage-mpath \
|
||||
@@ -1219,7 +1228,7 @@ rm -f po/stamp-po
|
||||
--without-apparmor \
|
||||
--without-hal \
|
||||
--with-udev \
|
||||
--with-yajl \
|
||||
--with-jansson \
|
||||
%{?arg_sanlock} \
|
||||
--with-libpcap \
|
||||
--with-macvtap \
|
||||
@@ -1248,7 +1257,10 @@ rm -fr %{buildroot}
|
||||
|
||||
export SOURCE_DATE_EPOCH=$(stat --printf='%Y' %{_specdir}/%{name}.spec)
|
||||
|
||||
%make_install %{?_smp_mflags} SYSTEMD_UNIT_DIR=%{_unitdir} V=1
|
||||
# Avoid using makeinstall macro as it changes prefixes rather than setting
|
||||
# DESTDIR. Newer make_install macro would be better but it's not available
|
||||
# on RHEL 5, thus we need to expand it here.
|
||||
make %{?_smp_mflags} install DESTDIR=%{?buildroot} SYSTEMD_UNIT_DIR=%{_unitdir} V=1
|
||||
|
||||
make %{?_smp_mflags} -C examples distclean V=1
|
||||
|
||||
@@ -1666,11 +1678,6 @@ exit 0
|
||||
%files daemon-driver-storage-iscsi
|
||||
%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_iscsi.so
|
||||
|
||||
%if %{with_storage_iscsi_direct}
|
||||
%files daemon-driver-storage-iscsi-direct
|
||||
%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_iscsi-direct.so
|
||||
%endif
|
||||
|
||||
%files daemon-driver-storage-mpath
|
||||
%{_libdir}/%{name}/storage-backend/libvirt_storage_backend_mpath.so
|
||||
|
||||
@@ -1849,7 +1856,7 @@ exit 0
|
||||
%{_datadir}/libvirt/schemas/storagepool.rng
|
||||
%{_datadir}/libvirt/schemas/storagevol.rng
|
||||
|
||||
%{_datadir}/libvirt/cpu_map/*.xml
|
||||
%{_datadir}/libvirt/cpu_map.xml
|
||||
|
||||
%{_datadir}/libvirt/test-screenshot.png
|
||||
|
||||
|
@@ -5,7 +5,7 @@ AC_DEFUN([LIBVIRT_ARG_ATTR],[
|
||||
])
|
||||
|
||||
AC_DEFUN([LIBVIRT_CHECK_ATTR],[
|
||||
LIBVIRT_CHECK_LIB([ATTR], [attr], [getxattr], [sys/xattr.h])
|
||||
LIBVIRT_CHECK_LIB([ATTR], [attr], [getxattr], [attr/xattr.h])
|
||||
])
|
||||
|
||||
AC_DEFUN([LIBVIRT_RESULT_ATTR],[
|
||||
|
@@ -26,34 +26,40 @@ AC_DEFUN([LIBVIRT_DRIVER_CHECK_LIBXL], [
|
||||
LIBXL_CFLAGS=""
|
||||
LIBXL_FIRMWARE_DIR=""
|
||||
LIBXL_EXECBIN_DIR=""
|
||||
LIBXL_API_VERSION="-DLIBXL_API_VERSION=0x040500"
|
||||
LIBXL_API_VERSION="-DLIBXL_API_VERSION=0x040400"
|
||||
|
||||
dnl search for libxl, aka libxenlight
|
||||
dnl Xen > 4.5 introduced a pkgconfig file, check for it first
|
||||
old_with_libxl="$with_libxl"
|
||||
LIBVIRT_CHECK_PKG([LIBXL], [xenlight], [4.6.0], [true])
|
||||
LIBVIRT_CHECK_PKG([LIBXL], [xenlight], [4.4.0], [true])
|
||||
if test "x$with_libxl" = "xyes" ; then
|
||||
LIBXL_FIRMWARE_DIR=$($PKG_CONFIG --variable xenfirmwaredir xenlight)
|
||||
LIBXL_EXECBIN_DIR=$($PKG_CONFIG --variable libexec_bin xenlight)
|
||||
fi
|
||||
|
||||
dnl In Fedora <= 28, the xenlight pkgconfig file is in the -runtime package
|
||||
dnl https://bugzilla.redhat.com/show_bug.cgi?id=1629643
|
||||
dnl Until Fedora 28 reaches EOL, fallback to lib probe if xenlight.pc is
|
||||
dnl not found
|
||||
dnl pkgconfig file not found, fallback to lib probe
|
||||
if test "x$with_libxl" = "xno" ; then
|
||||
with_libxl="$old_with_libxl"
|
||||
|
||||
save_CFLAGS="$CFLAGS"
|
||||
dnl LIBXL_API_VERSION 4.4.0 introduced a new parameter to
|
||||
dnl libxl_domain_create_restore for specifying restore parameters.
|
||||
dnl The libxl driver will make use of this new parameter for specifying
|
||||
dnl the Xen migration stream version. Specify LIBXL_API_VERSION to trigger
|
||||
dnl an error if there is too old xenlight
|
||||
old_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $LIBXL_API_VERSION"
|
||||
LIBVIRT_CHECK_LIB([LIBXL], [xenlight], [libxl_cpupool_cpuadd_cpumap], [libxl.h], [fail="1"])
|
||||
CFLAGS="$save_CFLAGS"
|
||||
LIBVIRT_CHECK_LIB([LIBXL], [xenlight], [libxl_ctx_alloc], [libxl.h], [fail="1"])
|
||||
CFLAGS="$old_CFLAGS"
|
||||
|
||||
if test $fail = 1; then
|
||||
AC_MSG_ERROR([You must install the libxl Library from Xen >= 4.6 to compile libxenlight driver with -lxl])
|
||||
AC_MSG_ERROR([You must install the libxl Library from Xen >= 4.4 to compile libxenlight driver with -lxl])
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$with_libxl" = "yes"; then
|
||||
old_LIBS="$LIBS"
|
||||
old_CFLAGS="$CFLAGS"
|
||||
|
||||
LIBXL_CFLAGS="$LIBXL_CFLAGS $LIBXL_API_VERSION"
|
||||
|
||||
dnl If building with libxl, use the libxl utility header and lib too
|
||||
@@ -73,10 +79,14 @@ AC_DEFUN([LIBVIRT_DRIVER_CHECK_LIBXL], [
|
||||
],[
|
||||
LIBXL_LIBS="$LIBXL_LIBS -lxenstore -lxenctrl"
|
||||
])
|
||||
fi
|
||||
|
||||
dnl Check if Xen has support for PVH
|
||||
AC_CHECK_DECL(LIBXL_DOMAIN_TYPE_PVH, [AC_DEFINE([HAVE_XEN_PVH], [1], [Define to 1 if Xen has PVH support.])], [], [#include <libxl.h>])
|
||||
dnl Check if libxl_domain_config_from_json is available for domXML to
|
||||
dnl libxl_domain_config tests
|
||||
LIBS="$LIBS -lxenlight -lxenctrl"
|
||||
AC_CHECK_FUNCS([libxl_domain_config_from_json])
|
||||
CFLAGS="$old_CFLAGS"
|
||||
LIBS="$old_LIBS"
|
||||
fi
|
||||
|
||||
AC_SUBST([LIBXL_CFLAGS])
|
||||
AC_SUBST([LIBXL_LIBS])
|
||||
|
@@ -18,7 +18,7 @@ dnl <http://www.gnu.org/licenses/>.
|
||||
dnl
|
||||
|
||||
AC_DEFUN([LIBVIRT_DRIVER_ARG_QEMU], [
|
||||
LIBVIRT_ARG_WITH_FEATURE([QEMU], [QEMU/KVM], [yes])
|
||||
LIBVIRT_ARG_WITH_FEATURE([QEMU], [QEMU/KVM], [check])
|
||||
LIBVIRT_ARG_WITH([QEMU_USER], [username to run QEMU system instance as],
|
||||
['platform dependent'])
|
||||
LIBVIRT_ARG_WITH([QEMU_GROUP], [groupname to run QEMU system instance as],
|
||||
@@ -26,6 +26,13 @@ AC_DEFUN([LIBVIRT_DRIVER_ARG_QEMU], [
|
||||
])
|
||||
|
||||
AC_DEFUN([LIBVIRT_DRIVER_CHECK_QEMU], [
|
||||
AC_REQUIRE([LIBVIRT_CHECK_JANSSON])
|
||||
if test "$with_qemu:$with_jansson" = "yes:no"; then
|
||||
AC_MSG_ERROR([Jansson >= 2.5 is required to build QEMU driver])
|
||||
fi
|
||||
if test "$with_qemu" = "check"; then
|
||||
with_qemu=$with_jansson
|
||||
fi
|
||||
if test "$with_qemu" = "yes" ; then
|
||||
AC_DEFINE_UNQUOTED([WITH_QEMU], 1, [whether QEMU driver is enabled])
|
||||
fi
|
||||
|
@@ -1,6 +1,4 @@
|
||||
dnl Libiscsi library
|
||||
dnl
|
||||
dnl Copyright (C) 2018 Clementine Hayat.
|
||||
dnl The jansson library
|
||||
dnl
|
||||
dnl This library is free software; you can redistribute it and/or
|
||||
dnl modify it under the terms of the GNU Lesser General Public
|
||||
@@ -17,14 +15,18 @@ dnl License along with this library. If not, see
|
||||
dnl <http://www.gnu.org/licenses/>.
|
||||
dnl
|
||||
|
||||
AC_DEFUN([LIBVIRT_ARG_LIBISCSI],[
|
||||
LIBVIRT_ARG_WITH_FEATURE([LIBISCSI], [libiscsi], [check], [1.18.0])
|
||||
AC_DEFUN([LIBVIRT_ARG_JANSSON],[
|
||||
LIBVIRT_ARG_WITH_FEATURE([JANSSON], [jansson], [check])
|
||||
])
|
||||
|
||||
AC_DEFUN([LIBVIRT_CHECK_LIBISCSI],[
|
||||
LIBVIRT_CHECK_PKG([LIBISCSI], [libiscsi], [1.18.0])
|
||||
AC_DEFUN([LIBVIRT_CHECK_JANSSON],[
|
||||
dnl Jansson http://www.digip.org/jansson/
|
||||
LIBVIRT_CHECK_PKG([JANSSON], [jansson], [2.5])
|
||||
dnl Older versions of Jansson did not preserve the order of object keys
|
||||
dnl use this check to guard the tests that are sensitive to this
|
||||
LIBVIRT_CHECK_PKG([STABLE_ORDERING_JANSSON], [jansson], [2.8], [true])
|
||||
])
|
||||
|
||||
AC_DEFUN([LIBVIRT_RESULT_LIBISCSI],[
|
||||
LIBVIRT_RESULT_LIB(LIBISCSI)
|
||||
AC_DEFUN([LIBVIRT_RESULT_JANSSON],[
|
||||
LIBVIRT_RESULT_LIB([JANSSON])
|
||||
])
|
@@ -27,9 +27,9 @@ AC_DEFUN([LIBVIRT_CHECK_NSS],[
|
||||
bsd_nss=no
|
||||
fail=0
|
||||
if test "x$with_nss_plugin" != "xno" ; then
|
||||
if test "x$with_yajl" != "xyes" ; then
|
||||
if test "x$with_jansson" != "xyes" ; then
|
||||
if test "x$with_nss_plugin" = "xyes" ; then
|
||||
AC_MSG_ERROR([Can't build nss plugin without yajl])
|
||||
AC_MSG_ERROR([Can't build nss plugin without JSON support])
|
||||
else
|
||||
with_nss_plugin=no
|
||||
fi
|
||||
|
@@ -1,44 +0,0 @@
|
||||
dnl Iscsi-direct storage
|
||||
dnl
|
||||
dnl Copyright (C) 2018 Clementine Hayat.
|
||||
dnl
|
||||
dnl This library is free software; you can redistribute it and/or
|
||||
dnl modify it under the terms of the GNU Lesser General Public
|
||||
dnl License as published by the Free Software Foundation; either
|
||||
dnl version 2.1 of the License, or (at your option) any later version.
|
||||
dnl
|
||||
dnl This library is distributed in the hope that it will be useful,
|
||||
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
dnl Lesser General Public License for more details.
|
||||
dnl
|
||||
dnl You should have received a copy of the GNU Lesser General Public
|
||||
dnl License along with this library. If not, see
|
||||
dnl <http://www.gnu.org/licenses/>.
|
||||
dnl
|
||||
|
||||
AC_DEFUN([LIBVIRT_STORAGE_ARG_ISCSI_DIRECT], [
|
||||
LIBVIRT_ARG_WITH_FEATURE([STORAGE_ISCSI_DIRECT],
|
||||
[iscsi-direct backend for the storage driver],
|
||||
[check])
|
||||
])
|
||||
|
||||
AC_DEFUN([LIBVIRT_STORAGE_CHECK_ISCSI_DIRECT], [
|
||||
AC_REQUIRE([LIBVIRT_CHECK_LIBISCSI])
|
||||
if test "$with_storage_iscsi_direct" = "check"; then
|
||||
with_storage_iscsi_direct=$with_libiscsi
|
||||
fi
|
||||
if test "$with_storage_iscsi_direct" = "yes"; then
|
||||
if test "$with_libiscsi" = "no"; then
|
||||
AC_MSG_ERROR([Need libiscsi for iscsi-direct storage driver])
|
||||
fi
|
||||
AC_DEFINE_UNQUOTED([WITH_STORAGE_ISCSI_DIRECT], [1],
|
||||
[whether iSCSI backend for storage driver is enabled])
|
||||
fi
|
||||
AM_CONDITIONAL([WITH_STORAGE_ISCSI_DIRECT],
|
||||
[test "$with_storage_iscsi_direct" = "yes"])
|
||||
])
|
||||
|
||||
AC_DEFUN([LIBVIRT_STORAGE_RESULT_ISCSI_DIRECT], [
|
||||
LIBVIRT_RESULT([iscsi-direct], [$with_storage_iscsi_direct])
|
||||
])
|
@@ -23,31 +23,10 @@ AC_DEFUN([LIBVIRT_ARG_YAJL],[
|
||||
|
||||
AC_DEFUN([LIBVIRT_CHECK_YAJL],[
|
||||
dnl YAJL JSON library http://lloyd.github.com/yajl/
|
||||
if test "$with_qemu:$with_yajl" = yes:check; then
|
||||
dnl Some versions of qemu require the use of yajl; try to detect them
|
||||
dnl here, although we do not require qemu to exist in order to compile.
|
||||
dnl This check mirrors src/qemu/qemu_capabilities.c
|
||||
AC_PATH_PROGS([QEMU], [qemu-kvm qemu kvm qemu-system-x86_64],
|
||||
[], [$PATH:/usr/bin:/usr/libexec])
|
||||
if test -x "$QEMU"; then
|
||||
if $QEMU -help 2>/dev/null | grep -q libvirt; then
|
||||
with_yajl=yes
|
||||
else
|
||||
[qemu_version_sed='s/.*ersion \([0-9.,]*\).*/\1/']
|
||||
qemu_version=`$QEMU -version | sed "$qemu_version_sed"`
|
||||
case $qemu_version in
|
||||
[[1-9]].* | 0.15.* ) with_yajl=yes ;;
|
||||
0.* | '' ) ;;
|
||||
*) AC_MSG_ERROR([Unexpected qemu version string]) ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
if test "$with_yajl" = yes; then
|
||||
AC_MSG_ERROR([Compilation with YAJL is no longer supported])
|
||||
fi
|
||||
|
||||
LIBVIRT_CHECK_LIB_ALT([YAJL], [yajl],
|
||||
[yajl_parse_complete], [yajl/yajl_common.h],
|
||||
[YAJL2], [yajl],
|
||||
[yajl_tree_parse], [yajl/yajl_common.h])
|
||||
with_yajl=no
|
||||
])
|
||||
|
||||
AC_DEFUN([LIBVIRT_RESULT_YAJL],[
|
||||
|
@@ -260,7 +260,7 @@ rm -rf $RPM_BUILD_ROOT%{mingw64_libexecdir}/libvirt-guests.sh
|
||||
%{mingw32_datadir}/libvirt/api/libvirt-qemu-api.xml
|
||||
%{mingw32_datadir}/libvirt/api/libvirt-admin-api.xml
|
||||
|
||||
%{mingw32_datadir}/libvirt/cpu_map/*.xml
|
||||
%{mingw32_datadir}/libvirt/cpu_map.xml
|
||||
|
||||
%{mingw32_datadir}/libvirt/test-screenshot.png
|
||||
|
||||
@@ -347,7 +347,7 @@ rm -rf $RPM_BUILD_ROOT%{mingw64_libexecdir}/libvirt-guests.sh
|
||||
%{mingw64_datadir}/libvirt/api/libvirt-qemu-api.xml
|
||||
%{mingw64_datadir}/libvirt/api/libvirt-admin-api.xml
|
||||
|
||||
%{mingw64_datadir}/libvirt/cpu_map/*.xml
|
||||
%{mingw64_datadir}/libvirt/cpu_map.xml
|
||||
|
||||
%{mingw64_datadir}/libvirt/test-screenshot.png
|
||||
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Afrikaans\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Amharic\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Angika\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -7,9 +7,9 @@
|
||||
# Daniel Berrange <dan-zanata@berrange.com>, 2018. #zanata
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2018-04-24 04:33+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Arabic (http://www.transifex.com/projects/p/fedora/language/"
|
||||
@@ -20,4 +20,4 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
206
po/as.mini.po
206
po/as.mini.po
@@ -13,9 +13,9 @@
|
||||
# Nilamdyuti Goswami <ngoswami@redhat.com>, 2014
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2015-02-26 06:48+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Assamese (http://www.transifex.com/projects/p/libvirt/"
|
||||
@@ -25,7 +25,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -287,6 +287,9 @@ msgstr " নেটৱাৰ্কিং:"
|
||||
msgid " Storage:"
|
||||
msgstr " সংৰক্ষণ:"
|
||||
|
||||
msgid " block_io_throttle reply was missing device list"
|
||||
msgstr "block_io_throttle উত্তৰত ডিভাইচ তালিকা নাছিল"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"!!! SSH HOST KEY VERIFICATION FAILED !!!: Identity of host '%s:%d' differs "
|
||||
@@ -595,6 +598,9 @@ msgstr "guest-get-vcpus ৰ উত্তৰত 'logical-id' নাই"
|
||||
msgid "'online' missing in reply of guest-get-vcpus"
|
||||
msgstr "guest-get-vcpus ৰ উত্তৰত 'online' নাই"
|
||||
|
||||
msgid "'parent' for vHBA not specified, and cannot find one on this host"
|
||||
msgstr "vHBA ৰ বাবে 'parent' ধাৰ্য্য কৰা হোৱা নাই, আৰু এই হস্টত এটা পোৱা নাযায়"
|
||||
|
||||
msgid "'peak' and 'burst' require 'average' attribute"
|
||||
msgstr "'peak' আৰু 'burst' ৰ বাবে 'average' বৈশিষ্ট্যৰ প্ৰয়োজন"
|
||||
|
||||
@@ -941,6 +947,9 @@ msgstr "NAT '%s' কৰাৰ চেষ্টা কৰা হৈছে। NAT
|
||||
msgid "Attribute mode is only allowed for guest CPU"
|
||||
msgstr "বৈশিষ্ট অৱস্থা কেৱল অতিথি CPU ৰ বাবে অনুমোদিত"
|
||||
|
||||
msgid "Authentication Credentials not found"
|
||||
msgstr "প্ৰমাণীকৰণ তথ্যসমূহ পোৱা নগল"
|
||||
|
||||
msgid "Authentication failed"
|
||||
msgstr "অনুমোদন বিফল"
|
||||
|
||||
@@ -1413,6 +1422,9 @@ msgstr "বেলুন ডিভাইচ পথ নিৰ্ধাৰণ ক
|
||||
msgid "Cannot determine free memory"
|
||||
msgstr "মুক্ত মেমৰি নিৰ্ধাৰণ কৰিব নোৱাৰি"
|
||||
|
||||
msgid "Cannot determine system clock HZ"
|
||||
msgstr "চিস্টেম ঘড়ী HZ নিৰ্ধাৰণ কৰিব নোৱাৰি"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot directly attach floppy %s"
|
||||
msgstr "ফ্ল'পি %s পোনেপোনে সংযুক্ত কৰিব নোৱাৰি"
|
||||
@@ -1630,6 +1642,14 @@ msgstr "চকেট ঠিকনা '%s' বিশ্লেষণ কৰিব
|
||||
msgid "Cannot parse start time %s in %s"
|
||||
msgstr "%s ত আৰম্ভণি সময় %s বিশ্লেষণ কৰিব নোৱাৰি"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot parse sys stat '%s'"
|
||||
msgstr "sys স্টেট '%s' বিশ্লেষণ কৰিব নোৱাৰি"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot parse user stat '%s'"
|
||||
msgstr "ব্যৱহাৰকাৰী স্টেট '%s' বিশ্লেষণ কৰিব নোৱাৰি"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Cannot plug '%s' interface into '%s' because it would overcommit 'average' "
|
||||
@@ -1778,6 +1798,10 @@ msgstr "আৰম্ভ নকৰা CURL হেণ্ডেল অংশীদ
|
||||
msgid "Cannot specify a label if relabelling is turned off. model=%s"
|
||||
msgstr "এটা লেবেল ধাৰ্য্য কৰিব নোৱাৰি যদি পুনৰলেবেলিং বন্ধ কৰা থাকে। model=%s"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot stat %s"
|
||||
msgstr "%s স্টেট কৰিব নোৱাৰি"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot undefine HostVirtualSwitch that has a '%s' port"
|
||||
msgstr "এটা '%s' পোৰ্ট থকা HostVirtualSwitch অবিৱৰিত কৰিব নোৱাৰি"
|
||||
@@ -1954,6 +1978,10 @@ msgstr ""
|
||||
msgid "Command %s too long for destination"
|
||||
msgstr "গন্তব্যৰ ক্ষেত্ৰত আদেশ %s অত্যাধিক দীঘল"
|
||||
|
||||
#, c-format
|
||||
msgid "Command '%s' is not found"
|
||||
msgstr "কমান্ড '%s' পোৱা নগল"
|
||||
|
||||
msgid "Commit aborted"
|
||||
msgstr "Commit বাদ দিয়া হল"
|
||||
|
||||
@@ -2065,6 +2093,26 @@ msgstr "ডোমেইন বৰ্তমানে সক্ৰিয় নহয়
|
||||
msgid "Control groups not supported on this platform"
|
||||
msgstr "নিয়ন্ত্ৰণ দলসমূহ এই প্লেটফৰ্মত সমৰ্থিত নহয়"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller %d out of range"
|
||||
msgstr "নিয়ন্ত্ৰক %d বিস্তাৰৰ বাহিৰ"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not enabled for group"
|
||||
msgstr "নিয়ন্ত্ৰক '%s' দলৰ বাবে সামৰ্থবান নহয়"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not mounted"
|
||||
msgstr "নিয়ন্ত্ৰক '%s' মাউণ্ট কৰা নাই"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not wanted, but '%s' is co-mounted"
|
||||
msgstr "নিয়ন্ত্ৰক '%s' ৰ প্ৰয়োজন নাই, কিন্তু '%s' co-mount কৰা আছে"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' not mounted"
|
||||
msgstr "নিয়ন্ত্ৰক '%s' মাউণ্টেড নহয়"
|
||||
|
||||
msgid "Controllers must use the 'ccid' address type"
|
||||
msgstr "নিয়ন্ত্ৰকসমূহে 'ccid' ঠিকনা ধৰণ ব্যৱহাৰ কৰিব লাগিব"
|
||||
|
||||
@@ -2258,6 +2306,9 @@ msgstr "নাম '%s' ৰ সৈতে PhysicalNic পোৱা নগল"
|
||||
msgid "Could not find any 'network' element in status file"
|
||||
msgstr "অৱস্থা ফাইলত কোনো 'network' উপাদান পোৱা নগল"
|
||||
|
||||
msgid "Could not find any mounted controllers"
|
||||
msgstr "কোনো মাউণ্ট কৰা নিয়ন্ত্ৰক পোৱা নগল"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find compute resource specified in '%s'"
|
||||
msgstr "'%s' ত ধাৰ্য্যত সম্পদ গণনা কৰিব পৰা নগল"
|
||||
@@ -2274,6 +2325,10 @@ msgstr "প্ৰকৃত পথ '%s' অন্তৰ্ভুক্ত কৰ
|
||||
msgid "Could not find datastore with name '%s'"
|
||||
msgstr "নাম '%s' ৰ সৈতে তথ্যসংগ্ৰহ বিচাৰি পোৱা নগল"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find directory separator in %s"
|
||||
msgstr "%s ত ডাইৰেকটৰি বিভাজক পোৱা নগল"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find domain snapshot with internal name '%s'"
|
||||
msgstr "অভ্যন্তৰীক নাম '%s' ৰ সৈতে ডমেইন স্নেপস্বট পোৱা নগল"
|
||||
@@ -2309,6 +2364,10 @@ msgstr "MAC ঠিকনা '%s' ৰ সৈতে ভৌতিক NIC পোৱ
|
||||
msgid "Could not find physical NIC with name '%s'"
|
||||
msgstr "নাম '%s' ৰ সৈতে ভৌতিক NIC পোৱা নগল"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find placement for controller %s at %s"
|
||||
msgstr "%s ত নিয়ন্ত্ৰক %s ৰ বাবে স্থাপনা বিচাৰি পোৱা নগল"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find snapshot with name '%s'"
|
||||
msgstr "'%s' নামৰ সৈতে স্নেপশ্বট বিচাৰি পোৱা নগল"
|
||||
@@ -3004,6 +3063,10 @@ msgstr "ডিভাইচ %s ইতিমধ্যে অস্তিত্ব
|
||||
msgid "Device %s detached\n"
|
||||
msgstr "ডিভাইচ %s অসংলগ্ন কৰা হল\n"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s in use"
|
||||
msgstr "ডিভাইচ %s ব্যৱহৃত"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s is already in use"
|
||||
msgstr "%s ডিভাইচ বৰ্তমানে ব্যৱহৃত হৈছে"
|
||||
@@ -3873,6 +3936,10 @@ msgstr "নেটৱৰ্ক সংৰূপ পৰিবৰ্তন লেন
|
||||
msgid "Failed to bind PCI device '%s' to %s"
|
||||
msgstr "PCI ডিভাইচ '%s' ক %s লৈ bind কৰিবলৈ বিফল"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to bind cgroup '%s' on '%s'"
|
||||
msgstr "'%s' ত cgroup '%s' বাইণ্ড কৰিবলে ব্যৰ্থ"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to bind mount directory %s to %s"
|
||||
msgstr "মাউণ্ট ডাইৰেকটৰি %s ক %s লে বান্ধিবলে ব্যৰ্থ"
|
||||
@@ -4031,6 +4098,10 @@ msgstr "বান্ধনী লক্ষ্য %s সৃষ্টি কৰি
|
||||
msgid "Failed to create bridge node in xml document"
|
||||
msgstr "xml দস্তাবেজত ব্ৰিজ ন'ড সৃষ্টি কৰিবলে ব্যৰ্থ"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create controller %s for group"
|
||||
msgstr "দলৰ বাবে নিয়ন্ত্ৰক %s সৃষ্টি কৰিবলে ব্যৰ্থ"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create directory for '%s' dev '%s'"
|
||||
msgstr "'%s' dev '%s' ৰ বাবে ডাইৰেকটৰি সৃষ্টি কৰিবলে ব্যৰ্থ"
|
||||
@@ -4314,6 +4385,9 @@ msgstr "আন্তঃপৃষ্ঠ %s ৰ বাবে নতুন না
|
||||
msgid "Failed to get %s minor number"
|
||||
msgstr "%s গৌণ সংখ্যা প্ৰাপ্ত কৰিবলে ব্যৰ্থ"
|
||||
|
||||
msgid "Failed to get PCI Config Address String"
|
||||
msgstr "PCI সংৰূপ ঠিকনা স্ট্ৰিং প্ৰাপ্ত কৰিবলে ব্যৰ্থ"
|
||||
|
||||
msgid "Failed to get PCI SYSFS file"
|
||||
msgstr "PCI SYSFS ফাইল প্ৰাপ্ত কৰিবলে ব্যৰ্থ"
|
||||
|
||||
@@ -4589,6 +4663,10 @@ msgstr "ডোমেইন %s স্বয়ংক্ৰিয় প্ৰাৰম
|
||||
msgid "Failed to mkdir %s"
|
||||
msgstr "mkdir %s কৰিবলৈ ব্যৰ্থযৰ্থ"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to mount %s on %s type %s"
|
||||
msgstr "%s ধৰণ %s ত %s মাউণ্ট কৰিবলে ব্যৰ্থ"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to mount %s on /dev"
|
||||
msgstr "%s ক /dev ত মাউণ্ট কৰিবলে ব্যৰ্থ"
|
||||
@@ -6539,6 +6617,13 @@ msgstr "সৰ্বাধিক মেমৰি, স্কেইল্ড প
|
||||
msgid "Max memory:"
|
||||
msgstr "সৰ্বোচ্চ মেমৰি:"
|
||||
|
||||
msgid "Maximum CPUs greater than specified machine type limit"
|
||||
msgstr "ধাৰ্য্যত মেচিন ধৰণ সীমাতকৈ সৰ্বাধিক CPUs অধিক"
|
||||
|
||||
#, c-format
|
||||
msgid "Memory '%llu' must be less than %llu"
|
||||
msgstr "মেমৰি '%llu', %llu কে কম হব লাগিব"
|
||||
|
||||
msgid "Memory allocation failure"
|
||||
msgstr "মেমৰি বিতৰণ কৰোঁতে ব্যৰ্থ"
|
||||
|
||||
@@ -6644,6 +6729,10 @@ msgstr "'%s' বৈশিষ্ট্য সন্ধানহীন"
|
||||
msgid "Missing '%s' property while looking for ManagedEntityStatus"
|
||||
msgstr "ManagedEntityStatus ৰ বাবে সন্ধান কৰোতে '%s' বৈশিষ্ট সন্ধানহীন"
|
||||
|
||||
#, c-format
|
||||
msgid "Missing '/' separator in cgroup mount '%s'"
|
||||
msgstr "cgroup মাউণ্ট '%s' ত '/' বিভাজক নাই"
|
||||
|
||||
msgid "Missing 'cores' attribute in CPU topology"
|
||||
msgstr "CPU টোপোলজিত 'core' নামক গুণ অনুপস্থিত"
|
||||
|
||||
@@ -6702,6 +6791,9 @@ msgstr "CPU গুণৰ নাম অনুপস্থিত"
|
||||
msgid "Missing CPU model name"
|
||||
msgstr "CPU ৰ মডেলৰ নাম অনুপস্থিত"
|
||||
|
||||
msgid "Missing CPU vendor name"
|
||||
msgstr "CPU বিক্ৰেতা নাম সন্ধানহীন"
|
||||
|
||||
msgid "Missing ID parameter for domain object"
|
||||
msgstr "ডমেইন অবজেক্টৰ বাবে ID প্ৰাচল সন্ধানহীন"
|
||||
|
||||
@@ -6844,6 +6936,9 @@ msgstr ""
|
||||
msgid "Missing or invalid PVR value in CPU model %s"
|
||||
msgstr "CPU আৰ্হি %s ত সন্ধানহীন অথবা অবৈধ PVR মান"
|
||||
|
||||
msgid "Missing or invalid auth pointer"
|
||||
msgstr "সন্ধানহীন অথবা অবৈধ auth পইন্টাৰ"
|
||||
|
||||
msgid "Missing or invalid scsi adapter 'unique_id' value"
|
||||
msgstr "সন্ধানহীন অথবা অবৈধ scsi adapter 'unique_id' মান"
|
||||
|
||||
@@ -7293,6 +7388,9 @@ msgstr "স্বাক্ষৰ %s ৰ বাবে কোনো args নাই
|
||||
msgid "No authentication callback available"
|
||||
msgstr "কোনো প্ৰমাণীকৰণ কলবেক উপলব্ধ নাই"
|
||||
|
||||
msgid "No authentication callback provided."
|
||||
msgstr "অনুমোদনৰ কোনো কল-বেক উপলব্ধ কৰা নহয়।"
|
||||
|
||||
msgid "No authentication methods and credentials provided"
|
||||
msgstr "কোনো প্ৰমাণীকৰণ পদ্ধতি আৰু তথ্য প্ৰদান কৰা হোৱা নাই"
|
||||
|
||||
@@ -8420,6 +8518,9 @@ msgstr "SCSI ডিস্ক সূচী ('%s' ৰ পৰা বিশ্লে
|
||||
msgid "SCSI host device doesn't support managed mode"
|
||||
msgstr "SCSI হস্ট ডিভাইচে ব্যৱস্থাপিত অৱস্থা সমৰ্থন নকৰে"
|
||||
|
||||
msgid "SCSI passthrough is not supported by this version of qemu"
|
||||
msgstr "qemu ৰ এই সংস্কৰণ দ্বাৰা SCSI পাছথ্ৰু সমৰ্থিত নহয়"
|
||||
|
||||
#, c-format
|
||||
msgid "SCSI unit index %d out of [0..6,8..15] range"
|
||||
msgstr "SCSI একক সূচী %d [0..6,8..15] বিস্তাৰৰ বাহিৰ"
|
||||
@@ -9732,6 +9833,9 @@ msgstr "USB ডিভাইচ %s ইতিমধ্যে ব্যৱহৃত
|
||||
msgid "USB host device is missing bus/device information"
|
||||
msgstr "USB হোস্ট ডিভাইচত বাচ/ডিভাইচ সংক্ৰান্ত তথ্য অনুপস্থিত"
|
||||
|
||||
msgid "USB redirection booting is not supported by this version of QEMU"
|
||||
msgstr "QEMU ৰ এই সংস্কৰণ দ্বাৰা USB পুনৰনিৰ্দেশ বুটিং সমৰ্থিত নহয়"
|
||||
|
||||
msgid "USB redirection filter is not supported by this version of QEMU"
|
||||
msgstr "USB পুনৰনিৰ্দেশ ফিল্টাৰ QEMU ৰ এই সংস্কৰণ দ্বাৰা সমৰ্থিত নহয়"
|
||||
|
||||
@@ -9916,12 +10020,6 @@ msgstr "চকেট ফাইল হেণ্ডেল কপি কৰিব
|
||||
msgid "Unable to create %s"
|
||||
msgstr "%s সৃষ্টি কৰিবলে অক্ষম"
|
||||
|
||||
msgid "Unable to create JSON formatter"
|
||||
msgstr "JSON ফৰমেটাৰ সৃষ্টি কৰিবলে অক্ষম"
|
||||
|
||||
msgid "Unable to create JSON parser"
|
||||
msgstr "JSON বিশ্লেষক সৃষ্টি কৰিবলে অক্ষম"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to create LPAR. Reason: '%s'"
|
||||
msgstr "LPAR সৃষ্টি কৰিবলে অক্ষম। কাৰণ: '%s'"
|
||||
@@ -9951,6 +10049,10 @@ msgstr "ব্ৰিজ ডিভাইচ সৃষ্টি কৰিবলে
|
||||
msgid "Unable to create device %s"
|
||||
msgstr "ডিভাইচ %s সৃষ্টি কৰিবলে অক্ষম"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to create directory %s"
|
||||
msgstr "ডাইৰেকটৰি %s সৃষ্টি কৰিবলে অক্ষম"
|
||||
|
||||
msgid "Unable to create epoll fd"
|
||||
msgstr "epoll fd সৃষ্টি কৰিবলে অক্ষম"
|
||||
|
||||
@@ -10414,9 +10516,6 @@ msgstr "'%s' খোলিবলে অক্ষম"
|
||||
msgid "Unable to open /dev/loop-control"
|
||||
msgstr "/dev/loop-control খোলিবলৈ অক্ষম"
|
||||
|
||||
msgid "Unable to open /proc/mounts"
|
||||
msgstr "/proc/mounts খোলিবলে অক্ষম"
|
||||
|
||||
msgid "Unable to open UNIX socket"
|
||||
msgstr "UNIX চকেট খোলিবলে অক্ষম"
|
||||
|
||||
@@ -10707,6 +10806,10 @@ msgstr "এই প্লেটফৰ্মত %s ত STP সংহতি কৰ
|
||||
msgid "Unable to set VM logfile close-on-exec flag"
|
||||
msgstr "VM লগ ফাইলৰ close on exec ফ্লেগ %s নিৰ্ধাৰণ কৰোঁতে ব্যৰ্থ"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to set bridge %s %s"
|
||||
msgstr "ব্ৰিজ %s %s সংহতি কৰিবলে অক্ষম"
|
||||
|
||||
msgid "Unable to set cloexec flag"
|
||||
msgstr "cloexec ফ্লেগ সংহতি কৰিবলে অক্ষম"
|
||||
|
||||
@@ -10769,6 +10872,10 @@ msgstr "বান্ধনী উৎস %s stat কৰিবলে অক্ষ
|
||||
msgid "Unable to stat bind target %s"
|
||||
msgstr "বান্ধনী লক্ষ্য %s বান্ধীবলে অক্ষম"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to symlink directory %s to %s"
|
||||
msgstr "ডাইৰেকটৰি %s ক %s লে symlink কৰিব নোৱাৰি"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to truncate %s"
|
||||
msgstr "%s চুটি কৰিবলে অক্ষম"
|
||||
@@ -10898,6 +11005,9 @@ msgstr "non-peer2peer প্ৰব্ৰজনৰ সৈতে অপ্ৰত
|
||||
msgid "Unexpected disk sgio mode '%d'"
|
||||
msgstr "অপ্ৰত্যাশিত ডিস্ক sgio অৱস্থা '%d'"
|
||||
|
||||
msgid "Unexpected error"
|
||||
msgstr "অপ্ৰত্যাশিত ত্ৰুটি"
|
||||
|
||||
#, c-format
|
||||
msgid "Unexpected filesystem type %s"
|
||||
msgstr "অপ্ৰত্যাশিত ফাইলচিস্টেম ধৰণ %s"
|
||||
@@ -11415,6 +11525,9 @@ msgid "VMX entry 'sched.cpu.affinity' contains a %d, this value is too large"
|
||||
msgstr ""
|
||||
"VMX প্ৰবিষ্টি 'sched.cpu.affinity' এ এটা %d অন্তৰ্ভুক্ত কৰে, এই মান অত্যাধিক ডাঙৰ"
|
||||
|
||||
msgid "VNC WebSockets are not supported with this QEMU binary"
|
||||
msgstr "এই QEMU বাইনাৰিৰ সৈতে VNC WebSockets সমৰ্থিত নহয়"
|
||||
|
||||
msgid "VNC supports connected='keep' only"
|
||||
msgstr "VNC এ কেৱল connected='keep' সমৰ্থণ কৰে"
|
||||
|
||||
@@ -12024,6 +12137,25 @@ msgstr "এটাৰ অধিক ডিভাইচৰ বাবে ব্য
|
||||
msgid "booted"
|
||||
msgstr "বুটেড"
|
||||
|
||||
msgid ""
|
||||
"booting from PCI devices assigned with VFIO is not supported with this "
|
||||
"version of qemu"
|
||||
msgstr ""
|
||||
"VFIO ৰ সৈতে ধাৰ্য্যত PCI ডিভাইচসমূহৰ পৰা বুট কৰাটো qemu ৰ এই সংস্কৰণৰ সৈতে সমৰ্থিত "
|
||||
"নহয়"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned PCI devices is not supported with this version of qemu"
|
||||
msgstr "qemu ৰ এই সংস্কৰণৰ সৈতে ধাৰ্য্যত PCI ডিভাইচসমূহৰ পৰা বুট কৰাটো সমৰ্থিত নহয়"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned SCSI devices is not supported with this version of qemu"
|
||||
msgstr "qemu ৰ এই সংস্কৰণৰ সৈতে ধাৰ্য্যত SCSI ডিভাইচসমূহৰ পৰা বুট কৰাটো সমৰ্থিত নহয়"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned USB devices is not supported with this version of qemu"
|
||||
msgstr "qemu ৰ এই সংস্কৰণৰ সৈতে ধাৰ্য্যত USB ডিভাইচসমূহৰ পৰা বুট কৰাটো সমৰ্থিত নহয়"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned devices is only supported for PCI, USB and SCSI devices"
|
||||
msgstr ""
|
||||
@@ -12566,6 +12698,9 @@ msgstr "সুৰক্ষা props %d (%s) প্ৰাপ্ত কৰিব
|
||||
msgid "cannot get the host uuid"
|
||||
msgstr "হস্ট uuid প্ৰাপ্ত কৰিব নোৱাৰি"
|
||||
|
||||
msgid "cannot get the path of MEMORY cgroup controller"
|
||||
msgstr "MEMORY cgroup নিয়ন্ত্ৰকৰ পথ প্ৰাপ্ত কৰিব নোৱাৰি"
|
||||
|
||||
msgid "cannot get vCPU placement & pCPU time"
|
||||
msgstr "vCPU স্থাপনাও আৰু pCPU ৰ সময় প্ৰাপ্ত কৰিবলৈ ব্যৰ্থ"
|
||||
|
||||
@@ -12728,6 +12863,10 @@ msgstr "ভলিউম '%s' খোলোঁতে ব্যৰ্থ"
|
||||
msgid "cannot parse %s version number in '%.*s'"
|
||||
msgstr "%s সংস্কৰণ সংখ্যা বিশ্লেষণ কৰিব নোৱাৰি '%.*s'"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU map for %s architecture"
|
||||
msgstr "%s স্থাপত্যৰ বাবে CPU মেপ বিশ্লেষণ কৰা সম্ভৱ নহয়"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU topology '%s'"
|
||||
msgstr "CPU ৰ টোপোলজি '%s' বিশ্লেষণ কৰিবলৈ ব্যৰ্থ"
|
||||
@@ -12819,10 +12958,6 @@ msgstr "interfaceid প্ৰাচলক uuid হিচাপে বিশ্
|
||||
msgid "cannot parse io mode '%s'"
|
||||
msgstr "io অৱস্থা '%s' বিশ্লেষণ কৰিব নোৱাৰি"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse json %s: %s"
|
||||
msgstr "json %s বিশ্লেষণ কৰা সম্ভৱ নহয়: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse nbd filename '%s'"
|
||||
msgstr "nbd ফাইলনাম '%s' বিশ্লেষণ কৰিব নোৱাৰি"
|
||||
@@ -13259,6 +13394,14 @@ msgstr "%s ত cellNum %d কে কম বা সমান হব লাগি
|
||||
msgid "cellNum in %s only accepts %d as a negative value"
|
||||
msgstr "%s ত cellNum এ %d ক কেৱল ধনাত্মক মান হিচাপে গ্ৰহণ কৰে"
|
||||
|
||||
#, c-format
|
||||
msgid "cfs_period '%llu' must be in range (1000, 1000000)"
|
||||
msgstr "cfs_period '%llu' বিস্তাৰ (1000, 1000000) ত হব লাগিব"
|
||||
|
||||
#, c-format
|
||||
msgid "cfs_quota '%lld' must be in range (1000, %llu)"
|
||||
msgstr "cfs_quota '%lld' বিস্তাৰ (1000, %llu) ত হব লাগিব"
|
||||
|
||||
msgid "cgroup CPU controller is not mounted"
|
||||
msgstr "cgroup CPU নিয়ন্ত্ৰক মাউণ্ট কৰা নহয়"
|
||||
|
||||
@@ -13401,6 +13544,10 @@ msgstr "সংৰূপ"
|
||||
msgid "config data file to import from"
|
||||
msgstr "আমদানি কৰিব লগা বিন্যাস তথ্যৰ ফাইল"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s not a string"
|
||||
msgstr "সংৰূপ মান %s এটা স্ট্ৰিং নহয়"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s was malformed"
|
||||
msgstr "বিন্যাসৰ মান %s ভুল"
|
||||
@@ -13409,6 +13556,10 @@ msgstr "বিন্যাসৰ মান %s ভুল"
|
||||
msgid "config value %s was missing"
|
||||
msgstr "বিন্যাসৰ মান %s নাছিল"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s was not a string"
|
||||
msgstr "বিন্যাসৰ মান %s এটা স্ট্ৰিং নাছিল"
|
||||
|
||||
msgid "configuration file syntax error"
|
||||
msgstr "বিনেস ফাইলৰ শব্দবিনেসত ভুল"
|
||||
|
||||
@@ -15161,6 +15312,9 @@ msgstr "qemu ডিভাইচ তালিকা বিশ্লেষণ ক
|
||||
msgid "failed to parse value of %s"
|
||||
msgstr "%s ৰ বাবে মান বিশ্লেষণ কৰিবলে ব্যৰ্থ"
|
||||
|
||||
msgid "failed to parse xml document"
|
||||
msgstr "xml নথি বিশ্লেষণ কৰোঁতে ব্যৰ্থ"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to pivot job for disk %s"
|
||||
msgstr "ডিস্ক %s ৰ বাবে কাৰ্য্য পিভট কৰিবলে ব্যৰ্থ"
|
||||
@@ -15234,6 +15388,9 @@ msgstr "তথ্যসমূহ উদ্ধাৰ কৰিবলে ব্য
|
||||
msgid "failed to retrieve decision to accept host key"
|
||||
msgstr "হস্ট কি' গ্ৰহণ কৰিবলে সিধান্ত উদ্ধাৰ কৰিবলে ব্যৰ্থ"
|
||||
|
||||
msgid "failed to retrieve password"
|
||||
msgstr "পাছৱৰ্ড উদ্ধাৰ কৰিবলে ব্যৰ্থ"
|
||||
|
||||
msgid "failed to retrieve private key passphrase: callback has failed"
|
||||
msgstr "ব্যক্তিগত কি' পাচফ্ৰেইছ উদ্ধাৰ কৰিবলে ব্যৰ্থ: কলবেক ব্যৰ্থ হৈছে"
|
||||
|
||||
@@ -15729,6 +15886,9 @@ msgstr "hugepage আকাৰ শূন্য হব নোৱাৰিব"
|
||||
msgid "hypervisor connection URI"
|
||||
msgstr "হাইপাৰ ভাইসৰ সংযোগৰ URI"
|
||||
|
||||
msgid "hypervisor lacks deviceboot feature"
|
||||
msgstr "হাইপাৰজৰত ডিভাইচবুট বৈশিষ্ট্য নাই"
|
||||
|
||||
msgid "iSCSI storage pool does not support volume creation"
|
||||
msgstr "iSCSI সংৰক্ষণ পুলে ভলিউম সৃষ্টি সমৰ্থন নকৰে"
|
||||
|
||||
@@ -16961,6 +17121,10 @@ msgstr "maxuuids > REMOTE_SECRET_LIST_MAX"
|
||||
msgid "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
|
||||
msgstr "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
|
||||
|
||||
#, c-format
|
||||
msgid "memballoon unsupported with address type '%s'"
|
||||
msgstr "ঠিকনা ধৰণ '%s' ৰ সৈতে memballoon অসমৰ্থিত"
|
||||
|
||||
msgid "memory attributes: [file=]name[,snapshot=type]"
|
||||
msgstr "মেমৰি বৈশিষ্ট্যসমূহ: [file=]name[,snapshot=type]"
|
||||
|
||||
@@ -17913,6 +18077,9 @@ msgstr "'%s' ৰ কাৰণে কোনো ব্ল'ক ডিভাইচ
|
||||
msgid "no call waiting for reply with prog %d vers %d serial %d"
|
||||
msgstr "prog %d vers %d serial %d ৰ সৈতে উত্তৰৰ বাবে অপেক্ষা কৰা কোনো কল নাই"
|
||||
|
||||
msgid "no callback provided"
|
||||
msgstr "কোনো কলবেক প্ৰদান কৰা হোৱা নাই"
|
||||
|
||||
msgid "no client username was found"
|
||||
msgstr "গ্ৰাহকৰ ব্যৱহাৰকৰোঁতাৰ নাম পোৱা নাযায়"
|
||||
|
||||
@@ -17942,6 +18109,10 @@ msgstr "এলিয়াচ %s ৰ সৈতে কোনো ডিভাইচ
|
||||
msgid "no disk format for %s and probing is disabled"
|
||||
msgstr "%s ৰ বাবে কোনো ডিস্ক বিন্যাস নাই আৰু প্ৰবিং অসামৰ্থবান কৰা আছে"
|
||||
|
||||
#, c-format
|
||||
msgid "no disk found with alias %s"
|
||||
msgstr "এলিয়াচ %s ৰ সৈতে কোনো ডিস্ক পোৱা নগল"
|
||||
|
||||
#, c-format
|
||||
msgid "no disk named '%s'"
|
||||
msgstr "'%s' নামৰ কোনো ডিস্ক নাই"
|
||||
@@ -20094,6 +20265,9 @@ msgstr "স্নেপশ্বট ফিল্টাৰিং পৰিৱে
|
||||
msgid "unable to poll on child"
|
||||
msgstr "ছাইল্ডত পল কৰিবলে অক্ষম"
|
||||
|
||||
msgid "unable to probe for add-fd"
|
||||
msgstr "add-fd ৰ বাবে প্ৰৌব কৰিবলে অক্ষম"
|
||||
|
||||
msgid "unable to read child stderr"
|
||||
msgstr "ছাইল্ড stderr পঢ়িবলে অক্ষম"
|
||||
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Asturian\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Baluchi\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Belarusian\n"
|
||||
@@ -17,4 +17,4 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -7,9 +7,9 @@
|
||||
# Miroslav Ivanov <kiro.kopeleto@gmail.com>, 2007.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2015-02-26 07:16+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Bulgarian (http://www.transifex.com/projects/p/fedora/"
|
||||
@@ -19,7 +19,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.3.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2018-04-24 06:13+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Bengali (http://www.transifex.com/projects/p/fedora/language/"
|
||||
@@ -18,4 +18,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -8,9 +8,9 @@
|
||||
# runab <runab@redhat.com>, 2006-2010
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2015-02-26 07:10+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Bengali (India) (http://www.transifex.com/projects/p/libvirt/"
|
||||
@@ -20,7 +20,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -2291,6 +2291,9 @@ msgstr "CPU বৈশিষ্ট্যের নাম অনুপস্থি
|
||||
msgid "Missing CPU model name"
|
||||
msgstr "CPU-র মডেলের নাম অনুপস্থিত"
|
||||
|
||||
msgid "Missing CPU vendor name"
|
||||
msgstr "CPU ভেন্ডার নাম অনুপস্থিত"
|
||||
|
||||
#, c-format
|
||||
msgid "Missing IP address in network '%s' DNS HOST record"
|
||||
msgstr "নেটওয়ার্ক '%s' DNS HOST রেকর্ডে IP ঠিকানা অনুপস্থিত"
|
||||
@@ -2342,6 +2345,9 @@ msgstr ""
|
||||
msgid "Missing or invalid PVR value in CPU model %s"
|
||||
msgstr "CPU মডেল %s এ PVR মান অনুপস্থিত বা অবৈধ"
|
||||
|
||||
msgid "Missing or invalid auth pointer"
|
||||
msgstr "auth পয়েন্টার হয় অনুপস্থিত বা অবৈধ"
|
||||
|
||||
#, c-format
|
||||
msgid "Missing required address attribute in network '%s'"
|
||||
msgstr "'%s' নেটওয়ার্কে প্রয়োজনীয় ঠিকানা অ্যাট্রিবিউট অনুপস্থিত"
|
||||
@@ -2525,6 +2531,9 @@ msgstr "কোনো UNIX প্রক্রিয়া অাইডি উপ
|
||||
msgid "No address associated with hostname"
|
||||
msgstr "হোস্টনামের সংগে কোনো ঠিকানা সংশ্লিষ্ট নেই"
|
||||
|
||||
msgid "No authentication callback provided."
|
||||
msgstr "অনুমোদনের কোনো কল-ব্যাক উপলব্ধ করা হয়নি।"
|
||||
|
||||
msgid "No data supplied for <initarg> element"
|
||||
msgstr "<initarg> উপাদানের জন্য কোনো ডেটা সরবরাহ করা হয়নি"
|
||||
|
||||
@@ -4315,6 +4324,10 @@ msgstr "সকেট খুলতে ব্যর্থ: %s"
|
||||
msgid "cannot open volume '%s'"
|
||||
msgstr "ভলিউম '%s' খুলতে ব্যর্থ"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU map for %s architecture"
|
||||
msgstr "%s আর্কিটেকচারের জন্য CPU ম্যাপ পার্স করা সম্ভব নয়"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU topology '%s'"
|
||||
msgstr "CPU-র টোপোলজি '%s' পার্স করতে ব্যর্থ"
|
||||
@@ -4387,10 +4400,6 @@ msgstr "instanceid প্যারামিটার uuid হিসাবে প
|
||||
msgid "cannot parse interfaceid parameter as a uuid"
|
||||
msgstr "instanceid প্যারামিটার uuid হিসাবে পার্জ করা যাবে না"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse json %s: %s"
|
||||
msgstr "json %s পার্স করা সম্ভব নয়: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse partition number from target '%s'"
|
||||
msgstr "'%s' টার্গেট থেকে পার্টিশনের সংখ্যা পার্স করা সম্ভব নয়"
|
||||
@@ -4732,6 +4741,10 @@ msgstr "%s কনফিগের মান ত্রুটিপূর্ণ"
|
||||
msgid "config value %s was missing"
|
||||
msgstr "%s কনফিগ মান অনুপস্থিত"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s was not a string"
|
||||
msgstr "%s কনফিগের মান স্ট্রিং প্রকৃতির নয়"
|
||||
|
||||
msgid "configuration file syntax error"
|
||||
msgstr "কনফিগারেশন ফাইলের মধ্যে সিন্টেক্স সংক্রান্ত সমস্যা"
|
||||
|
||||
@@ -5376,6 +5389,9 @@ msgstr "কনফিগারেশন ফাইল পার্স করতে
|
||||
msgid "failed to parse configuration file %s"
|
||||
msgstr "কনফিগারেশন ফাইল %s পার্স করতে ব্যর্থ"
|
||||
|
||||
msgid "failed to parse xml document"
|
||||
msgstr "xml নথি পার্স করতে ব্যর্থ"
|
||||
|
||||
msgid "failed to read XML"
|
||||
msgstr "XML পড়তে ব্যর্থ"
|
||||
|
||||
@@ -6691,6 +6707,9 @@ msgstr "স্বয়ংক্রিয় প্রারম্ভকরণ হব
|
||||
msgid "no block device path supplied for '%s'"
|
||||
msgstr "'%s'-র জন্য কোনো ব্লক ডিভাইসের পাথ উল্লিখিত হয়নি"
|
||||
|
||||
msgid "no callback provided"
|
||||
msgstr "কোনো কলব্যাক প্রদান করা হয়নি"
|
||||
|
||||
msgid "no client username was found"
|
||||
msgstr "ক্লায়েন্টের ব্যবহারকারীর নাম পাওয়া যায়নি"
|
||||
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Tibetan\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Breton\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Bodo\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -7,9 +7,9 @@
|
||||
# Daniel <veillard@redhat.com>, 2011.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2015-02-26 07:12+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Bosnian (http://www.transifex.com/projects/p/fedora/language/"
|
||||
@@ -20,7 +20,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@@ -11,9 +11,9 @@
|
||||
# Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>, 2018. #zanata
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2018-02-24 11:19+0000\n"
|
||||
"Last-Translator: Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>\n"
|
||||
"Language-Team: Catalan (http://www.transifex.com/projects/p/libvirt/language/"
|
||||
@@ -23,7 +23,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
|
131
po/cs.mini.po
131
po/cs.mini.po
@@ -7,14 +7,13 @@
|
||||
# dibalaj <dibalaj@dibalaj.cz>, 2013
|
||||
# Milan Kerslager <kerslage@linux.cz>, 2007
|
||||
# Zdenek <chmelarz@gmail.com>, 2016. #zanata
|
||||
# Pavel Borecki <pavel.borecki@gmail.com>, 2018. #zanata
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"PO-Revision-Date: 2018-11-27 07:08+0000\n"
|
||||
"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2016-09-15 06:18+0000\n"
|
||||
"Last-Translator: Zdenek <chmelarz@gmail.com>\n"
|
||||
"Language-Team: Czech (http://www.transifex.com/projects/p/fedora/language/"
|
||||
"cs/)\n"
|
||||
"Language: cs\n"
|
||||
@@ -22,7 +21,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -80,7 +79,7 @@ msgid " %s (help keyword '%s')\n"
|
||||
msgstr " %s (klíčové slovo nápovědy '%s')\n"
|
||||
|
||||
msgid " Hypervisors:"
|
||||
msgstr " Hypervizory:"
|
||||
msgstr " Hypervizoři:"
|
||||
|
||||
msgid " Miscellaneous:"
|
||||
msgstr " Různé:"
|
||||
@@ -147,14 +146,6 @@ msgstr "%s: selhal zápis do log souboru: %s"
|
||||
msgid "%s: initialization failed\n"
|
||||
msgstr "%s: inicializace selhala\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: option '%s%s' is ambiguous\n"
|
||||
msgstr "%s: volba „%s%s“ není jednoznačná\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: option '%s%s' is ambiguous; possibilities:"
|
||||
msgstr "%s: volba „%s%s“ není jednoznačná; možnosti:"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%s: temporary filename contains shell meta or other unacceptable characters "
|
||||
@@ -163,10 +154,6 @@ msgstr ""
|
||||
"%s: jméno dočasného souboru obsahuje nepovolené nebo speciální znaky shellu "
|
||||
"(je správně nastavená $TMPDIR?)"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: unrecognized option '%s%s'\n"
|
||||
msgstr "%s: nerozpoznaná volba „%s%s“\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%s: warning: %s%c"
|
||||
msgstr "%s: varování: %s%c"
|
||||
@@ -195,9 +182,6 @@ msgstr "--%s <řetězec>"
|
||||
msgid "Active:"
|
||||
msgstr "Aktivní:"
|
||||
|
||||
msgid "All requests done"
|
||||
msgstr "Všechny požadavky dokončeny"
|
||||
|
||||
msgid "Allocation"
|
||||
msgstr "Alokace"
|
||||
|
||||
@@ -228,10 +212,6 @@ msgstr "Dostupný"
|
||||
msgid "Available:"
|
||||
msgstr "Dostupný:"
|
||||
|
||||
#, c-format
|
||||
msgid "Bad $%s value."
|
||||
msgstr "Chybná hodnota $%s."
|
||||
|
||||
msgid "Build a given pool."
|
||||
msgstr "Sestav dané úložiště."
|
||||
|
||||
@@ -364,15 +344,6 @@ msgstr ""
|
||||
msgid "Change the number of virtual CPUs in the guest domain."
|
||||
msgstr "Změnit počet aktivních virtuálních CPU v hostované doméně."
|
||||
|
||||
msgid ""
|
||||
"Check that CPU and firmware supports virtualization and kvm module is loaded"
|
||||
msgstr ""
|
||||
"Zkontrolujte zda procesor a (nastavení) firmware podporují virtualizaci a je "
|
||||
"načten modul kvm"
|
||||
|
||||
msgid "Compiled with support for:"
|
||||
msgstr "Sestaveno s podporou pro:"
|
||||
|
||||
msgid "Compiled with support for:\n"
|
||||
msgstr "Zkompilováno s podporou pro:\n"
|
||||
|
||||
@@ -444,9 +415,6 @@ msgstr "Nelze smazat svazek: %s"
|
||||
msgid "Could not destroy domain: %s"
|
||||
msgstr "Nepodařilo se zničit doménu: %s"
|
||||
|
||||
msgid "Could not determine home directory"
|
||||
msgstr "Nedaří se zjistit domovskou složku"
|
||||
|
||||
msgid "Could not find 'active' element"
|
||||
msgstr "Nepodařilo se nalézt element 'active'"
|
||||
|
||||
@@ -805,9 +773,6 @@ msgstr "Selhalo porovnání hostitelského CPU s %s"
|
||||
msgid "Failed to connect to %s"
|
||||
msgstr "Selhalo připojování k %s"
|
||||
|
||||
msgid "Failed to connect to the admin server"
|
||||
msgstr "Nepodařilo se připojit ke správnímu serveru"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to convert '%s' to int"
|
||||
msgstr "Selhala konverze '%s' na int"
|
||||
@@ -957,12 +922,6 @@ msgstr "Nepodařilo se získat informace o rozhraní"
|
||||
msgid "Failed to get interface stats %s %s"
|
||||
msgstr "Nepodařilo se získat stav rozhraní %s %s"
|
||||
|
||||
msgid "Failed to initialize libvirt"
|
||||
msgstr "libvirt se nepodařilo inicializovat"
|
||||
|
||||
msgid "Failed to initialize mutex"
|
||||
msgstr "mutex se nepodařilo inicializovat"
|
||||
|
||||
msgid "Failed to list active domains"
|
||||
msgstr "Nepodařilo se vypsat aktivní domény"
|
||||
|
||||
@@ -996,9 +955,6 @@ msgstr "Selhalo vypsání hesel"
|
||||
msgid "Failed to list storage volumes"
|
||||
msgstr "Nepodařilo se vypsat svazky na úložišti"
|
||||
|
||||
msgid "Failed to list volumes"
|
||||
msgstr "Nepodařilo se vypsat svazky"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to make device %s"
|
||||
msgstr "Selhalo vytvoření zařízení %s"
|
||||
@@ -1191,7 +1147,7 @@ msgid ""
|
||||
"Grouped commands:\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Seskupené příkazy:\n"
|
||||
"Příkazy:\n"
|
||||
"\n"
|
||||
|
||||
#, c-format
|
||||
@@ -1226,9 +1182,6 @@ msgstr "Rozhraní bylo úspěšně připojeno\n"
|
||||
msgid "Interface detached successfully\n"
|
||||
msgstr "Rozhraní bylo úspěšně odpojeno\n"
|
||||
|
||||
msgid "Interrupted by a signal"
|
||||
msgstr "Přerušeno signálem"
|
||||
|
||||
msgid "Invalid CPU feature name"
|
||||
msgstr "Neplatné jméno vlastnosti CPU"
|
||||
|
||||
@@ -1343,6 +1296,9 @@ msgstr "Chybí jméno vlastnosti CPU"
|
||||
msgid "Missing CPU model name"
|
||||
msgstr "Chybí jméno modelu CPU"
|
||||
|
||||
msgid "Missing CPU vendor name"
|
||||
msgstr "Chybí jméno výrobce CPU"
|
||||
|
||||
msgid "Missing address"
|
||||
msgstr "Chybí adresa"
|
||||
|
||||
@@ -1365,9 +1321,6 @@ msgstr "Volná paměť NUMA"
|
||||
msgid "Name"
|
||||
msgstr "Jméno"
|
||||
|
||||
msgid "Name or service not known"
|
||||
msgstr "Neznámý název nebo služba"
|
||||
|
||||
msgid "Name:"
|
||||
msgstr "Jméno:"
|
||||
|
||||
@@ -1616,12 +1569,6 @@ msgstr "uložit stav domény do souboru"
|
||||
msgid "Renaming domains on migration not supported"
|
||||
msgstr "Přejmenování domén během migrace není podporováno"
|
||||
|
||||
msgid "Request canceled"
|
||||
msgstr "Požadavek zrušen"
|
||||
|
||||
msgid "Request not canceled"
|
||||
msgstr "Požadavek nebyl zrušen"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Requested number of virtual CPUs is greater than max allowable number of "
|
||||
@@ -1754,9 +1701,6 @@ msgstr "Svazek nenalezen: %s"
|
||||
msgid "Suspend a running domain."
|
||||
msgstr "Uspat běžící doménu."
|
||||
|
||||
msgid "System error"
|
||||
msgstr "Chyba systému"
|
||||
|
||||
msgid "The domain is not running"
|
||||
msgstr "Doména neběží"
|
||||
|
||||
@@ -1768,9 +1712,6 @@ msgstr "Server přesměrovává z '%s'"
|
||||
msgid "The server redirects from '%s' to '%s'"
|
||||
msgstr "Server přesměrovává z '%s' na '%s'"
|
||||
|
||||
msgid "This function is not supported on WIN32 platform"
|
||||
msgstr "Tato funkce není na platformě WIN32 podporována"
|
||||
|
||||
msgid "This host is not managed by a vCenter"
|
||||
msgstr "Tento host není spravován vCenter"
|
||||
|
||||
@@ -1780,9 +1721,6 @@ msgstr "Vláken na jádro:"
|
||||
msgid "Total"
|
||||
msgstr "Celkem"
|
||||
|
||||
msgid "Try again?"
|
||||
msgstr "Zkusit znovu?"
|
||||
|
||||
msgid "Type"
|
||||
msgstr "Typ"
|
||||
|
||||
@@ -1840,9 +1778,6 @@ msgstr "Nelze zmigrovat %s na %s"
|
||||
msgid "Unable to open %s"
|
||||
msgstr "Nelze otevřít %s"
|
||||
|
||||
msgid "Unable to open /proc/mounts"
|
||||
msgstr "Nelze otevřít /proc/mounts"
|
||||
|
||||
msgid "Unable to open UNIX socket"
|
||||
msgstr "Nelze otevřít UNIXový socket"
|
||||
|
||||
@@ -2159,6 +2094,10 @@ msgstr "nelze otevřít cestu '%s'"
|
||||
msgid "cannot open volume '%s'"
|
||||
msgstr "nelze otevřít svazek '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU map for %s architecture"
|
||||
msgstr "nelze parsovat mapování CPU pro architekturu %s"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse UUID '%s'"
|
||||
msgstr "nelze parsovat UUID '%s'"
|
||||
@@ -2178,10 +2117,6 @@ msgstr "nelze parsovat zařízení %s"
|
||||
msgid "cannot parse instanceid parameter as a uuid"
|
||||
msgstr "nelze parsovat parametr instanceid jako uuid"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse json %s: %s"
|
||||
msgstr "nelze parsovat json %s: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse product %s"
|
||||
msgstr "nelze parsovat produkt %s"
|
||||
@@ -2314,9 +2249,6 @@ msgstr "chybná syntaxe konfiguračního souboru"
|
||||
msgid "configuration file syntax error: %s"
|
||||
msgstr "chybná syntaxe konfiguračního souboru: %s"
|
||||
|
||||
msgid "connect to daemon's admin server"
|
||||
msgstr "připojit se ke správnímu serveru daného procesu služby"
|
||||
|
||||
msgid "connect to the guest console"
|
||||
msgstr "připojit se k hostované konzoli"
|
||||
|
||||
@@ -2563,9 +2495,6 @@ msgstr "chyba při kopírování UUID"
|
||||
msgid "error: "
|
||||
msgstr "chyba:"
|
||||
|
||||
msgid "error: Out of memory\n"
|
||||
msgstr "chyba: došla paměť\n"
|
||||
|
||||
#, c-format
|
||||
msgid "expected syntax: --%s <%s>"
|
||||
msgstr "očekávaná syntaxe: --%s <%s>"
|
||||
@@ -2702,6 +2631,9 @@ msgstr "chyba při parsování konfigurační souboru"
|
||||
msgid "failed to parse configuration file %s"
|
||||
msgstr "chyba při parsování konfigurační souboru %s"
|
||||
|
||||
msgid "failed to parse xml document"
|
||||
msgstr "selhalo parsovaní xml dokumentu"
|
||||
|
||||
msgid "failed to read XML"
|
||||
msgstr "selhalo čtení XML"
|
||||
|
||||
@@ -2777,9 +2709,6 @@ msgstr "soubor obsahující XML popis svazku"
|
||||
msgid "filter has no name"
|
||||
msgstr "filtr nemá jméno"
|
||||
|
||||
msgid "for hardware virtualization"
|
||||
msgstr "pro hardwarovou virtualizaci"
|
||||
|
||||
msgid "force device update"
|
||||
msgstr "vynutit aktualizaci zařízení"
|
||||
|
||||
@@ -2833,9 +2762,6 @@ msgstr "jméno rozhraní"
|
||||
msgid "internal error"
|
||||
msgstr "vnitřní chyba"
|
||||
|
||||
msgid "internal use only"
|
||||
msgstr "pouze pro vnitřní použití"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid '=' after option --%s"
|
||||
msgstr "neplatné '=' po volbě --%s"
|
||||
@@ -3452,12 +3378,6 @@ msgstr "uuid nebo jméno úložiště"
|
||||
msgid "print help"
|
||||
msgstr "vypsat nápovědu"
|
||||
|
||||
msgid "print help for this function"
|
||||
msgstr "vypsat nápovědu k této funkci"
|
||||
|
||||
msgid "print the admin server URI"
|
||||
msgstr "vypsat URI adresu správního serveru"
|
||||
|
||||
msgid "print the current directory"
|
||||
msgstr "zobrazí jméno adresáře, ve kterém se právě nacházíte"
|
||||
|
||||
@@ -3599,9 +3519,6 @@ msgstr "cíl diskového zařízení"
|
||||
msgid "target type must be specified for %s device"
|
||||
msgstr "cíl musí být specifikován pro zařízení %s"
|
||||
|
||||
msgid "tcp"
|
||||
msgstr "tcp"
|
||||
|
||||
#, c-format
|
||||
msgid "template '%s' does not exist"
|
||||
msgstr "template '%s' neexistuje"
|
||||
@@ -3618,9 +3535,6 @@ msgstr "tato doména již existuje"
|
||||
msgid "this network exists already"
|
||||
msgstr "tato síť již existuje"
|
||||
|
||||
msgid "tls"
|
||||
msgstr "tls"
|
||||
|
||||
msgid "too many drivers registered"
|
||||
msgstr "registrováno příliš mnoho ovladačů"
|
||||
|
||||
@@ -3704,7 +3618,7 @@ msgstr "neočekávaný typ řadiče %d"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected data '%s'"
|
||||
msgstr "neočekávaná data „%s“"
|
||||
msgstr "neočekávaná data '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "unexpected disk bus %d"
|
||||
@@ -3800,10 +3714,6 @@ msgstr "neočekávaná akce watchdogu %d"
|
||||
msgid "unexpected watchdog model %d"
|
||||
msgstr "neočekávaný model watchdogu %d"
|
||||
|
||||
#, c-format
|
||||
msgid "unimplemented parameter type %d"
|
||||
msgstr "neimplementovaný typ parametru %d"
|
||||
|
||||
msgid "unknown"
|
||||
msgstr "neznámý"
|
||||
|
||||
@@ -3840,7 +3750,7 @@ msgstr "neznámý offset hodin '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "unknown command: '%s'"
|
||||
msgstr "neznámý příkaz: „%s“"
|
||||
msgstr "neznámý příkaz '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "unknown dhcp peerdns value %s"
|
||||
@@ -3920,9 +3830,6 @@ msgstr "neznámý typ rozhraní '%s'"
|
||||
msgid "unknown memory balloon model '%s'"
|
||||
msgstr "neznámý model ballon memory '%s'"
|
||||
|
||||
msgid "unknown option"
|
||||
msgstr "neznámá volba"
|
||||
|
||||
#, c-format
|
||||
msgid "unknown pci source type '%s'"
|
||||
msgstr "neznámý typ '%s' pro zdroj pci"
|
||||
|
@@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2018-04-24 05:01+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Welsh (http://www.transifex.com/projects/p/fedora/language/"
|
||||
@@ -20,4 +20,4 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != "
|
||||
"11) ? 2 : 3;\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -9,9 +9,9 @@
|
||||
# Magnus Larsson <fedoratrans@gmail.com>, 2006.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2015-02-26 08:52+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Danish (http://www.transifex.com/projects/p/fedora/language/"
|
||||
@@ -21,7 +21,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
|
215
po/de.mini.po
215
po/de.mini.po
@@ -19,9 +19,9 @@
|
||||
# Florian H. <postfuerflo@gmail.com>, 2016. #zanata
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2016-04-01 11:32+0000\n"
|
||||
"Last-Translator: Florian H. <postfuerflo@gmail.com>\n"
|
||||
"Language-Team: German (http://www.transifex.com/projects/p/libvirt/language/"
|
||||
@@ -31,7 +31,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -255,6 +255,9 @@ msgstr "Vernetzung:"
|
||||
msgid " Storage:"
|
||||
msgstr "Speicher:"
|
||||
|
||||
msgid " block_io_throttle reply was missing device list"
|
||||
msgstr "Der block_io_throttle Antwort fehlte die Einheiten-Liste"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"!!! SSH HOST KEY VERIFICATION FAILED !!!: Identity of host '%s:%d' differs "
|
||||
@@ -548,6 +551,10 @@ msgstr "'logical-id' fehlt in Antwort auf guest-get-vcpus"
|
||||
msgid "'online' missing in reply of guest-get-vcpus"
|
||||
msgstr "'online' fehlt in Antwort auf guest-get-vcpus"
|
||||
|
||||
msgid "'parent' for vHBA not specified, and cannot find one on this host"
|
||||
msgstr ""
|
||||
"'parent' für vHBA nicht angegeben, und kann keinen auf diesem Host finden"
|
||||
|
||||
msgid "'peak' and 'burst' require 'average' attribute"
|
||||
msgstr "'peak' und 'burst' benötigen 'average' Attribut"
|
||||
|
||||
@@ -891,6 +898,9 @@ msgstr "NAT '%s' wurde versucht. NAT ist nur für IPv4 unterstützt."
|
||||
msgid "Attribute mode is only allowed for guest CPU"
|
||||
msgstr "Attribut-Modus ist nur für Gäste CPU erlaubt"
|
||||
|
||||
msgid "Authentication Credentials not found"
|
||||
msgstr "Authentifizierungs-Berechtigungen nicht gefunden"
|
||||
|
||||
msgid "Authentication failed"
|
||||
msgstr "Authentifizierung gescheitert"
|
||||
|
||||
@@ -1376,6 +1386,9 @@ msgstr "Kann Ballon-Einheit Pfad nicht bestimmen"
|
||||
msgid "Cannot determine free memory"
|
||||
msgstr "Kann freien Speicher nicht bestimmen"
|
||||
|
||||
msgid "Cannot determine system clock HZ"
|
||||
msgstr "Kann Systemuhr Hz nicht bestimmen"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot directly attach floppy %s"
|
||||
msgstr "Kann Floppy %s nicht direkt anhängen"
|
||||
@@ -1586,6 +1599,14 @@ msgstr "Socket-Adresse »%s« kann nicht verarbeitet werden: %s"
|
||||
msgid "Cannot parse start time %s in %s"
|
||||
msgstr "Start-Zeit %s in %s kann nicht analysiert werden"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot parse sys stat '%s'"
|
||||
msgstr "System-Status '%s' kann nicht analysiert werden"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot parse user stat '%s'"
|
||||
msgstr "Benutzer-Status '%s' kann nicht analysiert werden"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Cannot plug '%s' interface into '%s' because it would overcommit 'average' "
|
||||
@@ -1731,6 +1752,10 @@ msgstr ""
|
||||
"Label kann nicht angegeben werden wenn Neuetikettierung ausgeschaltet ist. "
|
||||
"model=%s"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot stat %s"
|
||||
msgstr "Kann Status %s nicht abrufen"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot undefine HostVirtualSwitch that has a '%s' port"
|
||||
msgstr "Kann nicht HostVirtualSwitch der einen '%s' Port hat zurücksetzen"
|
||||
@@ -1910,6 +1935,10 @@ msgstr ""
|
||||
msgid "Command %s too long for destination"
|
||||
msgstr "Befehl %s zu lang für Ziel"
|
||||
|
||||
#, c-format
|
||||
msgid "Command '%s' is not found"
|
||||
msgstr "Befehl '%s' nicht gefunden"
|
||||
|
||||
msgid "Commit aborted"
|
||||
msgstr "Übergabe abgebrochen"
|
||||
|
||||
@@ -2029,6 +2058,27 @@ msgstr "Container ist nicht definiert"
|
||||
msgid "Control groups not supported on this platform"
|
||||
msgstr "Kontroll-Gruppen werden auf dieser Plattform nicht unterstützt"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller %d out of range"
|
||||
msgstr "Controller %d ausserhalb des Bereiches"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not enabled for group"
|
||||
msgstr "Controller '%s' ist nicht für Gruppe aktiviert"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not mounted"
|
||||
msgstr "Controller '%s' ist nicht angeschlossen"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not wanted, but '%s' is co-mounted"
|
||||
msgstr ""
|
||||
"Controller '%s' ist nicht gesucht, aber '%s' ist gemeinsam angeschlossen"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' not mounted"
|
||||
msgstr "Controller '%s' nicht angeschlossen"
|
||||
|
||||
msgid "Controllers must use the 'ccid' address type"
|
||||
msgstr "Controller müssen den »ccid«-Adresstyp verwenden"
|
||||
|
||||
@@ -2229,6 +2279,9 @@ msgstr "PhysicalNic mit Namen '%s' konnte nicht gefunden werden"
|
||||
msgid "Could not find any 'network' element in status file"
|
||||
msgstr "Konnte kein \"Netzwerk\" Element in Status-Datei finden"
|
||||
|
||||
msgid "Could not find any mounted controllers"
|
||||
msgstr "Konnte keine angeschlossenen Controllers finden"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find compute resource specified in '%s'"
|
||||
msgstr "Konnte die in '%s' angegebene Rechen-Ressource nicht finden"
|
||||
@@ -2245,6 +2298,10 @@ msgstr "Datenspeicher mit absolutem Pfad '%s' konnte nicht gefunden werden"
|
||||
msgid "Could not find datastore with name '%s'"
|
||||
msgstr "Datenspeicher namens »%s« konnte nicht gefunden werden"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find directory separator in %s"
|
||||
msgstr "Verzeichnis-Trennungszeichen in %s konnte nicht gefunden werden"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find domain snapshot with internal name '%s'"
|
||||
msgstr "Domain-Snapshot mit internem Namen »%s« konnte nicht gefunden werden"
|
||||
@@ -2280,6 +2337,10 @@ msgstr "Physische NIC mit MAC-Adresse '%s' konnte nicht gefunden werden"
|
||||
msgid "Could not find physical NIC with name '%s'"
|
||||
msgstr "Physische NIC mit Namen '%s' konnte nicht gefunden werden"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find placement for controller %s at %s"
|
||||
msgstr "Konnte keine Plazierung für Controller %s bei %s finden"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find snapshot with name '%s'"
|
||||
msgstr "Snapshot namens »%s« konnte nicht gefunden werden"
|
||||
@@ -2983,6 +3044,10 @@ msgstr "Einheit %s existiert bereits"
|
||||
msgid "Device %s detached\n"
|
||||
msgstr "Einheit %s abgehängt\n"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s in use"
|
||||
msgstr "Einheit %s wird verwendet"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s is already in use"
|
||||
msgstr "Gerät %s wird bereits verwendet"
|
||||
@@ -3862,6 +3927,10 @@ msgstr "Anfang der Netzwerk Konfig-Änderungs Transaktion gescheitert"
|
||||
msgid "Failed to bind PCI device '%s' to %s"
|
||||
msgstr "Verbinden von PCI-Gerät '%s' mit %s fehlgeschlagen"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to bind cgroup '%s' on '%s'"
|
||||
msgstr "Verbinden von cgroup '%s' mit '%s' fehlgeschlagen"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to bind mount directory %s to %s"
|
||||
msgstr "Verbinden von Verzeichnis %s mit %s fehlgeschlagen"
|
||||
@@ -4017,6 +4086,10 @@ msgstr "Erstellen von Bind-Ziel %s fehlgeschlagen"
|
||||
msgid "Failed to create bridge node in xml document"
|
||||
msgstr "Erstellen des Bridge Knotens im XML-Dokument fehlgeschlagen"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create controller %s for group"
|
||||
msgstr "Erstellen Controller %s für Gruppe fehlgeschlagen"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create directory for '%s' dev '%s'"
|
||||
msgstr "Fehler beim Anlegen des Verzeichnisses für '%s' dev '%s'"
|
||||
@@ -4307,6 +4380,9 @@ msgstr "Fehler beim Erstellen eines neuen Namens für Schnittstelle %s"
|
||||
msgid "Failed to get %s minor number"
|
||||
msgstr "Abrufen der %s Minor-Nummer fehlgeschlagen"
|
||||
|
||||
msgid "Failed to get PCI Config Address String"
|
||||
msgstr "Konnte PCI Konfigurationsadressen-String nicht erhalten"
|
||||
|
||||
msgid "Failed to get PCI SYSFS file"
|
||||
msgstr "Konnte PCI SYSFS Datei nicht erhalten"
|
||||
|
||||
@@ -4577,6 +4653,10 @@ msgstr "Markierung der Domain %s als automatisch zu starten gescheitert"
|
||||
msgid "Failed to mkdir %s"
|
||||
msgstr "Anlegen des Verzeichnisses %s fehlgeschlagen"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to mount %s on %s type %s"
|
||||
msgstr "Anschließen von %s in %s Typ %s fehlgeschlagen"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to mount %s on /dev"
|
||||
msgstr "Anschließen von %s auf /dev fehlgeschlagen"
|
||||
@@ -6540,6 +6620,13 @@ msgstr "Maximale Speichergröße, als skalierte ganze Zahl (Standard in KiB)"
|
||||
msgid "Max memory:"
|
||||
msgstr "Max Speicher:"
|
||||
|
||||
msgid "Maximum CPUs greater than specified machine type limit"
|
||||
msgstr "Maximale CPUs größer als angegebene Maschinen-Typ Grenze"
|
||||
|
||||
#, c-format
|
||||
msgid "Memory '%llu' must be less than %llu"
|
||||
msgstr "Speicher '%llu' muss kleiner sein als %llu"
|
||||
|
||||
msgid "Memory allocation failure"
|
||||
msgstr "Fehler bei Speicherzuweisung"
|
||||
|
||||
@@ -6642,6 +6729,10 @@ msgstr "Fehlende »%s«-Eigenschaft"
|
||||
msgid "Missing '%s' property while looking for ManagedEntityStatus"
|
||||
msgstr "Fehlende '%s' Eigenschaft bei der Suche nach ManagedEntityStatus"
|
||||
|
||||
#, c-format
|
||||
msgid "Missing '/' separator in cgroup mount '%s'"
|
||||
msgstr "Fehlendes '/' Trennzeichen auf cgroup Anschluss '%s'"
|
||||
|
||||
msgid "Missing 'cores' attribute in CPU topology"
|
||||
msgstr "Fehlendes 'cores'-Attribut in CPU-Topologie"
|
||||
|
||||
@@ -6696,6 +6787,9 @@ msgstr "Fehlender CPU-Feature-Name"
|
||||
msgid "Missing CPU model name"
|
||||
msgstr "Fehlender CPU Modell-Name"
|
||||
|
||||
msgid "Missing CPU vendor name"
|
||||
msgstr "Fehlender CPU-Herstellername"
|
||||
|
||||
msgid "Missing ID parameter for domain object"
|
||||
msgstr "Fehlender ID-Parameter für Domain-Objekt"
|
||||
|
||||
@@ -6835,6 +6929,9 @@ msgstr ""
|
||||
msgid "Missing or invalid PVR value in CPU model %s"
|
||||
msgstr "Fehlender oder ungültiger PVR Wert in CPU-Modell %s"
|
||||
|
||||
msgid "Missing or invalid auth pointer"
|
||||
msgstr "Fehlender oder ungültiger Auth-Zeiger"
|
||||
|
||||
msgid "Missing ownerId data in JSON document"
|
||||
msgstr "Fehlende ownerId Daten in JSON Dokument"
|
||||
|
||||
@@ -7263,6 +7360,9 @@ msgstr "Keine Argumente für Signatur %s vorhanden"
|
||||
msgid "No authentication callback available"
|
||||
msgstr "Kein Authentifikations-Rückruf zur Verfügung"
|
||||
|
||||
msgid "No authentication callback provided."
|
||||
msgstr "Kein Authentifikation-Callback zur Verfügung gestellt."
|
||||
|
||||
msgid "No authentication methods and credentials provided"
|
||||
msgstr ""
|
||||
"Keine Authentifizierungsmethoden und Berechtigungsnachweise bereitgestellt"
|
||||
@@ -8413,6 +8513,9 @@ msgstr "SCSI Disk Index (erstellt von '%s') ist zu groß"
|
||||
msgid "SCSI host device doesn't support managed mode"
|
||||
msgstr "SCSI-Host-Einheit unterstützt verwalteten Modus nicht"
|
||||
|
||||
msgid "SCSI passthrough is not supported by this version of qemu"
|
||||
msgstr "SCSI-Weiterleitung wird mit dieser Version von qemu nicht unterstützt"
|
||||
|
||||
#, c-format
|
||||
msgid "SCSI unit index %d out of [0..6,8..15] range"
|
||||
msgstr "SCSI Unit index %d außerhalb dem [0..6,8..15] Bereich"
|
||||
@@ -9706,6 +9809,10 @@ msgstr "USB Einheit %s wird bereits verwendet"
|
||||
msgid "USB host device is missing bus/device information"
|
||||
msgstr "USB-Host-Gerät besitzt keine Bus/Geräte-Informationen"
|
||||
|
||||
msgid "USB redirection booting is not supported by this version of QEMU"
|
||||
msgstr ""
|
||||
"USB Start-Umleitung wird durch diese Version von QEMU nicht unterstützt"
|
||||
|
||||
msgid "USB redirection filter is not supported by this version of QEMU"
|
||||
msgstr ""
|
||||
"USB Umleitungs-Filter wird von dieser Version von QEMU nicht unterstützt"
|
||||
@@ -9893,12 +10000,6 @@ msgstr "Konnte Socket-Datei-Handles nicht kopieren"
|
||||
msgid "Unable to create %s"
|
||||
msgstr "Erstellen von %s fehlgeschlagen"
|
||||
|
||||
msgid "Unable to create JSON formatter"
|
||||
msgstr "JSON Formatter kann nicht erstellt werden"
|
||||
|
||||
msgid "Unable to create JSON parser"
|
||||
msgstr "JSON Parser kann nicht erstellt werden"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to create LPAR. Reason: '%s'"
|
||||
msgstr "LPAR konnte nicht erstellt werden. Grund: »%s«"
|
||||
@@ -9928,6 +10029,10 @@ msgstr "Kann Bridge-Einheit nicht erstellen"
|
||||
msgid "Unable to create device %s"
|
||||
msgstr "Kann Einheit %s nicht erstellen"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to create directory %s"
|
||||
msgstr "Konnte Verzeichnis %s nicht erstellen"
|
||||
|
||||
msgid "Unable to create epoll fd"
|
||||
msgstr "Kann epoll fd nicht erstellen"
|
||||
|
||||
@@ -10377,9 +10482,6 @@ msgstr "%s kann nicht geöffnet werden (%d)"
|
||||
msgid "Unable to open '%s'"
|
||||
msgstr "'%s' kann nicht geöffnet werden"
|
||||
|
||||
msgid "Unable to open /proc/mounts"
|
||||
msgstr "/proc/mounts kann nicht geöffnet werden"
|
||||
|
||||
msgid "Unable to open UNIX socket"
|
||||
msgstr "UNIX Socket kann nicht geöffnet werden"
|
||||
|
||||
@@ -10671,6 +10773,10 @@ msgstr "Kann STP auf %s auf dieser Plattform nicht setzen"
|
||||
msgid "Unable to set VM logfile close-on-exec flag"
|
||||
msgstr "Kann das close-on-exec-Flag der VM-Log-Datei nicht setzen"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to set bridge %s %s"
|
||||
msgstr "Bridge %s %s kann nicht gesetzt werden"
|
||||
|
||||
msgid "Unable to set cloexec flag"
|
||||
msgstr "Kann cloexec Flag nicht setzen"
|
||||
|
||||
@@ -10733,6 +10839,10 @@ msgstr "Kann Bind-Quelle %s nicht statistisch erfassen"
|
||||
msgid "Unable to stat bind target %s"
|
||||
msgstr "Konnte stat für Bind-Ziel %s nicht erhalten"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to symlink directory %s to %s"
|
||||
msgstr "Erstellen Symbolisches Link-Verzeichniss %s zu %s fehlgeschlagen"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to truncate %s"
|
||||
msgstr "Kann %s nicht kürzen"
|
||||
@@ -10863,6 +10973,9 @@ msgstr "Unerwarteter dconnuri Parameter bei Non-Peer2Peer Migration"
|
||||
msgid "Unexpected disk sgio mode '%d'"
|
||||
msgstr "Unerwarteter Festplatten sgio Modus '%d'"
|
||||
|
||||
msgid "Unexpected error"
|
||||
msgstr "Unerwarteter Fehler"
|
||||
|
||||
#, c-format
|
||||
msgid "Unexpected filesystem type %s"
|
||||
msgstr "Unerwarteter Dateisystem Typ %s"
|
||||
@@ -11357,6 +11470,9 @@ msgid "VMX entry 'sched.cpu.affinity' contains a %d, this value is too large"
|
||||
msgstr ""
|
||||
"VMX Eintragung 'sched.cpu.affinity' enthält ein %d, dieser Wert ist zu groß"
|
||||
|
||||
msgid "VNC WebSockets are not supported with this QEMU binary"
|
||||
msgstr "VNC WebSockets werden von dieser QEMU-Programmdatei nicht unterstützt"
|
||||
|
||||
msgid "VNC supports connected='keep' only"
|
||||
msgstr "VNC unterstützt nur connected='keep'"
|
||||
|
||||
@@ -11976,6 +12092,31 @@ msgstr "Boot-Reihenfolge '%s' für mehr als eine Einheit verwendet"
|
||||
msgid "booted"
|
||||
msgstr "gestartet"
|
||||
|
||||
msgid ""
|
||||
"booting from PCI devices assigned with VFIO is not supported with this "
|
||||
"version of qemu"
|
||||
msgstr ""
|
||||
"Starten von PCI-Einheiten, die mit VFIO zugewiesen sind, wird durch diese "
|
||||
"Version von QEMU nicht unterstützt"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned PCI devices is not supported with this version of qemu"
|
||||
msgstr ""
|
||||
"Booten von zugewiesenen PCI-Geräten ist mit dieser Version von QEMU "
|
||||
"unterstützt nicht"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned SCSI devices is not supported with this version of qemu"
|
||||
msgstr ""
|
||||
"Starten von zugewiesenen SCSI-Einheiten wird durch diese Version von QEMU "
|
||||
"nicht unterstützt"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned USB devices is not supported with this version of qemu"
|
||||
msgstr ""
|
||||
"Starten von zugewiesenen USB-Einheiten wird durch diese Version von QEMU "
|
||||
"nicht unterstützt"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned devices is only supported for PCI, USB and SCSI devices"
|
||||
msgstr ""
|
||||
@@ -12505,6 +12646,9 @@ msgstr "Kann Sicherheits-Props %d (%s) nicht erhalten"
|
||||
msgid "cannot get the host uuid"
|
||||
msgstr "Kann Host UUID nicht ermitteln"
|
||||
|
||||
msgid "cannot get the path of MEMORY cgroup controller"
|
||||
msgstr "Kann den Pfad des MEMORY cgroup Controllers nicht erhalten"
|
||||
|
||||
msgid "cannot get vCPU placement & pCPU time"
|
||||
msgstr "Kann vCPU-Platzierung & pCPU-Zeit nicht ermitteln"
|
||||
|
||||
@@ -12665,6 +12809,10 @@ msgstr "Kann Datenträger '%s' nicht öffnen"
|
||||
msgid "cannot parse %s version number in '%.*s'"
|
||||
msgstr "Kann nicht %s Versions-Number in '%.*s' analysieren"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU map for %s architecture"
|
||||
msgstr "CPU-Map für %s-Architektur kann nicht geparst werden"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU topology '%s'"
|
||||
msgstr "Kann CPU-Topologie '%s' nicht parsen"
|
||||
@@ -12757,10 +12905,6 @@ msgstr "kann interfaceid Parameter nicht als ein uuid analysieren"
|
||||
msgid "cannot parse io mode '%s'"
|
||||
msgstr "E/A-Modus »%s« kann nicht verarbeitet werden"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse json %s: %s"
|
||||
msgstr "Kann json %s: %s nicht parsen"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse nbd filename '%s'"
|
||||
msgstr "NBD-Dateiname »%s« kann nicht verarbeitet werden"
|
||||
@@ -13199,6 +13343,14 @@ msgstr "cellNum in %s muss kleiner oder gleich sein zu %d"
|
||||
msgid "cellNum in %s only accepts %d as a negative value"
|
||||
msgstr "cellNum in %s akzeptiert nur %d als einen negativen Wert"
|
||||
|
||||
#, c-format
|
||||
msgid "cfs_period '%llu' must be in range (1000, 1000000)"
|
||||
msgstr "cfs_period '%llu' muss im Bereich (1000, 1000000) sein"
|
||||
|
||||
#, c-format
|
||||
msgid "cfs_quota '%lld' must be in range (1000, %llu)"
|
||||
msgstr "cfs_quota '%lld' muss im Bereich (1000, %llu) sein"
|
||||
|
||||
msgid "cgroup CPU controller is not mounted"
|
||||
msgstr "cgroup CPU Controller ist nicht angeschlossen"
|
||||
|
||||
@@ -13347,6 +13499,10 @@ msgstr "Konfig"
|
||||
msgid "config data file to import from"
|
||||
msgstr "Konfigurationsdatendatei, aus der importiert werden soll"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s not a string"
|
||||
msgstr "Konfigurationswert %s kein String"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s was malformed"
|
||||
msgstr "Konfigurationswert %s war fehlerhaft"
|
||||
@@ -13355,6 +13511,10 @@ msgstr "Konfigurationswert %s war fehlerhaft"
|
||||
msgid "config value %s was missing"
|
||||
msgstr "Konfigurationswert %s fehlte"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s was not a string"
|
||||
msgstr "Konfigurationswert %s war kein String"
|
||||
|
||||
msgid "configuration file syntax error"
|
||||
msgstr "Syntaxfehler in der Konfigurationsdatei"
|
||||
|
||||
@@ -15052,6 +15212,9 @@ msgstr "Konnte QEMU Einheiten-Liste nicht analysieren"
|
||||
msgid "failed to parse value of %s"
|
||||
msgstr "Analyse des Wertes von %s fehlgeschlagen"
|
||||
|
||||
msgid "failed to parse xml document"
|
||||
msgstr "Parsen des XML-Dokuments fehlgeschlagen"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to pivot job for disk %s"
|
||||
msgstr "Job auf Disk %s konnte nicht gedreht werden"
|
||||
@@ -15123,6 +15286,9 @@ msgid "failed to retrieve decision to accept host key"
|
||||
msgstr ""
|
||||
"Entscheidung, den Hostschlüssel zu akzeptieren, konnte nicht abgerufen werden"
|
||||
|
||||
msgid "failed to retrieve password"
|
||||
msgstr "Abrufen von Passwort fehlgeschlagen"
|
||||
|
||||
msgid "failed to retrieve private key passphrase: callback has failed"
|
||||
msgstr ""
|
||||
"Private Schlüssel-Passphrase konnte nicht abgerufen werden: Rückruf ist "
|
||||
@@ -15619,6 +15785,9 @@ msgstr "Hub Typ %s nicht unterstützt"
|
||||
msgid "hypervisor connection URI"
|
||||
msgstr "Hypervisor Verbindungs-URI"
|
||||
|
||||
msgid "hypervisor lacks deviceboot feature"
|
||||
msgstr "Hypervisor fehlt deviceboot Funktion"
|
||||
|
||||
msgid "iSCSI storage pool does not support volume creation"
|
||||
msgstr "ISCSI Speicherpool unterstützt keine Datenträger-Erstellung"
|
||||
|
||||
@@ -16776,6 +16945,10 @@ msgstr "maxuuids > REMOTE_SECRET_LIST_MAX"
|
||||
msgid "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
|
||||
msgstr "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
|
||||
|
||||
#, c-format
|
||||
msgid "memballoon unsupported with address type '%s'"
|
||||
msgstr "memballoon nicht unterstützt mit Adressen Typ '%s'"
|
||||
|
||||
msgid "memory attributes: [file=]name[,snapshot=type]"
|
||||
msgstr "Speicher Attribute: [file=]Name[,snapshot=Typ]"
|
||||
|
||||
@@ -17693,6 +17866,9 @@ msgid "no call waiting for reply with prog %d vers %d serial %d"
|
||||
msgstr ""
|
||||
"Kein Anruf wartet auf Antwort mit Program %d Version %d Seriennummer %d"
|
||||
|
||||
msgid "no callback provided"
|
||||
msgstr "kein Callback zur Verfügung gestellt"
|
||||
|
||||
msgid "no client username was found"
|
||||
msgstr "kein Client-Benutzername gefunden"
|
||||
|
||||
@@ -17719,6 +17895,10 @@ msgstr "Keine Einheit gefunden mit Alias %s"
|
||||
msgid "no disk format for %s and probing is disabled"
|
||||
msgstr "kein Datenträger-Format für %s und Sondieren ist deaktiviert"
|
||||
|
||||
#, c-format
|
||||
msgid "no disk found with alias %s"
|
||||
msgstr "Kein Laufwerk gefunden mit Alias %s"
|
||||
|
||||
#, c-format
|
||||
msgid "no disk named '%s'"
|
||||
msgstr "Keine Disk namens '%s'"
|
||||
@@ -19864,6 +20044,9 @@ msgstr "nicht in der Lage Snapshots Filterung durchzuführen"
|
||||
msgid "unable to poll on child"
|
||||
msgstr "konnte nicht auf Unterelement abfragen"
|
||||
|
||||
msgid "unable to probe for add-fd"
|
||||
msgstr "Konnte nicht für add-fd sondieren"
|
||||
|
||||
msgid "unable to read child stderr"
|
||||
msgstr "konnte stderr des Unterelements nicht lesen"
|
||||
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: German (Switzerland)\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -7,9 +7,9 @@
|
||||
# Pierros Papadeas <pierros@papadeas.gr>, 2009.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2015-02-27 04:41+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Greek (http://www.transifex.com/projects/p/fedora/language/"
|
||||
@@ -19,7 +19,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
#, c-format
|
||||
msgid "Bridge generation exceeded max id %d"
|
||||
@@ -258,6 +258,9 @@ msgstr "η σύνδεση είναι ήδη ανοικτή"
|
||||
msgid "connection not open"
|
||||
msgstr "η σύνδεση δεν είναι ανοικτή"
|
||||
|
||||
msgid "failed to parse xml document"
|
||||
msgstr "αδυναμία ερμηνείας του εγγράφου XML"
|
||||
|
||||
msgid "interface has no name"
|
||||
msgstr "η διεπαφή/προσαρμογέας (interface) δεν έχει όνομα"
|
||||
|
||||
|
209
po/en_GB.mini.po
209
po/en_GB.mini.po
@@ -9,9 +9,9 @@
|
||||
# readmanr <robert_readman@hotmail.com>, 2013
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2015-02-24 06:05+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/"
|
||||
@@ -21,7 +21,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -283,6 +283,9 @@ msgstr " Networking:"
|
||||
msgid " Storage:"
|
||||
msgstr " Storage:"
|
||||
|
||||
msgid " block_io_throttle reply was missing device list"
|
||||
msgstr " block_io_throttle reply was missing device list"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"!!! SSH HOST KEY VERIFICATION FAILED !!!: Identity of host '%s:%d' differs "
|
||||
@@ -580,6 +583,9 @@ msgstr "'logical-id' missing in reply of guest-get-vcpus"
|
||||
msgid "'online' missing in reply of guest-get-vcpus"
|
||||
msgstr "'online' missing in reply of guest-get-vcpus"
|
||||
|
||||
msgid "'parent' for vHBA not specified, and cannot find one on this host"
|
||||
msgstr "'parent' for vHBA not specified, and cannot find one on this host"
|
||||
|
||||
msgid "'peak' and 'burst' require 'average' attribute"
|
||||
msgstr "'peak' and 'burst' require 'average' attribute"
|
||||
|
||||
@@ -916,6 +922,9 @@ msgstr "Attempted to NAT '%s'. NAT is only supported for IPv4."
|
||||
msgid "Attribute mode is only allowed for guest CPU"
|
||||
msgstr "Attribute mode is only allowed for guest CPU"
|
||||
|
||||
msgid "Authentication Credentials not found"
|
||||
msgstr "Authentication Credentials not found"
|
||||
|
||||
msgid "Authentication failed"
|
||||
msgstr "Authentication failed"
|
||||
|
||||
@@ -1383,6 +1392,9 @@ msgstr "Cannot determine balloon device path"
|
||||
msgid "Cannot determine free memory"
|
||||
msgstr "Cannot determine free memory"
|
||||
|
||||
msgid "Cannot determine system clock HZ"
|
||||
msgstr "Cannot determine system clock HZ"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot directly attach floppy %s"
|
||||
msgstr "Cannot directly attach floppy %s"
|
||||
@@ -1590,6 +1602,14 @@ msgstr "Cannot parse socket address '%s': %s"
|
||||
msgid "Cannot parse start time %s in %s"
|
||||
msgstr "Cannot parse start time %s in %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot parse sys stat '%s'"
|
||||
msgstr "Cannot parse sys stat '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot parse user stat '%s'"
|
||||
msgstr "Cannot parse user stat '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Cannot plug '%s' interface into '%s' because it would overcommit 'average' "
|
||||
@@ -1730,6 +1750,10 @@ msgstr "Cannot share uninitialised CURL handle"
|
||||
msgid "Cannot specify a label if relabelling is turned off. model=%s"
|
||||
msgstr "Cannot specify a label if relabelling is turned off. model=%s"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot stat %s"
|
||||
msgstr "Cannot stat %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot undefine HostVirtualSwitch that has a '%s' port"
|
||||
msgstr "Cannot undefine HostVirtualSwitch that has a '%s' port"
|
||||
@@ -1901,6 +1925,10 @@ msgstr ""
|
||||
msgid "Command %s too long for destination"
|
||||
msgstr "Command %s too long for destination"
|
||||
|
||||
#, c-format
|
||||
msgid "Command '%s' is not found"
|
||||
msgstr "Command '%s' is not found"
|
||||
|
||||
msgid "Commit aborted"
|
||||
msgstr "Commit aborted"
|
||||
|
||||
@@ -2011,6 +2039,26 @@ msgstr "Container is not defined"
|
||||
msgid "Control groups not supported on this platform"
|
||||
msgstr "Control groups not supported on this platform"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller %d out of range"
|
||||
msgstr "Controller %d out of range"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not enabled for group"
|
||||
msgstr "Controller '%s' is not enabled for group"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not mounted"
|
||||
msgstr "Controller '%s' is not mounted"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not wanted, but '%s' is co-mounted"
|
||||
msgstr "Controller '%s' is not wanted, but '%s' is co-mounted"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' not mounted"
|
||||
msgstr "Controller '%s' not mounted"
|
||||
|
||||
msgid "Controllers must use the 'ccid' address type"
|
||||
msgstr "Controllers must use the 'ccid' address type"
|
||||
|
||||
@@ -2205,6 +2253,9 @@ msgstr "Could not find PhysicalNic with name '%s'"
|
||||
msgid "Could not find any 'network' element in status file"
|
||||
msgstr "Could not find any 'network' element in status file"
|
||||
|
||||
msgid "Could not find any mounted controllers"
|
||||
msgstr "Could not find any mounted controllers"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find compute resource specified in '%s'"
|
||||
msgstr "Could not find compute resource specified in '%s'"
|
||||
@@ -2221,6 +2272,10 @@ msgstr "Could not find datastore containing absolute path '%s'"
|
||||
msgid "Could not find datastore with name '%s'"
|
||||
msgstr "Could not find datastore with name '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find directory separator in %s"
|
||||
msgstr "Could not find directory separator in %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find domain snapshot with internal name '%s'"
|
||||
msgstr "Could not find domain snapshot with internal name '%s'"
|
||||
@@ -2256,6 +2311,10 @@ msgstr "Could not find physical NIC with MAC address '%s'"
|
||||
msgid "Could not find physical NIC with name '%s'"
|
||||
msgstr "Could not find physical NIC with name '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find placement for controller %s at %s"
|
||||
msgstr "Could not find placement for controller %s at %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find snapshot with name '%s'"
|
||||
msgstr "Could not find snapshot with name '%s'"
|
||||
@@ -2935,6 +2994,10 @@ msgstr "Device %s already exists"
|
||||
msgid "Device %s detached\n"
|
||||
msgstr "Device %s detached\n"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s in use"
|
||||
msgstr "Device %s in use"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s is already in use"
|
||||
msgstr "Device %s is already in use"
|
||||
@@ -3781,6 +3844,10 @@ msgstr "Failed to begin network config change transaction"
|
||||
msgid "Failed to bind PCI device '%s' to %s"
|
||||
msgstr "Failed to bind PCI device '%s' to %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to bind cgroup '%s' on '%s'"
|
||||
msgstr "Failed to bind cgroup '%s' on '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to bind mount directory %s to %s"
|
||||
msgstr "Failed to bind mount directory %s to %s"
|
||||
@@ -3936,6 +4003,10 @@ msgstr "Failed to create bind target %s"
|
||||
msgid "Failed to create bridge node in xml document"
|
||||
msgstr "Failed to create bridge node in xml document"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create controller %s for group"
|
||||
msgstr "Failed to create controller %s for group"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create directory for '%s' dev '%s'"
|
||||
msgstr "Failed to create directory for '%s' dev '%s'"
|
||||
@@ -4219,6 +4290,9 @@ msgstr "Failed to generate new name for interface %s"
|
||||
msgid "Failed to get %s minor number"
|
||||
msgstr "Failed to get %s minor number"
|
||||
|
||||
msgid "Failed to get PCI Config Address String"
|
||||
msgstr "Failed to get PCI Config Address String"
|
||||
|
||||
msgid "Failed to get PCI SYSFS file"
|
||||
msgstr "Failed to get PCI SYSFS file"
|
||||
|
||||
@@ -4488,6 +4562,10 @@ msgstr "Failed to mark domain %s as autostarted"
|
||||
msgid "Failed to mkdir %s"
|
||||
msgstr "Failed to mkdir %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to mount %s on %s type %s"
|
||||
msgstr "Failed to mount %s on %s type %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to mount %s on /dev"
|
||||
msgstr "Failed to mount %s on /dev"
|
||||
@@ -6419,6 +6497,13 @@ msgstr "Max memory, as scaled integer (default KiB)"
|
||||
msgid "Max memory:"
|
||||
msgstr "Max memory:"
|
||||
|
||||
msgid "Maximum CPUs greater than specified machine type limit"
|
||||
msgstr "Maximum CPUs greater than specified machine type limit"
|
||||
|
||||
#, c-format
|
||||
msgid "Memory '%llu' must be less than %llu"
|
||||
msgstr "Memory '%llu' must be less than %llu"
|
||||
|
||||
msgid "Memory allocation failure"
|
||||
msgstr "Memory allocation failure"
|
||||
|
||||
@@ -6524,6 +6609,10 @@ msgstr "Missing '%s' property"
|
||||
msgid "Missing '%s' property while looking for ManagedEntityStatus"
|
||||
msgstr "Missing '%s' property while looking for ManagedEntityStatus"
|
||||
|
||||
#, c-format
|
||||
msgid "Missing '/' separator in cgroup mount '%s'"
|
||||
msgstr "Missing '/' separator in cgroup mount '%s'"
|
||||
|
||||
msgid "Missing 'cores' attribute in CPU topology"
|
||||
msgstr "Missing 'cores' attribute in CPU topology"
|
||||
|
||||
@@ -6578,6 +6667,9 @@ msgstr "Missing CPU feature name"
|
||||
msgid "Missing CPU model name"
|
||||
msgstr "Missing CPU model name"
|
||||
|
||||
msgid "Missing CPU vendor name"
|
||||
msgstr "Missing CPU vendor name"
|
||||
|
||||
msgid "Missing ID parameter for domain object"
|
||||
msgstr "Missing ID parameter for domain object"
|
||||
|
||||
@@ -6717,6 +6809,9 @@ msgstr ""
|
||||
msgid "Missing or invalid PVR value in CPU model %s"
|
||||
msgstr "Missing or invalid PVR value in CPU model %s"
|
||||
|
||||
msgid "Missing or invalid auth pointer"
|
||||
msgstr "Missing or invalid auth pointer"
|
||||
|
||||
msgid "Missing ownerId data in JSON document"
|
||||
msgstr "Missing ownerId data in JSON document"
|
||||
|
||||
@@ -7135,6 +7230,9 @@ msgstr "No args present for signature %s"
|
||||
msgid "No authentication callback available"
|
||||
msgstr "No authentication callback available"
|
||||
|
||||
msgid "No authentication callback provided."
|
||||
msgstr "No authentication callback provided."
|
||||
|
||||
msgid "No authentication methods and credentials provided"
|
||||
msgstr "No authentication methods and credentials provided"
|
||||
|
||||
@@ -8252,6 +8350,9 @@ msgstr "SCSI disk index (parsed from '%s') is too large"
|
||||
msgid "SCSI host device doesn't support managed mode"
|
||||
msgstr "SCSI host device doesn't support managed mode"
|
||||
|
||||
msgid "SCSI passthrough is not supported by this version of qemu"
|
||||
msgstr "SCSI passthrough is not supported by this version of qemu"
|
||||
|
||||
#, c-format
|
||||
msgid "SCSI unit index %d out of [0..6,8..15] range"
|
||||
msgstr "SCSI unit index %d out of [0..6,8..15] range"
|
||||
@@ -9519,6 +9620,9 @@ msgstr "USB device %s is already in use"
|
||||
msgid "USB host device is missing bus/device information"
|
||||
msgstr "USB host device is missing bus/device information"
|
||||
|
||||
msgid "USB redirection booting is not supported by this version of QEMU"
|
||||
msgstr "USB redirection booting is not supported by this version of QEMU"
|
||||
|
||||
msgid "USB redirection filter is not supported by this version of QEMU"
|
||||
msgstr "USB redirection filter is not supported by this version of QEMU"
|
||||
|
||||
@@ -9703,12 +9807,6 @@ msgstr "Unable to copy socket file handle"
|
||||
msgid "Unable to create %s"
|
||||
msgstr "Unable to create %s"
|
||||
|
||||
msgid "Unable to create JSON formatter"
|
||||
msgstr "Unable to create JSON formatter"
|
||||
|
||||
msgid "Unable to create JSON parser"
|
||||
msgstr "Unable to create JSON parser"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to create LPAR. Reason: '%s'"
|
||||
msgstr "Unable to create LPAR. Reason: '%s'"
|
||||
@@ -9738,6 +9836,10 @@ msgstr "Unable to create bridge device"
|
||||
msgid "Unable to create device %s"
|
||||
msgstr "Unable to create device %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to create directory %s"
|
||||
msgstr "Unable to create directory %s"
|
||||
|
||||
msgid "Unable to create epoll fd"
|
||||
msgstr "Unable to create epoll fd"
|
||||
|
||||
@@ -10190,9 +10292,6 @@ msgstr "Unable to open '%s'"
|
||||
msgid "Unable to open /dev/loop-control"
|
||||
msgstr "Unable to open /dev/loop-control"
|
||||
|
||||
msgid "Unable to open /proc/mounts"
|
||||
msgstr "Unable to open /proc/mounts"
|
||||
|
||||
msgid "Unable to open UNIX socket"
|
||||
msgstr "Unable to open UNIX socket"
|
||||
|
||||
@@ -10479,6 +10578,10 @@ msgstr "Unable to set STP on %s on this platform"
|
||||
msgid "Unable to set VM logfile close-on-exec flag"
|
||||
msgstr "Unable to set VM logfile close-on-exec flag"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to set bridge %s %s"
|
||||
msgstr "Unable to set bridge %s %s"
|
||||
|
||||
msgid "Unable to set cloexec flag"
|
||||
msgstr "Unable to set cloexec flag"
|
||||
|
||||
@@ -10541,6 +10644,10 @@ msgstr "Unable to stat bind source %s"
|
||||
msgid "Unable to stat bind target %s"
|
||||
msgstr "Unable to stat bind target %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to symlink directory %s to %s"
|
||||
msgstr "Unable to symlink directory %s to %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to truncate %s"
|
||||
msgstr "Unable to truncate %s"
|
||||
@@ -10665,6 +10772,9 @@ msgstr "Unexpected dconnuri parameter with non-peer2peer migration"
|
||||
msgid "Unexpected disk sgio mode '%d'"
|
||||
msgstr "Unexpected disk sgio mode '%d'"
|
||||
|
||||
msgid "Unexpected error"
|
||||
msgstr "Unexpected error"
|
||||
|
||||
#, c-format
|
||||
msgid "Unexpected filesystem type %s"
|
||||
msgstr "Unexpected filesystem type %s"
|
||||
@@ -11148,6 +11258,9 @@ msgstr "VMX entry 'name' contains invalid escape sequence"
|
||||
msgid "VMX entry 'sched.cpu.affinity' contains a %d, this value is too large"
|
||||
msgstr "VMX entry 'sched.cpu.affinity' contains a %d, this value is too large"
|
||||
|
||||
msgid "VNC WebSockets are not supported with this QEMU binary"
|
||||
msgstr "VNC WebSockets are not supported with this QEMU binary"
|
||||
|
||||
msgid "VNC supports connected='keep' only"
|
||||
msgstr "VNC supports connected='keep' only"
|
||||
|
||||
@@ -11744,6 +11857,28 @@ msgstr "boot order '%s' used for more than one device"
|
||||
msgid "booted"
|
||||
msgstr "booted"
|
||||
|
||||
msgid ""
|
||||
"booting from PCI devices assigned with VFIO is not supported with this "
|
||||
"version of qemu"
|
||||
msgstr ""
|
||||
"booting from PCI devices assigned with VFIO is not supported with this "
|
||||
"version of qemu"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned PCI devices is not supported with this version of qemu"
|
||||
msgstr ""
|
||||
"booting from assigned PCI devices is not supported with this version of qemu"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned SCSI devices is not supported with this version of qemu"
|
||||
msgstr ""
|
||||
"booting from assigned SCSI devices is not supported with this version of qemu"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned USB devices is not supported with this version of qemu"
|
||||
msgstr ""
|
||||
"booting from assigned USB devices is not supported with this version of qemu"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned devices is only supported for PCI, USB and SCSI devices"
|
||||
msgstr ""
|
||||
@@ -12272,6 +12407,9 @@ msgstr "cannot get security props %d (%s)"
|
||||
msgid "cannot get the host uuid"
|
||||
msgstr "cannot get the host uuid"
|
||||
|
||||
msgid "cannot get the path of MEMORY cgroup controller"
|
||||
msgstr "cannot get the path of MEMORY cgroup controller"
|
||||
|
||||
msgid "cannot get vCPU placement & pCPU time"
|
||||
msgstr "cannot get vCPU placement & pCPU time"
|
||||
|
||||
@@ -12438,6 +12576,10 @@ msgstr "cannot open volume '%s'"
|
||||
msgid "cannot parse %s version number in '%.*s'"
|
||||
msgstr "cannot parse %s version number in '%.*s'"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU map for %s architecture"
|
||||
msgstr "cannot parse CPU map for %s architecture"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU topology '%s'"
|
||||
msgstr "cannot parse CPU topology '%s'"
|
||||
@@ -12529,10 +12671,6 @@ msgstr "cannot parse interfaceid parameter as a uuid"
|
||||
msgid "cannot parse io mode '%s'"
|
||||
msgstr "cannot parse io mode '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse json %s: %s"
|
||||
msgstr "cannot parse json %s: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse nbd filename '%s'"
|
||||
msgstr "cannot parse nbd filename '%s'"
|
||||
@@ -12969,6 +13107,14 @@ msgstr "cellNum in %s must be less than or equal to %d"
|
||||
msgid "cellNum in %s only accepts %d as a negative value"
|
||||
msgstr "cellNum in %s only accepts %d as a negative value"
|
||||
|
||||
#, c-format
|
||||
msgid "cfs_period '%llu' must be in range (1000, 1000000)"
|
||||
msgstr "cfs_period '%llu' must be in range (1000, 1000000)"
|
||||
|
||||
#, c-format
|
||||
msgid "cfs_quota '%lld' must be in range (1000, %llu)"
|
||||
msgstr "cfs_quota '%lld' must be in range (1000, %llu)"
|
||||
|
||||
msgid "cgroup CPU controller is not mounted"
|
||||
msgstr "cgroup CPU controller is not mounted"
|
||||
|
||||
@@ -13111,6 +13257,10 @@ msgstr "config"
|
||||
msgid "config data file to import from"
|
||||
msgstr "config data file to import from"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s not a string"
|
||||
msgstr "config value %s not a string"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s was malformed"
|
||||
msgstr "config value %s was malformed"
|
||||
@@ -13119,6 +13269,10 @@ msgstr "config value %s was malformed"
|
||||
msgid "config value %s was missing"
|
||||
msgstr "config value %s was missing"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s was not a string"
|
||||
msgstr "config value %s was not a string"
|
||||
|
||||
msgid "configuration file syntax error"
|
||||
msgstr "configuration file syntax error"
|
||||
|
||||
@@ -14802,6 +14956,9 @@ msgstr "failed to parse qemu device list"
|
||||
msgid "failed to parse value of %s"
|
||||
msgstr "failed to parse value of %s"
|
||||
|
||||
msgid "failed to parse xml document"
|
||||
msgstr "failed to parse xml document"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to pivot job for disk %s"
|
||||
msgstr "failed to pivot job for disk %s"
|
||||
@@ -14875,6 +15032,9 @@ msgstr "failed to retrieve credentials"
|
||||
msgid "failed to retrieve decision to accept host key"
|
||||
msgstr "failed to retrieve decision to accept host key"
|
||||
|
||||
msgid "failed to retrieve password"
|
||||
msgstr "failed to retrieve password"
|
||||
|
||||
msgid "failed to retrieve private key passphrase: callback has failed"
|
||||
msgstr "failed to retrieve private key passphrase: callback has failed"
|
||||
|
||||
@@ -15358,6 +15518,9 @@ msgstr "hub type %s not supported"
|
||||
msgid "hypervisor connection URI"
|
||||
msgstr "hypervisor connection URI"
|
||||
|
||||
msgid "hypervisor lacks deviceboot feature"
|
||||
msgstr "hypervisor lacks deviceboot feature"
|
||||
|
||||
msgid "iSCSI storage pool does not support volume creation"
|
||||
msgstr "iSCSI storage pool does not support volume creation"
|
||||
|
||||
@@ -16518,6 +16681,10 @@ msgstr "maxuuids > REMOTE_SECRET_LIST_MAX"
|
||||
msgid "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
|
||||
msgstr "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
|
||||
|
||||
#, c-format
|
||||
msgid "memballoon unsupported with address type '%s'"
|
||||
msgstr "memballoon unsupported with address type '%s'"
|
||||
|
||||
msgid "memory attributes: [file=]name[,snapshot=type]"
|
||||
msgstr "memory attributes: [file=]name[,snapshot=type]"
|
||||
|
||||
@@ -17419,6 +17586,9 @@ msgstr "no block device path supplied for '%s'"
|
||||
msgid "no call waiting for reply with prog %d vers %d serial %d"
|
||||
msgstr "no call waiting for reply with prog %d vers %d serial %d"
|
||||
|
||||
msgid "no callback provided"
|
||||
msgstr "no callback provided"
|
||||
|
||||
msgid "no client username was found"
|
||||
msgstr "no client username was found"
|
||||
|
||||
@@ -17445,6 +17615,10 @@ msgstr "no device found with alias %s"
|
||||
msgid "no disk format for %s and probing is disabled"
|
||||
msgstr "no disk format for %s and probing is disabled"
|
||||
|
||||
#, c-format
|
||||
msgid "no disk found with alias %s"
|
||||
msgstr "no disk found with alias %s"
|
||||
|
||||
#, c-format
|
||||
msgid "no disk named '%s'"
|
||||
msgstr "no disk named '%s'"
|
||||
@@ -19538,6 +19712,9 @@ msgstr "unable to perform snapshot filtering"
|
||||
msgid "unable to poll on child"
|
||||
msgstr "unable to poll on child"
|
||||
|
||||
msgid "unable to probe for add-fd"
|
||||
msgstr "unable to probe for add-fd"
|
||||
|
||||
msgid "unable to read child stderr"
|
||||
msgstr "unable to read child stderr"
|
||||
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Esperanto\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
216
po/es.mini.po
216
po/es.mini.po
@@ -26,7 +26,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2018-03-10 04:16+0000\n"
|
||||
"Last-Translator: Javier Blanco <javi.deb@gmail.com>\n"
|
||||
"Language-Team: Spanish (http://www.transifex.com/projects/p/libvirt/language/"
|
||||
@@ -36,7 +36,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -228,6 +228,9 @@ msgstr "Red:"
|
||||
msgid " Storage:"
|
||||
msgstr "Almacenaje:"
|
||||
|
||||
msgid " block_io_throttle reply was missing device list"
|
||||
msgstr "A la lista de dispositivo le falta block_io_throttle"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"!!! SSH HOST KEY VERIFICATION FAILED !!!: Identity of host '%s:%d' differs "
|
||||
@@ -507,6 +510,11 @@ msgstr "'logical-id' falta en respuesta de guest-get-vcpus"
|
||||
msgid "'online' missing in reply of guest-get-vcpus"
|
||||
msgstr "'online' falta en respuesta de guest-get-vcpus"
|
||||
|
||||
msgid "'parent' for vHBA not specified, and cannot find one on this host"
|
||||
msgstr ""
|
||||
"'parent' para vHBA no está especificado, y no puede encontrar uno en este "
|
||||
"host"
|
||||
|
||||
msgid "'peak' and 'burst' require 'average' attribute"
|
||||
msgstr "'peak' y 'burst' requieren atributo 'average'"
|
||||
|
||||
@@ -832,6 +840,9 @@ msgstr "Intentó NAT '%s'. NAT solamente tiene soporte para IPv4."
|
||||
msgid "Attribute mode is only allowed for guest CPU"
|
||||
msgstr "El modo de atributo solo es permitido para la CPU del huésped"
|
||||
|
||||
msgid "Authentication Credentials not found"
|
||||
msgstr "No se han encontrado credenciales de autenticación"
|
||||
|
||||
msgid "Authentication failed"
|
||||
msgstr "Falló la autenticación"
|
||||
|
||||
@@ -1322,6 +1333,9 @@ msgstr "No se puede determinar ruta de dispositivo de globo"
|
||||
msgid "Cannot determine free memory"
|
||||
msgstr "No se puede determinar memoria libre"
|
||||
|
||||
msgid "Cannot determine system clock HZ"
|
||||
msgstr "No se puede determinar el reloj del sistema HZ"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot directly attach floppy %s"
|
||||
msgstr "No es posible asociar directamente disquetera %s"
|
||||
@@ -1532,6 +1546,14 @@ msgstr "No se puede leer dirección de socket '%s': %s "
|
||||
msgid "Cannot parse start time %s in %s"
|
||||
msgstr "No se puede analizar tiempo de inicio %s en %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot parse sys stat '%s'"
|
||||
msgstr "No se puede analizar el estado del sistema '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot parse user stat '%s'"
|
||||
msgstr "No se puede analizar el estatus del usuario '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Cannot plug '%s' interface into '%s' because it would overcommit 'average' "
|
||||
@@ -1679,6 +1701,10 @@ msgstr ""
|
||||
"No se puede especificar una etiqueta si el reetiquetado es turned off. model="
|
||||
"%s"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot stat %s"
|
||||
msgstr "No se puede obtener el estado de %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot undefine HostVirtualSwitch that has a '%s' port"
|
||||
msgstr ""
|
||||
@@ -1854,6 +1880,10 @@ msgstr "Close callback para dominio %s ya está registrada con otra conexión %p
|
||||
msgid "Command %s too long for destination"
|
||||
msgstr "El comando %s es demasiado extenso para el destino"
|
||||
|
||||
#, c-format
|
||||
msgid "Command '%s' is not found"
|
||||
msgstr "No se halló comando '%s'"
|
||||
|
||||
msgid "Commit aborted"
|
||||
msgstr "Envío interrumpido"
|
||||
|
||||
@@ -1969,6 +1999,26 @@ msgstr "El contenedor no está definido"
|
||||
msgid "Control groups not supported on this platform"
|
||||
msgstr "Los grupos de control no tienen soporte en esta plataforma"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller %d out of range"
|
||||
msgstr "El controlador %d está fuera de rango"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not enabled for group"
|
||||
msgstr "El controlador '%s' no está habilitado para grupo"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not mounted"
|
||||
msgstr "El controlador '%s' no está montado"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not wanted, but '%s' is co-mounted"
|
||||
msgstr "El controlador '%s' no se necesita, pero '%s' se co-montó"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' not mounted"
|
||||
msgstr "El controlador '%s' no está montado"
|
||||
|
||||
msgid "Controllers must use the 'ccid' address type"
|
||||
msgstr "Los controladores deben utilizar el tipo de dirección 'ccid'"
|
||||
|
||||
@@ -2161,6 +2211,9 @@ msgstr "No se encontró PhysicalNic con nombre '%s'"
|
||||
msgid "Could not find any 'network' element in status file"
|
||||
msgstr "No se pudo encontrar ningún elemento 'network' en archivo de estatus"
|
||||
|
||||
msgid "Could not find any mounted controllers"
|
||||
msgstr "No se pudo encontrar ningún controlador montado"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find compute resource specified in '%s'"
|
||||
msgstr "No se pudo hallar el recurso 'compute' especificado en '%s'"
|
||||
@@ -2178,6 +2231,10 @@ msgstr ""
|
||||
msgid "Could not find datastore with name '%s'"
|
||||
msgstr "No se pudo encontrar un almacenamiento de datos cuyo nombre sea '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find directory separator in %s"
|
||||
msgstr "No se pudo encontrar directorio para separador en %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find domain snapshot with internal name '%s'"
|
||||
msgstr ""
|
||||
@@ -2215,6 +2272,10 @@ msgstr "No se encontró NIC físico con dirección MAC '%s'"
|
||||
msgid "Could not find physical NIC with name '%s'"
|
||||
msgstr "No se encontró NIC físico con nombre '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find placement for controller %s at %s"
|
||||
msgstr "No es posible encontrar lugar para el controlador %s en %s "
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find snapshot with name '%s'"
|
||||
msgstr "No se pudo encontrar una captura instantánea con el nombre '%s'"
|
||||
@@ -2924,6 +2985,10 @@ msgstr "Dispositivo %s ya existe"
|
||||
msgid "Device %s detached\n"
|
||||
msgstr "Dispositivo %s desconectado\n"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s in use"
|
||||
msgstr "Dispositivo %s en uso"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s is already in use"
|
||||
msgstr "el nombre del puente '%s' ya está siendo utilizado."
|
||||
@@ -3810,6 +3875,10 @@ msgstr "Falló al iniciar transacción de cambio de network config"
|
||||
msgid "Failed to bind PCI device '%s' to %s"
|
||||
msgstr "Falló al asociar dispositivo PCI '%s' con %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to bind cgroup '%s' on '%s'"
|
||||
msgstr "No se pudo vincular cgroup '%s' en '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to bind mount directory %s to %s"
|
||||
msgstr "Falló al vincular el directorio de montaje %s a %s"
|
||||
@@ -3964,6 +4033,10 @@ msgstr "Falló al crear destino de vinculación %s"
|
||||
msgid "Failed to create bridge node in xml document"
|
||||
msgstr "Falló al crear nodo de puente en documento XML"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create controller %s for group"
|
||||
msgstr "No se pudo crear controlador %s para grupo"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create directory for '%s' dev '%s'"
|
||||
msgstr "No se pudo crear directorio para '%s' dev '%s'"
|
||||
@@ -4252,6 +4325,9 @@ msgstr "No se pudo generar un nuevo nombre para la interfaz %s"
|
||||
msgid "Failed to get %s minor number"
|
||||
msgstr "Falló al obtener el número menor de %s"
|
||||
|
||||
msgid "Failed to get PCI Config Address String"
|
||||
msgstr "Falló al obtener cadena de dirección de configuración PCI"
|
||||
|
||||
msgid "Failed to get PCI SYSFS file"
|
||||
msgstr "Falló al obtener el archivo PCI SYSFS"
|
||||
|
||||
@@ -4525,6 +4601,10 @@ msgstr "Falló al marcar el dominio %s como iniciado automáticamente"
|
||||
msgid "Failed to mkdir %s"
|
||||
msgstr "Falló al crear el directorio %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to mount %s on %s type %s"
|
||||
msgstr "No se pudo montar %s en %s tipo %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to mount %s on /dev"
|
||||
msgstr "No se pudo montar %s en /dev"
|
||||
@@ -6450,6 +6530,15 @@ msgstr "Memoria máxima, como entero escalado (predeterminado Kib)"
|
||||
msgid "Max memory:"
|
||||
msgstr "Memoria máxima:"
|
||||
|
||||
msgid "Maximum CPUs greater than specified machine type limit"
|
||||
msgstr ""
|
||||
"El número máximo de CPU es mayor que el límite de tipo de máquina "
|
||||
"especificado"
|
||||
|
||||
#, c-format
|
||||
msgid "Memory '%llu' must be less than %llu"
|
||||
msgstr "La memoria '%llu' debe ser menor que %llu"
|
||||
|
||||
msgid "Memory allocation failure"
|
||||
msgstr "Falla en en alojamiento de la memoria"
|
||||
|
||||
@@ -6554,6 +6643,10 @@ msgid "Missing '%s' property while looking for ManagedEntityStatus"
|
||||
msgstr ""
|
||||
"No se ha encontrado la propiedad '%s' cuando se buscaba ManagedEntityStatus"
|
||||
|
||||
#, c-format
|
||||
msgid "Missing '/' separator in cgroup mount '%s'"
|
||||
msgstr "Falta el separadro '/' en montaje de cgroup mount '%s'"
|
||||
|
||||
msgid "Missing 'cores' attribute in CPU topology"
|
||||
msgstr "No se encuentra atributo 'cores' en la topología de CPU "
|
||||
|
||||
@@ -6608,6 +6701,9 @@ msgstr "No se encuentra nombre de funcionalidad de CPU"
|
||||
msgid "Missing CPU model name"
|
||||
msgstr "No se encuentra el nombre del modelo de la CPU"
|
||||
|
||||
msgid "Missing CPU vendor name"
|
||||
msgstr "No se encuentra el nombre del vendedor de la CPU"
|
||||
|
||||
msgid "Missing ID parameter for domain object"
|
||||
msgstr "Falta parámetro de ID para objeto de domain"
|
||||
|
||||
@@ -6752,6 +6848,9 @@ msgstr ""
|
||||
msgid "Missing or invalid PVR value in CPU model %s"
|
||||
msgstr "Falta el valor PVR o el valor es inválido en el modelo de CPU %s"
|
||||
|
||||
msgid "Missing or invalid auth pointer"
|
||||
msgstr "Falta o es inválido el apuntador auth"
|
||||
|
||||
msgid "Missing ownerId data in JSON document"
|
||||
msgstr "Faltan datos de ownerId en documento JSON"
|
||||
|
||||
@@ -7191,6 +7290,9 @@ msgstr "No hay argumentos presentes para firma %s"
|
||||
msgid "No authentication callback available"
|
||||
msgstr "No se ha suministrado una retrollamada de autenticación."
|
||||
|
||||
msgid "No authentication callback provided."
|
||||
msgstr "No se ha suministrado una retrollamada de autenticación."
|
||||
|
||||
msgid "No authentication methods and credentials provided"
|
||||
msgstr "No se han provisto métodos de autenticación y credenciales"
|
||||
|
||||
@@ -8341,6 +8443,9 @@ msgstr "El índice de disco SCSI (analizado desde '%s') es demasiado extenso"
|
||||
msgid "SCSI host device doesn't support managed mode"
|
||||
msgstr "Dispositivo de host SCSI no soporta modo administrado"
|
||||
|
||||
msgid "SCSI passthrough is not supported by this version of qemu"
|
||||
msgstr "Paso SCSI no tiene soporte para esta versión de QEMU"
|
||||
|
||||
#, c-format
|
||||
msgid "SCSI unit index %d out of [0..6,8..15] range"
|
||||
msgstr ""
|
||||
@@ -9642,6 +9747,11 @@ msgstr "El dispositivo de USB %s ya está en uso"
|
||||
msgid "USB host device is missing bus/device information"
|
||||
msgstr "El dispositivo de equipo USB no posee información bus/dispositivo"
|
||||
|
||||
msgid "USB redirection booting is not supported by this version of QEMU"
|
||||
msgstr ""
|
||||
"El arranque de redirección de USB no está soportado por la versión de este "
|
||||
"QEMU"
|
||||
|
||||
msgid "USB redirection filter is not supported by this version of QEMU"
|
||||
msgstr "Este QEMU no soporta filtro de redirección USB "
|
||||
|
||||
@@ -9822,12 +9932,6 @@ msgstr "No es posible copiar manejo de archivo de socket"
|
||||
msgid "Unable to create %s"
|
||||
msgstr "No se puede crear %s"
|
||||
|
||||
msgid "Unable to create JSON formatter"
|
||||
msgstr "No se puede crear formateador de JSON"
|
||||
|
||||
msgid "Unable to create JSON parser"
|
||||
msgstr "No se puede crear lector de JSON"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to create LPAR. Reason: '%s'"
|
||||
msgstr "No es posible crear LPAR. El motivo: '%s'"
|
||||
@@ -9857,6 +9961,10 @@ msgstr "No se puede crear dispositivo de puente "
|
||||
msgid "Unable to create device %s"
|
||||
msgstr "No se puede crear dispositivo %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to create directory %s"
|
||||
msgstr "No se puede crear directorio %s"
|
||||
|
||||
msgid "Unable to create epoll fd"
|
||||
msgstr "No se puede crear FD epoll"
|
||||
|
||||
@@ -10302,9 +10410,6 @@ msgstr "No es posible abrir %s (%d)"
|
||||
msgid "Unable to open '%s'"
|
||||
msgstr "No es posible abrir '%s'"
|
||||
|
||||
msgid "Unable to open /proc/mounts"
|
||||
msgstr "No es posible abrir /proc/mounts"
|
||||
|
||||
msgid "Unable to open UNIX socket"
|
||||
msgstr "Incapaz de abrir el socket UNIX"
|
||||
|
||||
@@ -10599,6 +10704,10 @@ msgid "Unable to set VM logfile close-on-exec flag"
|
||||
msgstr ""
|
||||
"No es posible establecer marca de archivo de registro de MV close-on-exec"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to set bridge %s %s"
|
||||
msgstr "No se puede establecer puente %s %s"
|
||||
|
||||
msgid "Unable to set cloexec flag"
|
||||
msgstr "No se pudo establecer indicador cloexec"
|
||||
|
||||
@@ -10661,6 +10770,10 @@ msgstr "No se puede 'stat bind' source %s"
|
||||
msgid "Unable to stat bind target %s"
|
||||
msgstr "No se puede 'stat bind' target %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to symlink directory %s to %s"
|
||||
msgstr "No se puede 'symlink' el directorio %s a %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to truncate %s"
|
||||
msgstr "No es posible truncar %s"
|
||||
@@ -10790,6 +10903,9 @@ msgstr "Parámetro dconnuri inesperado con migración non-peer2peer"
|
||||
msgid "Unexpected disk sgio mode '%d'"
|
||||
msgstr "No se esperaba modo sgio de disco '%d' "
|
||||
|
||||
msgid "Unexpected error"
|
||||
msgstr "Error inesperado"
|
||||
|
||||
#, c-format
|
||||
msgid "Unexpected filesystem type %s"
|
||||
msgstr "Tipo de sistema de archivos inesperado %s"
|
||||
@@ -11279,6 +11395,9 @@ msgstr ""
|
||||
"La entrada VMX 'sched.cpu.affinity' contiene un %d, y este valor es "
|
||||
"demasiado extenso"
|
||||
|
||||
msgid "VNC WebSockets are not supported with this QEMU binary"
|
||||
msgstr "VNC WebSockets no tienen soporte con este binario QEMU"
|
||||
|
||||
msgid "VNC supports connected='keep' only"
|
||||
msgstr "VNC solo tiene soporta para connected='keep'"
|
||||
|
||||
@@ -11894,6 +12013,31 @@ msgstr "orden de arranque '%s' se utiliza más que una de dispositivo"
|
||||
msgid "booted"
|
||||
msgstr "iniciado"
|
||||
|
||||
msgid ""
|
||||
"booting from PCI devices assigned with VFIO is not supported with this "
|
||||
"version of qemu"
|
||||
msgstr ""
|
||||
"El arranque desde dispositivos PCI asignado con VFIO no tiene soporte con "
|
||||
"esta versión de QEMU"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned PCI devices is not supported with this version of qemu"
|
||||
msgstr ""
|
||||
"El arranque desde los dispositivos PCI no es compatible con la versión de "
|
||||
"qemu"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned SCSI devices is not supported with this version of qemu"
|
||||
msgstr ""
|
||||
"Arranque desde dispositivos asignados SCSI solo tiene soporte con esta "
|
||||
"versión de QEMU"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned USB devices is not supported with this version of qemu"
|
||||
msgstr ""
|
||||
"Arranque desde dispositivos USB asignados no tiene soporte con esta versión "
|
||||
"de QEMU"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned devices is only supported for PCI, USB and SCSI devices"
|
||||
msgstr ""
|
||||
@@ -12439,6 +12583,9 @@ msgstr "No se pueden obtener ayuda de seguridad %d (%s)"
|
||||
msgid "cannot get the host uuid"
|
||||
msgstr "no es posible obtener el uuid del equipo"
|
||||
|
||||
msgid "cannot get the path of MEMORY cgroup controller"
|
||||
msgstr "No se puede obtener ruta de controlador de MEMORY cgroup"
|
||||
|
||||
msgid "cannot get vCPU placement & pCPU time"
|
||||
msgstr "no es posible obtener el lugar de vCPU ni la hora pCPU"
|
||||
|
||||
@@ -12602,6 +12749,10 @@ msgstr "no e posible abrir el volumen '%s'"
|
||||
msgid "cannot parse %s version number in '%.*s'"
|
||||
msgstr "No se puede analizar el número de la versión %s en '%.*s'"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU map for %s architecture"
|
||||
msgstr "No es posible analizar el mapa de la CPU para la arquitectura %s"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU topology '%s'"
|
||||
msgstr "No es posible analizar la topología '%s' de la CPU"
|
||||
@@ -12694,10 +12845,6 @@ msgstr "No se puede leer parámetro interfaceid como un UUID"
|
||||
msgid "cannot parse io mode '%s'"
|
||||
msgstr "No se puede leer modo io '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse json %s: %s"
|
||||
msgstr "no es posible analizar json %s: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse nbd filename '%s'"
|
||||
msgstr "No se puede leer nombre de archivo nbd '%s'"
|
||||
@@ -13141,6 +13288,14 @@ msgstr "cellNum en %s debe ser menor que o igual a %d"
|
||||
msgid "cellNum in %s only accepts %d as a negative value"
|
||||
msgstr "cellNum en %s únicamente acepta %d como un valor negativo"
|
||||
|
||||
#, c-format
|
||||
msgid "cfs_period '%llu' must be in range (1000, 1000000)"
|
||||
msgstr "cfs_period '%llu' debe estar en el rango (1000, 1000000)"
|
||||
|
||||
#, c-format
|
||||
msgid "cfs_quota '%lld' must be in range (1000, %llu)"
|
||||
msgstr "cfs_quota '%lld' debe estar en el rango (1000, %llu)"
|
||||
|
||||
msgid "cgroup CPU controller is not mounted"
|
||||
msgstr "No está montado el controlador de CPU cgroup "
|
||||
|
||||
@@ -13289,6 +13444,10 @@ msgstr "Configuración"
|
||||
msgid "config data file to import from"
|
||||
msgstr "configuración de datos de archivo desde donde importar"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s not a string"
|
||||
msgstr "config value %s not a string"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s was malformed"
|
||||
msgstr "el valor de configuración %s había sido creado erróneamente"
|
||||
@@ -13297,6 +13456,10 @@ msgstr "el valor de configuración %s había sido creado erróneamente"
|
||||
msgid "config value %s was missing"
|
||||
msgstr "no se encontraba el valor de configuración %s"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s was not a string"
|
||||
msgstr "el valor de configuración %s no era una cadena"
|
||||
|
||||
msgid "configuration file syntax error"
|
||||
msgstr "error de sintaxis en el archivo de configuración"
|
||||
|
||||
@@ -14999,6 +15162,9 @@ msgstr "No se pudo analizar lista de dispositivo QEMU"
|
||||
msgid "failed to parse value of %s"
|
||||
msgstr "No se pudo leer valor de %s"
|
||||
|
||||
msgid "failed to parse xml document"
|
||||
msgstr "Falló al intentar analizar el documento XML"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to pivot job for disk %s"
|
||||
msgstr "Falló al restablecer dispositivo de bloque '%s'"
|
||||
@@ -15069,6 +15235,9 @@ msgstr "Falló la recuperación de credenciales"
|
||||
msgid "failed to retrieve decision to accept host key"
|
||||
msgstr "Falló la recuperación de decisión para aceptar clave de host"
|
||||
|
||||
msgid "failed to retrieve password"
|
||||
msgstr "No se pudo recuperar contraseña"
|
||||
|
||||
msgid "failed to retrieve private key passphrase: callback has failed"
|
||||
msgstr ""
|
||||
"Falló la recuperación de frase de paso de llave privada: falló retrollamada"
|
||||
@@ -15567,6 +15736,9 @@ msgstr "Tipo de concentrador %s no tiene soporte"
|
||||
msgid "hypervisor connection URI"
|
||||
msgstr "conexión URI del hipervisor"
|
||||
|
||||
msgid "hypervisor lacks deviceboot feature"
|
||||
msgstr "Hipervisor carece de función deviceboot"
|
||||
|
||||
msgid "iSCSI storage pool does not support volume creation"
|
||||
msgstr "Grupo de almacenaje iSCSI no soporta la creación de volumen"
|
||||
|
||||
@@ -16732,6 +16904,10 @@ msgid "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
|
||||
msgstr ""
|
||||
"mem(Suspender para RAM), disk(Suspender para Disk), hybrid(Suspensión Hybrid)"
|
||||
|
||||
#, c-format
|
||||
msgid "memballoon unsupported with address type '%s'"
|
||||
msgstr "memballoon no tiene soporte con tipo de dirección '%s'"
|
||||
|
||||
msgid "memory attributes: [file=]name[,snapshot=type]"
|
||||
msgstr "atributos de memoria: [file=]name[,snapshot=type]"
|
||||
|
||||
@@ -17660,6 +17836,9 @@ msgstr "No se ha suministrado una ruta de dispositivo de bloque para '%s'"
|
||||
msgid "no call waiting for reply with prog %d vers %d serial %d"
|
||||
msgstr "No hay llamada esperando respuesta con prog %d vers %d serial %d"
|
||||
|
||||
msgid "no callback provided"
|
||||
msgstr "no se ha suministrado una retrollamada"
|
||||
|
||||
msgid "no client username was found"
|
||||
msgstr "No se ha encontrado un nombre de usuario de cliente"
|
||||
|
||||
@@ -17687,6 +17866,10 @@ msgid "no disk format for %s and probing is disabled"
|
||||
msgstr ""
|
||||
"no existe un formato de disco para %s y la comprobación está deshabilitada"
|
||||
|
||||
#, c-format
|
||||
msgid "no disk found with alias %s"
|
||||
msgstr "no se ha encontrado un disco con el apodo %s"
|
||||
|
||||
#, c-format
|
||||
msgid "no disk named '%s'"
|
||||
msgstr "No hay disco llamado '%s'"
|
||||
@@ -19830,6 +20013,9 @@ msgstr "No se puede realizar filtraje de instantánea"
|
||||
msgid "unable to poll on child"
|
||||
msgstr "No se pudo sondear en hijo"
|
||||
|
||||
msgid "unable to probe for add-fd"
|
||||
msgstr "No se puede sondear para add-fd"
|
||||
|
||||
msgid "unable to read child stderr"
|
||||
msgstr "No se puede leer stderr de hijo"
|
||||
|
||||
|
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.3.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2018-04-24 06:15+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Estonian (http://www.transifex.com/projects/p/fedora/language/"
|
||||
@@ -18,4 +18,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.3.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2018-04-24 06:19+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/fedora/"
|
||||
@@ -18,4 +18,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Persian\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -8,9 +8,9 @@
|
||||
# Toni Rantala <trantalafilo@gmail.com>, 2017. #zanata
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2017-03-26 10:24+0000\n"
|
||||
"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
|
||||
"Language-Team: Finnish (http://www.transifex.com/projects/p/fedora/language/"
|
||||
@@ -20,7 +20,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Filipino\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -21,9 +21,9 @@
|
||||
# Thomas Canniot <thomas.canniot@laposte.net>, 2007
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2015-02-26 09:47+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: French <trans-fr@lists.fedoraproject.org>\n"
|
||||
@@ -32,7 +32,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Friulian\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Irish\n"
|
||||
@@ -17,4 +17,4 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : "
|
||||
"4\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.3.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2018-04-24 06:22+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Galician (http://www.transifex.com/projects/p/fedora/language/"
|
||||
@@ -18,4 +18,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
212
po/gu.mini.po
212
po/gu.mini.po
@@ -12,9 +12,9 @@
|
||||
# sweta <swkothar@redhat.com>, 2013-2014
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2015-02-23 06:16+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Gujarati (http://www.transifex.com/projects/p/libvirt/"
|
||||
@@ -24,7 +24,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -286,6 +286,9 @@ msgstr " નેટવર્કીંગ:"
|
||||
msgid " Storage:"
|
||||
msgstr " સંગ્રહ:"
|
||||
|
||||
msgid " block_io_throttle reply was missing device list"
|
||||
msgstr " block_io_throttle જવાબ એ ગુમ થયેલ ઉપકરણ યાદી હતી"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"!!! SSH HOST KEY VERIFICATION FAILED !!!: Identity of host '%s:%d' differs "
|
||||
@@ -586,6 +589,9 @@ msgstr "guest-get-vcpus નાં જવાબમાં 'logical-id' ગેર
|
||||
msgid "'online' missing in reply of guest-get-vcpus"
|
||||
msgstr "guest-get-vcpus નાં જવાબમાં 'ઓનલાઇન' ગેરહાજર"
|
||||
|
||||
msgid "'parent' for vHBA not specified, and cannot find one on this host"
|
||||
msgstr "vHBA માટે 'મુખ્ય' સ્પષ્ટ થયેલ નથી, અને આ યજમાન પર એકને શોધી શકાતુ નથી"
|
||||
|
||||
msgid "'peak' and 'burst' require 'average' attribute"
|
||||
msgstr "'પીક' અને 'બર્સ્ટ' ને 'સરેરાશ' ગુણધર્મની જરૂર છે"
|
||||
|
||||
@@ -923,6 +929,9 @@ msgstr "NAT '%s' નો પ્રયત્ન થયેલ છે. NAT ફક્
|
||||
msgid "Attribute mode is only allowed for guest CPU"
|
||||
msgstr "ગુણધર્મ સ્થિતિની ફક્ત મહેમાન CPU માટે પરવાનગી મળેલ છે"
|
||||
|
||||
msgid "Authentication Credentials not found"
|
||||
msgstr "સત્તાધિકરણ શ્રેય મળ્યો નથી"
|
||||
|
||||
msgid "Authentication failed"
|
||||
msgstr "સત્તાધિકરણ નિષ્ફળ"
|
||||
|
||||
@@ -1400,6 +1409,9 @@ msgstr "બલુન ઉપકરણ પાથને નક્કી કરી
|
||||
msgid "Cannot determine free memory"
|
||||
msgstr "મુક્ત મેમરી નક્કી કરી શકાતી નથી"
|
||||
|
||||
msgid "Cannot determine system clock HZ"
|
||||
msgstr "સિસ્ટમ ઘડિયાળ HZ ને નક્કી કરી શકાતુ નથી"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot directly attach floppy %s"
|
||||
msgstr "ફ્લોપી %s ને સીધુ જ જોડી શકાતુ નથી"
|
||||
@@ -1607,6 +1619,14 @@ msgstr "સોકેટ સરનામાં '%s' નુ પદચ્છેદ
|
||||
msgid "Cannot parse start time %s in %s"
|
||||
msgstr "%s માં શરૂઆત સમય %s નું પદચ્છેદન કરી શકાતુ નથી"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot parse sys stat '%s'"
|
||||
msgstr "સિસ્ટમ સ્થિતિ '%s' નું પદચ્છેદન કરી શકાતુ નથી"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot parse user stat '%s'"
|
||||
msgstr "વપરાશકર્તા સ્થિતિ '%s' નું પદચ્છેદન કરી શકાતુ નથી"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Cannot plug '%s' interface into '%s' because it would overcommit 'average' "
|
||||
@@ -1746,6 +1766,10 @@ msgstr "પ્રારંભ ન થયેલ CURL સંચાલનને વ
|
||||
msgid "Cannot specify a label if relabelling is turned off. model=%s"
|
||||
msgstr "લેબલને સ્પષ્ટ કરી શકાતુ નથી જો પુન:લેબલ કરવાનું બંધ હોય તો. મોડલ=%s"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot stat %s"
|
||||
msgstr "સ્થિતિ %s ને કરી શકાતી નથી"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot undefine HostVirtualSwitch that has a '%s' port"
|
||||
msgstr "HostVirtualSwitch ને અવ્યાખ્યાયિત કરી શકાતુ નથી કે જેની પાસે '%s' પોર્ટ છે"
|
||||
@@ -1919,6 +1943,10 @@ msgstr "ડોમેઇન %s માટે બંધ કોલબેક બી
|
||||
msgid "Command %s too long for destination"
|
||||
msgstr "આદેશ %s એ લક્ષ્ય માટે ઘણું લાંબુ છે"
|
||||
|
||||
#, c-format
|
||||
msgid "Command '%s' is not found"
|
||||
msgstr "આદેશ '%s' મળ્યુ નથી"
|
||||
|
||||
msgid "Commit aborted"
|
||||
msgstr "મોકલવાનું અટકાવેલ છે"
|
||||
|
||||
@@ -2028,6 +2056,26 @@ msgstr "પાત્ર એ વ્યાખ્યાયિત થયેલ ન
|
||||
msgid "Control groups not supported on this platform"
|
||||
msgstr "આ પ્લેટફોર્મ પર નિયંત્રણ જૂથ આધારભૂત નથી"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller %d out of range"
|
||||
msgstr "નિયંત્રક %d એ સીમાની બહાર છે"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not enabled for group"
|
||||
msgstr "નિયંત્રક '%s' એ જૂથ માટે સક્રિય થયેલ નથી"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not mounted"
|
||||
msgstr "નિયંત્રક '%s' માઉન્ટ થયેલ નથી"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not wanted, but '%s' is co-mounted"
|
||||
msgstr "નિયંત્રક '%s' જોઇતુ નથી, પરંતુ '%s' સહ માઉન્ટ થયેલ છે"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' not mounted"
|
||||
msgstr "નિયંત્રક '%s' માઉન્ટ થયેલ નથી"
|
||||
|
||||
msgid "Controllers must use the 'ccid' address type"
|
||||
msgstr "નિયંત્રકોને 'ccid' સરનામાં પ્રકારને વાપરવુ જ જોઇએ"
|
||||
|
||||
@@ -2221,6 +2269,9 @@ msgstr "નામ '%s' સાથે PhysicalNic ને શોધી શક્ય
|
||||
msgid "Could not find any 'network' element in status file"
|
||||
msgstr "સ્થિતિ ફાઇલમાં કોઇપણ 'નેટવર્ક' ઘટકને શોધી શક્યા નહિં"
|
||||
|
||||
msgid "Could not find any mounted controllers"
|
||||
msgstr "કોઇપણ માઉન્ટ થયેલ નિયંત્રકોને શોધી શક્યા નહિં"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find compute resource specified in '%s'"
|
||||
msgstr "'%s' માં સ્પષ્ટ થયેલ સ્ત્રોતની ગણતરી કરી શક્યા નહિં"
|
||||
@@ -2237,6 +2288,10 @@ msgstr "ચોક્કસ પાથ '%s' ને સમાવતુ માહિ
|
||||
msgid "Could not find datastore with name '%s'"
|
||||
msgstr "નામ '%s' સાથે datastore ને શોધી શક્યા નહિં"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find directory separator in %s"
|
||||
msgstr "%s માં ડિરેક્ટરી વિભાજક શોધી શક્યા નહિં"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find domain snapshot with internal name '%s'"
|
||||
msgstr "ઇન્ટરનેટ નામ '%s' સાથે ડોમેઇન સ્નેપશોટને શોધી શક્યા નહિં"
|
||||
@@ -2272,6 +2327,10 @@ msgstr "MAC સરનામાં '%s' સાથે ભૌતિક NIC ને
|
||||
msgid "Could not find physical NIC with name '%s'"
|
||||
msgstr "નામ '%s' સાથે ભૌતિક NIC ને શોધી શક્યા નહિં"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find placement for controller %s at %s"
|
||||
msgstr "%s પર નિયંત્રક %s માટે સ્થાનને શોધી શક્યા નહિં"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find snapshot with name '%s'"
|
||||
msgstr "નામ '%s' સાથે સ્નેપશોટને શોધી શક્યા નહિં"
|
||||
@@ -2951,6 +3010,10 @@ msgstr "ઉપકરણ %s પહેલેથી અસ્તિત્વમા
|
||||
msgid "Device %s detached\n"
|
||||
msgstr "ઉપકરણ %s અલગ કરાયેલ છે\n"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s in use"
|
||||
msgstr "વપરાશમાં ઉપકરણ %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s is already in use"
|
||||
msgstr "ઉપકરણ %s પહેલેથી જ વપરાશમાં છે"
|
||||
@@ -3817,6 +3880,10 @@ msgstr "નેટવર્ક રૂપરેખાંકન બદલાવ સ
|
||||
msgid "Failed to bind PCI device '%s' to %s"
|
||||
msgstr "'%s' માટે PCI ઉપકરણ '%s' ને બાંધવામાં નિષ્ફળતા"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to bind cgroup '%s' on '%s'"
|
||||
msgstr "'%s' પર cgroup '%s' બાઇન્ડ કરવામાં નિષ્ફળતા"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to bind mount directory %s to %s"
|
||||
msgstr "%s માં માઉન્ટ ડિરેક્ટરી %s ને બાંધવામાં નિષ્ફળતા"
|
||||
@@ -3975,6 +4042,10 @@ msgstr "બાઇન્ડ લક્ષ્ય %s ને બનાવવામા
|
||||
msgid "Failed to create bridge node in xml document"
|
||||
msgstr "xml દસ્તાવેજમાં બ્રિજ નોડને બનાવવામાં નિષ્ફળતા"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create controller %s for group"
|
||||
msgstr "જૂથ માટે નિયંત્રક %s ને બનાવવામાં નિષ્ફળતા"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create directory for '%s' dev '%s'"
|
||||
msgstr "'%s' dev '%s' માટે ડિરેક્ટરીને બનાવવામાં નિષ્ફળતા"
|
||||
@@ -4258,6 +4329,9 @@ msgstr "ઇન્ટરફેસ %s માટે નવું નામ પે
|
||||
msgid "Failed to get %s minor number"
|
||||
msgstr "%s ગૌણ સંખ્યાને મેળવવામાં નિષ્ફળતા"
|
||||
|
||||
msgid "Failed to get PCI Config Address String"
|
||||
msgstr "PCI રૂપરેખા સરનામુ શબ્દમાળાને મેળવવામાં નિષ્ફળતા"
|
||||
|
||||
msgid "Failed to get PCI SYSFS file"
|
||||
msgstr "PCI SYSFS ફાઇલને મેળવવામાં નિષ્ફળતા"
|
||||
|
||||
@@ -4533,6 +4607,10 @@ msgstr "ડોમેઈન %s ને આપોઆપ શરૂથયેલ ત
|
||||
msgid "Failed to mkdir %s"
|
||||
msgstr "mkdir %s કરવામાં નિષ્ફળ"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to mount %s on %s type %s"
|
||||
msgstr "%s પ્રકાર %s પર %s ને માઉન્ટ કરવામાં નિષ્ફળ"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to mount %s on /dev"
|
||||
msgstr "/dev પર %s ને માઉન્ટ કરવામાં નિષ્ફળતા"
|
||||
@@ -6493,9 +6571,16 @@ msgstr "મહત્તમ મેમરી, માપાંકિત પૂર
|
||||
msgid "Max memory:"
|
||||
msgstr "મહત્તમ મેમરી:"
|
||||
|
||||
msgid "Maximum CPUs greater than specified machine type limit"
|
||||
msgstr "ખાસ મશીન પ્રકાર મર્યાદા કરતા વધારે મહત્તમ CPUs"
|
||||
|
||||
msgid "Memory"
|
||||
msgstr "મેમરી"
|
||||
|
||||
#, c-format
|
||||
msgid "Memory '%llu' must be less than %llu"
|
||||
msgstr "મેમરી '%llu' એ %llu કરતા ઓછી હોવી જ જોઇએ"
|
||||
|
||||
msgid "Memory allocation failure"
|
||||
msgstr "મેમરી સોંપણી નિષ્ફળ"
|
||||
|
||||
@@ -6599,6 +6684,10 @@ msgstr "ગેરહાજર '%s' ગુણધર્મ"
|
||||
msgid "Missing '%s' property while looking for ManagedEntityStatus"
|
||||
msgstr "ગુમ થયેલ '%s' ગુણધર્મ જ્યારે ManagedEntityStatus માટે જોઇ રહ્યા છે"
|
||||
|
||||
#, c-format
|
||||
msgid "Missing '/' separator in cgroup mount '%s'"
|
||||
msgstr "cgroup માઉન્ટ '%s' માં ગુમ થયેલ '/' વિભાજક"
|
||||
|
||||
msgid "Missing 'cores' attribute in CPU topology"
|
||||
msgstr "CPU ટોપૉલોજી માં ગેરહાજર 'cores' ગુણધર્મ"
|
||||
|
||||
@@ -6653,6 +6742,9 @@ msgstr "ગુમ થયેલ CPU લક્ષણ નામ"
|
||||
msgid "Missing CPU model name"
|
||||
msgstr "ગેરહાજર CPU મોડલ નામ"
|
||||
|
||||
msgid "Missing CPU vendor name"
|
||||
msgstr "ગુમ થયેલ CPU વિક્રેતા નામ"
|
||||
|
||||
msgid "Missing ID parameter for domain object"
|
||||
msgstr "ડોમેઇન ઑબ્જેક્ટ માટે ગેરહાજર ID પરિમાણ"
|
||||
|
||||
@@ -6793,6 +6885,9 @@ msgstr ""
|
||||
msgid "Missing or invalid PVR value in CPU model %s"
|
||||
msgstr "CPU મોડલ %s માં ગુમ થયેલ અથવા અયોગ્ય PVR કિંમત"
|
||||
|
||||
msgid "Missing or invalid auth pointer"
|
||||
msgstr "ગેરહાજર અથવા અયોગ્ય સત્તાધિકરણ નિર્દેશક"
|
||||
|
||||
msgid "Missing ownerId data in JSON document"
|
||||
msgstr "JSON દસ્તાવેજમાં ગેરહાજર ownerId માહિતી"
|
||||
|
||||
@@ -7203,6 +7298,9 @@ msgstr "હસ્તાક્ષર %s માચે દલીલો હાજર
|
||||
msgid "No authentication callback available"
|
||||
msgstr "સત્તાધિકરણ કોલબેક ઉપલબ્ધ નથી"
|
||||
|
||||
msgid "No authentication callback provided."
|
||||
msgstr "સત્તાધિકરણ કોલબેક પૂરુ પાડેલ નથી."
|
||||
|
||||
msgid "No authentication methods and credentials provided"
|
||||
msgstr "સત્તાધિકરણ પદ્દતિઓ અને શ્રેય પૂરો પાડેલ નથી"
|
||||
|
||||
@@ -8312,6 +8410,9 @@ msgstr "SCSI ડિસ્ક અનુક્રમણિકા ('%s' માં
|
||||
msgid "SCSI host device doesn't support managed mode"
|
||||
msgstr "SCSI યજમાન ઉપકરણ એ સંચાલિત થયેલ સ્થિતિને આધાર આપતુ નથી"
|
||||
|
||||
msgid "SCSI passthrough is not supported by this version of qemu"
|
||||
msgstr "SCSI પાસથ્રુ એ qemu ની આવૃત્તિ દ્દારા આધારભૂત નથી"
|
||||
|
||||
#, c-format
|
||||
msgid "SCSI unit index %d out of [0..6,8..15] range"
|
||||
msgstr "[૦..૬,૮..૧૫] સીમાની બહાર SCSI એકમ અનુક્રમણિકા %d"
|
||||
@@ -9577,6 +9678,9 @@ msgstr "USB ઉપકરણ %s પહેલેથી વપરાશમાં
|
||||
msgid "USB host device is missing bus/device information"
|
||||
msgstr "USB યજમાન ઉપકરણ એ ગુમ થયેલ બસ/ઉપકરણ જાણકારી છે"
|
||||
|
||||
msgid "USB redirection booting is not supported by this version of QEMU"
|
||||
msgstr "USB દિશામાન બુટીંગ QEMU ની આ આવૃત્તિ દ્દારા આધારભૂત નથી"
|
||||
|
||||
msgid "USB redirection filter is not supported by this version of QEMU"
|
||||
msgstr "USB દિશામાન ફિલ્ટર આ QEMU ની આવૃત્તિ દ્દારા આધારભૂત નથી"
|
||||
|
||||
@@ -9764,12 +9868,6 @@ msgstr "સોકેટ ફાઇલ સંચાલનની નકલ કર
|
||||
msgid "Unable to create %s"
|
||||
msgstr "%s ને બનાવવાનું અસમર્થ"
|
||||
|
||||
msgid "Unable to create JSON formatter"
|
||||
msgstr "JSON ફોર્મેટરને બનાવવાનું અસમર્થ"
|
||||
|
||||
msgid "Unable to create JSON parser"
|
||||
msgstr "JSON પાર્સરને બનાવવાનું અસમર્થ"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to create LPAR. Reason: '%s'"
|
||||
msgstr "LPAR ને બનાવવાનું અસમર્થ. કારણ: '%s'"
|
||||
@@ -9799,6 +9897,10 @@ msgstr "બ્રિજ ઉપકરણને બનાવવાનું અસ
|
||||
msgid "Unable to create device %s"
|
||||
msgstr "ઉપકરણ %s ને બનાવવાનું અસમર્થ"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to create directory %s"
|
||||
msgstr "ડિરેક્ટરી %s ને બનાવવાનું અસમર્થ"
|
||||
|
||||
msgid "Unable to create epoll fd"
|
||||
msgstr "epoll fd ને બનાવવાનું અસમર્થ"
|
||||
|
||||
@@ -10277,9 +10379,6 @@ msgstr "'%s' ખોલવામાં અસમર્થ"
|
||||
msgid "Unable to open /dev/loop-control"
|
||||
msgstr "/dev/loop-control ખોલવામાં અસમર્થ"
|
||||
|
||||
msgid "Unable to open /proc/mounts"
|
||||
msgstr "/proc/mounts ખોલવાનું અસમર્થ"
|
||||
|
||||
msgid "Unable to open UNIX socket"
|
||||
msgstr "UNIX સોકેટને ખોલવાનુ અસમર્થ"
|
||||
|
||||
@@ -10584,6 +10683,10 @@ msgstr "આ પ્લેટફોર્મ પર %s પર STP ને સુય
|
||||
msgid "Unable to set VM logfile close-on-exec flag"
|
||||
msgstr "VM લોગફાઇલ close-on-exec flag ને સુયોજિત કરવામાં નિષ્ફળ"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to set bridge %s %s"
|
||||
msgstr "બ્રિજ %s %s ને સુયોજિત કરવાનું અસમર્થ"
|
||||
|
||||
msgid "Unable to set cloexec flag"
|
||||
msgstr "cloexec ફ્લેગ સુયોજિત કરવાનું અસમર્થ"
|
||||
|
||||
@@ -10646,6 +10749,10 @@ msgstr "બાઇન્ડ સ્ત્રોત %s નાં આંકડા
|
||||
msgid "Unable to stat bind target %s"
|
||||
msgstr "બાઇન્ડ લક્ષ્ય %s નાં આંકડા મેળવવાનું અસમર્થ"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to symlink directory %s to %s"
|
||||
msgstr "%s માટે ઉપકરણ %s ને પરવાનગી આપવાનું અસમર્થ"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to truncate %s"
|
||||
msgstr "%s ખોલવામાં નિષ્ફળ"
|
||||
@@ -10777,6 +10884,13 @@ msgstr "non-peer2peer સ્થળાંતર સાથે અનિચ્છ
|
||||
msgid "Unexpected disk sgio mode '%d'"
|
||||
msgstr "અનિચ્છનીય ડિસ્ક sgio સ્થિતિ '%d'"
|
||||
|
||||
msgid "Unexpected error"
|
||||
msgstr "અનિચ્છનીય ભૂલ"
|
||||
|
||||
#, c-format
|
||||
msgid "Unexpected error: (%s) '%s'"
|
||||
msgstr "અનિચ્છનીય ભૂલ: (%s) '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "Unexpected filesystem type %s"
|
||||
msgstr "અનિચ્છનીય ફાઇલસિસ્ટમ પ્રકાર %s"
|
||||
@@ -11290,6 +11404,9 @@ msgstr "VMX નોંધણી 'sched.cpu.affinity' એ %d ને સમાવ
|
||||
msgid "VNC"
|
||||
msgstr "VNC"
|
||||
|
||||
msgid "VNC WebSockets are not supported with this QEMU binary"
|
||||
msgstr "VNC વેબસોકેટ એ આ QEMU બાઇનરી સાથે આધારભૂત નથી"
|
||||
|
||||
msgid "VNC supports connected='keep' only"
|
||||
msgstr "VNC ફક્ત જોડાયેલ='keep' ને આધાર આપે છે"
|
||||
|
||||
@@ -11900,6 +12017,23 @@ msgstr "એક ઉપકરણ કરતા વધારે માટે વા
|
||||
msgid "booted"
|
||||
msgstr "બુટ થયેલ"
|
||||
|
||||
msgid ""
|
||||
"booting from PCI devices assigned with VFIO is not supported with this "
|
||||
"version of qemu"
|
||||
msgstr "VFIO સાથે સોંપેલ PCI ઉપકરણોમાંથી બુટીંગ એ આ qemu ની આવૃત્તિ સાથે આધારભૂત નથી"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned PCI devices is not supported with this version of qemu"
|
||||
msgstr "સોંપેલ PCI ઉપકરણોને બુટ કરવાનું આ qemu ની આ આવૃત્તિ સાથે આધારભૂત નથી"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned SCSI devices is not supported with this version of qemu"
|
||||
msgstr "સોંપેલ SCSI ઉપકરણોમાંથી બુટીંગ એ qemu ની આ આવૃત્તિ સાથે આધારભૂત નથી"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned USB devices is not supported with this version of qemu"
|
||||
msgstr "સોંપેલ USB ઉપકરણો માંથી બુટ કરવાનું આ qemu ની આ આવૃત્તિ સાથે આધારભૂત નથી"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned devices is only supported for PCI, USB and SCSI devices"
|
||||
msgstr "સોંપેલ ઉપકરણોમાંથી બુટીંગ એ ફક્ત PCI, USB અને SCSI ઉપકરણો માટે આધારભૂત છે"
|
||||
@@ -12458,6 +12592,9 @@ msgstr "સ્નેપશોટ ids ને મેળવી શકાતુ ન
|
||||
msgid "cannot get the host uuid"
|
||||
msgstr "યજમાન uuid ને મેળવી શકાતુ નથી"
|
||||
|
||||
msgid "cannot get the path of MEMORY cgroup controller"
|
||||
msgstr "MEMORY cgroup નિયંત્રકનો પાથ મેળવી શકાતો નથી"
|
||||
|
||||
msgid "cannot get vCPU placement & pCPU time"
|
||||
msgstr "vCPU સ્થાન અને pCPU સમયને મેળવી શકાતુ નથી"
|
||||
|
||||
@@ -12632,6 +12769,10 @@ msgstr " %s આવૃત્તિ નંબર નું '%.*s'માં પદ
|
||||
msgid "cannot parse CPU data"
|
||||
msgstr "CPU માહિતીનું પદચ્છેદન કરી શકાતુ નથી"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU map for %s architecture"
|
||||
msgstr "%s આર્કિટેક્ચર માટે CPU મેપ નું પદચ્છેજન કરી શકાતુ નથી"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU topology '%s'"
|
||||
msgstr "CPU ગણતરી '%s' નું પદચ્છેદન કરી શકાતુ નથી"
|
||||
@@ -12723,10 +12864,6 @@ msgstr "uuid તરીકે interfaceid પરિમાણનુ પદચ્
|
||||
msgid "cannot parse io mode '%s'"
|
||||
msgstr "io સ્થિતિ '%s' નુ પદચ્છેદન કરી શકાતુ નથી"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse json %s: %s"
|
||||
msgstr "json %s નું પદચ્છેદન કરી શકાતુ નથી: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse nbd filename '%s'"
|
||||
msgstr "nbd ફાઇલનામ '%s' નું પદચ્છેદન કરી શકાતુ નથી"
|
||||
@@ -13162,6 +13299,14 @@ msgstr "%s માં cellNum એ %d કરતા ઓછુ અથવા સર
|
||||
msgid "cellNum in %s only accepts %d as a negative value"
|
||||
msgstr "%s માં cellNum એ ફક્ત નકારાત્મક કિંમત તરીકે %d ને સ્વીકારે છે"
|
||||
|
||||
#, c-format
|
||||
msgid "cfs_period '%llu' must be in range (1000, 1000000)"
|
||||
msgstr "cfs_period '%llu' એ સીમામાં હોવુ જ જોઇએ (1000, 1000000)"
|
||||
|
||||
#, c-format
|
||||
msgid "cfs_quota '%lld' must be in range (1000, %llu)"
|
||||
msgstr "cfs_quota '%lld' એ સીમાંમા હોવુ જ જોઇએ (1000, %llu)"
|
||||
|
||||
msgid "cgroup CPU controller is not mounted"
|
||||
msgstr "cgroup CPU નિયંત્રક માઉન્ટ થયેલ નથી"
|
||||
|
||||
@@ -13313,6 +13458,10 @@ msgstr "રૂપરેખાંકન"
|
||||
msgid "config data file to import from"
|
||||
msgstr "તેમાંથી આયાત કરવા માટે રૂપરેખાંકન માહિતી ફાઇલ"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s not a string"
|
||||
msgstr "રૂપરેખાંકન કિંમત %s શબ્દમાળા નથી"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s was malformed"
|
||||
msgstr "રૂપરેખાંકન કિંમત %s મેલફોર્મ થયેલ છે"
|
||||
@@ -13321,6 +13470,10 @@ msgstr "રૂપરેખાંકન કિંમત %s મેલફોર્
|
||||
msgid "config value %s was missing"
|
||||
msgstr "રૂપરેખાંકન કિંમત %s ગુમ થયેલ હતી"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s was not a string"
|
||||
msgstr "રૂપરેખાંકન કિંમત %s એ શબ્દમાળા ન હતી"
|
||||
|
||||
msgid "configuration file syntax error"
|
||||
msgstr "રૂપરેખાંકન ફાઈલ વાક્યરચના ભૂલ"
|
||||
|
||||
@@ -15019,6 +15172,9 @@ msgstr "qemu ઉપકરણ યાદીનું પદચ્છેદન ક
|
||||
msgid "failed to parse value of %s"
|
||||
msgstr "%s ની કિંમતને પદચ્છેદન કરવામાં નિષ્ફળતા"
|
||||
|
||||
msgid "failed to parse xml document"
|
||||
msgstr "xml દસ્તાવેજનું પદચ્છેદન કરવામાં નિષ્ફળ"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to pivot job for disk %s"
|
||||
msgstr "ડિસ્ક %s માટે પિવોટ જોબ કરવામાં નિષ્ફળતા"
|
||||
@@ -15100,6 +15256,9 @@ msgstr "શ્રેયને પ્રાપ્ત કરવામાં નિ
|
||||
msgid "failed to retrieve decision to accept host key"
|
||||
msgstr "યજમાનનામને નક્કી કરવામાં નિષ્ફળ"
|
||||
|
||||
msgid "failed to retrieve password"
|
||||
msgstr "પાસવર્ડને પ્રાપ્ત કરવામાં નિષ્ફળતા"
|
||||
|
||||
msgid "failed to retrieve private key passphrase: callback has failed"
|
||||
msgstr "ખાનગી કી પાસફ્રેજને પ્રાપ્ત કરવામાં નિષ્ફળતા: કોલબૅક નિષ્ફળ થયેલ છે"
|
||||
|
||||
@@ -15592,6 +15751,9 @@ msgstr "hub પ્રકાર %s આધારભૂત નથી"
|
||||
msgid "hypervisor connection URI"
|
||||
msgstr "હાયપરવિઝર જોડાણ URI"
|
||||
|
||||
msgid "hypervisor lacks deviceboot feature"
|
||||
msgstr "હાઇપરવિઝરમાં ઉપકરણબુટ લક્ષણનો અભાવ છે"
|
||||
|
||||
msgid "iSCSI storage pool does not support volume creation"
|
||||
msgstr "iSCSI સંગ્રહ pool એ વોલ્યુમ બનાવવા માટે આધાર આપતુ નથી"
|
||||
|
||||
@@ -16039,6 +16201,10 @@ msgstr "અયોગ્ય કડી સ્થિતિ '%s'"
|
||||
msgid "invalid logical block size '%s'"
|
||||
msgstr "અયોગ્ય લૉજિકલ બ્લોક માપ '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "invalid lxc.id_map: '%s'"
|
||||
msgstr "અયોગ્ય lxc.id_map: '%s'"
|
||||
|
||||
msgid "invalid mode"
|
||||
msgstr "અયોગ્ય સ્થિતિ"
|
||||
|
||||
@@ -16767,6 +16933,10 @@ msgstr "maxuuids > REMOTE_SECRET_LIST_MAX"
|
||||
msgid "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
|
||||
msgstr "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
|
||||
|
||||
#, c-format
|
||||
msgid "memballoon unsupported with address type '%s'"
|
||||
msgstr "memballoon એ સરનામાં પ્રકાર '%s' સાથે બિનઆધારભૂત છે"
|
||||
|
||||
msgid "memory attributes: [file=]name[,snapshot=type]"
|
||||
msgstr "મેમરી ગુણધર્મો: [file=]name[,snapshot=type]"
|
||||
|
||||
@@ -17675,6 +17845,9 @@ msgstr "'%s' માટે બ્લોક ઉપકરણ પાથ પૂરી
|
||||
msgid "no call waiting for reply with prog %d vers %d serial %d"
|
||||
msgstr "prog %d vers %d serial %d સાથે જવાબ માટે કોલ રાહ જોતુ "
|
||||
|
||||
msgid "no callback provided"
|
||||
msgstr "કોલબેક પૂરુ પાડેલ નથી"
|
||||
|
||||
msgid "no client username was found"
|
||||
msgstr "ક્લાઇન્ટ વપરાશકર્તાનામ શોધાયુ ન હતુ"
|
||||
|
||||
@@ -17704,6 +17877,10 @@ msgstr "ઉપસર્ગ %s સાથે ઉપકરણ મળ્યુ ન
|
||||
msgid "no disk format for %s and probing is disabled"
|
||||
msgstr "%s માટે ડિસ્ક બંધારણ નથી અને પ્રોબિંગ નિષ્ક્રિય થયેલ છે"
|
||||
|
||||
#, c-format
|
||||
msgid "no disk found with alias %s"
|
||||
msgstr "ઉપસર્ગ %s સાથે ડિસ્ક મળ્યુ નથી"
|
||||
|
||||
#, c-format
|
||||
msgid "no disk named '%s'"
|
||||
msgstr "નામ થયેલ ડિસ્ક '%s' નથી"
|
||||
@@ -19848,6 +20025,9 @@ msgstr "સ્નેપશોટ ફિલ્ટરીંગને ચલાવ
|
||||
msgid "unable to poll on child"
|
||||
msgstr "બાળ પર પોલ કરવાનું અસમર્થ"
|
||||
|
||||
msgid "unable to probe for add-fd"
|
||||
msgstr "add-fd માટે પ્રોબ કરવાનું અસમર્થ"
|
||||
|
||||
#, c-format
|
||||
msgid "unable to read '%s'"
|
||||
msgstr "'%s' ને વાંચવાનુ અસમર્થ"
|
||||
|
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.3.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2018-04-24 06:25+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Hebrew (http://www.transifex.com/projects/p/fedora/language/"
|
||||
@@ -18,4 +18,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -17,9 +17,9 @@
|
||||
# sandeep shedmake <sandeep.shedmake@gmail.com>, 2007
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2015-02-23 12:39+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Hindi (http://www.transifex.com/projects/p/fedora/language/"
|
||||
@@ -29,7 +29,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -191,6 +191,9 @@ msgstr "संजालन"
|
||||
msgid " Storage:"
|
||||
msgstr "भंडारण"
|
||||
|
||||
msgid " block_io_throttle reply was missing device list"
|
||||
msgstr "block_io_throttle उत्तर डिवाइस सूची गुम "
|
||||
|
||||
#, c-format
|
||||
msgid "%s\n"
|
||||
msgstr "%s\n"
|
||||
@@ -1104,6 +1107,10 @@ msgstr "क्लाइंट सॉकेट पहचान उपलब्ध
|
||||
msgid "Command %s too long for destination"
|
||||
msgstr "कमांड %s गंतव्य के लिए काफी बड़ा है"
|
||||
|
||||
#, c-format
|
||||
msgid "Command '%s' is not found"
|
||||
msgstr "कमांड '% s' नहीं मिली"
|
||||
|
||||
msgid "Completed with no error"
|
||||
msgstr "कोई त्रुटि के साथ पूरा हो गया"
|
||||
|
||||
@@ -1333,6 +1340,10 @@ msgstr "मैक पते '%s' के साथ शारीरिक एन
|
||||
msgid "Could not find physical NIC with name '%s'"
|
||||
msgstr "नाम '%s' के साथ शारीरिक एनआईसी नहीं मिल सका"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find placement for controller %s at %s"
|
||||
msgstr "नियंत्रक %s के लिए %s पर नियुक्ति नहीं पा सका"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find snapshot with name '%s'"
|
||||
msgstr "नाम '%s' के साथ स्नैपशॉट नहीं ढूँढ सका"
|
||||
@@ -1842,6 +1853,10 @@ msgstr "संजाल अंतरफलक अलग करें."
|
||||
msgid "Device"
|
||||
msgstr "युक्ति"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s in use"
|
||||
msgstr "डिवाइस %s उपयोग में है"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s is already in use"
|
||||
msgstr "युक्ति %s पहले से प्रयोग में है"
|
||||
@@ -2683,6 +2698,10 @@ msgstr "%s डोमेन का स्वतः आरंभन चिह्
|
||||
msgid "Failed to mkdir %s"
|
||||
msgstr "%s को mkdir करने में विफल"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to mount %s on %s type %s"
|
||||
msgstr "%s प्रकार %s पर %s को माउंट करने में विफल "
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to mount %s on /proc/meminfo"
|
||||
msgstr "/proc/meminfo को %s पर आरोहित करने में विफल"
|
||||
@@ -3898,6 +3917,9 @@ msgstr "गुम सीपीयू विशेषता नाम"
|
||||
msgid "Missing CPU model name"
|
||||
msgstr "अनुपस्थित CPU मॉडल नाम"
|
||||
|
||||
msgid "Missing CPU vendor name"
|
||||
msgstr "अनुपस्थित CPU विक्रेता नाम"
|
||||
|
||||
msgid "Missing ID parameter for domain object"
|
||||
msgstr "डोमेन ऑब्जेक्ट के लिए गुम आईडी पैरामीटर"
|
||||
|
||||
@@ -3971,6 +3993,9 @@ msgid ""
|
||||
"network %s"
|
||||
msgstr "संजाल %s में गुम या <forward> में <nat> में <port> में अवैध 'शुरुआत' विशेषता"
|
||||
|
||||
msgid "Missing or invalid auth pointer"
|
||||
msgstr "गुम या अवैध auth संकेतक "
|
||||
|
||||
msgid "Missing ownerId data in JSON document"
|
||||
msgstr "JSON के दस्तावेज़ में ownerId डेटा गुम"
|
||||
|
||||
@@ -4234,6 +4259,9 @@ msgstr "होस्टनाम के साथ कोई पता संब
|
||||
msgid "No authentication callback available"
|
||||
msgstr "कोई प्रमाणीकरण कॉलबैक नहीं उपलब्ध हैं "
|
||||
|
||||
msgid "No authentication callback provided."
|
||||
msgstr "कोई सत्यापन कॉलबैक नहीं दिया गया."
|
||||
|
||||
msgid "No bridge name specified"
|
||||
msgstr "कोई ब्रिज नाम निर्दिष्ट नहीं"
|
||||
|
||||
@@ -5919,9 +5947,6 @@ msgstr "%s को खोलने में विफल"
|
||||
msgid "Unable to open %s (%d)"
|
||||
msgstr "%s (%d) खोलने में असमर्थ"
|
||||
|
||||
msgid "Unable to open /proc/mounts"
|
||||
msgstr "/proc/mounts को खोलने में असमर्थ"
|
||||
|
||||
msgid "Unable to open UNIX socket"
|
||||
msgstr "UNIX सॉकेट खोलने में असमर्थ"
|
||||
|
||||
@@ -6130,6 +6155,9 @@ msgstr "गैर peer2peer माइग्रेशन के साथ अन
|
||||
msgid "Unexpected disk sgio mode '%d'"
|
||||
msgstr "अप्रत्याशित डिस्क sgio मोड '%d'"
|
||||
|
||||
msgid "Unexpected error"
|
||||
msgstr "अप्रत्याशित त्रुटि"
|
||||
|
||||
#, c-format
|
||||
msgid "Unexpected filesystem type %s"
|
||||
msgstr "अप्रत्याशित filesystem प्रकार %s"
|
||||
@@ -6801,6 +6829,10 @@ msgstr "बूल"
|
||||
msgid "boot order '%s' used for more than one device"
|
||||
msgstr "बूट क्रम '%s' एक से अधिक उपकरण के लिए उपयोग होना चाहिए"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned PCI devices is not supported with this version of qemu"
|
||||
msgstr "सौपे गए PCI युक्ति से बूटिंग qemu के इस संस्करण से समर्थित नहीं है"
|
||||
|
||||
#, c-format
|
||||
msgid "bridge '%s' has an invalid netmask or IP address"
|
||||
msgstr "ब्रिज '%s' एक अवैध netmask या आईपी पता है"
|
||||
@@ -7199,6 +7231,9 @@ msgstr "सुरक्षा प्रस्ताव %d (%s) पा नही
|
||||
msgid "cannot get the host uuid"
|
||||
msgstr "होस्ट uuid नहीं मिल पाया "
|
||||
|
||||
msgid "cannot get the path of MEMORY cgroup controller"
|
||||
msgstr "मेमोरी cgroup नियंत्रक का का रास्ता नहीं मिल सकता है"
|
||||
|
||||
msgid "cannot get vCPU placement & pCPU time"
|
||||
msgstr "vCPU स्थापन व pCPU समय नहीं पा सकता है"
|
||||
|
||||
@@ -7295,6 +7330,10 @@ msgstr "वॉल्यूम '%s' खोल नहीं सकता है"
|
||||
msgid "cannot parse %s version number in '%.*s'"
|
||||
msgstr "%s संस्करण संख्या का विश्लेषण नहीं कर सकता है '%.*s' में "
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU map for %s architecture"
|
||||
msgstr "CPU मानचित्र %s ऑर्किटेक्चर के लिए विश्लेषित नहीं कर सकता है"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU topology '%s'"
|
||||
msgstr "CPU टोपोलॉजी '%s' का विश्लेषण नहीं कर सकता है"
|
||||
@@ -7371,10 +7410,6 @@ msgstr "uuid के रूप में इंटरफेस आईडी प
|
||||
msgid "cannot parse io mode '%s'"
|
||||
msgstr "IO मोड '%s' को विश्लेषित नहीं कर सकते"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse json %s: %s"
|
||||
msgstr "json %s विश्लेषित नहीं कर सकता है: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse nbd filename '%s'"
|
||||
msgstr "nbd फ़ाइलनाम '%s' को विश्लेषित नहीं कर सकता है"
|
||||
@@ -7810,6 +7845,10 @@ msgstr "कान्फिग मान %s विरूपित था"
|
||||
msgid "config value %s was missing"
|
||||
msgstr "कान्फिग मान %s गुम था"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s was not a string"
|
||||
msgstr "कॉन्फिग मान %s एक स्ट्रिंग नहीं था"
|
||||
|
||||
msgid "configuration file syntax error"
|
||||
msgstr "विन्यास फाइल वाक्य रचना त्रुटि"
|
||||
|
||||
@@ -8863,6 +8902,9 @@ msgstr "%s विन्यास फाइल के विश्लेषण
|
||||
msgid "failed to parse qemu capabilities flags"
|
||||
msgstr "qemu क्षमता वाले ध्वजों का विश्लेषण करने में विफल रहा"
|
||||
|
||||
msgid "failed to parse xml document"
|
||||
msgstr "xml दस्तावेज़ विश्लेषण में असमर्थ"
|
||||
|
||||
msgid "failed to read AppArmor template"
|
||||
msgstr "AppArmor प्रोफाइल टेम्पलेट पढ़ने में विफल"
|
||||
|
||||
@@ -9175,6 +9217,9 @@ msgstr "हब प्रकार %s समर्थित नहीं"
|
||||
msgid "hypervisor connection URI"
|
||||
msgstr "हाइपरविजर कनेक्शन URI"
|
||||
|
||||
msgid "hypervisor lacks deviceboot feature"
|
||||
msgstr "हाइपरविजर deviceboot सुविधा का अभाव है"
|
||||
|
||||
msgid "iSCSI storage pool does not support volume creation"
|
||||
msgstr "iSCSI भंडारण पूल मात्रा निर्माण का समर्थन नहीं करता है"
|
||||
|
||||
@@ -10553,6 +10598,9 @@ msgstr "'%s' के लिए कोई ब्लॉक युक्ति प
|
||||
msgid "no call waiting for reply with prog %d vers %d serial %d"
|
||||
msgstr " prog %d vers %d serial %d के साथ उत्तर के लिए कोई कॉल प्रतीक्षारत नहीं"
|
||||
|
||||
msgid "no callback provided"
|
||||
msgstr "कोई कॉलबैक नहीं दिया गया"
|
||||
|
||||
msgid "no client username was found"
|
||||
msgstr "कोई क्लाइंट उपयोक्तानाम नहीं मिला था"
|
||||
|
||||
@@ -10572,6 +10620,10 @@ msgstr "%s उपनाम के साथ कोई युक्ति नह
|
||||
msgid "no disk format for %s and probing is disabled"
|
||||
msgstr "%s के लिए कोई डिस्क प्रारूप नहीं और जाँच निष्क्रिय है"
|
||||
|
||||
#, c-format
|
||||
msgid "no disk found with alias %s"
|
||||
msgstr "%s उपनाम के साथ कोई डिस्क नहीं मिला"
|
||||
|
||||
#, c-format
|
||||
msgid "no disk named '%s'"
|
||||
msgstr "कोई %s नाम का डिस्क नहीं "
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Croatian\n"
|
||||
@@ -17,4 +17,4 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -8,9 +8,9 @@
|
||||
# Gabor Egry <gaba@freemail.hu>, 2007.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2015-02-27 04:56+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Hungarian (http://www.transifex.com/projects/p/fedora/"
|
||||
@@ -20,7 +20,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Interlingua\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -8,9 +8,9 @@
|
||||
# Teguh DC <dheche@songolimo.net>, 2007.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2015-02-27 05:03+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Indonesian (http://www.transifex.com/projects/p/libvirt/"
|
||||
@@ -20,7 +20,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Iloko\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.3.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2018-04-24 06:27+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Icelandic (http://www.transifex.com/projects/p/fedora/"
|
||||
@@ -18,4 +18,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -10,9 +10,9 @@
|
||||
# Silvio Pierro <perplesso82@gmail.com>, 2009
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2015-02-27 05:14+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/projects/p/libvirt/language/"
|
||||
@@ -22,7 +22,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -1712,6 +1712,9 @@ msgstr "Nome feature della CPU mancante"
|
||||
msgid "Missing CPU model name"
|
||||
msgstr "Nome modello della CPU mancante"
|
||||
|
||||
msgid "Missing CPU vendor name"
|
||||
msgstr "Nome produttore della CPU mancante"
|
||||
|
||||
#, c-format
|
||||
msgid "Missing IP address in static host definition for network '%s'"
|
||||
msgstr "Indirizzo IP mancante nella definizione host statico per la rete '%s'"
|
||||
@@ -1875,6 +1878,9 @@ msgstr "Nessun indirizzo IP trovato per l'host '%s': %s"
|
||||
msgid "No authentication callback available"
|
||||
msgstr "Nessun callback per l'autenticazione disponibile"
|
||||
|
||||
msgid "No authentication callback provided."
|
||||
msgstr "Nessun callback per l'autenticazione fornito."
|
||||
|
||||
#, c-format
|
||||
msgid "No device with bus '%s' and target '%s'"
|
||||
msgstr "Nessun dispositivo con bus '%s' e target '%s'"
|
||||
@@ -3059,6 +3065,10 @@ msgstr "impossibile aprire il socket"
|
||||
msgid "cannot open volume '%s'"
|
||||
msgstr "impossibile aprire il volume '%s'"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU map for %s architecture"
|
||||
msgstr "errore nel parsing della CPU map per l'architettura %s"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU topology '%s'"
|
||||
msgstr "impossibile analizzare la tipologia della CPU '%s'"
|
||||
@@ -3399,6 +3409,10 @@ msgstr "il valore di configurazione %s era malformato"
|
||||
msgid "config value %s was missing"
|
||||
msgstr "il valore di configurazione %s era mancante"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s was not a string"
|
||||
msgstr "il valore di config %s non è una stringa"
|
||||
|
||||
msgid "configuration file syntax error"
|
||||
msgstr "errore di sintassi del file di configurazione"
|
||||
|
||||
@@ -3879,6 +3893,9 @@ msgstr "errore nel parsing del file di configurazione"
|
||||
msgid "failed to parse configuration file %s"
|
||||
msgstr "errore nel parsing del file di configurazione %s"
|
||||
|
||||
msgid "failed to parse xml document"
|
||||
msgstr "errore nel parsing del documento xml"
|
||||
|
||||
msgid "failed to read XML"
|
||||
msgstr "impossibile leggere XML"
|
||||
|
||||
@@ -4782,6 +4799,9 @@ msgstr "non avviare automaticamente"
|
||||
msgid "no block device path supplied for '%s'"
|
||||
msgstr "nessun percorso di dispositivo a blocchi fornito per '%s'"
|
||||
|
||||
msgid "no callback provided"
|
||||
msgstr "nessun callback specificato"
|
||||
|
||||
msgid "no client username was found"
|
||||
msgstr "nessun username client trovato"
|
||||
|
||||
@@ -4797,6 +4817,10 @@ msgstr "nessuna funzionalità del dispositivo per '%s'"
|
||||
msgid "no disk format for %s and probing is disabled"
|
||||
msgstr "nessun formato disco per %s e il probing è disabilitato"
|
||||
|
||||
#, c-format
|
||||
msgid "no disk found with alias %s"
|
||||
msgstr "nessun disco trovato con alias %s"
|
||||
|
||||
msgid "no domain XML passed"
|
||||
msgstr "nessun dominio XML fornito"
|
||||
|
||||
|
220
po/ja.mini.po
220
po/ja.mini.po
@@ -17,9 +17,9 @@
|
||||
# Tomoyuki KATO <tomo@dream.daynight.jp>, 2011-2014
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2015-02-23 06:48+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Japanese (http://www.transifex.com/projects/p/libvirt/"
|
||||
@@ -29,7 +29,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
||||
msgid ""
|
||||
"\n"
|
||||
@@ -291,6 +291,9 @@ msgstr "ネットワーク:"
|
||||
msgid " Storage:"
|
||||
msgstr "ストレージ:"
|
||||
|
||||
msgid " block_io_throttle reply was missing device list"
|
||||
msgstr " block_io_throttle reply に device list がありませんでした"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"!!! SSH HOST KEY VERIFICATION FAILED !!!: Identity of host '%s:%d' differs "
|
||||
@@ -615,6 +618,11 @@ msgstr "guest-get-vcpus の応答に 'logical-id' がありません"
|
||||
msgid "'online' missing in reply of guest-get-vcpus"
|
||||
msgstr "guest-get-vcpus の応答に 'online' がありません"
|
||||
|
||||
msgid "'parent' for vHBA not specified, and cannot find one on this host"
|
||||
msgstr ""
|
||||
"vHBA の 'parent' が指定されていません。また、このホストにおいて見つけられませ"
|
||||
"ん"
|
||||
|
||||
msgid "'peak' and 'burst' require 'average' attribute"
|
||||
msgstr "'peak' および 'burst' は 'average' 属性が必要です"
|
||||
|
||||
@@ -949,6 +957,9 @@ msgstr "NAT '%s' を試行しました。NAT は IPv4 に対してのみサポ
|
||||
msgid "Attribute mode is only allowed for guest CPU"
|
||||
msgstr "mode 属性はゲストの CPU に対してのみ許可されます。"
|
||||
|
||||
msgid "Authentication Credentials not found"
|
||||
msgstr "認証情報が見つかりません"
|
||||
|
||||
msgid "Authentication failed"
|
||||
msgstr "認証に失敗しました"
|
||||
|
||||
@@ -1434,6 +1445,9 @@ msgstr "バルーンデバイスパスがわかりませんでした"
|
||||
msgid "Cannot determine free memory"
|
||||
msgstr "空きメモリーがわかりません"
|
||||
|
||||
msgid "Cannot determine system clock HZ"
|
||||
msgstr "システムのクロック周波数がわかりません"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot directly attach floppy %s"
|
||||
msgstr "フロッピー %s を直接接続できません"
|
||||
@@ -1644,6 +1658,14 @@ msgstr "socket address '%s': %s を構文解析できません"
|
||||
msgid "Cannot parse start time %s in %s"
|
||||
msgstr "開始時間 %s (%s) を構文解析できません"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot parse sys stat '%s'"
|
||||
msgstr "sys 統計情報 '%s' を構文解析できません"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot parse user stat '%s'"
|
||||
msgstr "user 統計情報 '%s' を構文解析できません"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Cannot plug '%s' interface into '%s' because it would overcommit 'average' "
|
||||
@@ -1785,6 +1807,10 @@ msgstr "初期化していない CURL ハンドルを共有できません"
|
||||
msgid "Cannot specify a label if relabelling is turned off. model=%s"
|
||||
msgstr "再ラベルが無効にされていると、ラベルを指定できません。model=%s"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot stat %s"
|
||||
msgstr "%s を統計できません"
|
||||
|
||||
#, c-format
|
||||
msgid "Cannot stat '%s'"
|
||||
msgstr "'%s' を統計できません"
|
||||
@@ -1960,6 +1986,10 @@ msgstr ""
|
||||
msgid "Command %s too long for destination"
|
||||
msgstr "コマンド %s が宛先にとって長すぎます"
|
||||
|
||||
#, c-format
|
||||
msgid "Command '%s' is not found"
|
||||
msgstr "コマンド '%s' が見つかりません"
|
||||
|
||||
msgid "Commit aborted"
|
||||
msgstr "コミットが中断されました"
|
||||
|
||||
@@ -2072,6 +2102,22 @@ msgstr "コンテナは定義されていません"
|
||||
msgid "Control groups not supported on this platform"
|
||||
msgstr "Control groups がこのプラットフォームにおいてサポートされません"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller %d out of range"
|
||||
msgstr "コントローラー %d が範囲外です"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not enabled for group"
|
||||
msgstr "コントローラー '%s' がグループに対して有効化されていません"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' is not mounted"
|
||||
msgstr "コントローラー '%s' がマウントされていません"
|
||||
|
||||
#, c-format
|
||||
msgid "Controller '%s' not mounted"
|
||||
msgstr "コントローラー '%s' がマウントされていません"
|
||||
|
||||
msgid "Controllers must use the 'ccid' address type"
|
||||
msgstr "コントローターは 'ccid' アドレス形式を使用しなければいけません"
|
||||
|
||||
@@ -2260,6 +2306,9 @@ msgstr "名前 '%s' を持つ物理 NIC を見つけられませんでした"
|
||||
msgid "Could not find any 'network' element in status file"
|
||||
msgstr "状態ファイルに何も 'network' 要素が見つかりませんでした"
|
||||
|
||||
msgid "Could not find any mounted controllers"
|
||||
msgstr "マウントされたコントローラーを何も見つけられませんでした"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find compute resource specified in '%s'"
|
||||
msgstr "'%s' に指定されているコンピュートリソースを見つけられません"
|
||||
@@ -2276,6 +2325,10 @@ msgstr "絶対パス '%s' を含んでいるデータストアを見つけられ
|
||||
msgid "Could not find datastore with name '%s'"
|
||||
msgstr "名前 '%s' を持つデータストアを見つけられませんでした"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find directory separator in %s"
|
||||
msgstr "%s にディレクトリのセパレーターを見つけられませんでした"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find domain snapshot with internal name '%s'"
|
||||
msgstr "内部名 '%s' を持つドメインスナップショットを見つけられませんでした"
|
||||
@@ -2311,6 +2364,10 @@ msgstr "MAC アドレス '%s' を持つ物理 NIC を見つけられませんで
|
||||
msgid "Could not find physical NIC with name '%s'"
|
||||
msgstr "名前 '%s' を持つ物理 NIC を見つけられませんでした"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find placement for controller %s at %s"
|
||||
msgstr "コントローラー %s (%s) の配置を見つけられません"
|
||||
|
||||
#, c-format
|
||||
msgid "Could not find snapshot with name '%s'"
|
||||
msgstr "名前 '%s' を持つスナップショットを見つけられませんでした"
|
||||
@@ -3000,6 +3057,10 @@ msgstr "デバイス %s がすでに存在します"
|
||||
msgid "Device %s detached\n"
|
||||
msgstr "デバイス %s が切断されました\n"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s in use"
|
||||
msgstr "デバイス %s は使用中です"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s is already in use"
|
||||
msgstr "デバイス %s がすでに使用中です"
|
||||
@@ -3874,6 +3935,10 @@ msgstr "ネットワーク設定変更トランザクションを開始できま
|
||||
msgid "Failed to bind PCI device '%s' to %s"
|
||||
msgstr "PCI デバイス '%s' を %s にバインドするのに失敗"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to bind cgroup '%s' on '%s'"
|
||||
msgstr "cgroup '%s' を '%s' にバインドできませんでした"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to bind mount directory %s to %s"
|
||||
msgstr "マウントディレクトリー %s を %s にバインドできませんでした"
|
||||
@@ -4029,6 +4094,10 @@ msgstr "バインドターゲット %s の作成に失敗しました"
|
||||
msgid "Failed to create bridge node in xml document"
|
||||
msgstr "XML 文書にブリッジノードを作成できません"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create controller %s for group"
|
||||
msgstr "グループ用のコントローラー %s の作成に失敗しました"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to create directory for '%s' dev '%s'"
|
||||
msgstr "'%s' dev '%s' 用のディレクトリの作成に失敗しました。"
|
||||
@@ -4329,6 +4398,9 @@ msgstr "インターフェース %s に対する新しい名前の生成に失
|
||||
msgid "Failed to get %s minor number"
|
||||
msgstr "%s のマイナー番号の取得に失敗しました"
|
||||
|
||||
msgid "Failed to get PCI Config Address String"
|
||||
msgstr "PCI の設定アドレス文字列の取得に失敗しました"
|
||||
|
||||
msgid "Failed to get PCI SYSFS file"
|
||||
msgstr "PCI SYSFS ファイルの取得に失敗しました"
|
||||
|
||||
@@ -4616,6 +4688,10 @@ msgstr "ドメイン %s の自動起動の設定に失敗しました"
|
||||
msgid "Failed to mkdir %s"
|
||||
msgstr "ディレクトリー %s の作成に失敗しました"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to mount %s on %s type %s"
|
||||
msgstr "%s を %s に %s 形式でマウントできませんでした"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to mount %s on /dev"
|
||||
msgstr "%s の /dev へのマウントに失敗しました"
|
||||
@@ -6578,6 +6654,13 @@ msgstr "メモリーの最大値、単位付き整数 (初期値 KiB)"
|
||||
msgid "Max memory:"
|
||||
msgstr "最大メモリー:"
|
||||
|
||||
msgid "Maximum CPUs greater than specified machine type limit"
|
||||
msgstr "最大 CPU が指定されたマシン形式の制限値より大きいです"
|
||||
|
||||
#, c-format
|
||||
msgid "Memory '%llu' must be less than %llu"
|
||||
msgstr "メモリ '%llu' は %llu より小さくなければいけません"
|
||||
|
||||
msgid "Memory allocation failure"
|
||||
msgstr "メモリーの割り当てに失敗しました"
|
||||
|
||||
@@ -6689,6 +6772,10 @@ msgstr "'%s' プロパティがありません"
|
||||
msgid "Missing '%s' property while looking for ManagedEntityStatus"
|
||||
msgstr "ManagedEntityStatus を検索中に '%s' プロパティがありませんでした"
|
||||
|
||||
#, c-format
|
||||
msgid "Missing '/' separator in cgroup mount '%s'"
|
||||
msgstr "cgroup のマウント '%s' に区切り文字 '/' がありません"
|
||||
|
||||
msgid "Missing 'cores' attribute in CPU topology"
|
||||
msgstr "CPU トポロジーに 'cores' 属性がありません"
|
||||
|
||||
@@ -6743,6 +6830,9 @@ msgstr "CPU 機能名がありません"
|
||||
msgid "Missing CPU model name"
|
||||
msgstr "CPU モデル名がありません"
|
||||
|
||||
msgid "Missing CPU vendor name"
|
||||
msgstr "CPU ベンダー名がありません"
|
||||
|
||||
msgid "Missing ID parameter for domain object"
|
||||
msgstr "ドメインオブジェクト向けの ID パラメーターがありません"
|
||||
|
||||
@@ -6883,6 +6973,9 @@ msgstr ""
|
||||
msgid "Missing or invalid PVR value in CPU model %s"
|
||||
msgstr "CPU モデル %s に PVR 値が見つからないか無効です。"
|
||||
|
||||
msgid "Missing or invalid auth pointer"
|
||||
msgstr "認証ポインターが無いか無効です"
|
||||
|
||||
msgid "Missing ownerId data in JSON document"
|
||||
msgstr "JSON ドキュメントに ownerId データがありません"
|
||||
|
||||
@@ -7319,6 +7412,9 @@ msgstr "シグネチャー %s 用の引数が存在しません"
|
||||
msgid "No authentication callback available"
|
||||
msgstr "認証のコールバックが利用可能ではありません"
|
||||
|
||||
msgid "No authentication callback provided."
|
||||
msgstr "認証コールバックがありません"
|
||||
|
||||
msgid "No authentication methods and credentials provided"
|
||||
msgstr "認証方式と認証情報が指定されていません"
|
||||
|
||||
@@ -8477,6 +8573,9 @@ msgstr "('%s' から構文解析された) SCSI ディスクのインデック
|
||||
msgid "SCSI host device doesn't support managed mode"
|
||||
msgstr "SCSI ホストデバイスが管理済みモードをサポートしません"
|
||||
|
||||
msgid "SCSI passthrough is not supported by this version of qemu"
|
||||
msgstr "SCSI パススルーはこのバージョンの QEMU によりサポートされません"
|
||||
|
||||
#, c-format
|
||||
msgid "SCSI unit index %d out of [0..6,8..15] range"
|
||||
msgstr "SCSI ユニットのインデックス %d が [0..6,8..15] の範囲にありません"
|
||||
@@ -9752,6 +9851,9 @@ msgstr "USB デバイス %s はすでに使用中です"
|
||||
msgid "USB host device is missing bus/device information"
|
||||
msgstr "USB ホストデバイスにバス/デバイス情報がありません"
|
||||
|
||||
msgid "USB redirection booting is not supported by this version of QEMU"
|
||||
msgstr "USB リダイレクトブートはこのバージョンの QEMU によりサポートされません"
|
||||
|
||||
msgid "USB redirection filter is not supported by this version of QEMU"
|
||||
msgstr ""
|
||||
"USB リダイレクションフィルターはこのバージョンの QEMU によりサポートされませ"
|
||||
@@ -9938,12 +10040,6 @@ msgstr "ソケットのファイルハンドルをコピーできません"
|
||||
msgid "Unable to create %s"
|
||||
msgstr "%s を作成できません"
|
||||
|
||||
msgid "Unable to create JSON formatter"
|
||||
msgstr "JSON フォーマッターを作成できません"
|
||||
|
||||
msgid "Unable to create JSON parser"
|
||||
msgstr "JSON パーサーを作成できません"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to create LPAR. Reason: '%s'"
|
||||
msgstr "LPAR を作成できません。理由: '%s'"
|
||||
@@ -9973,6 +10069,10 @@ msgstr "ブリッジデバイスを作成できません"
|
||||
msgid "Unable to create device %s"
|
||||
msgstr "デバイス %s を作成できません"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to create directory %s"
|
||||
msgstr "ディレクトリー %s を作成できません"
|
||||
|
||||
msgid "Unable to create epoll fd"
|
||||
msgstr "epoll ファイルディスクリプターを作成できません"
|
||||
|
||||
@@ -10433,9 +10533,6 @@ msgstr "'%s' を開けません"
|
||||
msgid "Unable to open /dev/loop-control"
|
||||
msgstr "/dev/loop-control を開けません"
|
||||
|
||||
msgid "Unable to open /proc/mounts"
|
||||
msgstr "/proc/mounts を開けません"
|
||||
|
||||
msgid "Unable to open UNIX socket"
|
||||
msgstr "UNIX ソケットを開けません"
|
||||
|
||||
@@ -10725,6 +10822,10 @@ msgstr "このプラットフォームにおいて %s における STP を設定
|
||||
msgid "Unable to set VM logfile close-on-exec flag"
|
||||
msgstr "VM ログファイルの close-on-exec フラグをセットできません"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to set bridge %s %s"
|
||||
msgstr "ブリッジ %s %s を設定できません"
|
||||
|
||||
msgid "Unable to set cloexec flag"
|
||||
msgstr "cloexec フラグを設定できません"
|
||||
|
||||
@@ -10787,6 +10888,10 @@ msgstr "バインドソース %s の統計を取得できません"
|
||||
msgid "Unable to stat bind target %s"
|
||||
msgstr "バインドターゲット %s の統計を取得できません"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to symlink directory %s to %s"
|
||||
msgstr "ディレクトリー %s を %s にシンボリックリンクできません"
|
||||
|
||||
#, c-format
|
||||
msgid "Unable to truncate %s"
|
||||
msgstr "%s を切り詰められません"
|
||||
@@ -10912,6 +11017,9 @@ msgstr "非ピアツーピアマイグレーションで予期しない dconnuri
|
||||
msgid "Unexpected disk sgio mode '%d'"
|
||||
msgstr "予期しないディスク sgio モード '%d'"
|
||||
|
||||
msgid "Unexpected error"
|
||||
msgstr "予期しないエラー"
|
||||
|
||||
#, c-format
|
||||
msgid "Unexpected filesystem type %s"
|
||||
msgstr "予期しないファイルシステム形式 %s"
|
||||
@@ -11415,6 +11523,9 @@ msgstr ""
|
||||
msgid "VNC"
|
||||
msgstr "VNC"
|
||||
|
||||
msgid "VNC WebSockets are not supported with this QEMU binary"
|
||||
msgstr "VNC WebSockets はこの QEMU バイナリーでサポートされません"
|
||||
|
||||
msgid "VNC supports connected='keep' only"
|
||||
msgstr "VNC は connected='keep' のみがサポートされます"
|
||||
|
||||
@@ -11879,6 +11990,12 @@ msgstr "認証が取り消されました: %s"
|
||||
msgid "authentication failed"
|
||||
msgstr "認証に失敗しました"
|
||||
|
||||
msgid "authentication failed when asking for password"
|
||||
msgstr "の要求中に認証に失敗しました"
|
||||
|
||||
msgid "authentication failed when asking for username"
|
||||
msgstr "ユーザー名の要求中に認証に失敗しました"
|
||||
|
||||
msgid "authentication failed, see test XML for the correct username/password"
|
||||
msgstr ""
|
||||
"認証に失敗しました。正しいユーザー名とパスワードはテスト XML を参照してくださ"
|
||||
@@ -12024,6 +12141,31 @@ msgstr "ブート順序 '%s' が複数のデバイスに使用されています
|
||||
msgid "booted"
|
||||
msgstr "起動済み"
|
||||
|
||||
msgid ""
|
||||
"booting from PCI devices assigned with VFIO is not supported with this "
|
||||
"version of qemu"
|
||||
msgstr ""
|
||||
"VFIO で割り当てられた PCI デバイスからのブートはこのバージョンの QEMU でサ"
|
||||
"ポートされません"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned PCI devices is not supported with this version of qemu"
|
||||
msgstr ""
|
||||
"予約済み PCI デバイスからのブートはこのバージョンの QEMU ではサポートされませ"
|
||||
"ん"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned SCSI devices is not supported with this version of qemu"
|
||||
msgstr ""
|
||||
"予約済み SCSI デバイスからのブートはこのバージョンの QEMU ではサポートされま"
|
||||
"せん"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned USB devices is not supported with this version of qemu"
|
||||
msgstr ""
|
||||
"予約済み USB デバイスからのブートはこのバージョンの QEMU ではサポートされませ"
|
||||
"ん"
|
||||
|
||||
msgid ""
|
||||
"booting from assigned devices is only supported for PCI, USB and SCSI devices"
|
||||
msgstr ""
|
||||
@@ -12565,6 +12707,9 @@ msgstr "セキュリティプロパティ %d (%s) を取得できません"
|
||||
msgid "cannot get the host uuid"
|
||||
msgstr "ホストの UUID を取得できません"
|
||||
|
||||
msgid "cannot get the path of MEMORY cgroup controller"
|
||||
msgstr "MEMORY cgroup controller のパスを取得できません"
|
||||
|
||||
msgid "cannot get vCPU placement & pCPU time"
|
||||
msgstr "仮想 CPU 配置と物理 CPU 時間を取得できません"
|
||||
|
||||
@@ -12728,6 +12873,10 @@ msgstr "%s バージョン番号を '%.*s' において構文解析できませ
|
||||
msgid "cannot parse CPU data"
|
||||
msgstr "CPU データを構文解析できません"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU map for %s architecture"
|
||||
msgstr "%s アーキテクチャーの CPU マップを構文解析できません"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse CPU topology '%s'"
|
||||
msgstr "CPU topology '%s' を構文解析できません"
|
||||
@@ -12819,14 +12968,6 @@ msgstr "interfaceid パラメーターを UUID として構文解析できませ
|
||||
msgid "cannot parse io mode '%s'"
|
||||
msgstr "io mode '%s' を構文解析できません"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse json %s: %s"
|
||||
msgstr "JSON %s を構文解析できません: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse json %s: unterminated string/map/array"
|
||||
msgstr "JSON %s を構文解析できません: 未終了の string/map/array"
|
||||
|
||||
#, c-format
|
||||
msgid "cannot parse nbd filename '%s'"
|
||||
msgstr "nbd filename '%s' を構文解析できません"
|
||||
@@ -13260,6 +13401,14 @@ msgstr "%s の cellNum は %d より小さいか同じである必要があり
|
||||
msgid "cellNum in %s only accepts %d as a negative value"
|
||||
msgstr "%s の cellNum は負の値として %d のみを受け付けます"
|
||||
|
||||
#, c-format
|
||||
msgid "cfs_period '%llu' must be in range (1000, 1000000)"
|
||||
msgstr "cfs_period '%llu' は (1000, 1000000) の範囲にある必要があります"
|
||||
|
||||
#, c-format
|
||||
msgid "cfs_quota '%lld' must be in range (1000, %llu)"
|
||||
msgstr "cfs_quota '%lld' は (1000, %llu) の範囲にある必要があります"
|
||||
|
||||
msgid "cgroup CPU controller is not mounted"
|
||||
msgstr "cgroup CPU コントローラーがマウントされていません"
|
||||
|
||||
@@ -13403,6 +13552,10 @@ msgstr "設定"
|
||||
msgid "config data file to import from"
|
||||
msgstr "インポートする設定データファイル"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s not a string"
|
||||
msgstr "設定値 %s が文字列ではありません"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s was malformed"
|
||||
msgstr "設定値 %s は不正な形式です"
|
||||
@@ -13411,6 +13564,10 @@ msgstr "設定値 %s は不正な形式です"
|
||||
msgid "config value %s was missing"
|
||||
msgstr "設定値 %s がありませんでした"
|
||||
|
||||
#, c-format
|
||||
msgid "config value %s was not a string"
|
||||
msgstr "設定値 %s が文字列ではありませんでした"
|
||||
|
||||
msgid "configuration file syntax error"
|
||||
msgstr "設定ファイルの構文エラー"
|
||||
|
||||
@@ -15162,6 +15319,9 @@ msgstr "QEMU のデバイス一覧の構文解析に失敗しました"
|
||||
msgid "failed to parse value of %s"
|
||||
msgstr "%s の値を構文解析できません"
|
||||
|
||||
msgid "failed to parse xml document"
|
||||
msgstr "xml ドキュメントの構文解析に失敗しました"
|
||||
|
||||
#, c-format
|
||||
msgid "failed to pivot job for disk %s"
|
||||
msgstr "ディスク %s のジョブの並び替えに失敗しました"
|
||||
@@ -15235,6 +15395,9 @@ msgstr "認証情報の取得に失敗しました"
|
||||
msgid "failed to retrieve decision to accept host key"
|
||||
msgstr "ホスト鍵を受け取るかどうかの取得に失敗しました"
|
||||
|
||||
msgid "failed to retrieve password"
|
||||
msgstr "パスワードの取得に失敗しました"
|
||||
|
||||
msgid "failed to retrieve private key passphrase: callback has failed"
|
||||
msgstr "秘密鍵のパスフレーズの取得に失敗しました: コールバックに失敗しました"
|
||||
|
||||
@@ -15748,6 +15911,9 @@ msgstr "ハブの形式 %s はサポートされません"
|
||||
msgid "hypervisor connection URI"
|
||||
msgstr "ハイパーバイザーの接続 URI"
|
||||
|
||||
msgid "hypervisor lacks deviceboot feature"
|
||||
msgstr "ハイパーバイザーがデバイスブートの機能はありません"
|
||||
|
||||
msgid "iSCSI storage pool does not support volume creation"
|
||||
msgstr "iSCSI ストレージプールはボリュームの作成をサポートしません"
|
||||
|
||||
@@ -16929,6 +17095,10 @@ msgstr "maxuuids > REMOTE_SECRET_LIST_MAX"
|
||||
msgid "mem(Suspend-to-RAM), disk(Suspend-to-Disk), hybrid(Hybrid-Suspend)"
|
||||
msgstr "mem(メモリーに), disk(ディスクに), hybrid(ハイブリッド)"
|
||||
|
||||
#, c-format
|
||||
msgid "memballoon unsupported with address type '%s'"
|
||||
msgstr "メモリーバルーンはアドレス形式 '%s' でサポートされません"
|
||||
|
||||
msgid "memory attributes: [file=]name[,snapshot=type]"
|
||||
msgstr "memory 属性: [file=]name[,snapshot=type]"
|
||||
|
||||
@@ -17869,6 +18039,9 @@ msgstr ""
|
||||
"プログラム %d バージョン %d シリアル %d を持つ応答に対して待ち合わせている"
|
||||
"コールがありません"
|
||||
|
||||
msgid "no callback provided"
|
||||
msgstr "コールバックが提供されていません"
|
||||
|
||||
msgid "no client username was found"
|
||||
msgstr "クライアントのユーザー名が見付かりません"
|
||||
|
||||
@@ -17895,6 +18068,10 @@ msgstr "エイリアス %s を持つディスクが見つかりません"
|
||||
msgid "no disk format for %s and probing is disabled"
|
||||
msgstr "%s のディスクフォーマットがなく、かつプローブが無効です"
|
||||
|
||||
#, c-format
|
||||
msgid "no disk found with alias %s"
|
||||
msgstr "エイリアス %s を持つディスクが見つかりません"
|
||||
|
||||
#, c-format
|
||||
msgid "no disk named '%s'"
|
||||
msgstr "'%s' という名前のディスクがありません"
|
||||
@@ -20016,6 +20193,9 @@ msgstr "スナップショットのフィルターを実行できません"
|
||||
msgid "unable to poll on child"
|
||||
msgstr "子においてポーリングできません"
|
||||
|
||||
msgid "unable to probe for add-fd"
|
||||
msgstr "add-fd に対してプローブできません"
|
||||
|
||||
#, c-format
|
||||
msgid "unable to read '%s'"
|
||||
msgstr "'%s' を読み込めません"
|
||||
|
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.3.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: 2018-04-24 06:29+0000\n"
|
||||
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
|
||||
"Language-Team: Georgian (http://www.transifex.com/projects/p/fedora/language/"
|
||||
@@ -18,4 +18,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
@@ -5,9 +5,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: libvirt 4.10.0\n"
|
||||
"Project-Id-Version: libvirt 4.6.0\n"
|
||||
"Report-Msgid-Bugs-To: https://libvirt.org/bugs.html\n"
|
||||
"POT-Creation-Date: 2018-11-28 16:52+0000\n"
|
||||
"POT-Creation-Date: 2018-07-31 10:44+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Kazakh\n"
|
||||
@@ -16,4 +16,4 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0\n"
|
||||
"X-Generator: Zanata 4.6.2\n"
|
||||
"X-Generator: Zanata 4.5.0\n"
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user