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
@@ -0,0 +1,1606 @@
|
|
1
|
+
/*
|
2
|
+
* domain.c: virDomain methods
|
3
|
+
*
|
4
|
+
* Copyright (C) 2007,2010 Red Hat Inc.
|
5
|
+
*
|
6
|
+
* This library is free software; you can redistribute it and/or
|
7
|
+
* modify it under the terms of the GNU Lesser General Public
|
8
|
+
* License as published by the Free Software Foundation; either
|
9
|
+
* version 2.1 of the License, or (at your option) any later version.
|
10
|
+
*
|
11
|
+
* This library is distributed in the hope that it will be useful,
|
12
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
* Lesser General Public License for more details.
|
15
|
+
*
|
16
|
+
* You should have received a copy of the GNU Lesser General Public
|
17
|
+
* License along with this library; if not, write to the Free Software
|
18
|
+
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19
|
+
*/
|
20
|
+
|
21
|
+
#include <ruby.h>
|
22
|
+
#include <libvirt/libvirt.h>
|
23
|
+
#include <libvirt/virterror.h>
|
24
|
+
#include "common.h"
|
25
|
+
#include "connect.h"
|
26
|
+
#include "extconf.h"
|
27
|
+
|
28
|
+
VALUE c_domain;
|
29
|
+
static VALUE c_domain_info;
|
30
|
+
static VALUE c_domain_ifinfo;
|
31
|
+
static VALUE c_domain_security_label;
|
32
|
+
static VALUE c_domain_block_stats;
|
33
|
+
#if HAVE_TYPE_VIRDOMAINBLOCKINFOPTR
|
34
|
+
static VALUE c_domain_block_info;
|
35
|
+
#endif
|
36
|
+
#if HAVE_TYPE_VIRDOMAINMEMORYSTATPTR
|
37
|
+
static VALUE c_domain_memory_stats;
|
38
|
+
#endif
|
39
|
+
#if HAVE_TYPE_VIRDOMAINSNAPSHOTPTR
|
40
|
+
static VALUE c_domain_snapshot;
|
41
|
+
#endif
|
42
|
+
#if HAVE_TYPE_VIRDOMAINJOBINFOPTR
|
43
|
+
static VALUE c_domain_job_info;
|
44
|
+
#endif
|
45
|
+
|
46
|
+
static void domain_free(void *d) {
|
47
|
+
generic_free(Domain, d);
|
48
|
+
}
|
49
|
+
|
50
|
+
static VALUE domain_new(virDomainPtr d, VALUE conn) {
|
51
|
+
return generic_new(c_domain, d, conn, domain_free);
|
52
|
+
}
|
53
|
+
|
54
|
+
static virDomainPtr domain_get(VALUE s) {
|
55
|
+
generic_get(Domain, s);
|
56
|
+
}
|
57
|
+
|
58
|
+
/*
|
59
|
+
* call-seq:
|
60
|
+
* conn.num_of_domains -> fixnum
|
61
|
+
*
|
62
|
+
* Call +virConnectNumOfDomains+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectNumOfDomains]
|
63
|
+
*/
|
64
|
+
static VALUE libvirt_conn_num_of_domains(VALUE s) {
|
65
|
+
gen_conn_num_of(s, Domains);
|
66
|
+
}
|
67
|
+
|
68
|
+
/*
|
69
|
+
* call-seq:
|
70
|
+
* conn.list_domains -> list
|
71
|
+
*
|
72
|
+
* Call +virConnectListDomains+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectListDomains]
|
73
|
+
*/
|
74
|
+
static VALUE libvirt_conn_list_domains(VALUE s) {
|
75
|
+
int i, r, num, *ids;
|
76
|
+
virConnectPtr conn = connect_get(s);
|
77
|
+
VALUE result;
|
78
|
+
|
79
|
+
num = virConnectNumOfDomains(conn);
|
80
|
+
_E(num < 0, create_error(e_RetrieveError, "virConnectNumOfDomains", "", conn));
|
81
|
+
if (num == 0) {
|
82
|
+
result = rb_ary_new2(num);
|
83
|
+
return result;
|
84
|
+
}
|
85
|
+
|
86
|
+
ids = ALLOC_N(int, num);
|
87
|
+
r = virConnectListDomains(conn, ids, num);
|
88
|
+
if (r < 0) {
|
89
|
+
free(ids);
|
90
|
+
_E(r < 0, create_error(e_RetrieveError, "virConnectListDomains", "", conn));
|
91
|
+
}
|
92
|
+
|
93
|
+
result = rb_ary_new2(num);
|
94
|
+
for (i=0; i<num; i++) {
|
95
|
+
rb_ary_push(result, INT2NUM(ids[i]));
|
96
|
+
}
|
97
|
+
free(ids);
|
98
|
+
return result;
|
99
|
+
}
|
100
|
+
|
101
|
+
/*
|
102
|
+
* call-seq:
|
103
|
+
* conn.num_of_defined_domains -> fixnum
|
104
|
+
*
|
105
|
+
* Call +virConnectNumOfDefinedDomains+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectNumOfDefinedDomains]
|
106
|
+
*/
|
107
|
+
static VALUE libvirt_conn_num_of_defined_domains(VALUE s) {
|
108
|
+
gen_conn_num_of(s, DefinedDomains);
|
109
|
+
}
|
110
|
+
|
111
|
+
/*
|
112
|
+
* call-seq:
|
113
|
+
* conn.list_defined_domains -> list
|
114
|
+
*
|
115
|
+
* Call +virConnectListDefinedDomains+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectListDefinedDomains]
|
116
|
+
*/
|
117
|
+
static VALUE libvirt_conn_list_defined_domains(VALUE s) {
|
118
|
+
gen_conn_list_names(s, DefinedDomains);
|
119
|
+
}
|
120
|
+
|
121
|
+
/*
|
122
|
+
* call-seq:
|
123
|
+
* dom.create_linux -> Libvirt::Domain
|
124
|
+
*
|
125
|
+
* Call +virDomainCreateLinux+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainCreateLinux]
|
126
|
+
*/
|
127
|
+
static VALUE libvirt_conn_create_linux(int argc, VALUE *argv, VALUE c) {
|
128
|
+
virDomainPtr dom;
|
129
|
+
virConnectPtr conn = connect_get(c);
|
130
|
+
VALUE flags, xml;
|
131
|
+
|
132
|
+
rb_scan_args(argc, argv, "11", &xml, &flags);
|
133
|
+
|
134
|
+
if (NIL_P(flags))
|
135
|
+
flags = INT2FIX(0);
|
136
|
+
|
137
|
+
dom = virDomainCreateLinux(conn, StringValueCStr(xml), NUM2UINT(flags));
|
138
|
+
_E(dom == NULL, create_error(e_Error, "virDomainCreateLinux", "", conn));
|
139
|
+
|
140
|
+
return domain_new(dom, c);
|
141
|
+
}
|
142
|
+
|
143
|
+
/*
|
144
|
+
* call-seq:
|
145
|
+
* conn.lookup_domain_by_name -> Libvirt::Domain
|
146
|
+
*
|
147
|
+
* Call +virDomainLookupByName+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainLookupByName]
|
148
|
+
*/
|
149
|
+
static VALUE libvirt_conn_lookup_domain_by_name(VALUE c, VALUE name) {
|
150
|
+
virDomainPtr dom;
|
151
|
+
virConnectPtr conn = connect_get(c);
|
152
|
+
|
153
|
+
dom = virDomainLookupByName(conn, StringValueCStr(name));
|
154
|
+
_E(dom == NULL, create_error(e_RetrieveError, "virDomainLookupByName", "", conn));
|
155
|
+
|
156
|
+
return domain_new(dom, c);
|
157
|
+
}
|
158
|
+
|
159
|
+
/*
|
160
|
+
* call-seq:
|
161
|
+
* conn.lookup_domain_by_id -> Libvirt::Domain
|
162
|
+
*
|
163
|
+
* Call +virDomainLookupByID+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainLookupByID]
|
164
|
+
*/
|
165
|
+
static VALUE libvirt_conn_lookup_domain_by_id(VALUE c, VALUE id) {
|
166
|
+
virDomainPtr dom;
|
167
|
+
virConnectPtr conn = connect_get(c);
|
168
|
+
|
169
|
+
dom = virDomainLookupByID(conn, NUM2INT(id));
|
170
|
+
_E(dom == NULL, create_error(e_RetrieveError, "virDomainLookupByID", "", conn));
|
171
|
+
|
172
|
+
return domain_new(dom, c);
|
173
|
+
}
|
174
|
+
|
175
|
+
/*
|
176
|
+
* call-seq:
|
177
|
+
* conn.lookup_domain_by_uuid -> Libvirt::Domain
|
178
|
+
*
|
179
|
+
* Call +virDomainLookupByUUIDString+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainLookupByUUIDString]
|
180
|
+
*/
|
181
|
+
static VALUE libvirt_conn_lookup_domain_by_uuid(VALUE c, VALUE uuid) {
|
182
|
+
virDomainPtr dom;
|
183
|
+
virConnectPtr conn = connect_get(c);
|
184
|
+
|
185
|
+
dom = virDomainLookupByUUIDString(conn, StringValueCStr(uuid));
|
186
|
+
_E(dom == NULL, create_error(e_RetrieveError, "virDomainLookupByUUID", "", conn));
|
187
|
+
|
188
|
+
return domain_new(dom, c);
|
189
|
+
}
|
190
|
+
|
191
|
+
/*
|
192
|
+
* call-seq:
|
193
|
+
* conn.define_domain_xml -> Libvirt::Domain
|
194
|
+
*
|
195
|
+
* Call +virDomainDefineXML+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainDefineXML]
|
196
|
+
*/
|
197
|
+
static VALUE libvirt_conn_define_domain_xml(VALUE c, VALUE xml) {
|
198
|
+
virDomainPtr dom;
|
199
|
+
virConnectPtr conn = connect_get(c);
|
200
|
+
|
201
|
+
dom = virDomainDefineXML(conn, StringValueCStr(xml));
|
202
|
+
_E(dom == NULL, create_error(e_DefinitionError, "virDomainDefineXML", "", conn));
|
203
|
+
|
204
|
+
return domain_new(dom, c);
|
205
|
+
}
|
206
|
+
|
207
|
+
#if HAVE_VIRCONNECTDOMAINXMLFROMNATIVE
|
208
|
+
/*
|
209
|
+
* call-seq:
|
210
|
+
* conn.domain_xml_from_native -> string
|
211
|
+
*
|
212
|
+
* Call +virConnectDomainXMLFromNative+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectDomainXMLFromNative]
|
213
|
+
*/
|
214
|
+
static VALUE libvirt_conn_domain_xml_from_native(int argc, VALUE *argv, VALUE s) {
|
215
|
+
VALUE nativeFormat, xml, flags;
|
216
|
+
char *ret;
|
217
|
+
VALUE result;
|
218
|
+
|
219
|
+
rb_scan_args(argc, argv, "21", &nativeFormat, &xml, &flags);
|
220
|
+
|
221
|
+
if (NIL_P(flags))
|
222
|
+
flags = INT2FIX(0);
|
223
|
+
|
224
|
+
ret = virConnectDomainXMLFromNative(conn(s), StringValueCStr(nativeFormat),
|
225
|
+
StringValueCStr(xml), NUM2UINT(flags));
|
226
|
+
_E(ret == NULL,
|
227
|
+
create_error(e_Error, "virConnectDomainXMLFromNative", "", conn(s)));
|
228
|
+
|
229
|
+
result = rb_str_new2(ret);
|
230
|
+
|
231
|
+
free(ret);
|
232
|
+
|
233
|
+
return result;
|
234
|
+
}
|
235
|
+
#endif
|
236
|
+
|
237
|
+
#if HAVE_VIRCONNECTDOMAINXMLTONATIVE
|
238
|
+
/*
|
239
|
+
* call-seq:
|
240
|
+
* conn.domain_xml_to_native -> string
|
241
|
+
*
|
242
|
+
* Call +virConnectDomainXMLToNative+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectDomainXMLToNative]
|
243
|
+
*/
|
244
|
+
static VALUE libvirt_conn_domain_xml_to_native(int argc, VALUE *argv, VALUE s) {
|
245
|
+
VALUE nativeFormat, xml, flags;
|
246
|
+
char *ret;
|
247
|
+
VALUE result;
|
248
|
+
|
249
|
+
rb_scan_args(argc, argv, "21", &nativeFormat, &xml, &flags);
|
250
|
+
|
251
|
+
if (NIL_P(flags))
|
252
|
+
flags = INT2FIX(0);
|
253
|
+
|
254
|
+
ret = virConnectDomainXMLToNative(conn(s), StringValueCStr(nativeFormat),
|
255
|
+
StringValueCStr(xml), NUM2UINT(flags));
|
256
|
+
_E(ret == NULL,
|
257
|
+
create_error(e_Error, "virConnectDomainXMLToNative", "", conn(s)));
|
258
|
+
|
259
|
+
result = rb_str_new2(ret);
|
260
|
+
|
261
|
+
free(ret);
|
262
|
+
|
263
|
+
return result;
|
264
|
+
}
|
265
|
+
#endif
|
266
|
+
|
267
|
+
/*
|
268
|
+
* call-seq:
|
269
|
+
* dom.migrate -> Libvirt::Domain
|
270
|
+
*
|
271
|
+
* Call +virDomainMigrate+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainMigrate]
|
272
|
+
*/
|
273
|
+
static VALUE libvirt_dom_migrate(int argc, VALUE *argv, VALUE s) {
|
274
|
+
VALUE dconn, flags, dname_val, uri_val, bandwidth;
|
275
|
+
virDomainPtr ddom = NULL;
|
276
|
+
|
277
|
+
rb_scan_args(argc, argv, "14", &dconn, &flags, &dname_val, &uri_val,
|
278
|
+
&bandwidth);
|
279
|
+
|
280
|
+
if (NIL_P(bandwidth))
|
281
|
+
bandwidth = INT2FIX(0);
|
282
|
+
if (NIL_P(flags))
|
283
|
+
flags = INT2FIX(0);
|
284
|
+
|
285
|
+
ddom = virDomainMigrate(domain_get(s), conn(dconn), NUM2ULONG(flags),
|
286
|
+
get_string_or_nil(dname_val),
|
287
|
+
get_string_or_nil(uri_val), NUM2ULONG(bandwidth));
|
288
|
+
|
289
|
+
_E(ddom == NULL,
|
290
|
+
create_error(e_Error, "virDomainMigrate", "", conn(s)));
|
291
|
+
|
292
|
+
return domain_new(ddom, dconn);
|
293
|
+
}
|
294
|
+
|
295
|
+
#if HAVE_VIRDOMAINMIGRATETOURI
|
296
|
+
/*
|
297
|
+
* call-seq:
|
298
|
+
* dom.migrate_to_uri -> nil
|
299
|
+
*
|
300
|
+
* Call +virDomainMigrateToURI+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainMigrateToURI]
|
301
|
+
*/
|
302
|
+
static VALUE libvirt_dom_migrate_to_uri(int argc, VALUE *argv, VALUE s) {
|
303
|
+
VALUE flags, dname_val, bandwidth, duri_val;
|
304
|
+
int ret;
|
305
|
+
|
306
|
+
rb_scan_args(argc, argv, "13", &duri_val, &flags, &dname_val, &bandwidth);
|
307
|
+
|
308
|
+
if (NIL_P(bandwidth))
|
309
|
+
bandwidth = INT2FIX(0);
|
310
|
+
if (NIL_P(flags))
|
311
|
+
flags = INT2FIX(0);
|
312
|
+
|
313
|
+
ret = virDomainMigrateToURI(domain_get(s), StringValueCStr(duri_val),
|
314
|
+
NUM2ULONG(flags), get_string_or_nil(dname_val),
|
315
|
+
NUM2ULONG(bandwidth));
|
316
|
+
|
317
|
+
_E(ret < 0,
|
318
|
+
create_error(e_Error, "virDomainMigrateToURI", "", conn(s)));
|
319
|
+
|
320
|
+
return Qnil;
|
321
|
+
}
|
322
|
+
#endif
|
323
|
+
|
324
|
+
#if HAVE_VIRDOMAINMIGRATESETMAXDOWNTIME
|
325
|
+
/*
|
326
|
+
* call-seq:
|
327
|
+
* dom.migrate_set_max_downtime -> nil
|
328
|
+
*
|
329
|
+
* Call +virDomainMigrateSetMaxDowntime+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainMigrateSetMaxDowntime]
|
330
|
+
*/
|
331
|
+
static VALUE libvirt_dom_migrate_set_max_downtime(int argc, VALUE *argv, VALUE s) {
|
332
|
+
VALUE downtime, flags;
|
333
|
+
int ret;
|
334
|
+
|
335
|
+
rb_scan_args(argc, argv, "11", &downtime, &flags);
|
336
|
+
|
337
|
+
if (NIL_P(flags))
|
338
|
+
flags = INT2FIX(0);
|
339
|
+
|
340
|
+
ret = virDomainMigrateSetMaxDowntime(domain_get(s), NUM2ULL(downtime),
|
341
|
+
NUM2UINT(flags));
|
342
|
+
|
343
|
+
_E(ret < 0,
|
344
|
+
create_error(e_Error, "virDomainMigrateSetMaxDowntime", "", conn(s)));
|
345
|
+
|
346
|
+
return Qnil;
|
347
|
+
}
|
348
|
+
#endif
|
349
|
+
|
350
|
+
/*
|
351
|
+
* call-seq:
|
352
|
+
* dom.shutdown -> nil
|
353
|
+
*
|
354
|
+
* Call +virDomainShutdown+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainShutdown]
|
355
|
+
*/
|
356
|
+
static VALUE libvirt_dom_shutdown(VALUE s) {
|
357
|
+
gen_call_void(virDomainShutdown, conn(s), domain_get(s));
|
358
|
+
}
|
359
|
+
|
360
|
+
/*
|
361
|
+
* call-seq:
|
362
|
+
* dom.reboot -> nil
|
363
|
+
*
|
364
|
+
* Call +virDomainReboot+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainReboot]
|
365
|
+
*/
|
366
|
+
static VALUE libvirt_dom_reboot(int argc, VALUE *argv, VALUE s) {
|
367
|
+
VALUE flags;
|
368
|
+
|
369
|
+
rb_scan_args(argc, argv, "01", &flags);
|
370
|
+
|
371
|
+
if (NIL_P(flags))
|
372
|
+
flags = INT2FIX(0);
|
373
|
+
|
374
|
+
gen_call_void(virDomainReboot, conn(s), domain_get(s), NUM2UINT(flags));
|
375
|
+
}
|
376
|
+
|
377
|
+
/*
|
378
|
+
* call-seq:
|
379
|
+
* dom.destroy -> nil
|
380
|
+
*
|
381
|
+
* Call +virDomainDestroy+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainDestroy]
|
382
|
+
*/
|
383
|
+
static VALUE libvirt_dom_destroy(VALUE s) {
|
384
|
+
gen_call_void(virDomainDestroy, conn(s), domain_get(s));
|
385
|
+
}
|
386
|
+
|
387
|
+
/*
|
388
|
+
* call-seq:
|
389
|
+
* dom.suspend -> nil
|
390
|
+
*
|
391
|
+
* Call +virDomainSuspend+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSuspend]
|
392
|
+
*/
|
393
|
+
static VALUE libvirt_dom_suspend(VALUE s) {
|
394
|
+
gen_call_void(virDomainSuspend, conn(s), domain_get(s));
|
395
|
+
}
|
396
|
+
|
397
|
+
/*
|
398
|
+
* call-seq:
|
399
|
+
* dom.resume -> nil
|
400
|
+
*
|
401
|
+
* Call +virDomainResume+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainResume]
|
402
|
+
*/
|
403
|
+
static VALUE libvirt_dom_resume(VALUE s) {
|
404
|
+
gen_call_void(virDomainResume, conn(s), domain_get(s));
|
405
|
+
}
|
406
|
+
|
407
|
+
/*
|
408
|
+
* call-seq:
|
409
|
+
* dom.save -> nil
|
410
|
+
*
|
411
|
+
* Call +virDomainSave+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSave]
|
412
|
+
*/
|
413
|
+
static VALUE libvirt_dom_save(VALUE s, VALUE to) {
|
414
|
+
gen_call_void(virDomainSave, conn(s), domain_get(s), StringValueCStr(to));
|
415
|
+
}
|
416
|
+
|
417
|
+
#if HAVE_VIRDOMAINMANAGEDSAVE
|
418
|
+
/*
|
419
|
+
* call-seq:
|
420
|
+
* dom.managed_save -> nil
|
421
|
+
*
|
422
|
+
* Call +virDomainManagedSave+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainManagedSave]
|
423
|
+
*/
|
424
|
+
static VALUE libvirt_dom_managed_save(int argc, VALUE *argv, VALUE s) {
|
425
|
+
VALUE flags;
|
426
|
+
|
427
|
+
rb_scan_args(argc, argv, "01", &flags);
|
428
|
+
|
429
|
+
if (NIL_P(flags))
|
430
|
+
flags = INT2FIX(0);
|
431
|
+
|
432
|
+
gen_call_void(virDomainManagedSave, conn(s), domain_get(s),
|
433
|
+
NUM2UINT(flags));
|
434
|
+
}
|
435
|
+
|
436
|
+
/*
|
437
|
+
* call-seq:
|
438
|
+
* dom.has_managed_save -> [true|false]
|
439
|
+
*
|
440
|
+
* Call +virDomainHasManagedSaveImage+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainHasManagedSaveImage]
|
441
|
+
*/
|
442
|
+
static VALUE libvirt_dom_has_managed_save(int argc, VALUE *argv, VALUE s) {
|
443
|
+
VALUE flags;
|
444
|
+
|
445
|
+
rb_scan_args(argc, argv, "01", &flags);
|
446
|
+
|
447
|
+
if (NIL_P(flags))
|
448
|
+
flags = INT2FIX(0);
|
449
|
+
|
450
|
+
gen_call_truefalse(virDomainHasManagedSaveImage, conn(s), domain_get(s),
|
451
|
+
NUM2UINT(flags));
|
452
|
+
}
|
453
|
+
|
454
|
+
/*
|
455
|
+
* call-seq:
|
456
|
+
* dom.managed_save_remove -> nil
|
457
|
+
*
|
458
|
+
* Call +virDomainManagedSaveRemove+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainManagedSaveRemove]
|
459
|
+
*/
|
460
|
+
static VALUE libvirt_dom_managed_save_remove(int argc, VALUE *argv, VALUE s) {
|
461
|
+
VALUE flags;
|
462
|
+
|
463
|
+
rb_scan_args(argc, argv, "01", &flags);
|
464
|
+
|
465
|
+
if (NIL_P(flags))
|
466
|
+
flags = INT2FIX(0);
|
467
|
+
|
468
|
+
gen_call_void(virDomainManagedSaveRemove, conn(s), domain_get(s),
|
469
|
+
NUM2UINT(flags));
|
470
|
+
}
|
471
|
+
#endif
|
472
|
+
|
473
|
+
/*
|
474
|
+
* call-seq:
|
475
|
+
* dom.core_dump -> nil
|
476
|
+
*
|
477
|
+
* Call +virDomainCoreDump+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainCoreDump]
|
478
|
+
*/
|
479
|
+
static VALUE libvirt_dom_core_dump(int argc, VALUE *argv, VALUE s) {
|
480
|
+
VALUE to, flags;
|
481
|
+
|
482
|
+
rb_scan_args(argc, argv, "11", &to, &flags);
|
483
|
+
|
484
|
+
if (NIL_P(flags))
|
485
|
+
flags = INT2FIX(0);
|
486
|
+
|
487
|
+
gen_call_void(virDomainCoreDump, conn(s), domain_get(s),
|
488
|
+
StringValueCStr(to), NUM2INT(flags));
|
489
|
+
}
|
490
|
+
|
491
|
+
/*
|
492
|
+
* call-seq:
|
493
|
+
* dom.restore -> nil
|
494
|
+
*
|
495
|
+
* Call +virDomainRestore+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainRestore]
|
496
|
+
*/
|
497
|
+
static VALUE libvirt_dom_s_restore(VALUE klass, VALUE c, VALUE from) {
|
498
|
+
gen_call_void(virDomainRestore, conn(c), connect_get(c),
|
499
|
+
StringValueCStr(from));
|
500
|
+
}
|
501
|
+
|
502
|
+
/*
|
503
|
+
* call-seq:
|
504
|
+
* domain.info -> Libvirt::Domain::Info
|
505
|
+
*
|
506
|
+
* Call +virDomainGetInfo+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetInfo]
|
507
|
+
*/
|
508
|
+
static VALUE libvirt_dom_info(VALUE s) {
|
509
|
+
virDomainPtr dom = domain_get(s);
|
510
|
+
virDomainInfo info;
|
511
|
+
int r;
|
512
|
+
VALUE result;
|
513
|
+
|
514
|
+
r = virDomainGetInfo(dom, &info);
|
515
|
+
_E(r < 0, create_error(e_RetrieveError, "virDomainGetInfo", "", conn(s)));
|
516
|
+
|
517
|
+
result = rb_class_new_instance(0, NULL, c_domain_info);
|
518
|
+
rb_iv_set(result, "@state", CHR2FIX(info.state));
|
519
|
+
rb_iv_set(result, "@max_mem", ULONG2NUM(info.maxMem));
|
520
|
+
rb_iv_set(result, "@memory", ULONG2NUM(info.memory));
|
521
|
+
rb_iv_set(result, "@nr_virt_cpu", INT2FIX((int) info.nrVirtCpu));
|
522
|
+
rb_iv_set(result, "@cpu_time", ULL2NUM(info.cpuTime));
|
523
|
+
return result;
|
524
|
+
}
|
525
|
+
|
526
|
+
/*
|
527
|
+
* call-seq:
|
528
|
+
* domain.security_label -> Libvirt::Domain::SecurityLabel
|
529
|
+
*
|
530
|
+
* Call +virDomainGetSecurityLabel+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetSecurityLabel]
|
531
|
+
*/
|
532
|
+
static VALUE libvirt_dom_security_label(VALUE s) {
|
533
|
+
virDomainPtr dom = domain_get(s);
|
534
|
+
virSecurityLabel seclabel;
|
535
|
+
int r;
|
536
|
+
VALUE result;
|
537
|
+
|
538
|
+
r = virDomainGetSecurityLabel(dom, &seclabel);
|
539
|
+
_E(r < 0, create_error(e_RetrieveError, "virDomainGetSecurityLabel", "", conn(s)));
|
540
|
+
|
541
|
+
result = rb_class_new_instance(0, NULL, c_domain_security_label);
|
542
|
+
rb_iv_set(result, "@label", rb_str_new2(seclabel.label));
|
543
|
+
rb_iv_set(result, "@enforcing", INT2NUM(seclabel.enforcing));
|
544
|
+
|
545
|
+
return result;
|
546
|
+
}
|
547
|
+
|
548
|
+
/*
|
549
|
+
* call-seq:
|
550
|
+
* domain.block_stats -> Libvirt::Domain::BlockStats
|
551
|
+
*
|
552
|
+
* Call +virDomainBlockStats+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainBlockStats]
|
553
|
+
*/
|
554
|
+
static VALUE libvirt_dom_block_stats(VALUE s, VALUE path) {
|
555
|
+
virDomainPtr dom = domain_get(s);
|
556
|
+
virDomainBlockStatsStruct stats;
|
557
|
+
int r;
|
558
|
+
VALUE result;
|
559
|
+
|
560
|
+
r = virDomainBlockStats(dom, StringValueCStr(path), &stats, sizeof(stats));
|
561
|
+
_E(r < 0, create_error(e_RetrieveError, "virDomainBlockStats", "", conn(s)));
|
562
|
+
|
563
|
+
result = rb_class_new_instance(0, NULL, c_domain_block_stats);
|
564
|
+
rb_iv_set(result, "@rd_req", LL2NUM(stats.rd_req));
|
565
|
+
rb_iv_set(result, "@rd_bytes", LL2NUM(stats.rd_bytes));
|
566
|
+
rb_iv_set(result, "@wr_req", LL2NUM(stats.wr_req));
|
567
|
+
rb_iv_set(result, "@wr_bytes", LL2NUM(stats.wr_bytes));
|
568
|
+
rb_iv_set(result, "@errs", LL2NUM(stats.errs));
|
569
|
+
|
570
|
+
return result;
|
571
|
+
}
|
572
|
+
|
573
|
+
#if HAVE_TYPE_VIRDOMAINMEMORYSTATPTR
|
574
|
+
/*
|
575
|
+
* call-seq:
|
576
|
+
* domain.memory_stats -> Libvirt::Domain::MemoryStats
|
577
|
+
*
|
578
|
+
* Call +virDomainMemoryStats+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainMemoryStats]
|
579
|
+
*/
|
580
|
+
static VALUE libvirt_dom_memory_stats(int argc, VALUE *argv, VALUE s) {
|
581
|
+
virDomainPtr dom = domain_get(s);
|
582
|
+
virDomainMemoryStatStruct stats[6];
|
583
|
+
int r;
|
584
|
+
VALUE result;
|
585
|
+
VALUE flags;
|
586
|
+
VALUE tmp;
|
587
|
+
int i;
|
588
|
+
|
589
|
+
rb_scan_args(argc, argv, "01", &flags);
|
590
|
+
|
591
|
+
if (NIL_P(flags))
|
592
|
+
flags = INT2FIX(0);
|
593
|
+
|
594
|
+
r = virDomainMemoryStats(dom, stats, 6, NUM2UINT(flags));
|
595
|
+
_E(r < 0, create_error(e_RetrieveError, "virDomainMemoryStats", "", conn(s)));
|
596
|
+
|
597
|
+
result = rb_ary_new2(r);
|
598
|
+
for (i=0; i<r; i++) {
|
599
|
+
tmp = rb_class_new_instance(0, NULL, c_domain_memory_stats);
|
600
|
+
rb_iv_set(tmp, "@tag", INT2NUM(stats[i].tag));
|
601
|
+
rb_iv_set(tmp, "@val", ULL2NUM(stats[i].val));
|
602
|
+
|
603
|
+
rb_ary_push(result, tmp);
|
604
|
+
} \
|
605
|
+
|
606
|
+
return result;
|
607
|
+
}
|
608
|
+
#endif
|
609
|
+
|
610
|
+
#if HAVE_TYPE_VIRDOMAINBLOCKINFOPTR
|
611
|
+
/*
|
612
|
+
* call-seq:
|
613
|
+
* domain.block_info -> Libvirt::Domain::BlockInfo
|
614
|
+
*
|
615
|
+
* Call +virDomainGetBlockInfo+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetBlockInfo]
|
616
|
+
*/
|
617
|
+
static VALUE libvirt_dom_block_info(int argc, VALUE *argv, VALUE s) {
|
618
|
+
virDomainPtr dom = domain_get(s);
|
619
|
+
virDomainBlockInfo info;
|
620
|
+
int r;
|
621
|
+
VALUE result;
|
622
|
+
VALUE flags;
|
623
|
+
VALUE path;
|
624
|
+
|
625
|
+
rb_scan_args(argc, argv, "11", &path, &flags);
|
626
|
+
|
627
|
+
if (NIL_P(flags))
|
628
|
+
flags = INT2FIX(0);
|
629
|
+
|
630
|
+
r = virDomainGetBlockInfo(dom, StringValueCStr(path), &info, NUM2UINT(flags));
|
631
|
+
_E(r < 0, create_error(e_RetrieveError, "virDomainGetBlockInfo", "", conn(s)));
|
632
|
+
|
633
|
+
result = rb_class_new_instance(0, NULL, c_domain_block_info);
|
634
|
+
rb_iv_set(result, "@capacity", ULL2NUM(info.capacity));
|
635
|
+
rb_iv_set(result, "@allocation", ULL2NUM(info.allocation));
|
636
|
+
rb_iv_set(result, "@physical", ULL2NUM(info.physical));
|
637
|
+
|
638
|
+
return result;
|
639
|
+
}
|
640
|
+
#endif
|
641
|
+
|
642
|
+
/*
|
643
|
+
* call-seq:
|
644
|
+
* domain.block_peek -> string
|
645
|
+
*
|
646
|
+
* Call +virDomainBlockPeek+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainBlockPeek]
|
647
|
+
*/
|
648
|
+
static VALUE libvirt_dom_block_peek(int argc, VALUE *argv, VALUE s) {
|
649
|
+
virDomainPtr dom = domain_get(s);
|
650
|
+
VALUE path, offset, size, flags;
|
651
|
+
char *buffer;
|
652
|
+
int r;
|
653
|
+
VALUE ret;
|
654
|
+
|
655
|
+
rb_scan_args(argc, argv, "31", &path, &offset, &size, &flags);
|
656
|
+
|
657
|
+
if (NIL_P(flags))
|
658
|
+
flags = INT2FIX(0);
|
659
|
+
|
660
|
+
buffer = ALLOC_N(char, size);
|
661
|
+
|
662
|
+
r = virDomainBlockPeek(dom, StringValueCStr(path),
|
663
|
+
NUM2ULL(offset), NUM2UINT(size), buffer,
|
664
|
+
NUM2UINT(flags));
|
665
|
+
|
666
|
+
_E(r < 0, create_error(e_RetrieveError, "virDomainBlockPeek", "", conn(s)));
|
667
|
+
|
668
|
+
ret = rb_str_new((char *)buffer, size);
|
669
|
+
|
670
|
+
free(buffer);
|
671
|
+
|
672
|
+
return ret;
|
673
|
+
}
|
674
|
+
|
675
|
+
/*
|
676
|
+
* call-seq:
|
677
|
+
* domain.memory_peek -> string
|
678
|
+
*
|
679
|
+
* Call +virDomainMemoryPeek+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainMemoryPeek]
|
680
|
+
*/
|
681
|
+
static VALUE libvirt_dom_memory_peek(int argc, VALUE *argv, VALUE s) {
|
682
|
+
virDomainPtr dom = domain_get(s);
|
683
|
+
VALUE start, size, flags;
|
684
|
+
char *buffer;
|
685
|
+
int r;
|
686
|
+
VALUE ret;
|
687
|
+
|
688
|
+
rb_scan_args(argc, argv, "21", &start, &size, &flags);
|
689
|
+
|
690
|
+
if (NIL_P(flags))
|
691
|
+
flags = INT2FIX(0);
|
692
|
+
|
693
|
+
buffer = ALLOC_N(char, size);
|
694
|
+
|
695
|
+
r = virDomainMemoryPeek(dom, NUM2ULL(start), NUM2UINT(size), buffer,
|
696
|
+
NUM2UINT(flags));
|
697
|
+
|
698
|
+
_E(r < 0, create_error(e_RetrieveError, "virDomainMemoryPeek", "", conn(s)));
|
699
|
+
|
700
|
+
ret = rb_str_new((char *)buffer, size);
|
701
|
+
|
702
|
+
free(buffer);
|
703
|
+
|
704
|
+
return ret;
|
705
|
+
}
|
706
|
+
|
707
|
+
#if HAVE_VIRDOMAINISACTIVE
|
708
|
+
/*
|
709
|
+
* call-seq:
|
710
|
+
* domain.active? -> [true|false]
|
711
|
+
*
|
712
|
+
* Call +virDomainIsActive+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainIsActive]
|
713
|
+
*/
|
714
|
+
static VALUE libvirt_dom_active_p(VALUE d) {
|
715
|
+
gen_call_truefalse(virDomainIsActive, conn(d), domain_get(d));
|
716
|
+
}
|
717
|
+
#endif
|
718
|
+
|
719
|
+
#if HAVE_VIRDOMAINISPERSISTENT
|
720
|
+
/*
|
721
|
+
* call-seq:
|
722
|
+
* domain.persistent? -> [true|false]
|
723
|
+
*
|
724
|
+
* Call +virDomainIsPersistent+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainIsPersistent]
|
725
|
+
*/
|
726
|
+
static VALUE libvirt_dom_persistent_p(VALUE d) {
|
727
|
+
gen_call_truefalse(virDomainIsPersistent, conn(d), domain_get(d));
|
728
|
+
}
|
729
|
+
#endif
|
730
|
+
|
731
|
+
/*
|
732
|
+
* call-seq:
|
733
|
+
* domain.ifinfo -> Libvirt::Domain::IfInfo
|
734
|
+
*
|
735
|
+
* Call +virDomainInterfaceStats+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainInterfaceStats]
|
736
|
+
*/
|
737
|
+
static VALUE libvirt_dom_if_stats(VALUE s, VALUE sif) {
|
738
|
+
virDomainPtr dom = domain_get(s);
|
739
|
+
char *ifname = get_string_or_nil(sif);
|
740
|
+
virDomainInterfaceStatsStruct ifinfo;
|
741
|
+
int r;
|
742
|
+
VALUE result = Qnil;
|
743
|
+
|
744
|
+
if (ifname) {
|
745
|
+
r = virDomainInterfaceStats(dom, ifname, &ifinfo,
|
746
|
+
sizeof(virDomainInterfaceStatsStruct));
|
747
|
+
_E(r < 0, create_error(e_RetrieveError, "virDomainInterfaceStats", "",
|
748
|
+
conn(s)));
|
749
|
+
|
750
|
+
result = rb_class_new_instance(0, NULL, c_domain_ifinfo);
|
751
|
+
rb_iv_set(result, "@rx_bytes", LL2NUM(ifinfo.rx_bytes));
|
752
|
+
rb_iv_set(result, "@rx_packets", LL2NUM(ifinfo.rx_packets));
|
753
|
+
rb_iv_set(result, "@rx_errs", LL2NUM(ifinfo.rx_errs));
|
754
|
+
rb_iv_set(result, "@rx_drop", LL2NUM(ifinfo.rx_drop));
|
755
|
+
rb_iv_set(result, "@tx_bytes", LL2NUM(ifinfo.tx_bytes));
|
756
|
+
rb_iv_set(result, "@tx_packets", LL2NUM(ifinfo.tx_packets));
|
757
|
+
rb_iv_set(result, "@tx_errs", LL2NUM(ifinfo.tx_errs));
|
758
|
+
rb_iv_set(result, "@tx_drop", LL2NUM(ifinfo.tx_drop));
|
759
|
+
}
|
760
|
+
return result;
|
761
|
+
}
|
762
|
+
|
763
|
+
/*
|
764
|
+
* call-seq:
|
765
|
+
* dom.name -> string
|
766
|
+
*
|
767
|
+
* Call +virDomainGetName+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetName]
|
768
|
+
*/
|
769
|
+
static VALUE libvirt_dom_name(VALUE s) {
|
770
|
+
gen_call_string(virDomainGetName, conn(s), 0, domain_get(s));
|
771
|
+
}
|
772
|
+
|
773
|
+
/*
|
774
|
+
* call-seq:
|
775
|
+
* dom.id -> fixnum
|
776
|
+
*
|
777
|
+
* Call +virDomainGetID+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetID]
|
778
|
+
*/
|
779
|
+
static VALUE libvirt_dom_id(VALUE s) {
|
780
|
+
virDomainPtr dom = domain_get(s);
|
781
|
+
unsigned int id;
|
782
|
+
int out;
|
783
|
+
|
784
|
+
id = virDomainGetID(dom);
|
785
|
+
_E(id < 0, create_error(e_RetrieveError, "virDomainGetID", "", conn(s)));
|
786
|
+
|
787
|
+
/* we need to cast the unsigned int id to a signed int out to handle the
|
788
|
+
* -1 case
|
789
|
+
*/
|
790
|
+
out = id;
|
791
|
+
|
792
|
+
return INT2NUM(out);
|
793
|
+
}
|
794
|
+
|
795
|
+
/*
|
796
|
+
* call-seq:
|
797
|
+
* dom.uuid -> string
|
798
|
+
*
|
799
|
+
* Call +virDomainGetUUIDString+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetUUIDString]
|
800
|
+
*/
|
801
|
+
static VALUE libvirt_dom_uuid(VALUE s) {
|
802
|
+
virDomainPtr dom = domain_get(s);
|
803
|
+
char uuid[VIR_UUID_STRING_BUFLEN];
|
804
|
+
int r;
|
805
|
+
|
806
|
+
r = virDomainGetUUIDString(dom, uuid);
|
807
|
+
_E(r < 0, create_error(e_RetrieveError, "virDomainGetUUIDString", "", conn(s)));
|
808
|
+
|
809
|
+
return rb_str_new2((char *) uuid);
|
810
|
+
}
|
811
|
+
|
812
|
+
/*
|
813
|
+
* call-seq:
|
814
|
+
* dom.os_type -> string
|
815
|
+
*
|
816
|
+
* Call +virDomainGetOSType+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetOSType]
|
817
|
+
*/
|
818
|
+
static VALUE libvirt_dom_os_type(VALUE s) {
|
819
|
+
gen_call_string(virDomainGetOSType, conn(s), 1, domain_get(s));
|
820
|
+
}
|
821
|
+
|
822
|
+
/*
|
823
|
+
* call-seq:
|
824
|
+
* dom.max_memory -> fixnum
|
825
|
+
*
|
826
|
+
* Call +virDomainGetMaxMemory+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetMaxMemory]
|
827
|
+
*/
|
828
|
+
static VALUE libvirt_dom_max_memory(VALUE s) {
|
829
|
+
virDomainPtr dom = domain_get(s);
|
830
|
+
unsigned long max_memory;
|
831
|
+
|
832
|
+
max_memory = virDomainGetMaxMemory(dom);
|
833
|
+
_E(max_memory == 0, create_error(e_RetrieveError, "virDomainGetMaxMemory", "", conn(s)));
|
834
|
+
|
835
|
+
return ULONG2NUM(max_memory);
|
836
|
+
}
|
837
|
+
|
838
|
+
/*
|
839
|
+
* call-seq:
|
840
|
+
* dom.max_memory_set -> nil
|
841
|
+
*
|
842
|
+
* Call +virDomainSetMaxMemory+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSetMaxMemory]
|
843
|
+
*/
|
844
|
+
static VALUE libvirt_dom_max_memory_set(VALUE s, VALUE max_memory) {
|
845
|
+
virDomainPtr dom = domain_get(s);
|
846
|
+
int r;
|
847
|
+
|
848
|
+
r = virDomainSetMaxMemory(dom, NUM2ULONG(max_memory));
|
849
|
+
_E(r < 0, create_error(e_DefinitionError, "virDomainSetMaxMemory", "", conn(s)));
|
850
|
+
|
851
|
+
return ULONG2NUM(max_memory);
|
852
|
+
}
|
853
|
+
|
854
|
+
/*
|
855
|
+
* call-seq:
|
856
|
+
* dom.memory_set -> void
|
857
|
+
*
|
858
|
+
* Call +virDomainSetMemory+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSetMemory]
|
859
|
+
*/
|
860
|
+
static VALUE libvirt_dom_memory_set(VALUE s, VALUE memory) {
|
861
|
+
virDomainPtr dom = domain_get(s);
|
862
|
+
int r;
|
863
|
+
|
864
|
+
r = virDomainSetMemory(dom, NUM2ULONG(memory));
|
865
|
+
_E(r < 0, create_error(e_DefinitionError, "virDomainSetMemory", "", conn(s)));
|
866
|
+
|
867
|
+
return ULONG2NUM(memory);
|
868
|
+
}
|
869
|
+
|
870
|
+
/*
|
871
|
+
* call-seq:
|
872
|
+
* dom.max_vcpus -> fixnum
|
873
|
+
*
|
874
|
+
* Call +virDomainGetMaxVcpus+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetMaxVcpus]
|
875
|
+
*/
|
876
|
+
static VALUE libvirt_dom_max_vcpus(VALUE s) {
|
877
|
+
virDomainPtr dom = domain_get(s);
|
878
|
+
int vcpus;
|
879
|
+
|
880
|
+
vcpus = virDomainGetMaxVcpus(dom);
|
881
|
+
_E(vcpus < 0, create_error(e_RetrieveError, "virDomainGetMaxVcpus", "", conn(s)));
|
882
|
+
|
883
|
+
return INT2NUM(vcpus);
|
884
|
+
}
|
885
|
+
|
886
|
+
|
887
|
+
/*
|
888
|
+
* call-seq:
|
889
|
+
* dom.vcpus_set -> nil
|
890
|
+
*
|
891
|
+
* Call +virDomainSetVcpus+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSetVcpus]
|
892
|
+
*/
|
893
|
+
static VALUE libvirt_dom_vcpus_set(VALUE s, VALUE nvcpus) {
|
894
|
+
gen_call_void(virDomainSetVcpus, conn(s), domain_get(s), NUM2UINT(nvcpus));
|
895
|
+
}
|
896
|
+
|
897
|
+
/*
|
898
|
+
* call-seq:
|
899
|
+
* dom.pin_vcpu -> nil
|
900
|
+
*
|
901
|
+
* Call +virDomainPinVcpu+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainPinVcpu]
|
902
|
+
*/
|
903
|
+
static VALUE libvirt_dom_pin_vcpu(VALUE s, VALUE vcpu, VALUE cpulist) {
|
904
|
+
virDomainPtr dom = domain_get(s);
|
905
|
+
int r, i, len, maplen;
|
906
|
+
unsigned char *cpumap;
|
907
|
+
virNodeInfo nodeinfo;
|
908
|
+
virConnectPtr c = conn(s);
|
909
|
+
|
910
|
+
r = virNodeGetInfo(c, &nodeinfo);
|
911
|
+
_E(r < 0, create_error(e_RetrieveError, "virNodeGetInfo", "", c));
|
912
|
+
|
913
|
+
maplen = VIR_CPU_MAPLEN(nodeinfo.cpus);
|
914
|
+
cpumap = ALLOC_N(unsigned char, maplen);
|
915
|
+
MEMZERO(cpumap, unsigned char, maplen);
|
916
|
+
|
917
|
+
len = RARRAY(cpulist)->len;
|
918
|
+
for(i = 0; i < len; i++) {
|
919
|
+
VALUE e = rb_ary_entry(cpulist, i);
|
920
|
+
VIR_USE_CPU(cpumap, NUM2UINT(e));
|
921
|
+
}
|
922
|
+
|
923
|
+
r = virDomainPinVcpu(dom, NUM2UINT(vcpu), cpumap, maplen);
|
924
|
+
free(cpumap);
|
925
|
+
_E(r < 0, create_error(e_RetrieveError, "virDomainPinVcpu", "", c));
|
926
|
+
|
927
|
+
return Qnil;
|
928
|
+
}
|
929
|
+
|
930
|
+
/*
|
931
|
+
* call-seq:
|
932
|
+
* dom.xml_desc -> string
|
933
|
+
*
|
934
|
+
* Call +virDomainGetXMLDesc+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetXMLDesc]
|
935
|
+
*/
|
936
|
+
static VALUE libvirt_dom_xml_desc(int argc, VALUE *argv, VALUE s) {
|
937
|
+
VALUE flags;
|
938
|
+
|
939
|
+
rb_scan_args(argc, argv, "01", &flags);
|
940
|
+
|
941
|
+
if (NIL_P(flags))
|
942
|
+
flags = INT2FIX(0);
|
943
|
+
|
944
|
+
gen_call_string(virDomainGetXMLDesc, conn(s), 1, domain_get(s),
|
945
|
+
NUM2INT(flags));
|
946
|
+
}
|
947
|
+
|
948
|
+
/*
|
949
|
+
* call-seq:
|
950
|
+
* dom.undefine -> nil
|
951
|
+
*
|
952
|
+
* Call +virDomainUndefine+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainUndefine]
|
953
|
+
*/
|
954
|
+
static VALUE libvirt_dom_undefine(VALUE s) {
|
955
|
+
gen_call_void(virDomainUndefine, conn(s), domain_get(s));
|
956
|
+
}
|
957
|
+
|
958
|
+
/*
|
959
|
+
* call-seq:
|
960
|
+
* dom.create -> nil
|
961
|
+
*
|
962
|
+
* Call +virDomainCreate+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainCreate]
|
963
|
+
*/
|
964
|
+
static VALUE libvirt_dom_create(VALUE s) {
|
965
|
+
gen_call_void(virDomainCreate, conn(s), domain_get(s));
|
966
|
+
}
|
967
|
+
|
968
|
+
/*
|
969
|
+
* call-seq:
|
970
|
+
* dom.autostart -> [true|false]
|
971
|
+
*
|
972
|
+
* Call +virDomainGetAutostart+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetAutostart]
|
973
|
+
*/
|
974
|
+
static VALUE libvirt_dom_autostart(VALUE s){
|
975
|
+
virDomainPtr dom = domain_get(s);
|
976
|
+
int r, autostart;
|
977
|
+
|
978
|
+
r = virDomainGetAutostart(dom, &autostart);
|
979
|
+
_E(r < 0, create_error(e_RetrieveError, "virDomainAutostart", "", conn(s)));
|
980
|
+
|
981
|
+
return autostart ? Qtrue : Qfalse;
|
982
|
+
}
|
983
|
+
|
984
|
+
/*
|
985
|
+
* call-seq:
|
986
|
+
* dom.autostart_set -> nil
|
987
|
+
*
|
988
|
+
* Call +virDomainSetAutostart+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSetAutostart]
|
989
|
+
*/
|
990
|
+
static VALUE libvirt_dom_autostart_set(VALUE s, VALUE autostart) {
|
991
|
+
gen_call_void(virDomainSetAutostart, conn(s),
|
992
|
+
domain_get(s), RTEST(autostart) ? 1 : 0);
|
993
|
+
}
|
994
|
+
|
995
|
+
/*
|
996
|
+
* call-seq:
|
997
|
+
* dom.attach_device -> nil
|
998
|
+
*
|
999
|
+
* Call +virDomainAttachDevice+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainAttachDevice]
|
1000
|
+
*/
|
1001
|
+
static VALUE libvirt_dom_attach_device(VALUE s, VALUE xml) {
|
1002
|
+
gen_call_void(virDomainAttachDevice, conn(s), domain_get(s),
|
1003
|
+
StringValueCStr(xml));
|
1004
|
+
}
|
1005
|
+
|
1006
|
+
/*
|
1007
|
+
* call-seq:
|
1008
|
+
* dom.detach_device -> nil
|
1009
|
+
*
|
1010
|
+
* Call +virDomainDetachDevice+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainDetachDevice]
|
1011
|
+
*/
|
1012
|
+
static VALUE libvirt_dom_detach_device(VALUE s, VALUE xml) {
|
1013
|
+
gen_call_void(virDomainDetachDevice, conn(s), domain_get(s),
|
1014
|
+
StringValueCStr(xml));
|
1015
|
+
}
|
1016
|
+
|
1017
|
+
/*
|
1018
|
+
* call-seq:
|
1019
|
+
* dom.free -> nil
|
1020
|
+
*
|
1021
|
+
* Call +virDomainFree+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainFree]
|
1022
|
+
*/
|
1023
|
+
static VALUE libvirt_dom_free(VALUE s) {
|
1024
|
+
gen_call_free(Domain, s);
|
1025
|
+
}
|
1026
|
+
|
1027
|
+
#if HAVE_TYPE_VIRDOMAINSNAPSHOTPTR
|
1028
|
+
static void domain_snapshot_free(void *d) {
|
1029
|
+
generic_free(DomainSnapshot, d);
|
1030
|
+
}
|
1031
|
+
|
1032
|
+
static VALUE domain_snapshot_new(virDomainSnapshotPtr d, VALUE domain) {
|
1033
|
+
VALUE result;
|
1034
|
+
result = Data_Wrap_Struct(c_domain_snapshot, NULL, domain_snapshot_free, d);
|
1035
|
+
rb_iv_set(result, "@domain", domain);
|
1036
|
+
return result;
|
1037
|
+
}
|
1038
|
+
|
1039
|
+
static virDomainSnapshotPtr domain_snapshot_get(VALUE s) {
|
1040
|
+
generic_get(DomainSnapshot, s);
|
1041
|
+
}
|
1042
|
+
|
1043
|
+
/*
|
1044
|
+
* call-seq:
|
1045
|
+
* dom.snapshot_create_xml -> Libvirt::Domain::Snapshot
|
1046
|
+
*
|
1047
|
+
* Call +virDomainSnapshotCreateXML+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSnapshotCreateXML]
|
1048
|
+
*/
|
1049
|
+
static VALUE libvirt_dom_snapshot_create_xml(int argc, VALUE *argv, VALUE d) {
|
1050
|
+
VALUE xmlDesc, flags;
|
1051
|
+
virDomainSnapshotPtr ret;
|
1052
|
+
|
1053
|
+
rb_scan_args(argc, argv, "11", &xmlDesc, &flags);
|
1054
|
+
|
1055
|
+
if (NIL_P(flags))
|
1056
|
+
flags = INT2FIX(0);
|
1057
|
+
|
1058
|
+
ret = virDomainSnapshotCreateXML(domain_get(d), StringValueCStr(xmlDesc),
|
1059
|
+
NUM2UINT(flags));
|
1060
|
+
|
1061
|
+
_E(ret == NULL, create_error(e_Error, "virDomainSnapshotCreateXML", "", conn(d)));
|
1062
|
+
|
1063
|
+
return domain_snapshot_new(ret, d);
|
1064
|
+
}
|
1065
|
+
|
1066
|
+
/*
|
1067
|
+
* call-seq:
|
1068
|
+
* dom.num_of_snapshots -> fixnum
|
1069
|
+
*
|
1070
|
+
* Call +virDomainSnapshotNum+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSnapshotNum]
|
1071
|
+
*/
|
1072
|
+
static VALUE libvirt_dom_num_of_snapshots(int argc, VALUE *argv, VALUE d) {
|
1073
|
+
int result;
|
1074
|
+
virDomainPtr dom = domain_get(d);
|
1075
|
+
VALUE flags;
|
1076
|
+
|
1077
|
+
rb_scan_args(argc, argv, "01", &flags);
|
1078
|
+
|
1079
|
+
if (NIL_P(flags))
|
1080
|
+
flags = INT2FIX(0);
|
1081
|
+
|
1082
|
+
result = virDomainSnapshotNum(dom, NUM2UINT(flags));
|
1083
|
+
_E(result < 0, create_error(e_RetrieveError, "virDomainSnapshotNum", "", conn(d)));
|
1084
|
+
\
|
1085
|
+
return INT2NUM(result); \
|
1086
|
+
}
|
1087
|
+
|
1088
|
+
/*
|
1089
|
+
* call-seq:
|
1090
|
+
* dom.list_snapshots -> list
|
1091
|
+
*
|
1092
|
+
* Call +virDomainSnapshotListNames+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSnapshotListNames]
|
1093
|
+
*/
|
1094
|
+
static VALUE libvirt_dom_list_snapshots(int argc, VALUE *argv, VALUE d) {
|
1095
|
+
VALUE flags;
|
1096
|
+
int r, i;
|
1097
|
+
int num;
|
1098
|
+
virDomainPtr dom = domain_get(d);
|
1099
|
+
char **names;
|
1100
|
+
VALUE result;
|
1101
|
+
|
1102
|
+
rb_scan_args(argc, argv, "01", &flags);
|
1103
|
+
|
1104
|
+
if (NIL_P(flags))
|
1105
|
+
flags = INT2FIX(0);
|
1106
|
+
|
1107
|
+
num = virDomainSnapshotNum(dom, 0);
|
1108
|
+
_E(num < 0, create_error(e_RetrieveError, "virDomainSnapshotNum", "", conn(d)));
|
1109
|
+
if (num == 0) {
|
1110
|
+
/* if num is 0, don't call virDomainSnapshotListNames function */
|
1111
|
+
result = rb_ary_new2(num);
|
1112
|
+
return result;
|
1113
|
+
}
|
1114
|
+
names = ALLOC_N(char *, num);
|
1115
|
+
|
1116
|
+
r = virDomainSnapshotListNames(domain_get(d), names, num,
|
1117
|
+
NUM2UINT(flags));
|
1118
|
+
if (r < 0) {
|
1119
|
+
free(names);
|
1120
|
+
_E(r < 0, create_error(e_RetrieveError, "virDomainSnapshotListNames", "", conn(d)));
|
1121
|
+
}
|
1122
|
+
|
1123
|
+
result = rb_ary_new2(num);
|
1124
|
+
for (i=0; i<num; i++) {
|
1125
|
+
rb_ary_push(result, rb_str_new2(names[i]));
|
1126
|
+
free(names[i]);
|
1127
|
+
}
|
1128
|
+
free(names);
|
1129
|
+
return result;
|
1130
|
+
}
|
1131
|
+
|
1132
|
+
/*
|
1133
|
+
* call-seq:
|
1134
|
+
* dom.lookup_snapshot_by_name -> Libvirt::Domain::Snapshot
|
1135
|
+
*
|
1136
|
+
* Call +virDomainSnapshotLookupByName+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSnapshotLookupByName]
|
1137
|
+
*/
|
1138
|
+
static VALUE libvirt_dom_lookup_snapshot_by_name(int argc, VALUE *argv, VALUE d) {
|
1139
|
+
virDomainPtr dom = domain_get(d);
|
1140
|
+
virDomainSnapshotPtr snap;
|
1141
|
+
VALUE name, flags;
|
1142
|
+
|
1143
|
+
rb_scan_args(argc, argv, "11", &name, &flags);
|
1144
|
+
|
1145
|
+
if (NIL_P(flags))
|
1146
|
+
flags = INT2FIX(0);
|
1147
|
+
|
1148
|
+
snap = virDomainSnapshotLookupByName(dom, StringValueCStr(name),
|
1149
|
+
NUM2UINT(flags));
|
1150
|
+
_E(dom == NULL, create_error(e_RetrieveError, "virDomainSnapshotLookupByName", "", conn(d)));
|
1151
|
+
|
1152
|
+
return domain_snapshot_new(snap, d);
|
1153
|
+
}
|
1154
|
+
|
1155
|
+
/*
|
1156
|
+
* call-seq:
|
1157
|
+
* dom.has_current_snapshot? -> [true|false]
|
1158
|
+
*
|
1159
|
+
* Call +virDomainHasCurrentSnapshot+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainHasCurrentSnapshot]
|
1160
|
+
*/
|
1161
|
+
static VALUE libvirt_dom_has_current_snapshot_p(int argc, VALUE *argv, VALUE d) {
|
1162
|
+
VALUE flags;
|
1163
|
+
|
1164
|
+
rb_scan_args(argc, argv, "01", &flags);
|
1165
|
+
|
1166
|
+
if (NIL_P(flags))
|
1167
|
+
flags = INT2FIX(0);
|
1168
|
+
|
1169
|
+
gen_call_truefalse(virDomainHasCurrentSnapshot, conn(d), domain_get(d),
|
1170
|
+
NUM2UINT(flags));
|
1171
|
+
}
|
1172
|
+
|
1173
|
+
/*
|
1174
|
+
* call-seq:
|
1175
|
+
* dom.revert_to_snapshot -> nil
|
1176
|
+
*
|
1177
|
+
* Call +virDomainRevertToSnapshot+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainRevertToSnapshot]
|
1178
|
+
*/
|
1179
|
+
static VALUE libvirt_dom_revert_to_snapshot(int argc, VALUE *argv, VALUE d) {
|
1180
|
+
VALUE snap, flags;
|
1181
|
+
int r;
|
1182
|
+
|
1183
|
+
rb_scan_args(argc, argv, "11", &snap, &flags);
|
1184
|
+
|
1185
|
+
if (NIL_P(flags))
|
1186
|
+
flags = INT2FIX(0);
|
1187
|
+
|
1188
|
+
r = virDomainRevertToSnapshot(domain_snapshot_get(snap), NUM2UINT(flags));
|
1189
|
+
_E(r < 0, create_error(e_RetrieveError, "virDomainRevertToSnapshot", "", conn(d)));
|
1190
|
+
|
1191
|
+
return Qnil;
|
1192
|
+
}
|
1193
|
+
|
1194
|
+
/*
|
1195
|
+
* call-seq:
|
1196
|
+
* dom.current_snapshot -> Libvirt::Domain::Snapshot
|
1197
|
+
*
|
1198
|
+
* Call +virDomainCurrentSnapshot+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainCurrentSnapshot]
|
1199
|
+
*/
|
1200
|
+
static VALUE libvirt_dom_current_snapshot(int argc, VALUE *argv, VALUE d) {
|
1201
|
+
VALUE flags;
|
1202
|
+
virDomainSnapshotPtr snap;
|
1203
|
+
|
1204
|
+
rb_scan_args(argc, argv, "01", &flags);
|
1205
|
+
|
1206
|
+
if (NIL_P(flags))
|
1207
|
+
flags = INT2FIX(0);
|
1208
|
+
|
1209
|
+
snap = virDomainSnapshotCurrent(domain_get(d), NUM2UINT(flags));
|
1210
|
+
_E(snap == NULL, create_error(e_RetrieveError, "virDomainSnapshotCurrent", "", conn(d)));
|
1211
|
+
|
1212
|
+
return domain_snapshot_new(snap, d);
|
1213
|
+
}
|
1214
|
+
|
1215
|
+
/*
|
1216
|
+
* call-seq:
|
1217
|
+
* snapshot.xml_desc -> string
|
1218
|
+
*
|
1219
|
+
* Call +virDomainSnapshotGetXMLDesc+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSnapshotGetXMLDesc]
|
1220
|
+
*/
|
1221
|
+
static VALUE libvirt_dom_snapshot_xml_desc(int argc, VALUE *argv, VALUE s) {
|
1222
|
+
VALUE flags;
|
1223
|
+
|
1224
|
+
rb_scan_args(argc, argv, "01", &flags);
|
1225
|
+
|
1226
|
+
if (NIL_P(flags))
|
1227
|
+
flags = INT2FIX(0);
|
1228
|
+
|
1229
|
+
gen_call_string(virDomainSnapshotGetXMLDesc, conn(s), 1,
|
1230
|
+
domain_snapshot_get(s), NUM2UINT(flags));
|
1231
|
+
}
|
1232
|
+
|
1233
|
+
/*
|
1234
|
+
* call-seq:
|
1235
|
+
* snapshot.delete -> nil
|
1236
|
+
*
|
1237
|
+
* Call +virDomainSnapshotDelete+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSnapshotDelete]
|
1238
|
+
*/
|
1239
|
+
static VALUE libvirt_dom_snapshot_delete(int argc, VALUE *argv, VALUE s) {
|
1240
|
+
VALUE flags;
|
1241
|
+
|
1242
|
+
rb_scan_args(argc, argv, "01", &flags);
|
1243
|
+
|
1244
|
+
if (NIL_P(flags))
|
1245
|
+
flags = INT2FIX(0);
|
1246
|
+
|
1247
|
+
gen_call_void(virDomainSnapshotDelete, conn(s),
|
1248
|
+
domain_snapshot_get(s), NUM2UINT(flags));
|
1249
|
+
}
|
1250
|
+
|
1251
|
+
/*
|
1252
|
+
* call-seq:
|
1253
|
+
* snapshot.free -> nil
|
1254
|
+
*
|
1255
|
+
* Call +virDomainSnapshotFree+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainSnapshotFree]
|
1256
|
+
*/
|
1257
|
+
static VALUE libvirt_dom_snapshot_free(VALUE s) {
|
1258
|
+
gen_call_free(DomainSnapshot, s);
|
1259
|
+
}
|
1260
|
+
|
1261
|
+
#endif
|
1262
|
+
|
1263
|
+
#if HAVE_TYPE_VIRDOMAINJOBINFOPTR
|
1264
|
+
/*
|
1265
|
+
* call-seq:
|
1266
|
+
* dom.job_info -> Libvirt::Domain::JobInfo
|
1267
|
+
*
|
1268
|
+
* Call +virDomainGetJobInfo+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainGetJobInfo]
|
1269
|
+
*/
|
1270
|
+
static VALUE libvirt_dom_job_info(VALUE d) {
|
1271
|
+
int r;
|
1272
|
+
virDomainJobInfo info;
|
1273
|
+
VALUE result;
|
1274
|
+
|
1275
|
+
r = virDomainGetJobInfo(domain_get(d), &info);
|
1276
|
+
_E(r < 0, create_error(e_RetrieveError, "virDomainGetJobInfo", "", conn(d)));
|
1277
|
+
|
1278
|
+
result = rb_class_new_instance(0, NULL, c_domain_job_info);
|
1279
|
+
rb_iv_set(result, "@type", INT2NUM(info.type));
|
1280
|
+
rb_iv_set(result, "@time_elapsed", ULL2NUM(info.timeElapsed));
|
1281
|
+
rb_iv_set(result, "@time_remaining", ULL2NUM(info.timeRemaining));
|
1282
|
+
rb_iv_set(result, "@data_total", ULL2NUM(info.dataTotal));
|
1283
|
+
rb_iv_set(result, "@data_processed", ULL2NUM(info.dataProcessed));
|
1284
|
+
rb_iv_set(result, "@data_remaining", ULL2NUM(info.dataRemaining));
|
1285
|
+
rb_iv_set(result, "@mem_total", ULL2NUM(info.memTotal));
|
1286
|
+
rb_iv_set(result, "@mem_processed", ULL2NUM(info.memProcessed));
|
1287
|
+
rb_iv_set(result, "@mem_remaining", ULL2NUM(info.memRemaining));
|
1288
|
+
rb_iv_set(result, "@file_total", ULL2NUM(info.fileTotal));
|
1289
|
+
rb_iv_set(result, "@file_processed", ULL2NUM(info.fileProcessed));
|
1290
|
+
rb_iv_set(result, "@file_remaining", ULL2NUM(info.fileRemaining));
|
1291
|
+
|
1292
|
+
return result;
|
1293
|
+
}
|
1294
|
+
|
1295
|
+
/*
|
1296
|
+
* call-seq:
|
1297
|
+
* dom.abort_job -> nil
|
1298
|
+
*
|
1299
|
+
* Call +virDomainAbortJob+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainAbortJob]
|
1300
|
+
*/
|
1301
|
+
static VALUE libvirt_dom_abort_job(VALUE d) {
|
1302
|
+
gen_call_void(virDomainAbortJob, conn(d), domain_get(d));
|
1303
|
+
}
|
1304
|
+
|
1305
|
+
#endif
|
1306
|
+
|
1307
|
+
/*
|
1308
|
+
* Class Libvirt::Domain
|
1309
|
+
*/
|
1310
|
+
void init_domain()
|
1311
|
+
{
|
1312
|
+
c_domain = rb_define_class_under(m_libvirt, "Domain", rb_cObject);
|
1313
|
+
|
1314
|
+
#define DEF_DOMSTATE(name) \
|
1315
|
+
rb_define_const(c_domain, #name, INT2NUM(VIR_DOMAIN_##name))
|
1316
|
+
/* virDomainState */
|
1317
|
+
DEF_DOMSTATE(NOSTATE);
|
1318
|
+
DEF_DOMSTATE(RUNNING);
|
1319
|
+
DEF_DOMSTATE(BLOCKED);
|
1320
|
+
DEF_DOMSTATE(PAUSED);
|
1321
|
+
DEF_DOMSTATE(SHUTDOWN);
|
1322
|
+
DEF_DOMSTATE(SHUTOFF);
|
1323
|
+
DEF_DOMSTATE(CRASHED);
|
1324
|
+
#undef DEF_DOMSTATE
|
1325
|
+
|
1326
|
+
/* virDomainMigrateFlags */
|
1327
|
+
#ifdef VIR_MIGRATE_LIVE
|
1328
|
+
rb_define_const(c_domain, "MIGRATE_LIVE", INT2NUM(VIR_MIGRATE_LIVE));
|
1329
|
+
#endif
|
1330
|
+
#ifdef VIR_MIGRATE_PEER2PEER
|
1331
|
+
rb_define_const(c_domain, "MIGRATE_PEER2PEER",
|
1332
|
+
INT2NUM(VIR_MIGRATE_PEER2PEER));
|
1333
|
+
#endif
|
1334
|
+
#ifdef VIR_MIGRATE_TUNNELLED
|
1335
|
+
rb_define_const(c_domain, "MIGRATE_TUNNELLED",
|
1336
|
+
INT2NUM(VIR_MIGRATE_TUNNELLED));
|
1337
|
+
#endif
|
1338
|
+
#ifdef VIR_MIGRATE_PERSIST_DEST
|
1339
|
+
rb_define_const(c_domain, "MIGRATE_PERSIST_DEST",
|
1340
|
+
INT2NUM(VIR_MIGRATE_PERSIST_DEST));
|
1341
|
+
#endif
|
1342
|
+
#ifdef VIR_MIGRATE_UNDEFINE_SOURCE
|
1343
|
+
rb_define_const(c_domain, "MIGRATE_UNDEFINE_SOURCE",
|
1344
|
+
INT2NUM(VIR_MIGRATE_UNDEFINE_SOURCE));
|
1345
|
+
#endif
|
1346
|
+
#ifdef VIR_MIGRATE_PAUSED
|
1347
|
+
rb_define_const(c_domain, "MIGRATE_PAUSED", INT2NUM(VIR_MIGRATE_PAUSED));
|
1348
|
+
#endif
|
1349
|
+
#ifdef VIR_MIGRATE_NON_SHARED_DISK
|
1350
|
+
rb_define_const(c_domain, "MIGRATE_NON_SHARED_DISK",
|
1351
|
+
INT2NUM(VIR_MIGRATE_NON_SHARED_DISK));
|
1352
|
+
#endif
|
1353
|
+
#ifdef VIR_MIGRATE_NON_SHARED_INC
|
1354
|
+
rb_define_const(c_domain, "MIGRATE_NON_SHARED_INC",
|
1355
|
+
INT2NUM(VIR_MIGRATE_NON_SHARED_INC));
|
1356
|
+
#endif
|
1357
|
+
/* DomainGetXMLDesc flags */
|
1358
|
+
rb_define_const(c_domain, "DOMAIN_XML_SECURE",
|
1359
|
+
INT2NUM(VIR_DOMAIN_XML_SECURE));
|
1360
|
+
rb_define_const(c_domain, "DOMAIN_XML_INACTIVE",
|
1361
|
+
INT2NUM(VIR_DOMAIN_XML_INACTIVE));
|
1362
|
+
#ifdef VIR_DOMAIN_XML_UPDATE_CPU
|
1363
|
+
rb_define_const(c_domain, "DOMAIN_XML_UPDATE_CPU",
|
1364
|
+
INT2NUM(VIR_DOMAIN_XML_UPDATE_CPU));
|
1365
|
+
#endif
|
1366
|
+
rb_define_const(c_domain, "MEMORY_VIRTUAL", INT2NUM(VIR_MEMORY_VIRTUAL));
|
1367
|
+
#ifdef VIR_MEMORY_PHYSICAL
|
1368
|
+
rb_define_const(c_domain, "MEMORY_PHYSICAL", INT2NUM(VIR_MEMORY_PHYSICAL));
|
1369
|
+
#endif
|
1370
|
+
|
1371
|
+
// Domain creation/lookup
|
1372
|
+
rb_define_method(c_connect, "num_of_domains",
|
1373
|
+
libvirt_conn_num_of_domains, 0);
|
1374
|
+
rb_define_method(c_connect, "list_domains", libvirt_conn_list_domains, 0);
|
1375
|
+
rb_define_method(c_connect, "num_of_defined_domains",
|
1376
|
+
libvirt_conn_num_of_defined_domains, 0);
|
1377
|
+
rb_define_method(c_connect, "list_defined_domains",
|
1378
|
+
libvirt_conn_list_defined_domains, 0);
|
1379
|
+
rb_define_method(c_connect, "create_domain_linux",
|
1380
|
+
libvirt_conn_create_linux, -1);
|
1381
|
+
rb_define_method(c_connect, "lookup_domain_by_name",
|
1382
|
+
libvirt_conn_lookup_domain_by_name, 1);
|
1383
|
+
rb_define_method(c_connect, "lookup_domain_by_id",
|
1384
|
+
libvirt_conn_lookup_domain_by_id, 1);
|
1385
|
+
rb_define_method(c_connect, "lookup_domain_by_uuid",
|
1386
|
+
libvirt_conn_lookup_domain_by_uuid, 1);
|
1387
|
+
rb_define_method(c_connect, "define_domain_xml",
|
1388
|
+
libvirt_conn_define_domain_xml, 1);
|
1389
|
+
|
1390
|
+
#if HAVE_VIRCONNECTDOMAINXMLFROMNATIVE
|
1391
|
+
rb_define_method(c_connect, "domain_xml_from_native",
|
1392
|
+
libvirt_conn_domain_xml_from_native, -1);
|
1393
|
+
#endif
|
1394
|
+
#if HAVE_VIRCONNECTDOMAINXMLTONATIVE
|
1395
|
+
rb_define_method(c_connect, "domain_xml_to_native",
|
1396
|
+
libvirt_conn_domain_xml_to_native, -1);
|
1397
|
+
#endif
|
1398
|
+
|
1399
|
+
rb_define_method(c_domain, "migrate", libvirt_dom_migrate, -1);
|
1400
|
+
#if HAVE_VIRDOMAINMIGRATETOURI
|
1401
|
+
rb_define_method(c_domain, "migrate_to_uri",
|
1402
|
+
libvirt_dom_migrate_to_uri, -1);
|
1403
|
+
#endif
|
1404
|
+
#if HAVE_VIRDOMAINMIGRATESETMAXDOWNTIME
|
1405
|
+
rb_define_method(c_domain, "migrate_set_max_downtime",
|
1406
|
+
libvirt_dom_migrate_set_max_downtime, -1);
|
1407
|
+
#endif
|
1408
|
+
rb_define_attr(c_domain, "connection", 1, 0);
|
1409
|
+
rb_define_method(c_domain, "shutdown", libvirt_dom_shutdown, 0);
|
1410
|
+
rb_define_method(c_domain, "reboot", libvirt_dom_reboot, -1);
|
1411
|
+
rb_define_method(c_domain, "destroy", libvirt_dom_destroy, 0);
|
1412
|
+
rb_define_method(c_domain, "suspend", libvirt_dom_suspend, 0);
|
1413
|
+
rb_define_method(c_domain, "resume", libvirt_dom_resume, 0);
|
1414
|
+
rb_define_method(c_domain, "save", libvirt_dom_save, 1);
|
1415
|
+
rb_define_singleton_method(c_domain, "restore", libvirt_dom_s_restore, 2);
|
1416
|
+
rb_define_method(c_domain, "core_dump", libvirt_dom_core_dump, -1);
|
1417
|
+
rb_define_method(c_domain, "info", libvirt_dom_info, 0);
|
1418
|
+
rb_define_method(c_domain, "ifinfo", libvirt_dom_if_stats, 1);
|
1419
|
+
rb_define_method(c_domain, "name", libvirt_dom_name, 0);
|
1420
|
+
rb_define_method(c_domain, "id", libvirt_dom_id, 0);
|
1421
|
+
rb_define_method(c_domain, "uuid", libvirt_dom_uuid, 0);
|
1422
|
+
rb_define_method(c_domain, "os_type", libvirt_dom_os_type, 0);
|
1423
|
+
rb_define_method(c_domain, "max_memory", libvirt_dom_max_memory, 0);
|
1424
|
+
rb_define_method(c_domain, "max_memory=", libvirt_dom_max_memory_set, 1);
|
1425
|
+
rb_define_method(c_domain, "memory=", libvirt_dom_memory_set, 1);
|
1426
|
+
rb_define_method(c_domain, "max_vcpus", libvirt_dom_max_vcpus, 0);
|
1427
|
+
rb_define_method(c_domain, "vcpus=", libvirt_dom_vcpus_set, 1);
|
1428
|
+
rb_define_method(c_domain, "pin_vcpu", libvirt_dom_pin_vcpu, 2);
|
1429
|
+
rb_define_method(c_domain, "xml_desc", libvirt_dom_xml_desc, -1);
|
1430
|
+
rb_define_method(c_domain, "undefine", libvirt_dom_undefine, 0);
|
1431
|
+
rb_define_method(c_domain, "create", libvirt_dom_create, 0);
|
1432
|
+
rb_define_method(c_domain, "autostart", libvirt_dom_autostart, 0);
|
1433
|
+
rb_define_method(c_domain, "autostart?", libvirt_dom_autostart, 0);
|
1434
|
+
rb_define_method(c_domain, "autostart=", libvirt_dom_autostart_set, 1);
|
1435
|
+
rb_define_method(c_domain, "free", libvirt_dom_free, 0);
|
1436
|
+
/* FIXME: we should probably allow a "flags" parameter to
|
1437
|
+
* {attach,detach}_device, and then call
|
1438
|
+
* virDomain{Attach,Detach}DeviceFlags, where appropriate
|
1439
|
+
*
|
1440
|
+
* We should also make the VIR_DOMAIN_DEVICE_MODIFY_* flags consts
|
1441
|
+
*/
|
1442
|
+
rb_define_method(c_domain, "attach_device", libvirt_dom_attach_device, 1);
|
1443
|
+
rb_define_method(c_domain, "detach_device", libvirt_dom_detach_device, 1);
|
1444
|
+
/* FIXME: implement this */
|
1445
|
+
// rb_define_method(c_domain, "update_device", libvirt_dom_update_device, -1);
|
1446
|
+
/* FIXME: we should probably do scheduler parameters as hashes. That is
|
1447
|
+
* virDomainGetSchedulerParameters should return a hash with all of the
|
1448
|
+
* parameters, and virDomainSetSchedulerParameters should take a hash
|
1449
|
+
* of parameters in
|
1450
|
+
*/
|
1451
|
+
//rb_define_method(c_domain, "get_scheduler_params", libvirt_dom_get_scheduler_params, 0);
|
1452
|
+
//rb_define_method(c_domain, "set_scheduler_params", libvirt_dom_set_scheduler_params, 0)
|
1453
|
+
#if HAVE_VIRDOMAINMANAGEDSAVE
|
1454
|
+
rb_define_method(c_domain, "managed_save", libvirt_dom_managed_save, -1);
|
1455
|
+
rb_define_method(c_domain, "has_managed_save?",
|
1456
|
+
libvirt_dom_has_managed_save, -1);
|
1457
|
+
rb_define_method(c_domain, "managed_save_remove",
|
1458
|
+
libvirt_dom_managed_save_remove, -1);
|
1459
|
+
#endif
|
1460
|
+
rb_define_method(c_domain, "security_label",
|
1461
|
+
libvirt_dom_security_label, 0);
|
1462
|
+
rb_define_method(c_domain, "block_stats", libvirt_dom_block_stats, 1);
|
1463
|
+
#if HAVE_TYPE_VIRDOMAINMEMORYSTATPTR
|
1464
|
+
rb_define_method(c_domain, "memory_stats", libvirt_dom_memory_stats, -1);
|
1465
|
+
#endif
|
1466
|
+
rb_define_method(c_domain, "block_peek", libvirt_dom_block_peek, -1);
|
1467
|
+
#if HAVE_TYPE_VIRDOMAINBLOCKINFOPTR
|
1468
|
+
rb_define_method(c_domain, "blockinfo", libvirt_dom_block_info, -1);
|
1469
|
+
#endif
|
1470
|
+
rb_define_method(c_domain, "memory_peek", libvirt_dom_memory_peek, -1);
|
1471
|
+
/* FIXME: implement these */
|
1472
|
+
//rb_define_method(c_domain, "get_vcpus", libvirt_dom_get_vcpus, 0);
|
1473
|
+
#if HAVE_VIRDOMAINISACTIVE
|
1474
|
+
rb_define_method(c_domain, "active?", libvirt_dom_active_p, 0);
|
1475
|
+
#endif
|
1476
|
+
#if HAVE_VIRDOMAINISPERSISTENT
|
1477
|
+
rb_define_method(c_domain, "persistent?", libvirt_dom_persistent_p, 0);
|
1478
|
+
#endif
|
1479
|
+
#if HAVE_TYPE_VIRDOMAINSNAPSHOTPTR
|
1480
|
+
rb_define_method(c_domain, "snapshot_create_xml",
|
1481
|
+
libvirt_dom_snapshot_create_xml, -1);
|
1482
|
+
rb_define_method(c_domain, "num_of_snapshots",
|
1483
|
+
libvirt_dom_num_of_snapshots, -1);
|
1484
|
+
rb_define_method(c_domain, "list_snapshots",
|
1485
|
+
libvirt_dom_list_snapshots, -1);
|
1486
|
+
rb_define_method(c_domain, "lookup_snapshot_by_name",
|
1487
|
+
libvirt_dom_lookup_snapshot_by_name, -1);
|
1488
|
+
rb_define_method(c_domain, "has_current_snapshot?",
|
1489
|
+
libvirt_dom_has_current_snapshot_p, -1);
|
1490
|
+
rb_define_method(c_domain, "revert_to_snapshot",
|
1491
|
+
libvirt_dom_revert_to_snapshot, -1);
|
1492
|
+
rb_define_method(c_domain, "current_snapshot",
|
1493
|
+
libvirt_dom_current_snapshot, -1);
|
1494
|
+
#endif
|
1495
|
+
|
1496
|
+
/*
|
1497
|
+
* Class Libvirt::Domain::Info
|
1498
|
+
*/
|
1499
|
+
c_domain_info = rb_define_class_under(c_domain, "Info", rb_cObject);
|
1500
|
+
rb_define_attr(c_domain_info, "state", 1, 0);
|
1501
|
+
rb_define_attr(c_domain_info, "max_mem", 1, 0);
|
1502
|
+
rb_define_attr(c_domain_info, "memory", 1, 0);
|
1503
|
+
rb_define_attr(c_domain_info, "nr_virt_cpu", 1, 0);
|
1504
|
+
rb_define_attr(c_domain_info, "cpu_time", 1, 0);
|
1505
|
+
|
1506
|
+
/*
|
1507
|
+
* Class Libvirt::Domain::InterfaceInfo
|
1508
|
+
*/
|
1509
|
+
c_domain_ifinfo = rb_define_class_under(c_domain, "InterfaceInfo",
|
1510
|
+
rb_cObject);
|
1511
|
+
rb_define_attr(c_domain_ifinfo, "rx_bytes", 1, 0);
|
1512
|
+
rb_define_attr(c_domain_ifinfo, "rx_packets", 1, 0);
|
1513
|
+
rb_define_attr(c_domain_ifinfo, "rx_errs", 1, 0);
|
1514
|
+
rb_define_attr(c_domain_ifinfo, "rx_drop", 1, 0);
|
1515
|
+
rb_define_attr(c_domain_ifinfo, "tx_bytes", 1, 0);
|
1516
|
+
rb_define_attr(c_domain_ifinfo, "tx_packets", 1, 0);
|
1517
|
+
rb_define_attr(c_domain_ifinfo, "tx_errs", 1, 0);
|
1518
|
+
rb_define_attr(c_domain_ifinfo, "tx_drop", 1, 0);
|
1519
|
+
|
1520
|
+
/*
|
1521
|
+
* Class Libvirt::Domain::SecurityLabel
|
1522
|
+
*/
|
1523
|
+
c_domain_security_label = rb_define_class_under(c_domain, "SecurityLabel",
|
1524
|
+
rb_cObject);
|
1525
|
+
rb_define_attr(c_domain_security_label, "label", 1, 0);
|
1526
|
+
rb_define_attr(c_domain_security_label, "enforcing", 1, 0);
|
1527
|
+
|
1528
|
+
/*
|
1529
|
+
* Class Libvirt::Domain::BlockStats
|
1530
|
+
*/
|
1531
|
+
c_domain_block_stats = rb_define_class_under(c_domain, "BlockStats",
|
1532
|
+
rb_cObject);
|
1533
|
+
rb_define_attr(c_domain_block_stats, "rd_req", 1, 0);
|
1534
|
+
rb_define_attr(c_domain_block_stats, "rd_bytes", 1, 0);
|
1535
|
+
rb_define_attr(c_domain_block_stats, "wr_req", 1, 0);
|
1536
|
+
rb_define_attr(c_domain_block_stats, "wr_bytes", 1, 0);
|
1537
|
+
rb_define_attr(c_domain_block_stats, "errs", 1, 0);
|
1538
|
+
|
1539
|
+
#if HAVE_TYPE_VIRDOMAINMEMORYSTATPTR
|
1540
|
+
/*
|
1541
|
+
* Class Libvirt::Domain::MemoryStats
|
1542
|
+
*/
|
1543
|
+
c_domain_memory_stats = rb_define_class_under(c_domain, "MemoryStats",
|
1544
|
+
rb_cObject);
|
1545
|
+
rb_define_attr(c_domain_memory_stats, "tag", 1, 0);
|
1546
|
+
rb_define_attr(c_domain_memory_stats, "value", 1, 0);
|
1547
|
+
#endif
|
1548
|
+
|
1549
|
+
#if HAVE_TYPE_VIRDOMAINBLOCKINFOPTR
|
1550
|
+
/*
|
1551
|
+
* Class Libvirt::Domain::BlockInfo
|
1552
|
+
*/
|
1553
|
+
c_domain_block_info = rb_define_class_under(c_domain, "BlockInfo",
|
1554
|
+
rb_cObject);
|
1555
|
+
rb_define_attr(c_domain_block_info, "capacity", 1, 0);
|
1556
|
+
rb_define_attr(c_domain_block_info, "allocation", 1, 0);
|
1557
|
+
rb_define_attr(c_domain_block_info, "physical", 1, 0);
|
1558
|
+
#endif
|
1559
|
+
|
1560
|
+
#if HAVE_TYPE_VIRDOMAINSNAPSHOTPTR
|
1561
|
+
/*
|
1562
|
+
* Class Libvirt::Domain::Snapshot
|
1563
|
+
*/
|
1564
|
+
c_domain_snapshot = rb_define_class_under(c_domain, "Snapshot", rb_cObject);
|
1565
|
+
rb_define_const(c_domain_snapshot, "DELETE_CHILDREN",
|
1566
|
+
INT2NUM(VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN));
|
1567
|
+
rb_define_method(c_domain_snapshot, "xml_desc",
|
1568
|
+
libvirt_dom_snapshot_xml_desc, -1);
|
1569
|
+
rb_define_method(c_domain_snapshot, "delete",
|
1570
|
+
libvirt_dom_snapshot_delete, -1);
|
1571
|
+
rb_define_method(c_domain_snapshot, "free", libvirt_dom_snapshot_free, 0);
|
1572
|
+
#endif
|
1573
|
+
|
1574
|
+
#if HAVE_TYPE_VIRDOMAINJOBINFOPTR
|
1575
|
+
/*
|
1576
|
+
* Class Libvirt::Domain::JobInfo
|
1577
|
+
*/
|
1578
|
+
c_domain_job_info = rb_define_class_under(c_domain, "JobInfo", rb_cObject);
|
1579
|
+
rb_define_const(c_domain_job_info, "NONE", INT2NUM(VIR_DOMAIN_JOB_NONE));
|
1580
|
+
rb_define_const(c_domain_job_info, "BOUNDED",
|
1581
|
+
INT2NUM(VIR_DOMAIN_JOB_BOUNDED));
|
1582
|
+
rb_define_const(c_domain_job_info, "UNBOUNDED",
|
1583
|
+
INT2NUM(VIR_DOMAIN_JOB_UNBOUNDED));
|
1584
|
+
rb_define_const(c_domain_job_info, "COMPLETED",
|
1585
|
+
INT2NUM(VIR_DOMAIN_JOB_COMPLETED));
|
1586
|
+
rb_define_const(c_domain_job_info, "FAILED",
|
1587
|
+
INT2NUM(VIR_DOMAIN_JOB_FAILED));
|
1588
|
+
rb_define_const(c_domain_job_info, "CANCELLED",
|
1589
|
+
INT2NUM(VIR_DOMAIN_JOB_CANCELLED));
|
1590
|
+
rb_define_attr(c_domain_job_info, "type", 1, 0);
|
1591
|
+
rb_define_attr(c_domain_job_info, "time_elapsed", 1, 0);
|
1592
|
+
rb_define_attr(c_domain_job_info, "time_remaining", 1, 0);
|
1593
|
+
rb_define_attr(c_domain_job_info, "data_total", 1, 0);
|
1594
|
+
rb_define_attr(c_domain_job_info, "data_processed", 1, 0);
|
1595
|
+
rb_define_attr(c_domain_job_info, "data_remaining", 1, 0);
|
1596
|
+
rb_define_attr(c_domain_job_info, "mem_total", 1, 0);
|
1597
|
+
rb_define_attr(c_domain_job_info, "mem_processed", 1, 0);
|
1598
|
+
rb_define_attr(c_domain_job_info, "mem_remaining", 1, 0);
|
1599
|
+
rb_define_attr(c_domain_job_info, "file_total", 1, 0);
|
1600
|
+
rb_define_attr(c_domain_job_info, "file_processed", 1, 0);
|
1601
|
+
rb_define_attr(c_domain_job_info, "file_remaining", 1, 0);
|
1602
|
+
|
1603
|
+
rb_define_method(c_domain, "job_info", libvirt_dom_job_info, 0);
|
1604
|
+
rb_define_method(c_domain, "abort_job", libvirt_dom_abort_job, 0);
|
1605
|
+
#endif
|
1606
|
+
}
|