Commit Graph

37 Commits

Author SHA1 Message Date
Geoff Hickey
2b098b4625
Geoff/dereg callbacks on disconnect (#69)
Deregister all callbacks when disconnecting from libvirt.

Deregister all callbacks when we lose or close the connection to libvirt. This fixes a problem where goroutines with outstanding requests waiting for replies would block forever if the libvirt connection dies, whether because disconnect is called, or the libvirt daemon crashes or restarts.
2018-06-27 18:38:11 -04:00
Geoff Hickey
95c99e45a2 Deprecate the old pre-generation APIs
- Marked all the remaining old APIs from before the code-generator as
deprecated. These will be removed from the go-libvirt library as soon as
we're moved all the DO code over to use the generated APIs.
- Consolidated a couple of APIs whose implementation was split into
multiple files.
- Removed a couple of Migration-related calls we're no longer using.
2018-03-22 18:12:51 -04:00
Yuriy Taraday
38a1eeb6c3 Return []byte from encode, use it instead of bytes.Buffer
We only use Buffer for its internal buffer returned by Bytes() outside
encode() anyway, so there's no reason to hold on to whole Buffer object.
2018-02-24 12:08:15 +04:00
Yuriy Taraday
47db3dbbbc Move fetching response from channel to request() method
Also parse error on bad status in request method.
This pattern was scattered all over the place.
2018-02-23 10:36:58 +04:00
Geoff Hickey
59d541f193
Generate the remaining consts. (#55)
* Generate the remaining consts.

There were a number of hand-written consts in go-libvirt, including flag
values for various libvirt functions. Remove these and generate them
instead, so that we now have a complete set, and the naming is
consistent. I used c-for-go to do this generation, but turned off any
cgo usage by the generated code - we don't want or need to introduce a
dependency on cgo just to get constants from C headers. All code is
still generated using 'go generate ./...', which now calls a wrapper
script for added robustness.

This change also returns to using Go types for flags for most libvirt
functions, instead of plain integers.
2018-01-03 15:19:28 -05:00
Jenni Griesmann
73af7b867b improve comment for scheduler parameters 2017-12-15 11:52:28 -06:00
Jenni Griesmann
2e5b7c8dce add domain scheduler parameter constants 2017-12-15 07:55:41 -06:00
Ben LeMasurier
165035e03c
prevent connection write collisions (#52)
* prevent connection write collisions

When multiple calls are made on the same connection, it's possible for
the writes to collide with each other. This adds a write mutex when
communicating with the libvirt daemon.
2017-12-07 10:47:52 -07:00
Geoff Hickey
fcd4f72b3c Rename the main structure types for clarity
libvirt follows a convention where structure types used in its API are
named "remote_nonnull_domain", and optional values for those  structures
are called "remote_domain". The generator was translating these into go
names like "NonnullDomain" and "Domain". In go this seems unnatural, and
doesn't match the way the pre-generator version of go-libvirt named
things. So this commit changes the names: "remote_nonnull_domain" will
now be "Domain" in go; "remote_domain" will be "OptDomain". This pattern
is applied to all types.
2017-11-20 13:50:32 -05:00
Geoff Hickey
71f606ddd7 Add comments to generated code, fix integration test. 2017-11-16 17:14:05 -05:00
Geoff Hickey
f0eaf10a26 Review comments 2017-11-16 15:49:40 -05:00
Geoff Hickey
b59e9d42f4 Migrate all libvirt calls to the generated code.
- Update libvirt.go so that all libvirt calls now go through the
generated routines.
- Remove some libvirt routines that had the same name as generated ones,
leave the rest as convenience routines.
- Fix the handling of Optional-values (the declarations of which in the
.x file look like pointers)
2017-11-16 14:17:46 -05:00
Geoff Hickey
a3bd42a5b1 Cleanup, and fix decoding of TypedParams. 2017-11-14 18:59:55 -05:00
Geoff Hickey
deb7a54ff8 Generate libvirt procedure wrappers.
The generated wrappers have an argument for every field in their "Args"
struct, and return everything in their "Ret" struct (these structs are
defined in the protocol file, and identified by procedure name).
Marshaling and unmarshaling is handled inside the generated procedures.
2017-11-13 15:18:18 -05:00
Geoff Hickey
5a6654f07a Generate libvirt constants from libvirt sources.
- Add a yacc-based parser and a hand-written lexer to read the
remote_protocol.x file from libvirt's sources.
- Use the new parser to generate the constants used to communicate with
libvirt.
2017-11-02 19:42:44 -04:00
Katrina Ellison Geltman
85330a67c6 Explicitly specify type of DomainState constants 2017-10-23 17:23:17 -04:00
Geoff Hickey
a339d0ac95 Handle TypedParamStrings (#46)
* Handle TypedParamStrings

Add handling for TypedParamStrings, which are different from the other
TypedParam... types in that the decoded value is variable-sized.
2017-09-15 10:48:46 -04:00
Geoff Hickey
c8e4b6a7b8 Add Get/SetBlockIoTune to go-libvirt API. (#45)
* Add Get/SetBlockIoTune to go-libvirt API.

This adds two libvirt entry points to the go-libvirt API:
virDomainSetBlockIoTune and virDomainGetBlockIoTune. These can be used
to control block device throttling for a VM.
2017-08-31 11:21:31 -04:00
Amanda H. L. de Andrade
9ca7034516 Add DomainMemoryStats method (#38) (#39) 2017-06-02 11:28:20 -06:00
Alexander Polakov
c09ce7b21d Add Reboot and Reset methods (#37) 2017-05-04 11:30:22 -05:00
Alexander Polakov
208ef2aff1 Add Shutdown() method (#36)
* Add Shutdown() method
2017-05-04 10:39:45 -05:00
Alexander Polakov
d41d9eb855 Add DomainCreate method (#35)
* Adds DomainCreateWithFlags
2017-05-04 10:17:25 -05:00
Ben LeMasurier
2609dd2697 Add Secrets() (#29)
This adds the `Secrets()` method, used to retrieve all secrets managed
by the libvirt daemon.
2017-01-19 20:40:31 -06:00
Ben LeMasurier
cfa567708b Adds StoragePool(), StoragePoolRefresh() (#28)
This adds two new methods:
- `StoragePool()`, used to lookup a storage pool by name.
- `StoragePoolRefresh()`, used to refresh a storage pool by name.
2017-01-09 14:54:30 -07:00
Ben LeMasurier
591f6798f1 Adds StoragePools() (#27)
* Adds StoragePools()

This adds the ability to list storage pools.
2017-01-06 15:58:27 -06:00
Michael Bruskov
85674d25f7 Add DefineXML() (#26) 2016-12-09 09:49:14 -07:00
Michael Bruskov
fe0f99a7c1 Add DomainState method. (#23)
Returns state of the domain.
2016-12-02 10:54:04 -07:00
Ben LeMasurier
5a1fe4c14a Adds Capabilities()
This adds a new method, Capabilities(), which returns an XML
definition of the hypervisor's system capabilities, much like
`virsh capabilities`.

I've only included integration tests for these two methods due to the
large amount of data returned by the capabilities call.
2016-12-01 14:09:24 -07:00
Ben LeMasurier
c6e0d02f28 Adds support for dumping domain XML
This adds support for dumping a domain's XML definition, akin to `virsh
dumpxml <domain>`. The returned data is quite large so I've included an
integration test rather than adding a huge blob of hex to `libvirttest`.
2016-11-30 19:31:45 -07:00
Simarpreet Singh
693bffa997
destroy: Adding the ability to destroy a domain.
Signed-off-by: Simarpreet Singh <simar@linux.com>
2016-11-02 20:47:37 -07:00
Ben LeMasurier
d556125e20 Add support for undefining a domain 2016-09-28 15:37:06 -06:00
Ben LeMasurier
73ac0f5012
migrate: insert required request structure padding
Further testing reveals we need some additional padding on the request
passed to libvirt when performing migrations. I believe this is due to
the structure alignment normally provided automatically by the compiler.

In testing, this fixes an error I was seeing: "Unable to decode message
paylaod", returned from libvirt when performing migrations.
2016-09-28 11:07:03 -06:00
Ben LeMasurier
128bc7d448
Add support for domain migrations
This adds basic support for domain migrations from one hypervisor to
another. Migration options, e.g., live, tunneled, compressed, etc..,
are specified by the constants described `constants.Migrate*`.

Two unknowns remain, Libvirt specifies `RemoteParameters` and `CookieIn`.
In testing both values are always set to 0 by `virsh` and the source
does not provide clear definitions of their purpose. For now, using
the same zero'd values used by `virsh` will be Good Enough.
2016-08-21 09:10:30 -06:00
ricky
92abb8c314 adding virsh migrate-setspeed 2016-08-04 14:29:29 -04:00
Ben LeMasurier
759a8c0337
check for QEMU response errors
When performing QEMU monitor commands, libvirt will return StatusOK even
when the underlying QEMU process fails to perform the command.

This modifies Run() to check for QEMU errors.

I'm not entirely happy with the hacky modifications to the test library
to handle this scenario. The test framework is in obvious need for a
complete refactor. For now this will have to work.
2016-07-19 10:40:47 -06:00
Ben LeMasurier
65d878e075 Adds test package
This splits out the mock libvirt server for testing within
other packages. Constants from the main libvirt package
have been moved to a separate package, constants, for shared access.
2016-05-20 10:50:10 -06:00
Ben LeMasurier
2ccd33a8df Initial Commit 2016-05-19 19:40:34 -06:00