ruby-libvirt 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +16 -2
- data/Rakefile +8 -6
- data/ext/libvirt/_libvirt.c +85 -1872
- data/ext/libvirt/common.c +75 -0
- data/ext/libvirt/common.h +155 -0
- data/ext/libvirt/connect.c +392 -0
- data/ext/libvirt/connect.h +12 -0
- data/ext/libvirt/domain.c +1606 -0
- data/ext/libvirt/domain.h +8 -0
- data/ext/libvirt/extconf.rb +30 -1
- data/ext/libvirt/interface.c +259 -0
- data/ext/libvirt/interface.h +6 -0
- data/ext/libvirt/network.c +338 -0
- data/ext/libvirt/network.h +6 -0
- data/ext/libvirt/nodedevice.c +333 -0
- data/ext/libvirt/nodedevice.h +6 -0
- data/ext/libvirt/nwfilter.c +206 -0
- data/ext/libvirt/nwfilter.h +6 -0
- data/ext/libvirt/secret.c +288 -0
- data/ext/libvirt/secret.h +6 -0
- data/ext/libvirt/storage.c +825 -0
- data/ext/libvirt/storage.h +6 -0
- data/tests/tc_connect.rb +1 -1
- data/tests/test_conn.rb +53 -0
- data/tests/test_domain.rb +165 -0
- data/tests/test_interface.rb +35 -0
- data/tests/test_network.rb +40 -0
- data/tests/test_nodedevice.rb +23 -0
- data/tests/test_nwfilter.rb +28 -0
- data/tests/test_open.rb +23 -0
- data/tests/test_secret.rb +33 -0
- data/tests/test_storage.rb +49 -0
- metadata +58 -14
- data/ext/libvirt/extconf.h +0 -6
data/README.rdoc
CHANGED
@@ -2,10 +2,24 @@
|
|
2
2
|
|
3
3
|
The module Libvirt provides bindings to libvirt[http://libvirt.org]
|
4
4
|
|
5
|
-
The various
|
5
|
+
The various *Ptr types in Libvirt map loosely to the following Ruby classes:
|
6
6
|
|
7
7
|
[virConnectPtr] Libvirt::Connect
|
8
8
|
[virDomainPtr] Libvirt::Domain
|
9
9
|
[virDomainInfoPtr] Libvirt::Domain::Info
|
10
|
+
[virDomainInterfaceStatsPtr] Libvirt::Domain::InterfaceInfo
|
11
|
+
[virSecurityLabelPtr] Libvirt::Domain::SecurityLabel
|
12
|
+
[virDomainBlockStatsPtr] Libvirt::Domain::BlockStats
|
13
|
+
[virDomainMemoryStatPtr] Libvirt::Domain::MemoryStats
|
14
|
+
[virDomainBlockInfoPtr] Libvirt::Domain::BlockInfo
|
15
|
+
[virDomainSnapshotPtr] Libvirt::Domain::Snapshot
|
10
16
|
[virNetworkPtr] Libvirt::Network
|
11
|
-
|
17
|
+
[virNWFilterPtr] Libvirt::NWFilter
|
18
|
+
[virNodeDevicePtr] Libvirt::NodeDevice
|
19
|
+
[virStoragePoolPtr] Libvirt::StoragePool
|
20
|
+
[virStoragePoolInfoPtr] Libvirt::StoragePoolInfo
|
21
|
+
[virStorageVolPtr] Libvirt::StorageVol
|
22
|
+
[virStorageVolInfoPtr] Libvirt::StorageVolInfo
|
23
|
+
[virNodeInfoPtr] Libvirt::Nodeinfo
|
24
|
+
[virSecretPtr] Libvirt::Secret
|
25
|
+
[virInterfacePtr] Libvirt::Interface
|
data/Rakefile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
# Rakefile: build ruby libvirt bindings
|
3
3
|
#
|
4
|
-
# Copyright (C) 2007 Red Hat, Inc.
|
4
|
+
# Copyright (C) 2007,2010 Red Hat, Inc.
|
5
5
|
#
|
6
6
|
# Distributed under the GNU Lesser General Public License v2.1 or later.
|
7
7
|
# See COPYING for details
|
@@ -15,13 +15,14 @@ require 'rake/testtask'
|
|
15
15
|
require 'rake/gempackagetask'
|
16
16
|
|
17
17
|
PKG_NAME='ruby-libvirt'
|
18
|
-
PKG_VERSION='0.
|
18
|
+
PKG_VERSION='0.2.0'
|
19
19
|
|
20
20
|
EXT_CONF='ext/libvirt/extconf.rb'
|
21
21
|
MAKEFILE="ext/libvirt/Makefile"
|
22
22
|
LIBVIRT_MODULE="ext/libvirt/_libvirt.so"
|
23
23
|
SPEC_FILE="ruby-libvirt.spec"
|
24
|
-
LIBVIRT_SRC=
|
24
|
+
LIBVIRT_SRC=Dir.glob("ext/libvirt/*.c")
|
25
|
+
LIBVIRT_SRC << MAKEFILE
|
25
26
|
|
26
27
|
#
|
27
28
|
# Additional files for clean/clobber
|
@@ -46,7 +47,7 @@ file MAKEFILE => EXT_CONF do |t|
|
|
46
47
|
end
|
47
48
|
end
|
48
49
|
end
|
49
|
-
file LIBVIRT_MODULE =>
|
50
|
+
file LIBVIRT_MODULE => LIBVIRT_SRC do |t|
|
50
51
|
Dir::chdir(File::dirname(EXT_CONF)) do
|
51
52
|
unless sh "make"
|
52
53
|
$stderr.puts "make failed"
|
@@ -66,7 +67,7 @@ task :test => :build
|
|
66
67
|
Rake::RDocTask.new do |rd|
|
67
68
|
rd.main = "README.rdoc"
|
68
69
|
rd.rdoc_dir = "doc/site/api"
|
69
|
-
rd.rdoc_files.include("README.rdoc", "lib
|
70
|
+
rd.rdoc_files.include("README.rdoc", "lib/libvirt.rb", ["ext/libvirt/_libvirt.c", "ext/libvirt/connect.c", "ext/libvirt/domain.c", "ext/libvirt/interface.c", "ext/libvirt/network.c", "ext/libvirt/nodedevice.c", "ext/libvirt/nwfilter.c", "ext/libvirt/secret.c", "ext/libvirt/storage.c"])
|
70
71
|
end
|
71
72
|
|
72
73
|
#
|
@@ -92,9 +93,10 @@ SPEC = Gem::Specification.new do |s|
|
|
92
93
|
s.homepage = "http://libvirt.org/ruby/"
|
93
94
|
s.summary = "Ruby bindings for LIBVIRT"
|
94
95
|
s.files = PKG_FILES
|
95
|
-
s.autorequire = "libvirt"
|
96
96
|
s.required_ruby_version = '>= 1.8.1'
|
97
97
|
s.extensions = "ext/libvirt/extconf.rb"
|
98
|
+
s.author = "David Lutterkort, Chris Lalancette"
|
99
|
+
s.rubyforge_project = "None"
|
98
100
|
s.description = <<EOF
|
99
101
|
Provides bindings for libvirt.
|
100
102
|
EOF
|
data/ext/libvirt/_libvirt.c
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* libvirt.c: Ruby bindings for libvirt
|
3
3
|
*
|
4
|
-
* Copyright (C) 2007 Red Hat Inc.
|
4
|
+
* Copyright (C) 2007,2010 Red Hat Inc.
|
5
5
|
*
|
6
6
|
* This library is free software; you can redistribute it and/or
|
7
7
|
* modify it under the terms of the GNU Lesser General Public
|
@@ -24,1740 +24,107 @@
|
|
24
24
|
#include <libvirt/libvirt.h>
|
25
25
|
#include <libvirt/virterror.h>
|
26
26
|
#include "extconf.h"
|
27
|
+
#include "common.h"
|
28
|
+
#include "storage.h"
|
29
|
+
#include "connect.h"
|
30
|
+
#include "network.h"
|
31
|
+
#include "nodedevice.h"
|
32
|
+
#include "secret.h"
|
33
|
+
#include "nwfilter.h"
|
34
|
+
#include "interface.h"
|
35
|
+
#include "domain.h"
|
27
36
|
|
28
|
-
static VALUE m_libvirt;
|
29
|
-
static VALUE c_connect;
|
30
|
-
static VALUE c_domain;
|
31
|
-
static VALUE c_domain_info;
|
32
|
-
#if HAVE_TYPE_VIRNETWORKPTR
|
33
|
-
static VALUE c_network;
|
34
|
-
#endif
|
35
37
|
static VALUE c_libvirt_version;
|
36
|
-
static VALUE c_node_info;
|
37
|
-
#if HAVE_TYPE_VIRSTORAGEPOOLPTR
|
38
|
-
static VALUE c_storage_pool;
|
39
|
-
static VALUE c_storage_pool_info;
|
40
|
-
#endif
|
41
|
-
#if HAVE_TYPE_VIRSTORAGEVOLPTR
|
42
|
-
static VALUE c_storage_vol;
|
43
|
-
static VALUE c_storage_vol_info;
|
44
|
-
#endif
|
45
38
|
|
39
|
+
VALUE m_libvirt;
|
46
40
|
|
47
41
|
// define additional errors here
|
48
|
-
static VALUE e_Error; // Error - generic error
|
49
42
|
static VALUE e_ConnectionError; // ConnectionError - error durring connection establishment
|
50
|
-
|
51
|
-
|
43
|
+
VALUE e_DefinitionError;
|
44
|
+
VALUE e_RetrieveError;
|
45
|
+
VALUE e_Error;
|
52
46
|
|
53
47
|
/*
|
54
|
-
*
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
int r; \
|
62
|
-
r = vir##kind##Free((vir##kind##Ptr) p); \
|
63
|
-
if (r < 0) \
|
64
|
-
rb_raise(rb_eSystemCallError, # kind " free failed"); \
|
65
|
-
} while(0);
|
66
|
-
|
67
|
-
#define generic_get(kind, v) \
|
68
|
-
do { \
|
69
|
-
vir##kind##Ptr ptr; \
|
70
|
-
Data_Get_Struct(v, vir##kind, ptr); \
|
71
|
-
if (!ptr) \
|
72
|
-
rb_raise(rb_eArgError, #kind " has been freed"); \
|
73
|
-
return ptr; \
|
74
|
-
} while (0);
|
75
|
-
|
76
|
-
static VALUE generic_new(VALUE klass, void *ptr, VALUE conn,
|
77
|
-
RUBY_DATA_FUNC free_func) {
|
78
|
-
VALUE result;
|
79
|
-
result = Data_Wrap_Struct(klass, NULL, free_func, ptr);
|
80
|
-
rb_iv_set(result, "@connection", conn);
|
81
|
-
return result;
|
82
|
-
}
|
83
|
-
|
84
|
-
/* Error handling */
|
85
|
-
#define _E(cond, excep) \
|
86
|
-
do { if (cond) vir_error(excep); } while(0)
|
87
|
-
|
88
|
-
NORETURN(static void vir_error(VALUE exception));
|
89
|
-
|
90
|
-
static void vir_error(VALUE exception) {
|
91
|
-
rb_exc_raise(exception);
|
92
|
-
}
|
93
|
-
|
94
|
-
static VALUE create_error(VALUE error, const char* method, const char* msg,
|
95
|
-
virConnectPtr conn) {
|
96
|
-
VALUE ruby_errinfo;
|
97
|
-
virErrorPtr err;
|
98
|
-
|
99
|
-
if (msg == NULL || strlen(msg) == 0) {
|
100
|
-
char *defmsg;
|
101
|
-
size_t len;
|
102
|
-
len = snprintf(NULL, 0, "Call to function %s failed", method) + 1;
|
103
|
-
defmsg = ALLOC_N(char, len);
|
104
|
-
snprintf(defmsg, len, "Call to function %s failed", method);
|
105
|
-
ruby_errinfo = rb_exc_new2(error, defmsg);
|
106
|
-
free(defmsg);
|
107
|
-
} else {
|
108
|
-
ruby_errinfo = rb_exc_new2(error, msg);
|
109
|
-
}
|
110
|
-
rb_iv_set(ruby_errinfo, "@libvirt_function_name", rb_str_new2(method));
|
111
|
-
|
112
|
-
if (conn == NULL)
|
113
|
-
err = virGetLastError();
|
114
|
-
else
|
115
|
-
err = virConnGetLastError(conn);
|
116
|
-
|
117
|
-
if (err != NULL && err->message != NULL) {
|
118
|
-
rb_iv_set(ruby_errinfo, "@libvirt_message", rb_str_new2(err->message));
|
119
|
-
}
|
120
|
-
|
121
|
-
return ruby_errinfo;
|
122
|
-
};
|
123
|
-
|
124
|
-
|
125
|
-
/* Connections */
|
126
|
-
static void connect_close(void *p) {
|
127
|
-
int r;
|
128
|
-
|
129
|
-
if (!p)
|
130
|
-
return;
|
131
|
-
r = virConnectClose((virConnectPtr) p);
|
132
|
-
_E(r < 0, create_error(rb_eSystemCallError, "connect_close",
|
133
|
-
"Connection close failed", p));
|
134
|
-
}
|
135
|
-
|
136
|
-
static VALUE connect_new(virConnectPtr p) {
|
137
|
-
return Data_Wrap_Struct(c_connect, NULL, connect_close, p);
|
138
|
-
}
|
139
|
-
|
140
|
-
static virConnectPtr connect_get(VALUE s) {
|
141
|
-
generic_get(Connect, s);
|
142
|
-
}
|
143
|
-
|
144
|
-
static VALUE conn_attr(VALUE s) {
|
145
|
-
if (rb_obj_is_instance_of(s, c_connect) != Qtrue) {
|
146
|
-
s = rb_iv_get(s, "@connection");
|
147
|
-
}
|
148
|
-
if (rb_obj_is_instance_of(s, c_connect) != Qtrue) {
|
149
|
-
rb_raise(rb_eArgError, "Expected Connection object");
|
150
|
-
}
|
151
|
-
return s;
|
152
|
-
}
|
153
|
-
|
154
|
-
static virConnectPtr conn(VALUE s) {
|
155
|
-
s = conn_attr(s);
|
156
|
-
virConnectPtr conn;
|
157
|
-
Data_Get_Struct(s, virConnect, conn);
|
158
|
-
if (!conn)
|
159
|
-
rb_raise(rb_eArgError, "Connection has been closed");
|
160
|
-
return conn;
|
161
|
-
}
|
162
|
-
|
163
|
-
/* Domains */
|
164
|
-
static void domain_free(void *d) {
|
165
|
-
generic_free(Domain, d);
|
166
|
-
}
|
167
|
-
|
168
|
-
static virDomainPtr domain_get(VALUE s) {
|
169
|
-
generic_get(Domain, s);
|
170
|
-
}
|
171
|
-
|
172
|
-
static VALUE domain_new(virDomainPtr d, VALUE conn) {
|
173
|
-
return generic_new(c_domain, d, conn, domain_free);
|
174
|
-
}
|
175
|
-
|
176
|
-
/* Network */
|
177
|
-
#if HAVE_TYPE_VIRNETWORKPTR
|
178
|
-
static void network_free(void *d) {
|
179
|
-
generic_free(Network, d);
|
180
|
-
}
|
181
|
-
|
182
|
-
static virNetworkPtr network_get(VALUE s) {
|
183
|
-
generic_get(Network, s);
|
184
|
-
}
|
185
|
-
|
186
|
-
static VALUE network_new(virNetworkPtr n, VALUE conn) {
|
187
|
-
return generic_new(c_network, n, conn, network_free);
|
188
|
-
}
|
189
|
-
#endif
|
190
|
-
|
191
|
-
#if HAVE_TYPE_VIRSTORAGEPOOLPTR
|
192
|
-
/* StoragePool */
|
193
|
-
static void pool_free(void *d) {
|
194
|
-
generic_free(StoragePool, d);
|
195
|
-
}
|
196
|
-
|
197
|
-
static virStoragePoolPtr pool_get(VALUE s) {
|
198
|
-
generic_get(StoragePool, s);
|
199
|
-
}
|
200
|
-
|
201
|
-
static VALUE pool_new(virStoragePoolPtr n, VALUE conn) {
|
202
|
-
return generic_new(c_storage_pool, n, conn, pool_free);
|
203
|
-
}
|
204
|
-
#endif
|
205
|
-
|
206
|
-
/* StorageVol */
|
207
|
-
#if HAVE_TYPE_VIRSTORAGEVOLPTR
|
208
|
-
static void vol_free(void *d) {
|
209
|
-
generic_free(StorageVol, d);
|
210
|
-
}
|
211
|
-
|
212
|
-
static virStorageVolPtr vol_get(VALUE s) {
|
213
|
-
generic_get(StorageVol, s);
|
214
|
-
}
|
215
|
-
|
216
|
-
static VALUE vol_new(virStorageVolPtr n, VALUE conn) {
|
217
|
-
return generic_new(c_storage_vol, n, conn, vol_free);
|
218
|
-
}
|
219
|
-
#endif
|
220
|
-
|
221
|
-
/*
|
222
|
-
* Code generating macros.
|
223
|
-
*
|
224
|
-
* We only generate function bodies, not the whole function
|
225
|
-
* declaration.
|
226
|
-
*/
|
227
|
-
|
228
|
-
/*
|
229
|
-
* Generate a call to a virConnectNumOf... function. C is the Ruby VALUE
|
230
|
-
* holding the connection and OBJS is a token indicating what objects to
|
231
|
-
* get the number of, e.g. 'Domains'
|
232
|
-
*/
|
233
|
-
#define gen_conn_num_of(c, objs) \
|
234
|
-
do { \
|
235
|
-
int result; \
|
236
|
-
virConnectPtr conn = connect_get(c); \
|
237
|
-
\
|
238
|
-
result = virConnectNumOf##objs(conn); \
|
239
|
-
_E(result < 0, create_error(e_RetrieveError, "virConnectNumOf" # objs, "", conn)); \
|
240
|
-
\
|
241
|
-
return INT2NUM(result); \
|
242
|
-
} while(0)
|
243
|
-
|
244
|
-
/*
|
245
|
-
* Generate a call to a virConnectList... function. S is the Ruby VALUE
|
246
|
-
* holding the connection and OBJS is a token indicating what objects to
|
247
|
-
* get the number of, e.g. 'Domains' The list function must return an array
|
248
|
-
* of strings, which is returned as a Ruby array
|
249
|
-
*/
|
250
|
-
#define gen_conn_list_names(s, objs) \
|
251
|
-
do { \
|
252
|
-
int i, r, num; \
|
253
|
-
char **names; \
|
254
|
-
virConnectPtr conn = connect_get(s); \
|
255
|
-
VALUE result; \
|
256
|
-
\
|
257
|
-
num = virConnectNumOf##objs(conn); \
|
258
|
-
_E(num < 0, create_error(e_RetrieveError, "virConnectNumOf" # objs, "", conn)); \
|
259
|
-
if (num == 0) { \
|
260
|
-
/* if num is 0, don't call virConnectList* function */ \
|
261
|
-
result = rb_ary_new2(num); \
|
262
|
-
return result; \
|
263
|
-
} \
|
264
|
-
names = ALLOC_N(char *, num); \
|
265
|
-
r = virConnectList##objs(conn, names, num); \
|
266
|
-
if (r < 0) { \
|
267
|
-
free(names); \
|
268
|
-
_E(r < 0, create_error(e_RetrieveError, "virConnectList" # objs, "", conn)); \
|
269
|
-
} \
|
270
|
-
\
|
271
|
-
result = rb_ary_new2(num); \
|
272
|
-
for (i=0; i<num; i++) { \
|
273
|
-
rb_ary_push(result, rb_str_new2(names[i])); \
|
274
|
-
free(names[i]); \
|
275
|
-
} \
|
276
|
-
free(names); \
|
277
|
-
return result; \
|
278
|
-
} while(0)
|
279
|
-
|
280
|
-
/* Generate a call to a function FUNC which returns an int error, where -1
|
281
|
-
* indicates error and 0 success. The Ruby function will return Qnil on
|
282
|
-
* success and throw an exception on error.
|
283
|
-
*/
|
284
|
-
#define gen_call_void(func, conn, args...) \
|
285
|
-
do { \
|
286
|
-
int _r_##func; \
|
287
|
-
_r_##func = func(args); \
|
288
|
-
_E(_r_##func < 0, create_error(e_Error, #func, "", conn)); \
|
289
|
-
return Qnil; \
|
290
|
-
} while(0)
|
291
|
-
|
292
|
-
/* Generate a call to a function FUNC which returns a string. The Ruby
|
293
|
-
* function will return the string on success and throw an exception on
|
294
|
-
* error. The string returned by FUNC is freed if dealloc is true.
|
295
|
-
*/
|
296
|
-
#define gen_call_string(func, conn, dealloc, args...) \
|
297
|
-
do { \
|
298
|
-
const char *str; \
|
299
|
-
VALUE result; \
|
300
|
-
\
|
301
|
-
str = func(args); \
|
302
|
-
_E(str == NULL, create_error(e_Error, # func, "", conn)); \
|
303
|
-
\
|
304
|
-
result = rb_str_new2(str); \
|
305
|
-
if (dealloc) \
|
306
|
-
free((void *) str); \
|
307
|
-
return result; \
|
308
|
-
} while(0)
|
309
|
-
|
310
|
-
/* Generate a call to vir##KIND##Free and return Qnil. Set the the embedded
|
311
|
-
* vir##KIND##Ptr to NULL. If that pointer is already NULL, do nothing.
|
312
|
-
*/
|
313
|
-
#define gen_call_free(kind, s) \
|
314
|
-
do { \
|
315
|
-
vir##kind##Ptr ptr; \
|
316
|
-
Data_Get_Struct(s, vir##kind, ptr); \
|
317
|
-
if (ptr != NULL) { \
|
318
|
-
int r = vir##kind##Free(ptr); \
|
319
|
-
_E(r < 0, create_error(e_Error, "vir" #kind "Free", "", conn(s))); \
|
320
|
-
DATA_PTR(s) = NULL; \
|
321
|
-
} \
|
322
|
-
return Qnil; \
|
323
|
-
} while (0)
|
324
|
-
|
325
|
-
/*
|
326
|
-
* Module Libvirt
|
327
|
-
*/
|
328
|
-
|
329
|
-
/*
|
330
|
-
* call-seq:
|
331
|
-
* Libvirt::version(type) -> [ libvirt_version, type_version ]
|
332
|
-
*
|
333
|
-
* Call
|
334
|
-
* +virGetVersion+[http://www.libvirt.org/html/libvirt-libvirt.html#virGetVersion]
|
335
|
-
* to get the version of libvirt and of the hypervisor TYPE. Returns an
|
336
|
-
* array with two entries of type Libvirt::Version.
|
337
|
-
*
|
338
|
-
*/
|
339
|
-
VALUE libvirt_version(VALUE m, VALUE t) {
|
340
|
-
unsigned long libVer;
|
341
|
-
const char *type = NULL;
|
342
|
-
unsigned long typeVer;
|
343
|
-
int r;
|
344
|
-
VALUE result, argv[2];
|
345
|
-
|
346
|
-
type = StringValueCStr(t);
|
347
|
-
r = virGetVersion(&libVer, type, &typeVer);
|
348
|
-
if (r < 0)
|
349
|
-
rb_raise(rb_eArgError, "Failed to get version for %s", type);
|
350
|
-
|
351
|
-
result = rb_ary_new2(2);
|
352
|
-
argv[0] = rb_str_new2("libvirt");
|
353
|
-
argv[1] = ULONG2NUM(libVer);
|
354
|
-
rb_ary_push(result, rb_class_new_instance(2, argv, c_libvirt_version));
|
355
|
-
argv[0] = t;
|
356
|
-
argv[1] = ULONG2NUM(typeVer);
|
357
|
-
rb_ary_push(result, rb_class_new_instance(2, argv, c_libvirt_version));
|
358
|
-
return result;
|
359
|
-
}
|
360
|
-
|
361
|
-
/*
|
362
|
-
* call-seq:
|
363
|
-
* Libvirt::open(url) -> Libvirt::Connect
|
364
|
-
*
|
365
|
-
* Open a connection to URL with virConnectOpen[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectOpen]
|
366
|
-
*/
|
367
|
-
VALUE libvirt_open(VALUE m, VALUE url) {
|
368
|
-
char *str = NULL;
|
369
|
-
|
370
|
-
if (url) {
|
371
|
-
str = StringValueCStr(url);
|
372
|
-
if (!str)
|
373
|
-
rb_raise(rb_eTypeError, "expected string");
|
374
|
-
}
|
375
|
-
virConnectPtr ptr = virConnectOpen(str);
|
376
|
-
if (!ptr)
|
377
|
-
rb_raise(e_ConnectionError, "Failed to open %s", str);
|
378
|
-
return connect_new(ptr);
|
379
|
-
}
|
380
|
-
|
381
|
-
/*
|
382
|
-
* call-seq:
|
383
|
-
* Libvirt::openReadOnly(url) -> Libvirt::Connect
|
384
|
-
*
|
385
|
-
* Open a read-only connection to URL with
|
386
|
-
* virConnectOpenReadOnly[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectOpenReadOnly]
|
387
|
-
*/
|
388
|
-
VALUE libvirt_open_read_only(VALUE m, VALUE url) {
|
389
|
-
char *str = NULL;
|
390
|
-
|
391
|
-
if (url) {
|
392
|
-
str = StringValueCStr(url);
|
393
|
-
if (!str)
|
394
|
-
rb_raise(rb_eTypeError, "expected string");
|
395
|
-
}
|
396
|
-
virConnectPtr ptr = virConnectOpenReadOnly(str);
|
397
|
-
if (!ptr)
|
398
|
-
rb_raise(e_ConnectionError, "Failed to open %s readonly", str);
|
399
|
-
return connect_new(ptr);
|
400
|
-
}
|
401
|
-
|
402
|
-
/*
|
403
|
-
* Class Libvirt::Connect
|
404
|
-
*/
|
405
|
-
|
406
|
-
/*
|
407
|
-
* call-seq:
|
408
|
-
* conn.close
|
409
|
-
*
|
410
|
-
* Close the connection
|
411
|
-
*/
|
412
|
-
VALUE libvirt_conn_close(VALUE s) {
|
413
|
-
virConnectPtr conn;
|
414
|
-
Data_Get_Struct(s, virConnect, conn);
|
415
|
-
if (conn) {
|
416
|
-
connect_close(conn);
|
417
|
-
DATA_PTR(s) = NULL;
|
418
|
-
}
|
419
|
-
return Qnil;
|
420
|
-
}
|
421
|
-
|
422
|
-
/*
|
423
|
-
* call-seq:
|
424
|
-
* conn.closed?
|
425
|
-
*
|
426
|
-
* Return +true+ if the connection is closed, +false+ if it is open
|
427
|
-
*/
|
428
|
-
VALUE libvirt_conn_closed_p(VALUE s) {
|
429
|
-
virConnectPtr conn;
|
430
|
-
Data_Get_Struct(s, virConnect, conn);
|
431
|
-
return (conn==NULL) ? Qtrue : Qfalse;
|
432
|
-
}
|
433
|
-
|
434
|
-
/*
|
435
|
-
* call-seq:
|
436
|
-
* conn.type -> string
|
437
|
-
*
|
438
|
-
* Call +virConnectGetType+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectGetType]
|
439
|
-
*/
|
440
|
-
VALUE libvirt_conn_type(VALUE s) {
|
441
|
-
gen_call_string(virConnectGetType, connect_get(s), 0,
|
442
|
-
connect_get(s));
|
443
|
-
}
|
444
|
-
|
445
|
-
/*
|
446
|
-
* call-seq:
|
447
|
-
* conn.version -> fixnum
|
448
|
-
*
|
449
|
-
* Call +virConnectGetVersion+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectGetVersion]
|
450
|
-
*/
|
451
|
-
VALUE libvirt_conn_version(VALUE s) {
|
452
|
-
int r;
|
453
|
-
unsigned long v;
|
454
|
-
virConnectPtr conn = connect_get(s);
|
455
|
-
|
456
|
-
r = virConnectGetVersion(conn, &v);
|
457
|
-
_E(r < 0, create_error(e_RetrieveError, "virConnectGetVersion", "", conn));
|
458
|
-
|
459
|
-
return ULONG2NUM(v);
|
460
|
-
}
|
461
|
-
|
462
|
-
/*
|
463
|
-
* call-seq:
|
464
|
-
* conn.hostname -> string
|
465
|
-
*
|
466
|
-
* Call +virConnectGetHostname+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectGetHostname]
|
467
|
-
*/
|
468
|
-
VALUE libvirt_conn_hostname(VALUE s) {
|
469
|
-
gen_call_string(virConnectGetHostname, connect_get(s), 1,
|
470
|
-
connect_get(s));
|
471
|
-
}
|
472
|
-
|
473
|
-
/*
|
474
|
-
* Call +virConnectGetURI+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectGetURI]
|
475
|
-
*/
|
476
|
-
VALUE libvirt_conn_uri(VALUE s) {
|
477
|
-
virConnectPtr conn = connect_get(s);
|
478
|
-
gen_call_string(virConnectGetURI, conn, 1,
|
479
|
-
conn);
|
480
|
-
}
|
481
|
-
|
482
|
-
/*
|
483
|
-
* Call +virConnectGetMaxVcpus+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectGetMaxVcpus]
|
484
|
-
*/
|
485
|
-
VALUE libvirt_conn_max_vcpus(VALUE s, VALUE type) {
|
486
|
-
int result;
|
487
|
-
virConnectPtr conn = connect_get(s);
|
488
|
-
|
489
|
-
result = virConnectGetMaxVcpus(conn, StringValueCStr(type));
|
490
|
-
_E(result < 0, create_error(e_RetrieveError, "virConnectGetMaxVcpus", "", conn));
|
491
|
-
|
492
|
-
return INT2NUM(result);
|
493
|
-
}
|
494
|
-
|
495
|
-
/*
|
496
|
-
* Call +virNodeInfo+[http://www.libvirt.org/html/libvirt-libvirt.html#virNodeGetInfo]
|
497
|
-
*/
|
498
|
-
VALUE libvirt_conn_node_get_info(VALUE s){
|
499
|
-
int r;
|
500
|
-
virConnectPtr conn = connect_get(s);
|
501
|
-
virNodeInfo nodeinfo;
|
502
|
-
VALUE result;
|
503
|
-
VALUE modelstr;
|
504
|
-
|
505
|
-
r = virNodeGetInfo(conn, &nodeinfo);
|
506
|
-
_E(r < 0, create_error(e_RetrieveError, "virNodeGetInfo", "", conn));
|
507
|
-
|
508
|
-
modelstr = rb_str_new2(nodeinfo.model);
|
509
|
-
|
510
|
-
result = rb_class_new_instance(0, NULL, c_node_info);
|
511
|
-
rb_iv_set(result, "@model", modelstr);
|
512
|
-
rb_iv_set(result, "@memory", ULONG2NUM(nodeinfo.memory));
|
513
|
-
rb_iv_set(result, "@cpus", UINT2NUM(nodeinfo.cpus));
|
514
|
-
rb_iv_set(result, "@mhz", UINT2NUM(nodeinfo.mhz));
|
515
|
-
rb_iv_set(result, "@nodes", UINT2NUM(nodeinfo.nodes));
|
516
|
-
rb_iv_set(result, "@sockets", UINT2NUM(nodeinfo.sockets));
|
517
|
-
rb_iv_set(result, "@cores", UINT2NUM(nodeinfo.cores));
|
518
|
-
rb_iv_set(result, "@threads", UINT2NUM(nodeinfo.threads));
|
519
|
-
return result;
|
520
|
-
}
|
521
|
-
|
522
|
-
/*
|
523
|
-
* Call +virConnectGetCapabilities+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectGetCapabilities]
|
524
|
-
*/
|
525
|
-
VALUE libvirt_conn_capabilities(VALUE s) {
|
526
|
-
virConnectPtr conn = connect_get(s);
|
527
|
-
gen_call_string(virConnectGetCapabilities, conn, 1,
|
528
|
-
conn);
|
529
|
-
}
|
530
|
-
|
531
|
-
/*
|
532
|
-
* Call +virConnectNumOfDomains+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectNumOfDomains]
|
533
|
-
*/
|
534
|
-
VALUE libvirt_conn_num_of_domains(VALUE s) {
|
535
|
-
gen_conn_num_of(s, Domains);
|
536
|
-
}
|
537
|
-
|
538
|
-
/*
|
539
|
-
* Call +virConnectListDomains+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectListDomains]
|
540
|
-
*/
|
541
|
-
VALUE libvirt_conn_list_domains(VALUE s) {
|
542
|
-
int i, r, num, *ids;
|
543
|
-
virConnectPtr conn = connect_get(s);
|
544
|
-
VALUE result;
|
545
|
-
|
546
|
-
num = virConnectNumOfDomains(conn);
|
547
|
-
_E(num < 0, create_error(e_RetrieveError, "virConnectNumOfDomains", "", conn));
|
548
|
-
if (num == 0) {
|
549
|
-
result = rb_ary_new2(num);
|
550
|
-
return result;
|
551
|
-
}
|
552
|
-
|
553
|
-
ids = ALLOC_N(int, num);
|
554
|
-
r = virConnectListDomains(conn, ids, num);
|
555
|
-
if (r < 0) {
|
556
|
-
free(ids);
|
557
|
-
_E(r < 0, create_error(e_RetrieveError, "virConnectListDomains", "", conn));
|
558
|
-
}
|
559
|
-
|
560
|
-
result = rb_ary_new2(num);
|
561
|
-
for (i=0; i<num; i++) {
|
562
|
-
rb_ary_push(result, INT2NUM(ids[i]));
|
563
|
-
}
|
564
|
-
free(ids);
|
565
|
-
return result;
|
566
|
-
}
|
567
|
-
|
568
|
-
/*
|
569
|
-
* Call +virConnectNumOfDefinedDomains+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectNumOfDefinedDomains]
|
570
|
-
*/
|
571
|
-
VALUE libvirt_conn_num_of_defined_domains(VALUE s) {
|
572
|
-
gen_conn_num_of(s, DefinedDomains);
|
573
|
-
}
|
574
|
-
|
575
|
-
/*
|
576
|
-
* Call +virConnectListDefinedDomains+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectListDefinedDomains]
|
577
|
-
*/
|
578
|
-
VALUE libvirt_conn_list_defined_domains(VALUE s) {
|
579
|
-
gen_conn_list_names(s, DefinedDomains);
|
580
|
-
}
|
581
|
-
|
582
|
-
/*
|
583
|
-
* Call +virConnectNumOfNetworks+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectNumOfNetworks]
|
584
|
-
*/
|
585
|
-
VALUE libvirt_conn_num_of_networks(VALUE s) {
|
586
|
-
gen_conn_num_of(s, Networks);
|
587
|
-
}
|
588
|
-
|
589
|
-
/*
|
590
|
-
* Call +virConnectListNetworks+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectListNetworks]
|
591
|
-
*/
|
592
|
-
VALUE libvirt_conn_list_networks(VALUE s) {
|
593
|
-
gen_conn_list_names(s, Networks);
|
594
|
-
}
|
595
|
-
|
596
|
-
/*
|
597
|
-
* Call +virConnectNumOfDefinedNetworks+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectNumOfDefinedNetworks]
|
598
|
-
*/
|
599
|
-
VALUE libvirt_conn_num_of_defined_networks(VALUE s) {
|
600
|
-
gen_conn_num_of(s, DefinedNetworks);
|
601
|
-
}
|
602
|
-
|
603
|
-
/*
|
604
|
-
* Call +virConnectListDefinedNetworks+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectListDefinedNetworks]
|
605
|
-
*/
|
606
|
-
VALUE libvirt_conn_list_defined_networks(VALUE s) {
|
607
|
-
gen_conn_list_names(s, DefinedNetworks);
|
608
|
-
}
|
609
|
-
|
610
|
-
#if HAVE_TYPE_VIRSTORAGEPOOLPTR
|
611
|
-
/*
|
612
|
-
* Call +virConnectListStoragePools+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectListStoragePools]
|
613
|
-
*/
|
614
|
-
VALUE libvirt_conn_list_storage_pools(VALUE s) {
|
615
|
-
gen_conn_list_names(s, StoragePools);
|
616
|
-
}
|
617
|
-
|
618
|
-
/*
|
619
|
-
* Call +virConnectNumOfStoragePools+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectNumOfStoragePools]
|
620
|
-
*/
|
621
|
-
VALUE libvirt_conn_num_of_storage_pools(VALUE s) {
|
622
|
-
gen_conn_num_of(s, StoragePools);
|
623
|
-
}
|
624
|
-
|
625
|
-
/*
|
626
|
-
* Call +virConnectListDefinedStoragePools+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectListDefinedStoragePools]
|
627
|
-
*/
|
628
|
-
VALUE libvirt_conn_list_defined_storage_pools(VALUE s) {
|
629
|
-
gen_conn_list_names(s, DefinedStoragePools);
|
630
|
-
}
|
631
|
-
|
632
|
-
/*
|
633
|
-
* Call +virConnectNumOfDefinedStoragePools+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectNumOfDefinedStoragePools]
|
634
|
-
*/
|
635
|
-
VALUE libvirt_conn_num_of_defined_storage_pools(VALUE s) {
|
636
|
-
gen_conn_num_of(s, DefinedStoragePools);
|
637
|
-
}
|
638
|
-
#endif
|
639
|
-
|
640
|
-
static char *get_string_or_nil(VALUE arg)
|
641
|
-
{
|
642
|
-
if (TYPE(arg) == T_NIL)
|
643
|
-
return NULL;
|
644
|
-
else if (TYPE(arg) == T_STRING)
|
645
|
-
return StringValueCStr(arg);
|
646
|
-
else
|
647
|
-
rb_raise(rb_eTypeError, "wrong argument type (expected String or nil)"); return NULL;
|
648
|
-
}
|
649
|
-
|
650
|
-
/*
|
651
|
-
* Class Libvirt::Domain
|
652
|
-
*/
|
653
|
-
VALUE libvirt_dom_migrate(int argc, VALUE *argv, VALUE s) {
|
654
|
-
VALUE dconn, flags, dname_val, uri_val, bandwidth;
|
655
|
-
virDomainPtr ddom = NULL;
|
656
|
-
const char *dname;
|
657
|
-
const char *uri;
|
658
|
-
|
659
|
-
rb_scan_args(argc, argv, "23", &dconn, &flags, &dname_val, &uri_val,
|
660
|
-
&bandwidth);
|
661
|
-
|
662
|
-
dname = get_string_or_nil(dname_val);
|
663
|
-
uri = get_string_or_nil(uri_val);
|
664
|
-
|
665
|
-
if (NIL_P(bandwidth))
|
666
|
-
bandwidth = INT2FIX(0);
|
667
|
-
|
668
|
-
ddom = virDomainMigrate(domain_get(s), conn(dconn), NUM2UINT(flags),
|
669
|
-
dname, uri, NUM2UINT(bandwidth));
|
670
|
-
|
671
|
-
_E(ddom == NULL,
|
672
|
-
create_error(e_Error, "virDomainMigrate", "", conn(dconn)));
|
673
|
-
|
674
|
-
return domain_new(ddom, dconn);
|
675
|
-
}
|
676
|
-
|
677
|
-
/*
|
678
|
-
* Call +virDomainShutdown+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainShutdown]
|
679
|
-
*/
|
680
|
-
VALUE libvirt_dom_shutdown(VALUE s) {
|
681
|
-
gen_call_void(virDomainShutdown, conn(s),
|
682
|
-
domain_get(s));
|
683
|
-
}
|
684
|
-
|
685
|
-
/*
|
686
|
-
* Call +virDomainReboot+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainReboot]
|
687
|
-
*/
|
688
|
-
VALUE libvirt_dom_reboot(int argc, VALUE *argv, VALUE s) {
|
689
|
-
VALUE flags;
|
690
|
-
|
691
|
-
rb_scan_args(argc, argv, "01", &flags);
|
692
|
-
|
693
|
-
if (NIL_P(flags))
|
694
|
-
flags = INT2FIX(0);
|
695
|
-
|
696
|
-
gen_call_void(virDomainReboot, conn(s),
|
697
|
-
domain_get(s), NUM2UINT(flags));
|
698
|
-
}
|
699
|
-
|
700
|
-
/*
|
701
|
-
* Call +virDomainDestroy+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainDestroy]
|
702
|
-
*/
|
703
|
-
VALUE libvirt_dom_destroy(VALUE s) {
|
704
|
-
gen_call_void(virDomainDestroy, conn(s),
|
705
|
-
domain_get(s));
|
706
|
-
}
|
707
|
-
|
708
|
-
/*
|
709
|
-
* Call +virDomainSuspend+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSuspend]
|
710
|
-
*/
|
711
|
-
VALUE libvirt_dom_suspend(VALUE s) {
|
712
|
-
gen_call_void(virDomainSuspend, conn(s),
|
713
|
-
domain_get(s));
|
714
|
-
}
|
715
|
-
|
716
|
-
/*
|
717
|
-
* Call +virDomainResume+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainResume]
|
718
|
-
*/
|
719
|
-
VALUE libvirt_dom_resume(VALUE s) {
|
720
|
-
gen_call_void(virDomainResume, conn(s),
|
721
|
-
domain_get(s));
|
722
|
-
}
|
723
|
-
|
724
|
-
/*
|
725
|
-
* Call +virDomainSave+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSave]
|
726
|
-
*/
|
727
|
-
VALUE libvirt_dom_save(VALUE s, VALUE to) {
|
728
|
-
gen_call_void(virDomainSave, conn(s),
|
729
|
-
domain_get(s), StringValueCStr(to));
|
730
|
-
}
|
731
|
-
|
732
|
-
/*
|
733
|
-
* Call +virDomainCoreDump+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainCoreDump]
|
734
|
-
*/
|
735
|
-
VALUE libvirt_dom_core_dump(int argc, VALUE *argv, VALUE s) {
|
736
|
-
VALUE to, flags;
|
737
|
-
|
738
|
-
rb_scan_args(argc, argv, "11", &to, &flags);
|
739
|
-
|
740
|
-
if (NIL_P(flags))
|
741
|
-
flags = INT2FIX(0);
|
742
|
-
|
743
|
-
gen_call_void(virDomainCoreDump, conn(s),
|
744
|
-
domain_get(s), StringValueCStr(to), NUM2UINT(flags));
|
745
|
-
}
|
746
|
-
|
747
|
-
/*
|
748
|
-
* Call +virDomainRestore+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainRestore]
|
749
|
-
*/
|
750
|
-
VALUE libvirt_dom_s_restore(VALUE klass, VALUE c, VALUE from) {
|
751
|
-
gen_call_void(virDomainRestore, connect_get(c),
|
752
|
-
connect_get(c), StringValueCStr(from));
|
753
|
-
}
|
754
|
-
|
755
|
-
/*
|
756
|
-
* call-seq:
|
757
|
-
* domain.info -> Libvirt::Domain::Info
|
758
|
-
*
|
759
|
-
* Call +virDomainGetInfo+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetInfo]
|
760
|
-
*/
|
761
|
-
VALUE libvirt_dom_info(VALUE s) {
|
762
|
-
virDomainPtr dom = domain_get(s);
|
763
|
-
virDomainInfo info;
|
764
|
-
int r;
|
765
|
-
VALUE result;
|
766
|
-
|
767
|
-
r = virDomainGetInfo(dom, &info);
|
768
|
-
_E(r < 0, create_error(e_RetrieveError, "virDomainGetInfo", "", conn(s)));
|
769
|
-
|
770
|
-
result = rb_class_new_instance(0, NULL, c_domain_info);
|
771
|
-
rb_iv_set(result, "@state", CHR2FIX(info.state));
|
772
|
-
rb_iv_set(result, "@max_mem", ULONG2NUM(info.maxMem));
|
773
|
-
rb_iv_set(result, "@memory", ULONG2NUM(info.memory));
|
774
|
-
rb_iv_set(result, "@nr_virt_cpu", INT2FIX((int) info.nrVirtCpu));
|
775
|
-
rb_iv_set(result, "@cpu_time", ULL2NUM(info.cpuTime));
|
776
|
-
return result;
|
777
|
-
}
|
778
|
-
|
779
|
-
|
780
|
-
/*
|
781
|
-
* Call +virDomainGetName+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetName]
|
782
|
-
*/
|
783
|
-
VALUE libvirt_dom_name(VALUE s) {
|
784
|
-
gen_call_string(virDomainGetName, conn(s), 0,
|
785
|
-
domain_get(s));
|
786
|
-
}
|
787
|
-
|
788
|
-
/*
|
789
|
-
* Call +virDomainGetID+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetID]
|
790
|
-
*/
|
791
|
-
VALUE libvirt_dom_id(VALUE s) {
|
792
|
-
virDomainPtr dom = domain_get(s);
|
793
|
-
unsigned int id;
|
794
|
-
|
795
|
-
id = virDomainGetID(dom);
|
796
|
-
_E(id < 0, create_error(e_RetrieveError, "virDomainGetID", "", conn(s)));
|
797
|
-
|
798
|
-
return UINT2NUM(id);
|
799
|
-
}
|
800
|
-
|
801
|
-
/*
|
802
|
-
* Call +virDomainGetUUIDString+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetUUIDString]
|
803
|
-
*/
|
804
|
-
VALUE libvirt_dom_uuid(VALUE s) {
|
805
|
-
virDomainPtr dom = domain_get(s);
|
806
|
-
char uuid[VIR_UUID_STRING_BUFLEN];
|
807
|
-
int r;
|
808
|
-
|
809
|
-
r = virDomainGetUUIDString(dom, uuid);
|
810
|
-
_E(r < 0, create_error(e_RetrieveError, "virDomainGetUUIDString", "", conn(s)));
|
811
|
-
|
812
|
-
return rb_str_new2((char *) uuid);
|
813
|
-
}
|
814
|
-
|
815
|
-
/*
|
816
|
-
* Call +virDomainGetOSType+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetOSType]
|
817
|
-
*/
|
818
|
-
VALUE libvirt_dom_os_type(VALUE s) {
|
819
|
-
gen_call_string(virDomainGetOSType, conn(s), 1,
|
820
|
-
domain_get(s));
|
821
|
-
}
|
822
|
-
|
823
|
-
/*
|
824
|
-
* Call +virDomainGetMaxMemory+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetMaxMemory]
|
825
|
-
*/
|
826
|
-
VALUE libvirt_dom_max_memory(VALUE s) {
|
827
|
-
virDomainPtr dom = domain_get(s);
|
828
|
-
unsigned long max_memory;
|
829
|
-
|
830
|
-
max_memory = virDomainGetMaxMemory(dom);
|
831
|
-
_E(max_memory == 0, create_error(e_RetrieveError, "virDomainGetMaxMemory", "", conn(s)));
|
832
|
-
|
833
|
-
return ULONG2NUM(max_memory);
|
834
|
-
}
|
835
|
-
|
836
|
-
/*
|
837
|
-
* Call +virDomainSetMaxMemory+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSetMaxMemory]
|
838
|
-
*/
|
839
|
-
VALUE libvirt_dom_max_memory_set(VALUE s, VALUE max_memory) {
|
840
|
-
virDomainPtr dom = domain_get(s);
|
841
|
-
int r;
|
842
|
-
|
843
|
-
r = virDomainSetMaxMemory(dom, NUM2ULONG(max_memory));
|
844
|
-
_E(r < 0, create_error(e_DefinitionError, "virDomainSetMaxMemory", "", conn(s)));
|
845
|
-
|
846
|
-
return ULONG2NUM(max_memory);
|
847
|
-
}
|
848
|
-
|
849
|
-
/*
|
850
|
-
* Call +virDomainSetMemory+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSetMemory]
|
851
|
-
*/
|
852
|
-
VALUE libvirt_dom_memory_set(VALUE s, VALUE memory) {
|
853
|
-
virDomainPtr dom = domain_get(s);
|
854
|
-
int r;
|
855
|
-
|
856
|
-
r = virDomainSetMemory(dom, NUM2ULONG(memory));
|
857
|
-
_E(r < 0, create_error(e_DefinitionError, "virDomainSetMemory", "", conn(s)));
|
858
|
-
|
859
|
-
return ULONG2NUM(memory);
|
860
|
-
}
|
861
|
-
|
862
|
-
/*
|
863
|
-
* Call +virDomainGetMaxVcpus+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetMaxVcpus]
|
864
|
-
*/
|
865
|
-
VALUE libvirt_dom_max_vcpus(VALUE s) {
|
866
|
-
virDomainPtr dom = domain_get(s);
|
867
|
-
int vcpus;
|
868
|
-
|
869
|
-
vcpus = virDomainGetMaxVcpus(dom);
|
870
|
-
_E(vcpus < 0, create_error(e_RetrieveError, "virDomainGetMaxVcpus", "", conn(s)));
|
871
|
-
|
872
|
-
return INT2NUM(vcpus);
|
873
|
-
}
|
874
|
-
|
875
|
-
|
876
|
-
/*
|
877
|
-
* Call +virDomainSetVcpus+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSetVcpus]
|
878
|
-
*/
|
879
|
-
VALUE libvirt_dom_vcpus_set(VALUE s, VALUE nvcpus) {
|
880
|
-
virDomainPtr dom = domain_get(s);
|
881
|
-
int r;
|
882
|
-
|
883
|
-
r = virDomainSetVcpus(dom, NUM2UINT(nvcpus));
|
884
|
-
_E(r < 0, create_error(e_DefinitionError, "virDomainSetVcpus", "", conn(s)));
|
885
|
-
|
886
|
-
return r;
|
887
|
-
}
|
888
|
-
|
889
|
-
/*
|
890
|
-
* Call +virDomainPinVcpu+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainPinVcpu]
|
891
|
-
*/
|
892
|
-
VALUE libvirt_dom_pin_vcpu(VALUE s, VALUE vcpu, VALUE cpulist) {
|
893
|
-
virDomainPtr dom = domain_get(s);
|
894
|
-
int r, i, len, maplen;
|
895
|
-
unsigned char *cpumap;
|
896
|
-
virNodeInfo nodeinfo;
|
897
|
-
virConnectPtr c = conn(s);
|
898
|
-
|
899
|
-
r = virNodeGetInfo(c, &nodeinfo);
|
900
|
-
_E(r < 0, create_error(e_RetrieveError, "virNodeGetInfo", "", c));
|
901
|
-
|
902
|
-
maplen = VIR_CPU_MAPLEN(nodeinfo.cpus);
|
903
|
-
cpumap = ALLOC_N(unsigned char, maplen);
|
904
|
-
MEMZERO(cpumap, unsigned char, maplen);
|
905
|
-
|
906
|
-
len = RARRAY(cpulist)->len;
|
907
|
-
for(i = 0; i < len; i++) {
|
908
|
-
VALUE e = rb_ary_entry(cpulist, i);
|
909
|
-
VIR_USE_CPU(cpumap, NUM2UINT(e));
|
910
|
-
}
|
911
|
-
|
912
|
-
r = virDomainPinVcpu(dom, NUM2UINT(vcpu), cpumap, maplen);
|
913
|
-
free(cpumap);
|
914
|
-
_E(r < 0, create_error(e_RetrieveError, "virDomainPinVcpu", "", c));
|
915
|
-
|
916
|
-
return r;
|
917
|
-
}
|
918
|
-
|
919
|
-
|
920
|
-
/*
|
921
|
-
* Call +virDomainGetXMLDesc+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetXMLDesc]
|
922
|
-
*/
|
923
|
-
VALUE libvirt_dom_xml_desc(int argc, VALUE *argv, VALUE s) {
|
924
|
-
VALUE flags;
|
925
|
-
|
926
|
-
rb_scan_args(argc, argv, "01", &flags);
|
927
|
-
|
928
|
-
if (NIL_P(flags))
|
929
|
-
flags = INT2FIX(0);
|
930
|
-
|
931
|
-
gen_call_string(virDomainGetXMLDesc, conn(s), 1,
|
932
|
-
domain_get(s), 0);
|
933
|
-
}
|
934
|
-
|
935
|
-
/*
|
936
|
-
* Call +virDomainUndefine+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainUndefine]
|
937
|
-
*/
|
938
|
-
VALUE libvirt_dom_undefine(VALUE s) {
|
939
|
-
gen_call_void(virDomainUndefine, conn(s),
|
940
|
-
domain_get(s));
|
941
|
-
}
|
942
|
-
|
943
|
-
/*
|
944
|
-
* Call +virDomainCreate+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainCreate]
|
945
|
-
*/
|
946
|
-
VALUE libvirt_dom_create(VALUE s) {
|
947
|
-
gen_call_void(virDomainCreate, conn(s),
|
948
|
-
domain_get(s));
|
949
|
-
}
|
950
|
-
|
951
|
-
/*
|
952
|
-
* Call +virDomainGetAutostart+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetAutostart]
|
953
|
-
*/
|
954
|
-
VALUE libvirt_dom_autostart(VALUE s){
|
955
|
-
virDomainPtr dom = domain_get(s);
|
956
|
-
int r, autostart;
|
957
|
-
|
958
|
-
r = virDomainGetAutostart(dom, &autostart);
|
959
|
-
_E(r < 0, create_error(e_RetrieveError, "virDomainAutostart", "", conn(s)));
|
960
|
-
|
961
|
-
return autostart ? Qtrue : Qfalse;
|
962
|
-
}
|
963
|
-
|
964
|
-
/*
|
965
|
-
* Call +virDomainSetAutostart+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSetAutostart]
|
966
|
-
*/
|
967
|
-
VALUE libvirt_dom_autostart_set(VALUE s, VALUE autostart) {
|
968
|
-
gen_call_void(virDomainSetAutostart, conn(s),
|
969
|
-
domain_get(s), RTEST(autostart) ? 1 : 0);
|
970
|
-
}
|
971
|
-
|
972
|
-
/*
|
973
|
-
* Call +virDomainCreateLinux+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainCreateLinux]
|
974
|
-
*/
|
975
|
-
VALUE libvirt_conn_create_linux(int argc, VALUE *argv, VALUE c) {
|
976
|
-
virDomainPtr dom;
|
977
|
-
virConnectPtr conn = connect_get(c);
|
978
|
-
char *xmlDesc;
|
979
|
-
VALUE flags, xml;
|
980
|
-
|
981
|
-
rb_scan_args(argc, argv, "11", &xml, &flags);
|
982
|
-
|
983
|
-
if (NIL_P(flags))
|
984
|
-
flags = INT2FIX(0);
|
985
|
-
|
986
|
-
xmlDesc = StringValueCStr(xml);
|
987
|
-
|
988
|
-
dom = virDomainCreateLinux(conn, xmlDesc, NUM2UINT(flags));
|
989
|
-
_E(dom == NULL, create_error(e_Error, "virDomainCreateLinux", "", conn));
|
990
|
-
|
991
|
-
return domain_new(dom, c);
|
992
|
-
}
|
993
|
-
|
994
|
-
/*
|
995
|
-
* Call +virDomainLookupByName+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainLookupByName]
|
996
|
-
*/
|
997
|
-
VALUE libvirt_conn_lookup_domain_by_name(VALUE c, VALUE name) {
|
998
|
-
virDomainPtr dom;
|
999
|
-
virConnectPtr conn = connect_get(c);
|
1000
|
-
|
1001
|
-
dom = virDomainLookupByName(conn, StringValueCStr(name));
|
1002
|
-
_E(dom == NULL, create_error(e_RetrieveError, "virDomainLookupByName", "", conn));
|
1003
|
-
|
1004
|
-
return domain_new(dom, c);
|
1005
|
-
}
|
1006
|
-
|
1007
|
-
/*
|
1008
|
-
* Call +virDomainLookupByID+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainLookupByID]
|
1009
|
-
*/
|
1010
|
-
VALUE libvirt_conn_lookup_domain_by_id(VALUE c, VALUE id) {
|
1011
|
-
virDomainPtr dom;
|
1012
|
-
virConnectPtr conn = connect_get(c);
|
1013
|
-
|
1014
|
-
dom = virDomainLookupByID(conn, NUM2INT(id));
|
1015
|
-
_E(dom == NULL, create_error(e_RetrieveError, "virDomainLookupByID", "", conn));
|
1016
|
-
|
1017
|
-
return domain_new(dom, c);
|
1018
|
-
}
|
1019
|
-
|
1020
|
-
/*
|
1021
|
-
* Call +virDomainLookupByUUIDString+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainLookupByUUIDString]
|
1022
|
-
*/
|
1023
|
-
VALUE libvirt_conn_lookup_domain_by_uuid(VALUE c, VALUE uuid) {
|
1024
|
-
virDomainPtr dom;
|
1025
|
-
virConnectPtr conn = connect_get(c);
|
1026
|
-
|
1027
|
-
dom = virDomainLookupByUUIDString(conn, StringValueCStr(uuid));
|
1028
|
-
_E(dom == NULL, create_error(e_RetrieveError, "virDomainLookupByUUID", "", conn));
|
1029
|
-
|
1030
|
-
return domain_new(dom, c);
|
1031
|
-
}
|
1032
|
-
|
1033
|
-
/*
|
1034
|
-
* Call +virDomainDefineXML+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainDefineXML]
|
1035
|
-
*/
|
1036
|
-
VALUE libvirt_conn_define_domain_xml(VALUE c, VALUE xml) {
|
1037
|
-
virDomainPtr dom;
|
1038
|
-
virConnectPtr conn = connect_get(c);
|
1039
|
-
|
1040
|
-
dom = virDomainDefineXML(conn, StringValueCStr(xml));
|
1041
|
-
_E(dom == NULL, create_error(e_DefinitionError, "virDomainDefineXML", "", conn));
|
1042
|
-
|
1043
|
-
return domain_new(dom, c);
|
1044
|
-
}
|
1045
|
-
|
1046
|
-
/*
|
1047
|
-
* Call +virDomainFree+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainFree]
|
1048
|
-
*/
|
1049
|
-
VALUE libvirt_dom_free(VALUE s) {
|
1050
|
-
gen_call_free(Domain, s);
|
1051
|
-
}
|
1052
|
-
|
1053
|
-
/*
|
1054
|
-
* Class Libvirt::Network
|
1055
|
-
*/
|
1056
|
-
|
1057
|
-
#if HAVE_TYPE_VIRNETWORKPTR
|
1058
|
-
/*
|
1059
|
-
* Call +virNetworkLookupByName+[http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkLookupByName]
|
1060
|
-
*/
|
1061
|
-
VALUE libvirt_conn_lookup_network_by_name(VALUE c, VALUE name) {
|
1062
|
-
virNetworkPtr netw;
|
1063
|
-
virConnectPtr conn = connect_get(c);
|
1064
|
-
|
1065
|
-
netw = virNetworkLookupByName(conn, StringValueCStr(name));
|
1066
|
-
_E(netw == NULL, create_error(e_RetrieveError, "virNetworkLookupByName", "", conn));
|
1067
|
-
|
1068
|
-
return network_new(netw, c);
|
1069
|
-
}
|
1070
|
-
|
1071
|
-
/*
|
1072
|
-
* Call +virNetworkLookupByUUIDString+[http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkLookupByUUIDString]
|
1073
|
-
*/
|
1074
|
-
VALUE libvirt_conn_lookup_network_by_uuid(VALUE c, VALUE uuid) {
|
1075
|
-
virNetworkPtr netw;
|
1076
|
-
virConnectPtr conn = connect_get(c);
|
1077
|
-
|
1078
|
-
netw = virNetworkLookupByUUIDString(conn, StringValueCStr(uuid));
|
1079
|
-
_E(netw == NULL, create_error(e_RetrieveError, "virNetworkLookupByUUID", "", conn));
|
1080
|
-
|
1081
|
-
return network_new(netw, c);
|
1082
|
-
}
|
1083
|
-
|
1084
|
-
/*
|
1085
|
-
* Call +virNetworkCreateXML+[http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkCreateXML]
|
1086
|
-
*/
|
1087
|
-
VALUE libvirt_conn_create_network_xml(VALUE c, VALUE xml) {
|
1088
|
-
virNetworkPtr netw;
|
1089
|
-
virConnectPtr conn = connect_get(c);
|
1090
|
-
char *xmlDesc;
|
1091
|
-
|
1092
|
-
xmlDesc = StringValueCStr(xml);
|
1093
|
-
|
1094
|
-
netw = virNetworkCreateXML(conn, xmlDesc);
|
1095
|
-
_E(netw == NULL, create_error(e_Error, "virNetworkCreateXML", "", conn));
|
1096
|
-
|
1097
|
-
return network_new(netw, c);
|
1098
|
-
}
|
1099
|
-
|
1100
|
-
/*
|
1101
|
-
* Call +virNetworkDefineXML+[http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkDefineXML]
|
1102
|
-
*/
|
1103
|
-
VALUE libvirt_conn_define_network_xml(VALUE c, VALUE xml) {
|
1104
|
-
virNetworkPtr netw;
|
1105
|
-
virConnectPtr conn = connect_get(c);
|
1106
|
-
|
1107
|
-
netw = virNetworkDefineXML(conn, StringValueCStr(xml));
|
1108
|
-
_E(netw == NULL, create_error(e_DefinitionError, "virNetworkDefineXML", "", conn));
|
1109
|
-
|
1110
|
-
return network_new(netw, c);
|
1111
|
-
}
|
1112
|
-
#endif
|
1113
|
-
|
1114
|
-
#if HAVE_TYPE_VIRNETWORKPTR
|
1115
|
-
/*
|
1116
|
-
* Call +virNetworkUndefine+[http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkUndefine]
|
1117
|
-
*/
|
1118
|
-
VALUE libvirt_netw_undefine(VALUE s) {
|
1119
|
-
gen_call_void(virNetworkUndefine, conn(s),
|
1120
|
-
network_get(s));
|
1121
|
-
}
|
1122
|
-
|
1123
|
-
/*
|
1124
|
-
* Call +virNetworkCreate+[http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkCreate]
|
1125
|
-
*/
|
1126
|
-
VALUE libvirt_netw_create(VALUE s) {
|
1127
|
-
gen_call_void(virNetworkCreate, conn(s),
|
1128
|
-
network_get(s));
|
1129
|
-
}
|
1130
|
-
|
1131
|
-
/*
|
1132
|
-
* Call +virNetworkDestroy+[http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkDestroy]
|
1133
|
-
*/
|
1134
|
-
VALUE libvirt_netw_destroy(VALUE s) {
|
1135
|
-
gen_call_void(virNetworkDestroy, conn(s),
|
1136
|
-
network_get(s));
|
1137
|
-
}
|
1138
|
-
|
1139
|
-
/*
|
1140
|
-
* Call +virNetworkGetName+[http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkGetName]
|
1141
|
-
*/
|
1142
|
-
VALUE libvirt_netw_name(VALUE s) {
|
1143
|
-
gen_call_string(virNetworkGetName, conn(s), 0,
|
1144
|
-
network_get(s));
|
1145
|
-
}
|
1146
|
-
|
1147
|
-
/*
|
1148
|
-
* Call +virNetworkGetUUIDString+[http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkGetUUIDString]
|
1149
|
-
*/
|
1150
|
-
VALUE libvirt_netw_uuid(VALUE s) {
|
1151
|
-
virNetworkPtr netw = network_get(s);
|
1152
|
-
char uuid[VIR_UUID_STRING_BUFLEN];
|
1153
|
-
int r;
|
1154
|
-
|
1155
|
-
r = virNetworkGetUUIDString(netw, uuid);
|
1156
|
-
_E(r < 0, create_error(e_RetrieveError, "virNetworkGetUUIDString", "", conn(s)));
|
1157
|
-
|
1158
|
-
return rb_str_new2((char *) uuid);
|
1159
|
-
}
|
1160
|
-
|
1161
|
-
/*
|
1162
|
-
* Call +virNetworkGetXMLDesc+[http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkGetXMLDesc]
|
1163
|
-
*/
|
1164
|
-
VALUE libvirt_netw_xml_desc(int argc, VALUE *argv, VALUE s) {
|
1165
|
-
VALUE flags;
|
1166
|
-
|
1167
|
-
rb_scan_args(argc, argv, "01", &flags);
|
1168
|
-
|
1169
|
-
if (NIL_P(flags))
|
1170
|
-
flags = INT2FIX(0);
|
1171
|
-
|
1172
|
-
gen_call_string(virNetworkGetXMLDesc, conn(s), 1,
|
1173
|
-
network_get(s), NUM2UINT(flags));
|
1174
|
-
}
|
1175
|
-
|
1176
|
-
/*
|
1177
|
-
* Call +virNetworkGetBridgeName+[http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkGetBridgeName]
|
1178
|
-
*/
|
1179
|
-
VALUE libvirt_netw_bridge_name(VALUE s) {
|
1180
|
-
gen_call_string(virNetworkGetBridgeName, conn(s), 1,
|
1181
|
-
network_get(s));
|
1182
|
-
}
|
1183
|
-
|
1184
|
-
/*
|
1185
|
-
* Call +virNetworkGetAutostart+[http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkGetAutostart]
|
1186
|
-
*/
|
1187
|
-
VALUE libvirt_netw_autostart(VALUE s){
|
1188
|
-
virNetworkPtr netw = network_get(s);
|
1189
|
-
int r, autostart;
|
1190
|
-
|
1191
|
-
r = virNetworkGetAutostart(netw, &autostart);
|
1192
|
-
_E(r < 0, create_error(e_RetrieveError, "virNetworkAutostart", "", conn(s)));
|
1193
|
-
|
1194
|
-
return autostart ? Qtrue : Qfalse;
|
1195
|
-
}
|
1196
|
-
|
1197
|
-
/*
|
1198
|
-
* Call +virNetworkSetAutostart+[http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkSetAutostart]
|
1199
|
-
*/
|
1200
|
-
VALUE libvirt_netw_autostart_set(VALUE s, VALUE autostart) {
|
1201
|
-
gen_call_void(virNetworkSetAutostart, conn(s),
|
1202
|
-
network_get(s), RTEST(autostart) ? 1 : 0);
|
1203
|
-
}
|
1204
|
-
|
1205
|
-
/*
|
1206
|
-
* Call +virNetworkFree+[http://www.libvirt.org/html/libvirt-libvirt.html#virNetworkFree]
|
1207
|
-
*/
|
1208
|
-
VALUE libvirt_netw_free(VALUE s) {
|
1209
|
-
gen_call_free(Network, s);
|
1210
|
-
}
|
1211
|
-
#endif
|
1212
|
-
|
1213
|
-
/*
|
1214
|
-
* Libvirt::StoragePool
|
1215
|
-
*/
|
1216
|
-
|
1217
|
-
#if HAVE_TYPE_VIRSTORAGEPOOLPTR
|
1218
|
-
/*
|
1219
|
-
* Call +virStoragePoolLookupByName+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolLookupByName]
|
1220
|
-
*/
|
1221
|
-
VALUE libvirt_conn_lookup_pool_by_name(VALUE c, VALUE name) {
|
1222
|
-
virStoragePoolPtr pool;
|
1223
|
-
virConnectPtr conn = connect_get(c);
|
1224
|
-
|
1225
|
-
pool = virStoragePoolLookupByName(conn, StringValueCStr(name));
|
1226
|
-
_E(pool == NULL, create_error(e_RetrieveError, "virStoragePoolLookupByName", "", conn));
|
1227
|
-
|
1228
|
-
return pool_new(pool, c);
|
1229
|
-
}
|
1230
|
-
|
1231
|
-
/*
|
1232
|
-
* Call +virStoragePoolLookupByUUIDString+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolLookupByUUIDString]
|
1233
|
-
*/
|
1234
|
-
VALUE libvirt_conn_lookup_pool_by_uuid(VALUE c, VALUE uuid) {
|
1235
|
-
virStoragePoolPtr pool;
|
1236
|
-
virConnectPtr conn = connect_get(c);
|
1237
|
-
|
1238
|
-
pool = virStoragePoolLookupByUUIDString(conn, StringValueCStr(uuid));
|
1239
|
-
_E(pool == NULL, create_error(e_RetrieveError, "virStoragePoolLookupByUUID", "", conn));
|
1240
|
-
|
1241
|
-
return pool_new(pool, c);
|
1242
|
-
}
|
1243
|
-
|
1244
|
-
/*
|
1245
|
-
* Call +virStoragePoolLookupByVolume+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolLookupByVolume]
|
1246
|
-
*/
|
1247
|
-
VALUE libvirt_vol_get_pool(VALUE v) {
|
1248
|
-
virStoragePoolPtr pool;
|
1249
|
-
|
1250
|
-
pool = virStoragePoolLookupByVolume(vol_get(v));
|
1251
|
-
_E(pool == NULL, create_error(e_RetrieveError, "virStoragePoolLookupByVolume", "", conn(v)));
|
1252
|
-
|
1253
|
-
return pool_new(pool, conn_attr(v));
|
1254
|
-
}
|
1255
|
-
|
1256
|
-
/*
|
1257
|
-
* Call +virStoragePoolCreateXML+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolCreateXML]
|
1258
|
-
*/
|
1259
|
-
VALUE libvirt_conn_create_pool_xml(int argc, VALUE *argv, VALUE c) {
|
1260
|
-
virStoragePoolPtr pool;
|
1261
|
-
virConnectPtr conn = connect_get(c);
|
1262
|
-
char *xmlDesc;
|
1263
|
-
VALUE xml, flags;
|
1264
|
-
|
1265
|
-
rb_scan_args(argc, argv, "11", &xml, &flags);
|
1266
|
-
|
1267
|
-
if (NIL_P(flags))
|
1268
|
-
flags = INT2FIX(0);
|
1269
|
-
|
1270
|
-
xmlDesc = StringValueCStr(xml);
|
1271
|
-
|
1272
|
-
pool = virStoragePoolCreateXML(conn, xmlDesc, NUM2UINT(flags));
|
1273
|
-
_E(pool == NULL, create_error(e_Error, "virStoragePoolCreateXML", "", conn));
|
1274
|
-
|
1275
|
-
return pool_new(pool, c);
|
1276
|
-
}
|
1277
|
-
|
1278
|
-
/*
|
1279
|
-
* Call +virStoragePoolDefineXML+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolDefineXML]
|
1280
|
-
*/
|
1281
|
-
VALUE libvirt_conn_define_pool_xml(int argc, VALUE *argv, VALUE c) {
|
1282
|
-
virStoragePoolPtr pool;
|
1283
|
-
virConnectPtr conn = connect_get(c);
|
1284
|
-
VALUE xml, flags;
|
1285
|
-
|
1286
|
-
rb_scan_args(argc, argv, "11", &xml, &flags);
|
1287
|
-
|
1288
|
-
if (NIL_P(flags))
|
1289
|
-
flags = INT2FIX(0);
|
1290
|
-
|
1291
|
-
pool = virStoragePoolDefineXML(conn, StringValueCStr(xml), NUM2UINT(flags));
|
1292
|
-
_E(pool == NULL, create_error(e_DefinitionError, "virStoragePoolDefineXML", "", conn));
|
1293
|
-
|
1294
|
-
return pool_new(pool, c);
|
1295
|
-
}
|
1296
|
-
|
1297
|
-
/*
|
1298
|
-
* Call +virConnectFindStoragePoolSources+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectFindStoragePoolSources]
|
1299
|
-
*/
|
1300
|
-
VALUE libvirt_conn_find_storage_pool_sources(int argc, VALUE *argv, VALUE c) {
|
1301
|
-
virConnectPtr conn = connect_get(c);
|
1302
|
-
VALUE type, srcSpec_val, flags;
|
1303
|
-
const char *srcSpec;
|
1304
|
-
|
1305
|
-
rb_scan_args(argc, argv, "12", &type, &srcSpec_val, &flags);
|
1306
|
-
|
1307
|
-
srcSpec = get_string_or_nil(srcSpec_val);
|
1308
|
-
|
1309
|
-
if (NIL_P(flags))
|
1310
|
-
flags = INT2FIX(0);
|
1311
|
-
|
1312
|
-
gen_call_string(virConnectFindStoragePoolSources, conn, 1, conn,
|
1313
|
-
StringValueCStr(type), srcSpec, NUM2UINT(flags));
|
1314
|
-
}
|
1315
|
-
|
1316
|
-
/*
|
1317
|
-
* Call +virStoragePoolBuild+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolBuild]
|
1318
|
-
*/
|
1319
|
-
VALUE libvirt_pool_build(int argc, VALUE *argv, VALUE p) {
|
1320
|
-
VALUE flags;
|
1321
|
-
|
1322
|
-
rb_scan_args(argc, argv, "01", &flags);
|
1323
|
-
|
1324
|
-
if (NIL_P(flags))
|
1325
|
-
flags = INT2FIX(0);
|
1326
|
-
|
1327
|
-
gen_call_void(virStoragePoolBuild, conn(p),
|
1328
|
-
pool_get(p), NUM2UINT(flags));
|
1329
|
-
}
|
1330
|
-
|
1331
|
-
/*
|
1332
|
-
* Call +virStoragePoolUndefine+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolUndefine]
|
1333
|
-
*/
|
1334
|
-
VALUE libvirt_pool_undefine(VALUE p) {
|
1335
|
-
gen_call_void(virStoragePoolUndefine, conn(p),
|
1336
|
-
pool_get(p));
|
1337
|
-
}
|
1338
|
-
|
1339
|
-
/*
|
1340
|
-
* Call +virStoragePoolCreate+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolCreate]
|
1341
|
-
*/
|
1342
|
-
VALUE libvirt_pool_create(int argc, VALUE *argv, VALUE p) {
|
1343
|
-
VALUE flags;
|
1344
|
-
|
1345
|
-
rb_scan_args(argc, argv, "01", &flags);
|
1346
|
-
|
1347
|
-
if (NIL_P(flags))
|
1348
|
-
flags = INT2FIX(0);
|
1349
|
-
|
1350
|
-
gen_call_void(virStoragePoolCreate, conn(p),
|
1351
|
-
pool_get(p), NUM2UINT(flags));
|
1352
|
-
}
|
1353
|
-
|
1354
|
-
/*
|
1355
|
-
* Call +virStoragePoolDestroy+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolDestroy]
|
1356
|
-
*/
|
1357
|
-
VALUE libvirt_pool_destroy(VALUE p) {
|
1358
|
-
gen_call_void(virStoragePoolDestroy, conn(p),
|
1359
|
-
pool_get(p));
|
1360
|
-
}
|
1361
|
-
|
1362
|
-
/*
|
1363
|
-
* Call +virStoragePoolDelete+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolDelete]
|
1364
|
-
*/
|
1365
|
-
VALUE libvirt_pool_delete(int argc, VALUE *argv, VALUE p) {
|
1366
|
-
VALUE flags;
|
1367
|
-
|
1368
|
-
rb_scan_args(argc, argv, "01", &flags);
|
1369
|
-
|
1370
|
-
if (NIL_P(flags))
|
1371
|
-
flags = INT2FIX(0);
|
1372
|
-
|
1373
|
-
gen_call_void(virStoragePoolDelete, conn(p),
|
1374
|
-
pool_get(p), NUM2UINT(flags));
|
1375
|
-
}
|
1376
|
-
|
1377
|
-
/*
|
1378
|
-
* Call +virStoragePoolRefresh+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolRefresh]
|
1379
|
-
*/
|
1380
|
-
VALUE libvirt_pool_refresh(int argc, VALUE *argv, VALUE p) {
|
1381
|
-
VALUE flags;
|
1382
|
-
|
1383
|
-
rb_scan_args(argc, argv, "01", &flags);
|
1384
|
-
|
1385
|
-
if (NIL_P(flags))
|
1386
|
-
flags = INT2FIX(0);
|
1387
|
-
|
1388
|
-
gen_call_void(virStoragePoolRefresh, conn(p),
|
1389
|
-
pool_get(p), NUM2UINT(flags));
|
1390
|
-
}
|
1391
|
-
|
1392
|
-
/*
|
1393
|
-
* Call +virStoragePoolGetName+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolGetName]
|
1394
|
-
*/
|
1395
|
-
VALUE libvirt_pool_name(VALUE s) {
|
1396
|
-
const char *name;
|
1397
|
-
|
1398
|
-
name = virStoragePoolGetName(pool_get(s));
|
1399
|
-
_E(name == NULL, create_error(e_RetrieveError, "virStoragePoolGetName", "", conn(s)));
|
1400
|
-
|
1401
|
-
return rb_str_new2(name);
|
1402
|
-
}
|
1403
|
-
|
1404
|
-
/*
|
1405
|
-
* Call +virStoragePoolGetUUIDString+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolGetUUIDString]
|
1406
|
-
*/
|
1407
|
-
VALUE libvirt_pool_uuid(VALUE s) {
|
1408
|
-
char uuid[VIR_UUID_STRING_BUFLEN];
|
1409
|
-
int r;
|
1410
|
-
|
1411
|
-
r = virStoragePoolGetUUIDString(pool_get(s), uuid);
|
1412
|
-
_E(r < 0, create_error(e_RetrieveError, "virStoragePoolGetUUIDString", "", conn(s)));
|
1413
|
-
|
1414
|
-
return rb_str_new2((char *) uuid);
|
1415
|
-
}
|
1416
|
-
|
1417
|
-
/*
|
1418
|
-
* Call +virStoragePoolGetInfo+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolGetInfo]
|
48
|
+
* call-seq:
|
49
|
+
* Libvirt::version(type) -> [ libvirt_version, type_version ]
|
50
|
+
*
|
51
|
+
* Call
|
52
|
+
* +virGetVersion+[http://www.libvirt.org/html/libvirt-libvirt.html#virGetVersion]
|
53
|
+
* to get the version of libvirt and of the hypervisor TYPE. Returns an
|
54
|
+
* array with two entries of type Libvirt::Version.
|
1419
55
|
*/
|
1420
|
-
VALUE
|
1421
|
-
|
56
|
+
VALUE libvirt_version(int argc, VALUE *argv, VALUE m) {
|
57
|
+
unsigned long libVer;
|
58
|
+
VALUE type;
|
59
|
+
unsigned long typeVer;
|
1422
60
|
int r;
|
1423
|
-
VALUE result;
|
1424
|
-
|
1425
|
-
r = virStoragePoolGetInfo(pool_get(s), &info);
|
1426
|
-
_E(r < 0, create_error(e_RetrieveError, "virStoragePoolGetInfo", "", conn(s)));
|
1427
|
-
|
1428
|
-
result = rb_class_new_instance(0, NULL, c_storage_pool_info);
|
1429
|
-
rb_iv_set(result, "@state", INT2FIX(info.state));
|
1430
|
-
rb_iv_set(result, "@capacity", ULL2NUM(info.capacity));
|
1431
|
-
rb_iv_set(result, "@allocation", ULL2NUM(info.allocation));
|
1432
|
-
rb_iv_set(result, "@available", ULL2NUM(info.available));
|
1433
|
-
|
1434
|
-
return result;
|
1435
|
-
}
|
1436
|
-
|
1437
|
-
/*
|
1438
|
-
* Call +virStoragePoolGetXMLDesc+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolGetXMLDesc]
|
1439
|
-
*/
|
1440
|
-
VALUE libvirt_pool_xml_desc(int argc, VALUE *argv, VALUE s) {
|
1441
|
-
VALUE flags;
|
1442
|
-
|
1443
|
-
rb_scan_args(argc, argv, "01", &flags);
|
1444
|
-
|
1445
|
-
if (NIL_P(flags))
|
1446
|
-
flags = INT2FIX(0);
|
1447
|
-
|
1448
|
-
gen_call_string(virStoragePoolGetXMLDesc, conn(s), 1,
|
1449
|
-
pool_get(s), NUM2UINT(flags));
|
1450
|
-
}
|
1451
|
-
|
1452
|
-
/*
|
1453
|
-
* Call +virStoragePoolGetAutostart+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolGetAutostart]
|
1454
|
-
*/
|
1455
|
-
VALUE libvirt_pool_autostart(VALUE s){
|
1456
|
-
int r, autostart;
|
61
|
+
VALUE result, rargv[2];
|
1457
62
|
|
1458
|
-
|
1459
|
-
_E(r < 0, create_error(e_RetrieveError, "virStoragePoolGetAutostart", "", conn(s)));
|
63
|
+
rb_scan_args(argc, argv, "01", &type);
|
1460
64
|
|
1461
|
-
|
1462
|
-
|
1463
|
-
|
1464
|
-
/*
|
1465
|
-
* Call +virStoragePoolSetAutostart+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolSetAutostart]
|
1466
|
-
*/
|
1467
|
-
VALUE libvirt_pool_autostart_set(VALUE s, VALUE autostart) {
|
1468
|
-
gen_call_void(virStoragePoolSetAutostart, conn(s),
|
1469
|
-
pool_get(s), RTEST(autostart) ? 1 : 0);
|
1470
|
-
}
|
1471
|
-
|
1472
|
-
/*
|
1473
|
-
* Call +virStoragePoolNumOfVolumes+[http://www.libvirt.org/html/libvirt-libvirt.html#virStoragePoolNumOfVolumes]
|
1474
|
-
*/
|
1475
|
-
VALUE libvirt_pool_num_of_volumes(VALUE s) {
|
1476
|
-
int n = virStoragePoolNumOfVolumes(pool_get(s));
|
1477
|
-
_E(n < 0, create_error(e_RetrieveError, "virStoragePoolNumOfVolumes", "", conn(s)));
|
65
|
+
r = virGetVersion(&libVer, get_string_or_nil(type), &typeVer);
|
66
|
+
_E(r < 0, create_error(rb_eArgError, "virGetVersion",
|
67
|
+
"Failed to get version", NULL));
|
1478
68
|
|
1479
|
-
|
1480
|
-
|
1481
|
-
|
1482
|
-
|
1483
|
-
|
1484
|
-
|
1485
|
-
|
1486
|
-
int i, r, num;
|
1487
|
-
char **names;
|
1488
|
-
virStoragePoolPtr pool = pool_get(s);
|
1489
|
-
VALUE result;
|
1490
|
-
|
1491
|
-
num = virStoragePoolNumOfVolumes(pool);
|
1492
|
-
_E(num < 0, create_error(e_RetrieveError, "virStoragePoolNumOfVolumes", "", conn(s)));
|
1493
|
-
if (num == 0) {
|
1494
|
-
result = rb_ary_new2(num);
|
1495
|
-
return result;
|
1496
|
-
}
|
1497
|
-
|
1498
|
-
names = ALLOC_N(char *, num);
|
1499
|
-
r = virStoragePoolListVolumes(pool, names, num);
|
1500
|
-
if (r < 0) {
|
1501
|
-
free(names);
|
1502
|
-
_E(r < 0, create_error(e_RetrieveError, "virStoragePoolListVolumes", "", conn(s)));
|
1503
|
-
}
|
1504
|
-
|
1505
|
-
result = rb_ary_new2(num);
|
1506
|
-
for (i=0; i<num; i++) {
|
1507
|
-
rb_ary_push(result, rb_str_new2(names[i]));
|
1508
|
-
// FIXME: Should these really be freed ?
|
1509
|
-
free(names[i]);
|
1510
|
-
}
|
1511
|
-
free(names);
|
69
|
+
result = rb_ary_new2(2);
|
70
|
+
rargv[0] = rb_str_new2("libvirt");
|
71
|
+
rargv[1] = ULONG2NUM(libVer);
|
72
|
+
rb_ary_push(result, rb_class_new_instance(2, rargv, c_libvirt_version));
|
73
|
+
rargv[0] = type;
|
74
|
+
rargv[1] = ULONG2NUM(typeVer);
|
75
|
+
rb_ary_push(result, rb_class_new_instance(2, rargv, c_libvirt_version));
|
1512
76
|
return result;
|
1513
77
|
}
|
1514
78
|
|
1515
|
-
|
1516
|
-
|
1517
|
-
|
1518
|
-
|
1519
|
-
|
1520
|
-
}
|
1521
|
-
#endif
|
1522
|
-
|
1523
|
-
/*
|
1524
|
-
* Libvirt::StorageVol
|
1525
|
-
*/
|
1526
|
-
#if HAVE_TYPE_VIRSTORAGEVOLPTR
|
1527
|
-
/*
|
1528
|
-
* Call +virStorageVolLookupByName+[http://www.libvirt.org/html/libvirt-libvirt.html#virStorageVolLookupByName]
|
1529
|
-
*/
|
1530
|
-
VALUE libvirt_pool_lookup_vol_by_name(VALUE p, VALUE name) {
|
1531
|
-
virStorageVolPtr vol;
|
1532
|
-
|
1533
|
-
vol = virStorageVolLookupByName(pool_get(p), StringValueCStr(name));
|
1534
|
-
_E(vol == NULL, create_error(e_RetrieveError, "virStorageVolLookupByName", "", conn(p)));
|
1535
|
-
|
1536
|
-
return vol_new(vol, conn_attr(p));
|
1537
|
-
}
|
1538
|
-
|
1539
|
-
/*
|
1540
|
-
* Call +virStorageVolLookupByKey+[http://www.libvirt.org/html/libvirt-libvirt.html#virStorageVolLookupByKey]
|
1541
|
-
*/
|
1542
|
-
VALUE libvirt_pool_lookup_vol_by_key(VALUE p, VALUE key) {
|
1543
|
-
virStorageVolPtr vol;
|
1544
|
-
|
1545
|
-
// FIXME: Why does this take a connection, not a pool ?
|
1546
|
-
vol = virStorageVolLookupByKey(conn(p), StringValueCStr(key));
|
1547
|
-
_E(vol == NULL, create_error(e_RetrieveError, "virStorageVolLookupByKey", "", conn(p)));
|
1548
|
-
|
1549
|
-
return vol_new(vol, conn_attr(p));
|
1550
|
-
}
|
1551
|
-
|
1552
|
-
/*
|
1553
|
-
* Call +virStorageVolLookupByPath+[http://www.libvirt.org/html/libvirt-libvirt.html#virStorageVolLookupByPath]
|
1554
|
-
*/
|
1555
|
-
VALUE libvirt_pool_lookup_vol_by_path(VALUE p, VALUE path) {
|
1556
|
-
virStorageVolPtr vol;
|
1557
|
-
|
1558
|
-
// FIXME: Why does this take a connection, not a pool ?
|
1559
|
-
vol = virStorageVolLookupByPath(conn(p), StringValueCStr(path));
|
1560
|
-
_E(vol == NULL, create_error(e_RetrieveError, "virStorageVolLookupByPath", "", conn(p)));
|
1561
|
-
|
1562
|
-
return vol_new(vol, conn_attr(p));
|
1563
|
-
}
|
1564
|
-
|
1565
|
-
/*
|
1566
|
-
* Call +virStorageVolGetName+[http://www.libvirt.org/html/libvirt-libvirt.html#virStorageVolGetName]
|
1567
|
-
*/
|
1568
|
-
VALUE libvirt_vol_name(VALUE v) {
|
1569
|
-
gen_call_string(virStorageVolGetName, conn(v), 0,
|
1570
|
-
vol_get(v));
|
1571
|
-
}
|
1572
|
-
|
1573
|
-
/*
|
1574
|
-
* Call +virStorageVolGetKey+[http://www.libvirt.org/html/libvirt-libvirt.html#virStorageVolGetKey]
|
1575
|
-
*/
|
1576
|
-
VALUE libvirt_vol_key(VALUE v) {
|
1577
|
-
gen_call_string(virStorageVolGetKey, conn(v), 0,
|
1578
|
-
vol_get(v));
|
1579
|
-
}
|
1580
|
-
|
1581
|
-
/*
|
1582
|
-
* Call +virStorageVolCreateXML+[http://www.libvirt.org/html/libvirt-libvirt.html#virStorageVolCreateXML]
|
1583
|
-
*/
|
1584
|
-
VALUE libvirt_pool_vol_create_xml(int argc, VALUE *argv, VALUE p) {
|
1585
|
-
virStorageVolPtr vol;
|
1586
|
-
virConnectPtr c = conn(p);
|
1587
|
-
char *xmlDesc;
|
1588
|
-
VALUE xml, flags;
|
1589
|
-
|
1590
|
-
rb_scan_args(argc, argv, "11", &xml, &flags);
|
1591
|
-
|
1592
|
-
if (NIL_P(flags))
|
1593
|
-
flags = INT2FIX(0);
|
1594
|
-
|
1595
|
-
xmlDesc = StringValueCStr(xml);
|
1596
|
-
|
1597
|
-
vol = virStorageVolCreateXML(pool_get(p), xmlDesc, NUM2UINT(flags));
|
1598
|
-
_E(vol == NULL, create_error(e_Error, "virNetworkCreateXML", "", c));
|
1599
|
-
|
1600
|
-
return vol_new(vol, conn_attr(p));
|
1601
|
-
}
|
1602
|
-
|
1603
|
-
/*
|
1604
|
-
* Call +virStorageVolDelete+[http://www.libvirt.org/html/libvirt-libvirt.html#virStorageVolDelete]
|
1605
|
-
*/
|
1606
|
-
VALUE libvirt_vol_delete(int argc, VALUE *argv, VALUE v) {
|
1607
|
-
VALUE flags;
|
1608
|
-
|
1609
|
-
rb_scan_args(argc, argv, "01", &flags);
|
1610
|
-
|
1611
|
-
if (NIL_P(flags))
|
1612
|
-
flags = INT2FIX(0);
|
79
|
+
static VALUE internal_open(int argc, VALUE *argv, VALUE m, int readonly)
|
80
|
+
{
|
81
|
+
VALUE uri;
|
82
|
+
char *uri_c;
|
83
|
+
virConnectPtr conn;
|
1613
84
|
|
1614
|
-
|
1615
|
-
vol_get(v), NUM2UINT(flags));
|
1616
|
-
}
|
85
|
+
rb_scan_args(argc, argv, "01", &uri);
|
1617
86
|
|
1618
|
-
|
1619
|
-
* Call +virStorageVolGetInfo+[http://www.libvirt.org/html/libvirt-libvirt.html#virStorageVolGetInfo]
|
1620
|
-
*/
|
1621
|
-
VALUE libvirt_vol_info(VALUE v) {
|
1622
|
-
virStorageVolInfo info;
|
1623
|
-
int r;
|
1624
|
-
VALUE result;
|
87
|
+
uri_c = get_string_or_nil(uri);
|
1625
88
|
|
1626
|
-
|
1627
|
-
|
89
|
+
if (readonly)
|
90
|
+
conn = virConnectOpenReadOnly(uri_c);
|
91
|
+
else
|
92
|
+
conn = virConnectOpen(uri_c);
|
1628
93
|
|
1629
|
-
|
1630
|
-
|
1631
|
-
rb_iv_set(result, "@capacity", ULL2NUM(info.capacity));
|
1632
|
-
rb_iv_set(result, "@allocation", ULL2NUM(info.allocation));
|
94
|
+
if (conn == NULL)
|
95
|
+
rb_raise(e_ConnectionError, "Failed to open%sconnection to '%s'", readonly ? " readonly " : " ", uri_c);
|
1633
96
|
|
1634
|
-
return
|
97
|
+
return connect_new(conn);
|
1635
98
|
}
|
1636
99
|
|
1637
100
|
/*
|
1638
|
-
*
|
101
|
+
* call-seq:
|
102
|
+
* Libvirt::open(url) -> Libvirt::Connect
|
103
|
+
*
|
104
|
+
* Call
|
105
|
+
* +virConnectOpen+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectOpen]
|
106
|
+
* to open a connection to a URL. Returns a new Libvirt::Connect object.
|
1639
107
|
*/
|
1640
|
-
VALUE
|
1641
|
-
|
1642
|
-
|
1643
|
-
rb_scan_args(argc, argv, "01", &flags);
|
1644
|
-
|
1645
|
-
if (NIL_P(flags))
|
1646
|
-
flags = INT2FIX(0);
|
1647
|
-
|
1648
|
-
gen_call_string(virStorageVolGetXMLDesc, conn(v), 1,
|
1649
|
-
vol_get(v), NUM2UINT(flags));
|
108
|
+
VALUE libvirt_open(int argc, VALUE *argv, VALUE m) {
|
109
|
+
return internal_open(argc, argv, m, 0);
|
1650
110
|
}
|
1651
111
|
|
1652
112
|
/*
|
1653
|
-
*
|
113
|
+
* call-seq:
|
114
|
+
* Libvirt::openReadOnly(url) -> Libvirt::Connect
|
115
|
+
*
|
116
|
+
* Call
|
117
|
+
* +virConnectOpenReadOnly+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectOpenReadOnly]
|
118
|
+
* to open a read-only connection to a URL. Returns a new Libvirt::Connect
|
119
|
+
* object.
|
1654
120
|
*/
|
1655
|
-
VALUE
|
1656
|
-
|
1657
|
-
vol_get(v));
|
121
|
+
VALUE libvirt_open_read_only(int argc, VALUE *argv, VALUE m) {
|
122
|
+
return internal_open(argc, argv, m, 1);
|
1658
123
|
}
|
1659
124
|
|
1660
125
|
/*
|
1661
|
-
*
|
126
|
+
* Module Libvirt
|
1662
127
|
*/
|
1663
|
-
VALUE libvirt_vol_free(VALUE s) {
|
1664
|
-
gen_call_free(StorageVol, s);
|
1665
|
-
}
|
1666
|
-
#endif
|
1667
|
-
|
1668
|
-
static void init_storage(void) {
|
1669
|
-
/*
|
1670
|
-
* Class Libvirt::StoragePool and Libvirt::StoragePoolInfo
|
1671
|
-
*/
|
1672
|
-
#if HAVE_TYPE_VIRSTORAGEPOOLPTR
|
1673
|
-
c_storage_pool_info = rb_define_class_under(m_libvirt, "StoragePoolInfo",
|
1674
|
-
rb_cObject);
|
1675
|
-
rb_define_attr(c_storage_pool_info, "state", 1, 0);
|
1676
|
-
rb_define_attr(c_storage_pool_info, "capacity", 1, 0);
|
1677
|
-
rb_define_attr(c_storage_pool_info, "allocation", 1, 0);
|
1678
|
-
rb_define_attr(c_storage_pool_info, "available", 1, 0);
|
1679
|
-
|
1680
|
-
c_storage_pool = rb_define_class_under(m_libvirt, "StoragePool",
|
1681
|
-
rb_cObject);
|
1682
|
-
#define DEF_POOLCONST(name) \
|
1683
|
-
rb_define_const(c_storage_pool, #name, INT2NUM(VIR_STORAGE_POOL_##name))
|
1684
|
-
/* virStoragePoolState */
|
1685
|
-
DEF_POOLCONST(INACTIVE);
|
1686
|
-
DEF_POOLCONST(BUILDING);
|
1687
|
-
DEF_POOLCONST(RUNNING);
|
1688
|
-
DEF_POOLCONST(DEGRADED);
|
1689
|
-
/* virStoragePoolBuildFlags */
|
1690
|
-
DEF_POOLCONST(BUILD_NEW);
|
1691
|
-
DEF_POOLCONST(BUILD_REPAIR);
|
1692
|
-
DEF_POOLCONST(BUILD_RESIZE);
|
1693
|
-
/* virStoragePoolDeleteFlags */
|
1694
|
-
DEF_POOLCONST(DELETE_NORMAL);
|
1695
|
-
DEF_POOLCONST(DELETE_ZEROED);
|
1696
|
-
#undef DEF_POOLCONST
|
1697
|
-
/* Creating/destroying pools */
|
1698
|
-
rb_define_method(c_storage_pool, "build", libvirt_pool_build, -1);
|
1699
|
-
rb_define_method(c_storage_pool, "undefine", libvirt_pool_undefine, 0);
|
1700
|
-
rb_define_method(c_storage_pool, "create", libvirt_pool_create, -1);
|
1701
|
-
rb_define_method(c_storage_pool, "destroy", libvirt_pool_destroy, 0);
|
1702
|
-
rb_define_method(c_storage_pool, "delete", libvirt_pool_delete, -1);
|
1703
|
-
rb_define_method(c_storage_pool, "refresh", libvirt_pool_refresh, -1);
|
1704
|
-
/* StoragePool information */
|
1705
|
-
rb_define_method(c_storage_pool, "name", libvirt_pool_name, 0);
|
1706
|
-
rb_define_method(c_storage_pool, "uuid", libvirt_pool_uuid, 0);
|
1707
|
-
rb_define_method(c_storage_pool, "info", libvirt_pool_info, 0);
|
1708
|
-
rb_define_method(c_storage_pool, "xml_desc", libvirt_pool_xml_desc, -1);
|
1709
|
-
rb_define_method(c_storage_pool, "autostart", libvirt_pool_autostart, 0);
|
1710
|
-
rb_define_method(c_storage_pool, "autostart=",
|
1711
|
-
libvirt_pool_autostart_set, 1);
|
1712
|
-
/* List/lookup storage volumes within a pool */
|
1713
|
-
rb_define_method(c_storage_pool, "num_of_volumes",
|
1714
|
-
libvirt_pool_num_of_volumes, 0);
|
1715
|
-
rb_define_method(c_storage_pool, "list_volumes",
|
1716
|
-
libvirt_pool_list_volumes, 0);
|
1717
|
-
/* Lookup volumes based on various attributes */
|
1718
|
-
rb_define_method(c_storage_pool, "lookup_volume_by_name",
|
1719
|
-
libvirt_pool_lookup_vol_by_name, 1);
|
1720
|
-
rb_define_method(c_storage_pool, "lookup_volume_by_key",
|
1721
|
-
libvirt_pool_lookup_vol_by_key, 1);
|
1722
|
-
rb_define_method(c_storage_pool, "lookup_volume_by_path",
|
1723
|
-
libvirt_pool_lookup_vol_by_path, 1);
|
1724
|
-
rb_define_method(c_storage_pool, "free", libvirt_pool_free, 0);
|
1725
|
-
rb_define_method(c_storage_pool, "create_vol_xml", libvirt_pool_vol_create_xml, -1);
|
1726
|
-
#endif
|
1727
|
-
|
1728
|
-
#if HAVE_TYPE_VIRSTORAGEVOLPTR
|
1729
|
-
/*
|
1730
|
-
* Class Libvirt::StorageVol and Libvirt::StorageVolInfo
|
1731
|
-
*/
|
1732
|
-
c_storage_vol_info = rb_define_class_under(m_libvirt, "StorageVolInfo",
|
1733
|
-
rb_cObject);
|
1734
|
-
rb_define_attr(c_storage_vol_info, "type", 1, 0);
|
1735
|
-
rb_define_attr(c_storage_vol_info, "capacity", 1, 0);
|
1736
|
-
rb_define_attr(c_storage_vol_info, "allocation", 1, 0);
|
1737
|
-
|
1738
|
-
c_storage_vol = rb_define_class_under(m_libvirt, "StorageVol",
|
1739
|
-
rb_cObject);
|
1740
|
-
#define DEF_VOLCONST(name) \
|
1741
|
-
rb_define_const(c_storage_vol, #name, INT2NUM(VIR_STORAGE_VOL_##name))
|
1742
|
-
/* virStorageVolType */
|
1743
|
-
DEF_VOLCONST(FILE);
|
1744
|
-
DEF_VOLCONST(BLOCK);
|
1745
|
-
/* virStorageVolDeleteFlags */
|
1746
|
-
DEF_VOLCONST(DELETE_NORMAL);
|
1747
|
-
DEF_VOLCONST(DELETE_ZEROED);
|
1748
|
-
#undef DEF_VOLCONST
|
1749
|
-
|
1750
|
-
rb_define_method(c_storage_vol, "pool", libvirt_vol_get_pool, 0);
|
1751
|
-
rb_define_method(c_storage_vol, "name", libvirt_vol_name, 0);
|
1752
|
-
rb_define_method(c_storage_vol, "key", libvirt_vol_key, 0);
|
1753
|
-
rb_define_method(c_storage_vol, "delete", libvirt_vol_delete, -1);
|
1754
|
-
rb_define_method(c_storage_vol, "info", libvirt_vol_info, 0);
|
1755
|
-
rb_define_method(c_storage_vol, "xml_desc", libvirt_vol_xml_desc, -1);
|
1756
|
-
rb_define_method(c_storage_vol, "path", libvirt_vol_path, 0);
|
1757
|
-
rb_define_method(c_storage_vol, "free", libvirt_vol_free, 0);
|
1758
|
-
#endif
|
1759
|
-
}
|
1760
|
-
|
1761
128
|
void Init__libvirt() {
|
1762
129
|
int r;
|
1763
130
|
|
@@ -1770,187 +137,33 @@ void Init__libvirt() {
|
|
1770
137
|
* Libvirt Errors
|
1771
138
|
*/
|
1772
139
|
e_Error = rb_define_class_under(m_libvirt, "Error",
|
1773
|
-
|
140
|
+
rb_eStandardError);
|
1774
141
|
e_ConnectionError = rb_define_class_under(m_libvirt, "ConnectionError",
|
1775
|
-
|
142
|
+
e_Error);
|
1776
143
|
e_DefinitionError = rb_define_class_under(m_libvirt, "DefinitionError",
|
1777
|
-
|
144
|
+
e_Error);
|
1778
145
|
e_RetrieveError = rb_define_class_under(m_libvirt, "RetrieveError",
|
1779
|
-
|
146
|
+
e_Error);
|
1780
147
|
|
1781
148
|
// create 'libvirt_function_name' and 'vir_connect_ptr' attributes on e_Error class
|
1782
149
|
rb_define_attr(e_Error, "libvirt_function_name", 1, 0);
|
1783
150
|
rb_define_attr(e_Error, "libvirt_message", 1, 0);
|
1784
151
|
|
1785
|
-
|
1786
|
-
|
1787
|
-
*/
|
1788
|
-
c_connect = rb_define_class_under(m_libvirt, "Connect", rb_cObject);
|
1789
|
-
|
1790
|
-
rb_define_module_function(m_libvirt, "version", libvirt_version, 1);
|
1791
|
-
rb_define_module_function(m_libvirt, "open", libvirt_open, 1);
|
152
|
+
rb_define_module_function(m_libvirt, "version", libvirt_version, -1);
|
153
|
+
rb_define_module_function(m_libvirt, "open", libvirt_open, -1);
|
1792
154
|
rb_define_module_function(m_libvirt, "open_read_only",
|
1793
|
-
libvirt_open_read_only, 1);
|
1794
|
-
|
1795
|
-
|
1796
|
-
rb_define_method(c_connect, "closed?", libvirt_conn_closed_p, 0);
|
1797
|
-
rb_define_method(c_connect, "type", libvirt_conn_type, 0);
|
1798
|
-
rb_define_method(c_connect, "version", libvirt_conn_version, 0);
|
1799
|
-
rb_define_method(c_connect, "hostname", libvirt_conn_hostname, 0);
|
1800
|
-
rb_define_method(c_connect, "uri", libvirt_conn_uri, 0);
|
1801
|
-
rb_define_method(c_connect, "max_vcpus", libvirt_conn_max_vcpus, 1);
|
1802
|
-
rb_define_method(c_connect, "node_get_info", libvirt_conn_node_get_info, 0);
|
1803
|
-
rb_define_method(c_connect, "capabilities", libvirt_conn_capabilities, 0);
|
1804
|
-
rb_define_method(c_connect, "num_of_domains", libvirt_conn_num_of_domains, 0);
|
1805
|
-
rb_define_method(c_connect, "list_domains", libvirt_conn_list_domains, 0);
|
1806
|
-
rb_define_method(c_connect, "num_of_defined_domains",
|
1807
|
-
libvirt_conn_num_of_defined_domains, 0);
|
1808
|
-
rb_define_method(c_connect, "list_defined_domains",
|
1809
|
-
libvirt_conn_list_defined_domains, 0);
|
1810
|
-
#if HAVE_TYPE_VIRNETWORKPTR
|
1811
|
-
rb_define_method(c_connect, "num_of_networks",
|
1812
|
-
libvirt_conn_num_of_networks, 0);
|
1813
|
-
rb_define_method(c_connect, "list_networks", libvirt_conn_list_networks, 0);
|
1814
|
-
rb_define_method(c_connect, "num_of_defined_networks",
|
1815
|
-
libvirt_conn_num_of_defined_networks, 0);
|
1816
|
-
rb_define_method(c_connect, "list_defined_networks",
|
1817
|
-
libvirt_conn_list_defined_networks, 0);
|
1818
|
-
#endif
|
1819
|
-
#if HAVE_TYPE_VIRSTORAGEPOOLPTR
|
1820
|
-
rb_define_method(c_connect, "num_of_storage_pools",
|
1821
|
-
libvirt_conn_num_of_storage_pools, 0);
|
1822
|
-
rb_define_method(c_connect, "list_storage_pools",
|
1823
|
-
libvirt_conn_list_storage_pools, 0);
|
1824
|
-
rb_define_method(c_connect, "num_of_defined_storage_pools",
|
1825
|
-
libvirt_conn_num_of_defined_storage_pools, 0);
|
1826
|
-
rb_define_method(c_connect, "list_defined_storage_pools",
|
1827
|
-
libvirt_conn_list_defined_storage_pools, 0);
|
1828
|
-
#endif
|
1829
|
-
// Domain creation/lookup
|
1830
|
-
rb_define_method(c_connect, "create_domain_linux",
|
1831
|
-
libvirt_conn_create_linux, -1);
|
1832
|
-
rb_define_method(c_connect, "lookup_domain_by_name",
|
1833
|
-
libvirt_conn_lookup_domain_by_name, 1);
|
1834
|
-
rb_define_method(c_connect, "lookup_domain_by_id",
|
1835
|
-
libvirt_conn_lookup_domain_by_id, 1);
|
1836
|
-
rb_define_method(c_connect, "lookup_domain_by_uuid",
|
1837
|
-
libvirt_conn_lookup_domain_by_uuid, 1);
|
1838
|
-
rb_define_method(c_connect, "define_domain_xml",
|
1839
|
-
libvirt_conn_define_domain_xml, 1);
|
1840
|
-
// Network creation/lookup
|
1841
|
-
#if HAVE_TYPE_VIRNETWORKPTR
|
1842
|
-
rb_define_method(c_connect, "lookup_network_by_name",
|
1843
|
-
libvirt_conn_lookup_network_by_name, 1);
|
1844
|
-
rb_define_method(c_connect, "lookup_network_by_uuid",
|
1845
|
-
libvirt_conn_lookup_network_by_uuid, 1);
|
1846
|
-
rb_define_method(c_connect, "create_network_xml",
|
1847
|
-
libvirt_conn_create_network_xml, 1);
|
1848
|
-
rb_define_method(c_connect, "define_network_xml",
|
1849
|
-
libvirt_conn_define_network_xml, 1);
|
1850
|
-
#endif
|
1851
|
-
// Storage pool creation/lookup
|
1852
|
-
#if HAVE_TYPE_VIRSTORAGEPOOLPTR
|
1853
|
-
rb_define_method(c_connect, "lookup_storage_pool_by_name",
|
1854
|
-
libvirt_conn_lookup_pool_by_name, 1);
|
1855
|
-
rb_define_method(c_connect, "lookup_storage_pool_by_uuid",
|
1856
|
-
libvirt_conn_lookup_pool_by_uuid, 1);
|
1857
|
-
rb_define_method(c_connect, "create_storage_pool_xml",
|
1858
|
-
libvirt_conn_create_pool_xml, -1);
|
1859
|
-
rb_define_method(c_connect, "define_storage_pool_xml",
|
1860
|
-
libvirt_conn_define_pool_xml, -1);
|
1861
|
-
rb_define_method(c_connect, "discover_storage_pool_sources",
|
1862
|
-
libvirt_conn_find_storage_pool_sources, -1);
|
1863
|
-
#endif
|
1864
|
-
|
1865
|
-
/*
|
1866
|
-
* Class Libvirt::Connect::Nodeinfo
|
1867
|
-
*/
|
1868
|
-
c_node_info = rb_define_class_under(c_connect, "Nodeinfo", rb_cObject);
|
1869
|
-
rb_define_attr(c_node_info, "model", 1, 0);
|
1870
|
-
rb_define_attr(c_node_info, "memory", 1, 0);
|
1871
|
-
rb_define_attr(c_node_info, "cpus", 1, 0);
|
1872
|
-
rb_define_attr(c_node_info, "mhz", 1, 0);
|
1873
|
-
rb_define_attr(c_node_info, "nodes", 1, 0);
|
1874
|
-
rb_define_attr(c_node_info, "sockets", 1, 0);
|
1875
|
-
rb_define_attr(c_node_info, "cores", 1, 0);
|
1876
|
-
rb_define_attr(c_node_info, "threads", 1, 0);
|
1877
|
-
|
1878
|
-
/*
|
1879
|
-
* Class Libvirt::Domain
|
1880
|
-
*/
|
1881
|
-
c_domain = rb_define_class_under(m_libvirt, "Domain", rb_cObject);
|
1882
|
-
#define DEF_DOMSTATE(name) \
|
1883
|
-
rb_define_const(c_domain, #name, INT2NUM(VIR_DOMAIN_##name))
|
1884
|
-
/* virDomainState */
|
1885
|
-
DEF_DOMSTATE(NOSTATE);
|
1886
|
-
DEF_DOMSTATE(RUNNING);
|
1887
|
-
DEF_DOMSTATE(BLOCKED);
|
1888
|
-
DEF_DOMSTATE(PAUSED);
|
1889
|
-
DEF_DOMSTATE(SHUTDOWN);
|
1890
|
-
DEF_DOMSTATE(SHUTOFF);
|
1891
|
-
DEF_DOMSTATE(CRASHED);
|
1892
|
-
#undef DEF_DOMSTATE
|
1893
|
-
|
1894
|
-
/* virDomainMigrateFlags */
|
1895
|
-
rb_define_const(c_domain, "MIGRATE_LIVE", INT2NUM(VIR_MIGRATE_LIVE));
|
1896
|
-
|
1897
|
-
rb_define_method(c_domain, "migrate", libvirt_dom_migrate, -1);
|
1898
|
-
rb_define_attr(c_domain, "connection", 1, 0);
|
1899
|
-
rb_define_method(c_domain, "shutdown", libvirt_dom_shutdown, 0);
|
1900
|
-
rb_define_method(c_domain, "reboot", libvirt_dom_reboot, -1);
|
1901
|
-
rb_define_method(c_domain, "destroy", libvirt_dom_destroy, 0);
|
1902
|
-
rb_define_method(c_domain, "suspend", libvirt_dom_suspend, 0);
|
1903
|
-
rb_define_method(c_domain, "resume", libvirt_dom_resume, 0);
|
1904
|
-
rb_define_method(c_domain, "save", libvirt_dom_save, 1);
|
1905
|
-
rb_define_singleton_method(c_domain, "restore", libvirt_dom_s_restore, 2);
|
1906
|
-
rb_define_method(c_domain, "core_dump", libvirt_dom_core_dump, -1);
|
1907
|
-
rb_define_method(c_domain, "info", libvirt_dom_info, 0);
|
1908
|
-
rb_define_method(c_domain, "name", libvirt_dom_name, 0);
|
1909
|
-
rb_define_method(c_domain, "id", libvirt_dom_id, 0);
|
1910
|
-
rb_define_method(c_domain, "uuid", libvirt_dom_uuid, 0);
|
1911
|
-
rb_define_method(c_domain, "os_type", libvirt_dom_os_type, 0);
|
1912
|
-
rb_define_method(c_domain, "max_memory", libvirt_dom_max_memory, 0);
|
1913
|
-
rb_define_method(c_domain, "max_memory=", libvirt_dom_max_memory_set, 1);
|
1914
|
-
rb_define_method(c_domain, "memory=", libvirt_dom_memory_set, 1);
|
1915
|
-
rb_define_method(c_domain, "max_vcpus", libvirt_dom_max_vcpus, 0);
|
1916
|
-
rb_define_method(c_domain, "vcpus=", libvirt_dom_vcpus_set, 1);
|
1917
|
-
rb_define_method(c_domain, "pin_vcpu", libvirt_dom_pin_vcpu, 2);
|
1918
|
-
rb_define_method(c_domain, "xml_desc", libvirt_dom_xml_desc, -1);
|
1919
|
-
rb_define_method(c_domain, "undefine", libvirt_dom_undefine, 0);
|
1920
|
-
rb_define_method(c_domain, "create", libvirt_dom_create, 0);
|
1921
|
-
rb_define_method(c_domain, "autostart", libvirt_dom_autostart, 0);
|
1922
|
-
rb_define_method(c_domain, "autostart=", libvirt_dom_autostart_set, 1);
|
1923
|
-
rb_define_method(c_domain, "free", libvirt_dom_free, 0);
|
1924
|
-
|
1925
|
-
/*
|
1926
|
-
* Class Libvirt::Domain::Info
|
1927
|
-
*/
|
1928
|
-
c_domain_info = rb_define_class_under(c_domain, "Info", rb_cObject);
|
1929
|
-
rb_define_attr(c_domain_info, "state", 1, 0);
|
1930
|
-
rb_define_attr(c_domain_info, "max_mem", 1, 0);
|
1931
|
-
rb_define_attr(c_domain_info, "memory", 1, 0);
|
1932
|
-
rb_define_attr(c_domain_info, "nr_virt_cpu", 1, 0);
|
1933
|
-
rb_define_attr(c_domain_info, "cpu_time", 1, 0);
|
1934
|
-
|
1935
|
-
/*
|
1936
|
-
* Class Libvirt::Network
|
1937
|
-
*/
|
1938
|
-
#if HAVE_TYPE_VIRNETWORKPTR
|
1939
|
-
c_network = rb_define_class_under(m_libvirt, "Network", rb_cObject);
|
1940
|
-
rb_define_attr(c_network, "connection", 1, 0);
|
1941
|
-
rb_define_method(c_network, "undefine", libvirt_netw_undefine, 0);
|
1942
|
-
rb_define_method(c_network, "create", libvirt_netw_create, 0);
|
1943
|
-
rb_define_method(c_network, "destroy", libvirt_netw_destroy, 0);
|
1944
|
-
rb_define_method(c_network, "name", libvirt_netw_name, 0);
|
1945
|
-
rb_define_method(c_network, "uuid", libvirt_netw_uuid, 0);
|
1946
|
-
rb_define_method(c_network, "xml_desc", libvirt_netw_xml_desc, -1);
|
1947
|
-
rb_define_method(c_network, "bridge_name", libvirt_netw_bridge_name, 0);
|
1948
|
-
rb_define_method(c_network, "autostart", libvirt_netw_autostart, 0);
|
1949
|
-
rb_define_method(c_network, "autostart=", libvirt_netw_autostart_set, 1);
|
1950
|
-
rb_define_method(c_network, "free", libvirt_netw_free, 0);
|
1951
|
-
#endif
|
155
|
+
libvirt_open_read_only, -1);
|
156
|
+
// FIXME: implement this
|
157
|
+
//rb_define_module_function(m_libvirt, "open_auth", libvirt_open_auth, -1);
|
1952
158
|
|
159
|
+
init_connect();
|
1953
160
|
init_storage();
|
161
|
+
init_network();
|
162
|
+
init_nodedevice();
|
163
|
+
init_secret();
|
164
|
+
init_nwfilter();
|
165
|
+
init_interface();
|
166
|
+
init_domain();
|
1954
167
|
|
1955
168
|
r = virInitialize();
|
1956
169
|
if (r < 0)
|