ruby-libvirt 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/NEWS +16 -0
- data/README +4 -16
- data/README.rdoc +1 -0
- data/Rakefile +65 -24
- data/ext/libvirt/_libvirt.c +245 -16
- data/ext/libvirt/common.c +3 -1
- data/ext/libvirt/connect.c +195 -38
- data/ext/libvirt/domain.c +871 -282
- data/ext/libvirt/domain.h +0 -3
- data/ext/libvirt/extconf.rb +81 -5
- data/ext/libvirt/interface.c +3 -3
- data/ext/libvirt/network.c +1 -1
- data/ext/libvirt/nodedevice.c +3 -1
- data/ext/libvirt/nwfilter.c +1 -1
- data/ext/libvirt/secret.c +3 -3
- data/ext/libvirt/storage.c +60 -11
- data/ext/libvirt/stream.c +394 -0
- data/ext/libvirt/stream.h +7 -0
- data/tests/test_conn.rb +470 -0
- data/tests/test_domain.rb +224 -258
- data/tests/test_interface.rb +7 -73
- data/tests/test_network.rb +15 -100
- data/tests/test_nodedevice.rb +0 -31
- data/tests/test_nwfilter.rb +6 -61
- data/tests/test_open.rb +43 -49
- data/tests/test_secret.rb +9 -65
- data/tests/test_storage.rb +35 -134
- data/tests/test_utils.rb +120 -13
- metadata +26 -26
data/ext/libvirt/common.c
CHANGED
@@ -121,7 +121,9 @@ VALUE create_error(VALUE error, const char* method, virConnectPtr conn) {
|
|
121
121
|
rb_iv_set(ruby_errinfo, "@libvirt_function_name", rb_str_new2(method));
|
122
122
|
|
123
123
|
if (err != NULL) {
|
124
|
-
rb_iv_set(ruby_errinfo, "@libvirt_code",
|
124
|
+
rb_iv_set(ruby_errinfo, "@libvirt_code", INT2NUM(err->code));
|
125
|
+
rb_iv_set(ruby_errinfo, "@libvirt_component", INT2NUM(err->domain));
|
126
|
+
rb_iv_set(ruby_errinfo, "@libvirt_level", INT2NUM(err->level));
|
125
127
|
if (err->message != NULL)
|
126
128
|
rb_iv_set(ruby_errinfo, "@libvirt_message",
|
127
129
|
rb_str_new2(err->message));
|
data/ext/libvirt/connect.c
CHANGED
@@ -24,12 +24,7 @@
|
|
24
24
|
#include "extconf.h"
|
25
25
|
#include "common.h"
|
26
26
|
#include "domain.h"
|
27
|
-
#include "interface.h"
|
28
27
|
#include "network.h"
|
29
|
-
#include "nodedevice.h"
|
30
|
-
#include "nwfilter.h"
|
31
|
-
#include "secret.h"
|
32
|
-
#include "storage.h"
|
33
28
|
|
34
29
|
static VALUE c_connect;
|
35
30
|
static VALUE c_node_security_model;
|
@@ -247,7 +242,8 @@ static VALUE libvirt_conn_node_free_memory(VALUE s) {
|
|
247
242
|
* to retrieve the amount of free memory in each NUMA cell on the host for
|
248
243
|
* this connection.
|
249
244
|
*/
|
250
|
-
static VALUE libvirt_conn_node_cells_free_memory(int argc, VALUE *argv,
|
245
|
+
static VALUE libvirt_conn_node_cells_free_memory(int argc, VALUE *argv,
|
246
|
+
VALUE s) {
|
251
247
|
int r;
|
252
248
|
virConnectPtr conn = connect_get(s);
|
253
249
|
VALUE cells;
|
@@ -366,7 +362,7 @@ static VALUE libvirt_conn_compare_cpu(int argc, VALUE *argv, VALUE s) {
|
|
366
362
|
|
367
363
|
rb_scan_args(argc, argv, "11", &xml, &flags);
|
368
364
|
if (NIL_P(flags))
|
369
|
-
flags =
|
365
|
+
flags = INT2NUM(0);
|
370
366
|
|
371
367
|
gen_call_int(virConnectCompareCPU, conn(s), connect_get(s),
|
372
368
|
StringValueCStr(xml), NUM2UINT(flags));
|
@@ -396,6 +392,10 @@ static VALUE libvirt_conn_baseline_cpu(int argc, VALUE *argv, VALUE s) {
|
|
396
392
|
struct rb_ary_entry_arg arg;
|
397
393
|
|
398
394
|
rb_scan_args(argc, argv, "11", &xmlcpus, &flags_val);
|
395
|
+
/*
|
396
|
+
* We check flags up-front here so that we get a TypeError early on if
|
397
|
+
* flags is bogus.
|
398
|
+
*/
|
399
399
|
if (NIL_P(flags_val))
|
400
400
|
flags = 0;
|
401
401
|
else
|
@@ -456,17 +456,21 @@ static int domain_event_lifecycle_callback(virConnectPtr conn,
|
|
456
456
|
rb_raise(rb_eTypeError,
|
457
457
|
"wrong domain event lifecycle callback argument type (expected Array)");
|
458
458
|
|
459
|
+
if (RARRAY_LEN(passthrough) != 2)
|
460
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)",
|
461
|
+
RARRAY_LEN(passthrough));
|
462
|
+
|
459
463
|
cb = rb_ary_entry(passthrough, 0);
|
460
464
|
cb_opaque = rb_ary_entry(passthrough, 1);
|
461
465
|
|
462
466
|
newc = connect_new(conn);
|
463
467
|
if (strcmp(rb_obj_classname(cb), "Symbol") == 0)
|
464
468
|
rb_funcall(rb_class_of(cb), rb_to_id(cb), 5, newc,
|
465
|
-
domain_new(dom, newc),
|
469
|
+
domain_new(dom, newc), INT2NUM(event), INT2NUM(detail),
|
466
470
|
cb_opaque);
|
467
471
|
else if (strcmp(rb_obj_classname(cb), "Proc") == 0)
|
468
472
|
rb_funcall(cb, rb_intern("call"), 5, newc, domain_new(dom, newc),
|
469
|
-
|
473
|
+
INT2NUM(event), INT2NUM(detail), cb_opaque);
|
470
474
|
else
|
471
475
|
rb_raise(rb_eTypeError,
|
472
476
|
"wrong domain event lifecycle callback (expected Symbol or Proc)");
|
@@ -487,6 +491,10 @@ static int domain_event_reboot_callback(virConnectPtr conn, virDomainPtr dom,
|
|
487
491
|
rb_raise(rb_eTypeError,
|
488
492
|
"wrong domain event reboot callback argument type (expected Array)");
|
489
493
|
|
494
|
+
if (RARRAY_LEN(passthrough) != 2)
|
495
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)",
|
496
|
+
RARRAY_LEN(passthrough));
|
497
|
+
|
490
498
|
cb = rb_ary_entry(passthrough, 0);
|
491
499
|
cb_opaque = rb_ary_entry(passthrough, 1);
|
492
500
|
|
@@ -515,6 +523,10 @@ static int domain_event_rtc_callback(virConnectPtr conn, virDomainPtr dom,
|
|
515
523
|
rb_raise(rb_eTypeError,
|
516
524
|
"wrong domain event rtc callback argument type (expected Array)");
|
517
525
|
|
526
|
+
if (RARRAY_LEN(passthrough) != 2)
|
527
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)",
|
528
|
+
RARRAY_LEN(passthrough));
|
529
|
+
|
518
530
|
cb = rb_ary_entry(passthrough, 0);
|
519
531
|
cb_opaque = rb_ary_entry(passthrough, 1);
|
520
532
|
|
@@ -543,16 +555,20 @@ static int domain_event_watchdog_callback(virConnectPtr conn, virDomainPtr dom,
|
|
543
555
|
rb_raise(rb_eTypeError,
|
544
556
|
"wrong domain event watchdog callback argument type (expected Array)");
|
545
557
|
|
558
|
+
if (RARRAY_LEN(passthrough) != 2)
|
559
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)",
|
560
|
+
RARRAY_LEN(passthrough));
|
561
|
+
|
546
562
|
cb = rb_ary_entry(passthrough, 0);
|
547
563
|
cb_opaque = rb_ary_entry(passthrough, 1);
|
548
564
|
|
549
565
|
newc = connect_new(conn);
|
550
566
|
if (strcmp(rb_obj_classname(cb), "Symbol") == 0)
|
551
567
|
rb_funcall(rb_class_of(cb), rb_to_id(cb), 4, newc,
|
552
|
-
domain_new(dom, newc),
|
568
|
+
domain_new(dom, newc), INT2NUM(action), cb_opaque);
|
553
569
|
else if (strcmp(rb_obj_classname(cb), "Proc") == 0)
|
554
570
|
rb_funcall(cb, rb_intern("call"), 4, newc, domain_new(dom, newc),
|
555
|
-
|
571
|
+
INT2NUM(action), cb_opaque);
|
556
572
|
else
|
557
573
|
rb_raise(rb_eTypeError,
|
558
574
|
"wrong domain event watchdog callback (expected Symbol or Proc)");
|
@@ -574,6 +590,10 @@ static int domain_event_io_error_callback(virConnectPtr conn, virDomainPtr dom,
|
|
574
590
|
rb_raise(rb_eTypeError,
|
575
591
|
"wrong domain event IO error callback argument type (expected Array)");
|
576
592
|
|
593
|
+
if (RARRAY_LEN(passthrough) != 2)
|
594
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)",
|
595
|
+
RARRAY_LEN(passthrough));
|
596
|
+
|
577
597
|
cb = rb_ary_entry(passthrough, 0);
|
578
598
|
cb_opaque = rb_ary_entry(passthrough, 1);
|
579
599
|
|
@@ -581,11 +601,11 @@ static int domain_event_io_error_callback(virConnectPtr conn, virDomainPtr dom,
|
|
581
601
|
if (strcmp(rb_obj_classname(cb), "Symbol") == 0)
|
582
602
|
rb_funcall(rb_class_of(cb), rb_to_id(cb), 6, newc,
|
583
603
|
domain_new(dom, newc), rb_str_new2(src_path),
|
584
|
-
rb_str_new2(dev_alias),
|
604
|
+
rb_str_new2(dev_alias), INT2NUM(action), cb_opaque);
|
585
605
|
else if (strcmp(rb_obj_classname(cb), "Proc") == 0)
|
586
606
|
rb_funcall(cb, rb_intern("call"), 6, newc, domain_new(dom, newc),
|
587
607
|
rb_str_new2(src_path), rb_str_new2(dev_alias),
|
588
|
-
|
608
|
+
INT2NUM(action), cb_opaque);
|
589
609
|
else
|
590
610
|
rb_raise(rb_eTypeError,
|
591
611
|
"wrong domain event IO error callback (expected Symbol or Proc)");
|
@@ -609,6 +629,10 @@ static int domain_event_io_error_reason_callback(virConnectPtr conn,
|
|
609
629
|
rb_raise(rb_eTypeError,
|
610
630
|
"wrong domain event IO error reason callback argument type (expected Array)");
|
611
631
|
|
632
|
+
if (RARRAY_LEN(passthrough) != 2)
|
633
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)",
|
634
|
+
RARRAY_LEN(passthrough));
|
635
|
+
|
612
636
|
cb = rb_ary_entry(passthrough, 0);
|
613
637
|
cb_opaque = rb_ary_entry(passthrough, 1);
|
614
638
|
|
@@ -616,12 +640,12 @@ static int domain_event_io_error_reason_callback(virConnectPtr conn,
|
|
616
640
|
if (strcmp(rb_obj_classname(cb), "Symbol") == 0)
|
617
641
|
rb_funcall(rb_class_of(cb), rb_to_id(cb), 7, newc,
|
618
642
|
domain_new(dom, newc), rb_str_new2(src_path),
|
619
|
-
rb_str_new2(dev_alias),
|
643
|
+
rb_str_new2(dev_alias), INT2NUM(action),
|
620
644
|
rb_str_new2(reason), cb_opaque);
|
621
645
|
else if (strcmp(rb_obj_classname(cb), "Proc") == 0)
|
622
646
|
rb_funcall(cb, rb_intern("call"), 7, newc, domain_new(dom, newc),
|
623
647
|
rb_str_new2(src_path), rb_str_new2(dev_alias),
|
624
|
-
|
648
|
+
INT2NUM(action), rb_str_new2(reason), cb_opaque);
|
625
649
|
else
|
626
650
|
rb_raise(rb_eTypeError,
|
627
651
|
"wrong domain event IO error reason callback (expected Symbol or Proc)");
|
@@ -650,17 +674,21 @@ static int domain_event_graphics_callback(virConnectPtr conn, virDomainPtr dom,
|
|
650
674
|
rb_raise(rb_eTypeError,
|
651
675
|
"wrong domain event graphics callback argument type (expected Array)");
|
652
676
|
|
677
|
+
if (RARRAY_LEN(passthrough) != 2)
|
678
|
+
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)",
|
679
|
+
RARRAY_LEN(passthrough));
|
680
|
+
|
653
681
|
cb = rb_ary_entry(passthrough, 0);
|
654
682
|
cb_opaque = rb_ary_entry(passthrough, 1);
|
655
683
|
|
656
684
|
local_hash = rb_hash_new();
|
657
|
-
rb_hash_aset(local_hash, rb_str_new2("family"),
|
685
|
+
rb_hash_aset(local_hash, rb_str_new2("family"), INT2NUM(local->family));
|
658
686
|
rb_hash_aset(local_hash, rb_str_new2("node"), rb_str_new2(local->node));
|
659
687
|
rb_hash_aset(local_hash, rb_str_new2("service"),
|
660
688
|
rb_str_new2(local->service));
|
661
689
|
|
662
690
|
remote_hash = rb_hash_new();
|
663
|
-
rb_hash_aset(remote_hash, rb_str_new2("family"),
|
691
|
+
rb_hash_aset(remote_hash, rb_str_new2("family"), INT2NUM(remote->family));
|
664
692
|
rb_hash_aset(remote_hash, rb_str_new2("node"), rb_str_new2(remote->node));
|
665
693
|
rb_hash_aset(remote_hash, rb_str_new2("service"),
|
666
694
|
rb_str_new2(remote->service));
|
@@ -677,12 +705,12 @@ static int domain_event_graphics_callback(virConnectPtr conn, virDomainPtr dom,
|
|
677
705
|
newc = connect_new(conn);
|
678
706
|
if (strcmp(rb_obj_classname(cb), "Symbol") == 0)
|
679
707
|
rb_funcall(rb_class_of(cb), rb_to_id(cb), 8, newc,
|
680
|
-
domain_new(dom, newc),
|
708
|
+
domain_new(dom, newc), INT2NUM(phase), local_hash,
|
681
709
|
remote_hash, rb_str_new2(authScheme), subject_array,
|
682
710
|
cb_opaque);
|
683
711
|
else if (strcmp(rb_obj_classname(cb), "Proc") == 0)
|
684
712
|
rb_funcall(cb, rb_intern("call"), 8, newc, domain_new(dom, newc),
|
685
|
-
|
713
|
+
INT2NUM(phase), local_hash, remote_hash,
|
686
714
|
rb_str_new2(authScheme), subject_array, cb_opaque);
|
687
715
|
else
|
688
716
|
rb_raise(rb_eTypeError,
|
@@ -698,7 +726,7 @@ static int domain_event_graphics_callback(virConnectPtr conn, virDomainPtr dom,
|
|
698
726
|
* Call +virConnectDomainEventRegisterAny+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectDomainEventRegisterAny]
|
699
727
|
* to register callback for eventID with libvirt. The eventID must be one of
|
700
728
|
* the Libvirt::Connect::DOMAIN_EVENT_ID_* constants. The callback can either
|
701
|
-
*
|
729
|
+
* be a Symbol (that is the name of a method to callback) or a Proc. Note that
|
702
730
|
* the callback must accept different numbers of arguments depending on the
|
703
731
|
* eventID passed in. The arguments are as follows:
|
704
732
|
*
|
@@ -804,7 +832,7 @@ static int domain_event_callback(virConnectPtr conn,
|
|
804
832
|
*
|
805
833
|
* Call +virConnectDomainEventRegister+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectDomainEventRegister]
|
806
834
|
* to register callback for domain lifecycle events with libvirt. The
|
807
|
-
* callback can either
|
835
|
+
* callback can either be a Symbol (that is the name of a method to callback)
|
808
836
|
* or a Proc. The callback must accept 5 parameters: Libvirt::Connect,
|
809
837
|
* Libvirt::Domain, event, detail, opaque. The opaque parameter to
|
810
838
|
* domain_event_register can be any valid ruby type, and will be passed into
|
@@ -932,7 +960,7 @@ static VALUE libvirt_conn_list_defined_domains(VALUE s) {
|
|
932
960
|
*
|
933
961
|
* Call +virDomainCreateLinux+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainCreateLinux]
|
934
962
|
* to start a transient domain from the given XML. Deprecated; use
|
935
|
-
*
|
963
|
+
* conn.create_domain_xml instead.
|
936
964
|
*/
|
937
965
|
static VALUE libvirt_conn_create_linux(int argc, VALUE *argv, VALUE c) {
|
938
966
|
virDomainPtr dom;
|
@@ -942,7 +970,7 @@ static VALUE libvirt_conn_create_linux(int argc, VALUE *argv, VALUE c) {
|
|
942
970
|
rb_scan_args(argc, argv, "11", &xml, &flags);
|
943
971
|
|
944
972
|
if (NIL_P(flags))
|
945
|
-
flags =
|
973
|
+
flags = INT2NUM(0);
|
946
974
|
|
947
975
|
dom = virDomainCreateLinux(conn, StringValueCStr(xml), NUM2UINT(flags));
|
948
976
|
_E(dom == NULL, create_error(e_Error, "virDomainCreateLinux", conn));
|
@@ -966,7 +994,7 @@ static VALUE libvirt_conn_create_xml(int argc, VALUE *argv, VALUE c) {
|
|
966
994
|
rb_scan_args(argc, argv, "11", &xml, &flags);
|
967
995
|
|
968
996
|
if (NIL_P(flags))
|
969
|
-
flags =
|
997
|
+
flags = INT2NUM(0);
|
970
998
|
|
971
999
|
dom = virDomainCreateXML(conn, StringValueCStr(xml), NUM2UINT(flags));
|
972
1000
|
_E(dom == NULL, create_error(e_Error, "virDomainCreateXML", conn));
|
@@ -1055,7 +1083,8 @@ static VALUE libvirt_conn_define_domain_xml(VALUE c, VALUE xml) {
|
|
1055
1083
|
* Call +virConnectDomainXMLFromNative+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectDomainXMLFromNative]
|
1056
1084
|
* to convert a native hypervisor domain representation to libvirt XML.
|
1057
1085
|
*/
|
1058
|
-
static VALUE libvirt_conn_domain_xml_from_native(int argc, VALUE *argv,
|
1086
|
+
static VALUE libvirt_conn_domain_xml_from_native(int argc, VALUE *argv,
|
1087
|
+
VALUE s) {
|
1059
1088
|
VALUE nativeFormat, xml, flags;
|
1060
1089
|
char *ret;
|
1061
1090
|
VALUE result;
|
@@ -1063,7 +1092,7 @@ static VALUE libvirt_conn_domain_xml_from_native(int argc, VALUE *argv, VALUE s)
|
|
1063
1092
|
rb_scan_args(argc, argv, "21", &nativeFormat, &xml, &flags);
|
1064
1093
|
|
1065
1094
|
if (NIL_P(flags))
|
1066
|
-
flags =
|
1095
|
+
flags = INT2NUM(0);
|
1067
1096
|
|
1068
1097
|
ret = virConnectDomainXMLFromNative(conn(s), StringValueCStr(nativeFormat),
|
1069
1098
|
StringValueCStr(xml), NUM2UINT(flags));
|
@@ -1094,7 +1123,7 @@ static VALUE libvirt_conn_domain_xml_to_native(int argc, VALUE *argv, VALUE s) {
|
|
1094
1123
|
rb_scan_args(argc, argv, "21", &nativeFormat, &xml, &flags);
|
1095
1124
|
|
1096
1125
|
if (NIL_P(flags))
|
1097
|
-
flags =
|
1126
|
+
flags = INT2NUM(0);
|
1098
1127
|
|
1099
1128
|
ret = virConnectDomainXMLToNative(conn(s), StringValueCStr(nativeFormat),
|
1100
1129
|
StringValueCStr(xml), NUM2UINT(flags));
|
@@ -1206,7 +1235,7 @@ static VALUE libvirt_conn_define_interface_xml(int argc, VALUE *argv, VALUE c) {
|
|
1206
1235
|
rb_scan_args(argc, argv, "11", &xml, &flags);
|
1207
1236
|
|
1208
1237
|
if (NIL_P(flags))
|
1209
|
-
flags =
|
1238
|
+
flags = INT2NUM(0);
|
1210
1239
|
|
1211
1240
|
iface = virInterfaceDefineXML(conn, StringValueCStr(xml), NUM2UINT(flags));
|
1212
1241
|
_E(iface == NULL, create_error(e_DefinitionError, "virInterfaceDefineXML",
|
@@ -1349,7 +1378,7 @@ static VALUE libvirt_conn_num_of_nodedevices(int argc, VALUE *argv, VALUE c) {
|
|
1349
1378
|
rb_scan_args(argc, argv, "02", &cap, &flags);
|
1350
1379
|
|
1351
1380
|
if (NIL_P(flags))
|
1352
|
-
flags =
|
1381
|
+
flags = INT2NUM(0);
|
1353
1382
|
|
1354
1383
|
result = virNodeNumOfDevices(conn, get_string_or_nil(cap), NUM2UINT(flags));
|
1355
1384
|
_E(result < 0, create_error(e_RetrieveError, "virNodeNumOfDevices", conn));
|
@@ -1424,7 +1453,8 @@ static VALUE libvirt_conn_lookup_nodedevice_by_name(VALUE c, VALUE name) {
|
|
1424
1453
|
* Call +virNodeDeviceCreateXML+[http://www.libvirt.org/html/libvirt-libvirt.html#virNodeDeviceCreateXML]
|
1425
1454
|
* to create a new node device from xml.
|
1426
1455
|
*/
|
1427
|
-
static VALUE libvirt_conn_create_nodedevice_xml(int argc, VALUE *argv,
|
1456
|
+
static VALUE libvirt_conn_create_nodedevice_xml(int argc, VALUE *argv,
|
1457
|
+
VALUE c) {
|
1428
1458
|
virNodeDevicePtr nodedev;
|
1429
1459
|
virConnectPtr conn = connect_get(c);
|
1430
1460
|
VALUE xml, flags;
|
@@ -1432,7 +1462,7 @@ static VALUE libvirt_conn_create_nodedevice_xml(int argc, VALUE *argv, VALUE c)
|
|
1432
1462
|
rb_scan_args(argc, argv, "11", &xml, &flags);
|
1433
1463
|
|
1434
1464
|
if (NIL_P(flags))
|
1435
|
-
flags =
|
1465
|
+
flags = INT2NUM(0);
|
1436
1466
|
|
1437
1467
|
nodedev = virNodeDeviceCreateXML(conn, StringValueCStr(xml),
|
1438
1468
|
NUM2UINT(flags));
|
@@ -1573,7 +1603,8 @@ static VALUE libvirt_conn_lookup_secret_by_uuid(VALUE c, VALUE uuid) {
|
|
1573
1603
|
* Call +virSecretLookupByUsage+[http://www.libvirt.org/html/libvirt-libvirt.html#virSecretLookupByUsage]
|
1574
1604
|
* to retrieve a secret by usagetype.
|
1575
1605
|
*/
|
1576
|
-
static VALUE libvirt_conn_lookup_secret_by_usage(VALUE c, VALUE usagetype,
|
1606
|
+
static VALUE libvirt_conn_lookup_secret_by_usage(VALUE c, VALUE usagetype,
|
1607
|
+
VALUE usageID) {
|
1577
1608
|
virSecretPtr secret;
|
1578
1609
|
virConnectPtr conn = connect_get(c);
|
1579
1610
|
|
@@ -1600,7 +1631,7 @@ static VALUE libvirt_conn_define_secret_xml(int argc, VALUE *argv, VALUE c) {
|
|
1600
1631
|
rb_scan_args(argc, argv, "11", &xml, &flags);
|
1601
1632
|
|
1602
1633
|
if (NIL_P(flags))
|
1603
|
-
flags =
|
1634
|
+
flags = INT2NUM(0);
|
1604
1635
|
|
1605
1636
|
secret = virSecretDefineXML(conn, StringValueCStr(xml), NUM2UINT(flags));
|
1606
1637
|
_E(secret == NULL, create_error(e_DefinitionError, "virSecretDefineXML",
|
@@ -1709,7 +1740,7 @@ static VALUE libvirt_conn_create_pool_xml(int argc, VALUE *argv, VALUE c) {
|
|
1709
1740
|
rb_scan_args(argc, argv, "11", &xml, &flags);
|
1710
1741
|
|
1711
1742
|
if (NIL_P(flags))
|
1712
|
-
flags =
|
1743
|
+
flags = INT2NUM(0);
|
1713
1744
|
|
1714
1745
|
pool = virStoragePoolCreateXML(conn, StringValueCStr(xml), NUM2UINT(flags));
|
1715
1746
|
_E(pool == NULL, create_error(e_Error, "virStoragePoolCreateXML", conn));
|
@@ -1732,7 +1763,7 @@ static VALUE libvirt_conn_define_pool_xml(int argc, VALUE *argv, VALUE c) {
|
|
1732
1763
|
rb_scan_args(argc, argv, "11", &xml, &flags);
|
1733
1764
|
|
1734
1765
|
if (NIL_P(flags))
|
1735
|
-
flags =
|
1766
|
+
flags = INT2NUM(0);
|
1736
1767
|
|
1737
1768
|
pool = virStoragePoolDefineXML(conn, StringValueCStr(xml), NUM2UINT(flags));
|
1738
1769
|
_E(pool == NULL, create_error(e_DefinitionError, "virStoragePoolDefineXML",
|
@@ -1748,13 +1779,14 @@ static VALUE libvirt_conn_define_pool_xml(int argc, VALUE *argv, VALUE c) {
|
|
1748
1779
|
* Call +virConnectFindStoragePoolSources+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectFindStoragePoolSources]
|
1749
1780
|
* to find the storage pool sources corresponding to type.
|
1750
1781
|
*/
|
1751
|
-
static VALUE libvirt_conn_find_storage_pool_sources(int argc, VALUE *argv,
|
1782
|
+
static VALUE libvirt_conn_find_storage_pool_sources(int argc, VALUE *argv,
|
1783
|
+
VALUE c) {
|
1752
1784
|
VALUE type, srcSpec_val, flags;
|
1753
1785
|
|
1754
1786
|
rb_scan_args(argc, argv, "12", &type, &srcSpec_val, &flags);
|
1755
1787
|
|
1756
1788
|
if (NIL_P(flags))
|
1757
|
-
flags =
|
1789
|
+
flags = INT2NUM(0);
|
1758
1790
|
|
1759
1791
|
gen_call_string(virConnectFindStoragePoolSources, conn(c), 1,
|
1760
1792
|
connect_get(c), StringValueCStr(type),
|
@@ -1762,6 +1794,110 @@ static VALUE libvirt_conn_find_storage_pool_sources(int argc, VALUE *argv, VALUE
|
|
1762
1794
|
}
|
1763
1795
|
#endif
|
1764
1796
|
|
1797
|
+
#if HAVE_VIRCONNECTGETSYSINFO
|
1798
|
+
/*
|
1799
|
+
* call-seq:
|
1800
|
+
* conn.sys_info(flags=0) -> string
|
1801
|
+
*
|
1802
|
+
* Call +virConnectGetSysinfo+[http://www.libvirt.org/html/libvirt-libvirt.html#virConnectGetSysinfo]
|
1803
|
+
* to get machine-specific information about the hypervisor. This may include
|
1804
|
+
* data such as the host UUID, the BIOS version, etc.
|
1805
|
+
*/
|
1806
|
+
static VALUE libvirt_conn_get_sys_info(int argc, VALUE *argv, VALUE c) {
|
1807
|
+
VALUE flags;
|
1808
|
+
|
1809
|
+
rb_scan_args(argc, argv, "01", &flags);
|
1810
|
+
|
1811
|
+
if (NIL_P(flags))
|
1812
|
+
flags = INT2NUM(0);
|
1813
|
+
|
1814
|
+
gen_call_string(virConnectGetSysinfo, conn(c), 1, connect_get(c),
|
1815
|
+
NUM2UINT(flags));
|
1816
|
+
}
|
1817
|
+
#endif
|
1818
|
+
|
1819
|
+
#if HAVE_TYPE_VIRSTREAMPTR
|
1820
|
+
extern VALUE stream_new(virStreamPtr s, VALUE conn);
|
1821
|
+
|
1822
|
+
/*
|
1823
|
+
* call-seq:
|
1824
|
+
* conn.stream(flags=0) -> Libvirt::Stream
|
1825
|
+
*
|
1826
|
+
* Call +virStreamNew+[http://www.libvirt.org/html/libvirt-libvirt.html#virStreamNew]
|
1827
|
+
* to create a new stream.
|
1828
|
+
*/
|
1829
|
+
static VALUE libvirt_conn_stream(int argc, VALUE *argv, VALUE c) {
|
1830
|
+
VALUE flags;
|
1831
|
+
virStreamPtr stream;
|
1832
|
+
|
1833
|
+
rb_scan_args(argc, argv, "01", &flags);
|
1834
|
+
|
1835
|
+
if (NIL_P(flags))
|
1836
|
+
flags = INT2NUM(0);
|
1837
|
+
|
1838
|
+
stream = virStreamNew(connect_get(c), NUM2UINT(flags));
|
1839
|
+
|
1840
|
+
_E(stream == NULL, create_error(e_RetrieveError, "virStreamNew", conn(c)));
|
1841
|
+
|
1842
|
+
return stream_new(stream, c);
|
1843
|
+
}
|
1844
|
+
#endif
|
1845
|
+
|
1846
|
+
#if HAVE_VIRINTERFACECHANGEBEGIN
|
1847
|
+
/*
|
1848
|
+
* call-seq:
|
1849
|
+
* conn.interface_change_begin(flags=0) -> nil
|
1850
|
+
*
|
1851
|
+
* Call +virInterfaceChangeBegin+[http://www.libvirt.org/html/libvirt-libvirt.html#virInterfaceChangeBegin]
|
1852
|
+
* to create a restore point for interface changes. Once changes have been
|
1853
|
+
* made, conn.interface_change_commit can be used to commit the result or
|
1854
|
+
* conn.interface_change_rollback can be used to rollback to this restore point.
|
1855
|
+
*/
|
1856
|
+
static VALUE libvirt_conn_interface_change_begin(int argc, VALUE *argv,
|
1857
|
+
VALUE c) {
|
1858
|
+
VALUE flags;
|
1859
|
+
|
1860
|
+
rb_scan_args(argc, argv, "01", &flags);
|
1861
|
+
|
1862
|
+
gen_call_void(virInterfaceChangeBegin, conn(c), connect_get(c),
|
1863
|
+
NUM2UINT(flags));
|
1864
|
+
}
|
1865
|
+
|
1866
|
+
/*
|
1867
|
+
* call-seq:
|
1868
|
+
* conn.interface_change_commit(flags=0) -> nil
|
1869
|
+
*
|
1870
|
+
* Call +virInterfaceChangeCommit+[http://www.libvirt.org/html/libvirt-libvirt.html#virInterfaceChangeCommit]
|
1871
|
+
* to commit the interface changes since the last conn.interface_change_begin.
|
1872
|
+
*/
|
1873
|
+
static VALUE libvirt_conn_interface_change_commit(int argc, VALUE *argv,
|
1874
|
+
VALUE c) {
|
1875
|
+
VALUE flags;
|
1876
|
+
|
1877
|
+
rb_scan_args(argc, argv, "01", &flags);
|
1878
|
+
|
1879
|
+
gen_call_void(virInterfaceChangeCommit, conn(c), connect_get(c),
|
1880
|
+
NUM2UINT(flags));
|
1881
|
+
}
|
1882
|
+
|
1883
|
+
/*
|
1884
|
+
* call-seq:
|
1885
|
+
* conn.interface_change_rollback(flags=0) -> nil
|
1886
|
+
*
|
1887
|
+
* Call +virInterfaceChangeRollback+[http://www.libvirt.org/html/libvirt-libvirt.html#virInterfaceChangeRollback]
|
1888
|
+
* to rollback to the restore point saved by conn.interface_change_begin.
|
1889
|
+
*/
|
1890
|
+
static VALUE libvirt_conn_interface_change_rollback(int argc, VALUE *argv,
|
1891
|
+
VALUE c) {
|
1892
|
+
VALUE flags;
|
1893
|
+
|
1894
|
+
rb_scan_args(argc, argv, "01", &flags);
|
1895
|
+
|
1896
|
+
gen_call_void(virInterfaceChangeRollback, conn(c), connect_get(c),
|
1897
|
+
NUM2UINT(flags));
|
1898
|
+
}
|
1899
|
+
#endif
|
1900
|
+
|
1765
1901
|
/*
|
1766
1902
|
* Class Libvirt::Connect
|
1767
1903
|
*/
|
@@ -1840,7 +1976,7 @@ void init_connect()
|
|
1840
1976
|
* then ADDED and REMOVED were renamed to DEFINED and UNDEFINED at
|
1841
1977
|
* the same time that the details were added
|
1842
1978
|
* (d3d54d2fc92e350f250eda26cee5d0342416a9cf). What this means is that
|
1843
|
-
*
|
1979
|
+
* we have to check for HAVE_CONST_VIR_DOMAIN_EVENT_DEFINED and
|
1844
1980
|
* HAVE_CONST_VIR_DOMAIN_EVENT_STARTED to untangle these, and then we
|
1845
1981
|
* can make a decision for many of the events based on that.
|
1846
1982
|
*/
|
@@ -1961,6 +2097,11 @@ void init_connect()
|
|
1961
2097
|
INT2NUM(VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON));
|
1962
2098
|
#endif
|
1963
2099
|
|
2100
|
+
#if HAVE_CONST_VIR_DOMAIN_EVENT_ID_CONTROL_ERROR
|
2101
|
+
rb_define_const(c_connect, "DOMAIN_EVENT_ID_CONTROL_ERROR",
|
2102
|
+
INT2NUM(VIR_DOMAIN_EVENT_ID_CONTROL_ERROR));
|
2103
|
+
#endif
|
2104
|
+
|
1964
2105
|
#if HAVE_VIRCONNECTDOMAINEVENTREGISTER
|
1965
2106
|
rb_define_method(c_connect, "domain_event_register",
|
1966
2107
|
libvirt_conn_domain_event_register, -1);
|
@@ -2105,4 +2246,20 @@ void init_connect()
|
|
2105
2246
|
rb_define_method(c_connect, "discover_storage_pool_sources",
|
2106
2247
|
libvirt_conn_find_storage_pool_sources, -1);
|
2107
2248
|
#endif
|
2249
|
+
|
2250
|
+
#if HAVE_VIRCONNECTGETSYSINFO
|
2251
|
+
rb_define_method(c_connect, "sys_info", libvirt_conn_get_sys_info, -1);
|
2252
|
+
#endif
|
2253
|
+
#if HAVE_TYPE_VIRSTREAMPTR
|
2254
|
+
rb_define_method(c_connect, "stream", libvirt_conn_stream, -1);
|
2255
|
+
#endif
|
2256
|
+
|
2257
|
+
#if HAVE_VIRINTERFACECHANGEBEGIN
|
2258
|
+
rb_define_method(c_connect, "interface_change_begin",
|
2259
|
+
libvirt_conn_interface_change_begin, -1);
|
2260
|
+
rb_define_method(c_connect, "interface_change_commit",
|
2261
|
+
libvirt_conn_interface_change_commit, -1);
|
2262
|
+
rb_define_method(c_connect, "interface_change_rollback",
|
2263
|
+
libvirt_conn_interface_change_rollback, -1);
|
2264
|
+
#endif
|
2108
2265
|
}
|