summaryrefslogtreecommitdiff
path: root/vendor/github.com/dmacvicar/libvirt-go/libvirt.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/dmacvicar/libvirt-go/libvirt.go')
-rw-r--r--vendor/github.com/dmacvicar/libvirt-go/libvirt.go811
1 files changed, 811 insertions, 0 deletions
diff --git a/vendor/github.com/dmacvicar/libvirt-go/libvirt.go b/vendor/github.com/dmacvicar/libvirt-go/libvirt.go
new file mode 100644
index 00000000..2248ecd2
--- /dev/null
+++ b/vendor/github.com/dmacvicar/libvirt-go/libvirt.go
@@ -0,0 +1,811 @@
+package libvirt
+
+import (
+ "encoding/base64"
+ "io/ioutil"
+ "reflect"
+ "unsafe"
+)
+
+/*
+#cgo LDFLAGS: -lvirt
+#include <libvirt/libvirt.h>
+#include <libvirt/virterror.h>
+#include <stdlib.h>
+
+void virErrorFuncDummy(void *userData, virErrorPtr error);
+
+void virErrorFuncDummy(void *userData, virErrorPtr error)
+{
+}
+
+*/
+import "C"
+
+func init() {
+ // libvirt won't print to stderr
+ C.virSetErrorFunc(nil, C.virErrorFunc(unsafe.Pointer(C.virErrorFuncDummy)))
+}
+
+type VirConnection struct {
+ ptr C.virConnectPtr
+}
+
+func NewVirConnection(uri string) (VirConnection, error) {
+ var cUri *C.char
+ if uri != "" {
+ cUri = C.CString(uri)
+ defer C.free(unsafe.Pointer(cUri))
+ }
+ ptr := C.virConnectOpen(cUri)
+ if ptr == nil {
+ return VirConnection{}, GetLastError()
+ }
+ obj := VirConnection{ptr: ptr}
+ return obj, nil
+}
+
+func NewVirConnectionReadOnly(uri string) (VirConnection, error) {
+ var cUri *C.char
+ if uri != "" {
+ cUri = C.CString(uri)
+ defer C.free(unsafe.Pointer(cUri))
+ }
+ ptr := C.virConnectOpenReadOnly(cUri)
+ if ptr == nil {
+ return VirConnection{}, GetLastError()
+ }
+ obj := VirConnection{ptr: ptr}
+ return obj, nil
+}
+
+func GetLastError() VirError {
+ var virErr VirError
+ err := C.virGetLastError()
+
+ virErr.Code = int(err.code)
+ virErr.Domain = int(err.domain)
+ virErr.Message = C.GoString(err.message)
+ virErr.Level = int(err.level)
+
+ C.virResetError(err)
+ return virErr
+}
+
+func (c *VirConnection) CloseConnection() (int, error) {
+ result := int(C.virConnectClose(c.ptr))
+ if result == -1 {
+ return result, GetLastError()
+ }
+ return result, nil
+}
+
+func (c *VirConnection) UnrefAndCloseConnection() error {
+ closeRes := 1
+ var err error
+ for closeRes > 0 {
+ closeRes, err = c.CloseConnection()
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (c *VirConnection) GetCapabilities() (string, error) {
+ str := C.virConnectGetCapabilities(c.ptr)
+ if str == nil {
+ return "", GetLastError()
+ }
+ capabilities := C.GoString(str)
+ C.free(unsafe.Pointer(str))
+ return capabilities, nil
+}
+
+func (c *VirConnection) GetNodeInfo() (VirNodeInfo, error) {
+ ni := VirNodeInfo{}
+ var ptr C.virNodeInfo
+ result := C.virNodeGetInfo(c.ptr, (*C.virNodeInfo)(unsafe.Pointer(&ptr)))
+ if result == -1 {
+ return ni, GetLastError()
+ }
+ ni.ptr = ptr
+ return ni, nil
+}
+
+func (c *VirConnection) GetHostname() (string, error) {
+ str := C.virConnectGetHostname(c.ptr)
+ if str == nil {
+ return "", GetLastError()
+ }
+ hostname := C.GoString(str)
+ C.free(unsafe.Pointer(str))
+ return hostname, nil
+}
+
+func (c *VirConnection) GetLibVersion() (uint32, error) {
+ var version C.ulong
+ if err := C.virConnectGetLibVersion(c.ptr, &version); err < 0 {
+ return 0, GetLastError()
+ }
+ return uint32(version), nil
+}
+
+func (c *VirConnection) GetType() (string, error) {
+ str := C.virConnectGetType(c.ptr)
+ if str == nil {
+ return "", GetLastError()
+ }
+ hypDriver := C.GoString(str)
+ return hypDriver, nil
+}
+
+func (c *VirConnection) IsAlive() (bool, error) {
+ result := C.virConnectIsAlive(c.ptr)
+ if result == -1 {
+ return false, GetLastError()
+ }
+ if result == 1 {
+ return true, nil
+ }
+ return false, nil
+}
+
+func (c *VirConnection) IsEncrypted() (bool, error) {
+ result := C.virConnectIsEncrypted(c.ptr)
+ if result == -1 {
+ return false, GetLastError()
+ }
+ if result == 1 {
+ return true, nil
+ }
+ return false, nil
+}
+
+func (c *VirConnection) IsSecure() (bool, error) {
+ result := C.virConnectIsSecure(c.ptr)
+ if result == -1 {
+ return false, GetLastError()
+ }
+ if result == 1 {
+ return true, nil
+ }
+ return false, nil
+}
+
+func (c *VirConnection) ListDefinedDomains() ([]string, error) {
+ var names [1024](*C.char)
+ namesPtr := unsafe.Pointer(&names)
+ numDomains := C.virConnectListDefinedDomains(
+ c.ptr,
+ (**C.char)(namesPtr),
+ 1024)
+ if numDomains == -1 {
+ return nil, GetLastError()
+ }
+ goNames := make([]string, numDomains)
+ for k := 0; k < int(numDomains); k++ {
+ goNames[k] = C.GoString(names[k])
+ C.free(unsafe.Pointer(names[k]))
+ }
+ return goNames, nil
+}
+
+func (c *VirConnection) ListDomains() ([]uint32, error) {
+ var cDomainsIds [512](uint32)
+ cDomainsPointer := unsafe.Pointer(&cDomainsIds)
+ numDomains := C.virConnectListDomains(c.ptr, (*C.int)(cDomainsPointer), 512)
+ if numDomains == -1 {
+ return nil, GetLastError()
+ }
+
+ return cDomainsIds[:numDomains], nil
+}
+
+func (c *VirConnection) ListInterfaces() ([]string, error) {
+ const maxIfaces = 1024
+ var names [maxIfaces](*C.char)
+ namesPtr := unsafe.Pointer(&names)
+ numIfaces := C.virConnectListInterfaces(
+ c.ptr,
+ (**C.char)(namesPtr),
+ maxIfaces)
+ if numIfaces == -1 {
+ return nil, GetLastError()
+ }
+ goNames := make([]string, numIfaces)
+ for k := 0; k < int(numIfaces); k++ {
+ goNames[k] = C.GoString(names[k])
+ C.free(unsafe.Pointer(names[k]))
+ }
+ return goNames, nil
+}
+
+func (c *VirConnection) ListNetworks() ([]string, error) {
+ const maxNets = 1024
+ var names [maxNets](*C.char)
+ namesPtr := unsafe.Pointer(&names)
+ numNetworks := C.virConnectListNetworks(
+ c.ptr,
+ (**C.char)(namesPtr),
+ maxNets)
+ if numNetworks == -1 {
+ return nil, GetLastError()
+ }
+ goNames := make([]string, numNetworks)
+ for k := 0; k < int(numNetworks); k++ {
+ goNames[k] = C.GoString(names[k])
+ C.free(unsafe.Pointer(names[k]))
+ }
+ return goNames, nil
+}
+
+func (c *VirConnection) ListStoragePools() ([]string, error) {
+ const maxPools = 1024
+ var names [maxPools](*C.char)
+ namesPtr := unsafe.Pointer(&names)
+ numStoragePools := C.virConnectListStoragePools(
+ c.ptr,
+ (**C.char)(namesPtr),
+ maxPools)
+ if numStoragePools == -1 {
+ return nil, GetLastError()
+ }
+ goNames := make([]string, numStoragePools)
+ for k := 0; k < int(numStoragePools); k++ {
+ goNames[k] = C.GoString(names[k])
+ C.free(unsafe.Pointer(names[k]))
+ }
+ return goNames, nil
+}
+
+func (c *VirConnection) LookupDomainById(id uint32) (VirDomain, error) {
+ ptr := C.virDomainLookupByID(c.ptr, C.int(id))
+ if ptr == nil {
+ return VirDomain{}, GetLastError()
+ }
+ return VirDomain{ptr: ptr}, nil
+}
+
+func (c *VirConnection) LookupDomainByName(id string) (VirDomain, error) {
+ cName := C.CString(id)
+ defer C.free(unsafe.Pointer(cName))
+ ptr := C.virDomainLookupByName(c.ptr, cName)
+ if ptr == nil {
+ return VirDomain{}, GetLastError()
+ }
+ return VirDomain{ptr: ptr}, nil
+}
+
+func (c *VirConnection) LookupByUUIDString(uuid string) (VirDomain, error) {
+ cUuid := C.CString(uuid)
+ defer C.free(unsafe.Pointer(cUuid))
+ ptr := C.virDomainLookupByUUIDString(c.ptr, cUuid)
+ if ptr == nil {
+ return VirDomain{}, GetLastError()
+ }
+ return VirDomain{ptr: ptr}, nil
+}
+
+func (c *VirConnection) DomainCreateXMLFromFile(xmlFile string, flags uint32) (VirDomain, error) {
+ xmlConfig, err := ioutil.ReadFile(xmlFile)
+ if err != nil {
+ return VirDomain{}, err
+ }
+ return c.DomainCreateXML(string(xmlConfig), flags)
+}
+
+func (c *VirConnection) DomainCreateXML(xmlConfig string, flags uint32) (VirDomain, error) {
+ cXml := C.CString(string(xmlConfig))
+ defer C.free(unsafe.Pointer(cXml))
+ ptr := C.virDomainCreateXML(c.ptr, cXml, C.uint(flags))
+ if ptr == nil {
+ return VirDomain{}, GetLastError()
+ }
+ return VirDomain{ptr: ptr}, nil
+}
+
+func (c *VirConnection) DomainDefineXMLFromFile(xmlFile string) (VirDomain, error) {
+ xmlConfig, err := ioutil.ReadFile(xmlFile)
+ if err != nil {
+ return VirDomain{}, err
+ }
+ return c.DomainDefineXML(string(xmlConfig))
+}
+
+func (c *VirConnection) DomainDefineXML(xmlConfig string) (VirDomain, error) {
+ cXml := C.CString(string(xmlConfig))
+ defer C.free(unsafe.Pointer(cXml))
+ ptr := C.virDomainDefineXML(c.ptr, cXml)
+ if ptr == nil {
+ return VirDomain{}, GetLastError()
+ }
+ return VirDomain{ptr: ptr}, nil
+}
+
+func (c *VirConnection) ListDefinedInterfaces() ([]string, error) {
+ const maxIfaces = 1024
+ var names [maxIfaces](*C.char)
+ namesPtr := unsafe.Pointer(&names)
+ numIfaces := C.virConnectListDefinedInterfaces(
+ c.ptr,
+ (**C.char)(namesPtr),
+ maxIfaces)
+ if numIfaces == -1 {
+ return nil, GetLastError()
+ }
+ goNames := make([]string, numIfaces)
+ for k := 0; k < int(numIfaces); k++ {
+ goNames[k] = C.GoString(names[k])
+ C.free(unsafe.Pointer(names[k]))
+ }
+ return goNames, nil
+}
+
+func (c *VirConnection) ListDefinedNetworks() ([]string, error) {
+ const maxNets = 1024
+ var names [maxNets](*C.char)
+ namesPtr := unsafe.Pointer(&names)
+ numNetworks := C.virConnectListDefinedNetworks(
+ c.ptr,
+ (**C.char)(namesPtr),
+ maxNets)
+ if numNetworks == -1 {
+ return nil, GetLastError()
+ }
+ goNames := make([]string, numNetworks)
+ for k := 0; k < int(numNetworks); k++ {
+ goNames[k] = C.GoString(names[k])
+ C.free(unsafe.Pointer(names[k]))
+ }
+ return goNames, nil
+}
+
+func (c *VirConnection) ListDefinedStoragePools() ([]string, error) {
+ const maxPools = 1024
+ var names [maxPools](*C.char)
+ namesPtr := unsafe.Pointer(&names)
+ numStoragePools := C.virConnectListDefinedStoragePools(
+ c.ptr,
+ (**C.char)(namesPtr),
+ maxPools)
+ if numStoragePools == -1 {
+ return nil, GetLastError()
+ }
+ goNames := make([]string, numStoragePools)
+ for k := 0; k < int(numStoragePools); k++ {
+ goNames[k] = C.GoString(names[k])
+ C.free(unsafe.Pointer(names[k]))
+ }
+ return goNames, nil
+}
+
+func (c *VirConnection) NumOfDefinedInterfaces() (int, error) {
+ result := int(C.virConnectNumOfDefinedInterfaces(c.ptr))
+ if result == -1 {
+ return 0, GetLastError()
+ }
+ return result, nil
+}
+
+func (c *VirConnection) NumOfDefinedNetworks() (int, error) {
+ result := int(C.virConnectNumOfDefinedNetworks(c.ptr))
+ if result == -1 {
+ return 0, GetLastError()
+ }
+ return result, nil
+}
+
+func (c *VirConnection) NumOfDefinedStoragePools() (int, error) {
+ result := int(C.virConnectNumOfDefinedStoragePools(c.ptr))
+ if result == -1 {
+ return 0, GetLastError()
+ }
+ return result, nil
+}
+
+func (c *VirConnection) NumOfDomains() (int, error) {
+ result := int(C.virConnectNumOfDomains(c.ptr))
+ if result == -1 {
+ return 0, GetLastError()
+ }
+ return result, nil
+}
+
+func (c *VirConnection) NumOfInterfaces() (int, error) {
+ result := int(C.virConnectNumOfInterfaces(c.ptr))
+ if result == -1 {
+ return 0, GetLastError()
+ }
+ return result, nil
+}
+
+func (c *VirConnection) NumOfNetworks() (int, error) {
+ result := int(C.virConnectNumOfNetworks(c.ptr))
+ if result == -1 {
+ return 0, GetLastError()
+ }
+ return result, nil
+}
+
+func (c *VirConnection) NumOfNWFilters() (int, error) {
+ result := int(C.virConnectNumOfNWFilters(c.ptr))
+ if result == -1 {
+ return 0, GetLastError()
+ }
+ return result, nil
+}
+
+func (c *VirConnection) NumOfSecrets() (int, error) {
+ result := int(C.virConnectNumOfSecrets(c.ptr))
+ if result == -1 {
+ return 0, GetLastError()
+ }
+ return result, nil
+}
+
+func (c *VirConnection) NetworkDefineXMLFromFile(xmlFile string) (VirNetwork, error) {
+ xmlConfig, err := ioutil.ReadFile(xmlFile)
+ if err != nil {
+ return VirNetwork{}, err
+ }
+ return c.NetworkDefineXML(string(xmlConfig))
+}
+
+func (c *VirConnection) NetworkDefineXML(xmlConfig string) (VirNetwork, error) {
+ cXml := C.CString(string(xmlConfig))
+ defer C.free(unsafe.Pointer(cXml))
+ ptr := C.virNetworkDefineXML(c.ptr, cXml)
+ if ptr == nil {
+ return VirNetwork{}, GetLastError()
+ }
+ return VirNetwork{ptr: ptr}, nil
+}
+
+func (c *VirConnection) LookupNetworkByName(name string) (VirNetwork, error) {
+ cName := C.CString(name)
+ defer C.free(unsafe.Pointer(cName))
+ ptr := C.virNetworkLookupByName(c.ptr, cName)
+ if ptr == nil {
+ return VirNetwork{}, GetLastError()
+ }
+ return VirNetwork{ptr: ptr}, nil
+}
+
+func (c *VirConnection) LookupNetworkByUUIDString(uuid string) (VirNetwork, error) {
+ cUuid := C.CString(uuid)
+ defer C.free(unsafe.Pointer(cUuid))
+ ptr := C.virNetworkLookupByUUIDString(c.ptr, cUuid)
+ if ptr == nil {
+ return VirNetwork{}, GetLastError()
+ }
+ return VirNetwork{ptr: ptr}, nil
+}
+
+func (c *VirConnection) GetSysinfo(flags uint) (string, error) {
+ cStr := C.virConnectGetSysinfo(c.ptr, C.uint(flags))
+ if cStr == nil {
+ return "", GetLastError()
+ }
+ info := C.GoString(cStr)
+ C.free(unsafe.Pointer(cStr))
+ return info, nil
+}
+
+func (c *VirConnection) GetURI() (string, error) {
+ cStr := C.virConnectGetURI(c.ptr)
+ if cStr == nil {
+ return "", GetLastError()
+ }
+ uri := C.GoString(cStr)
+ C.free(unsafe.Pointer(cStr))
+ return uri, nil
+}
+
+func (c *VirConnection) GetMaxVcpus(typeAttr string) (int, error) {
+ var cTypeAttr *C.char
+ if typeAttr != "" {
+ cTypeAttr = C.CString(typeAttr)
+ defer C.free(unsafe.Pointer(cTypeAttr))
+ }
+ result := int(C.virConnectGetMaxVcpus(c.ptr, cTypeAttr))
+ if result == -1 {
+ return 0, GetLastError()
+ }
+ return result, nil
+}
+
+func (c *VirConnection) InterfaceDefineXMLFromFile(xmlFile string) (VirInterface, error) {
+ xmlConfig, err := ioutil.ReadFile(xmlFile)
+ if err != nil {
+ return VirInterface{}, err
+ }
+ return c.InterfaceDefineXML(string(xmlConfig), 0)
+}
+
+func (c *VirConnection) InterfaceDefineXML(xmlConfig string, flags uint32) (VirInterface, error) {
+ cXml := C.CString(string(xmlConfig))
+ defer C.free(unsafe.Pointer(cXml))
+ ptr := C.virInterfaceDefineXML(c.ptr, cXml, C.uint(flags))
+ if ptr == nil {
+ return VirInterface{}, GetLastError()
+ }
+ return VirInterface{ptr: ptr}, nil
+}
+
+func (c *VirConnection) LookupInterfaceByName(name string) (VirInterface, error) {
+ cName := C.CString(name)
+ defer C.free(unsafe.Pointer(cName))
+ ptr := C.virInterfaceLookupByName(c.ptr, cName)
+ if ptr == nil {
+ return VirInterface{}, GetLastError()
+ }
+ return VirInterface{ptr: ptr}, nil
+}
+
+func (c *VirConnection) LookupInterfaceByMACString(mac string) (VirInterface, error) {
+ cName := C.CString(mac)
+ defer C.free(unsafe.Pointer(cName))
+ ptr := C.virInterfaceLookupByMACString(c.ptr, cName)
+ if ptr == nil {
+ return VirInterface{}, GetLastError()
+ }
+ return VirInterface{ptr: ptr}, nil
+}
+
+func (c *VirConnection) StoragePoolDefineXMLFromFile(xmlFile string) (VirStoragePool, error) {
+ xmlConfig, err := ioutil.ReadFile(xmlFile)
+ if err != nil {
+ return VirStoragePool{}, err
+ }
+ return c.StoragePoolDefineXML(string(xmlConfig), 0)
+}
+
+func (c *VirConnection) StoragePoolDefineXML(xmlConfig string, flags uint32) (VirStoragePool, error) {
+ cXml := C.CString(string(xmlConfig))
+ defer C.free(unsafe.Pointer(cXml))
+ ptr := C.virStoragePoolDefineXML(c.ptr, cXml, C.uint(flags))
+ if ptr == nil {
+ return VirStoragePool{}, GetLastError()
+ }
+ return VirStoragePool{ptr: ptr}, nil
+}
+
+func (c *VirConnection) LookupStoragePoolByName(name string) (VirStoragePool, error) {
+ cName := C.CString(name)
+ defer C.free(unsafe.Pointer(cName))
+ ptr := C.virStoragePoolLookupByName(c.ptr, cName)
+ if ptr == nil {
+ return VirStoragePool{}, GetLastError()
+ }
+ return VirStoragePool{ptr: ptr}, nil
+}
+
+func (c *VirConnection) LookupStoragePoolByUUIDString(uuid string) (VirStoragePool, error) {
+ cUuid := C.CString(uuid)
+ defer C.free(unsafe.Pointer(cUuid))
+ ptr := C.virStoragePoolLookupByUUIDString(c.ptr, cUuid)
+ if ptr == nil {
+ return VirStoragePool{}, GetLastError()
+ }
+ return VirStoragePool{ptr: ptr}, nil
+}
+
+func (c *VirConnection) NWFilterDefineXMLFromFile(xmlFile string) (VirNWFilter, error) {
+ xmlConfig, err := ioutil.ReadFile(xmlFile)
+ if err != nil {
+ return VirNWFilter{}, err
+ }
+ return c.NWFilterDefineXML(string(xmlConfig))
+}
+
+func (c *VirConnection) NWFilterDefineXML(xmlConfig string) (VirNWFilter, error) {
+ cXml := C.CString(string(xmlConfig))
+ defer C.free(unsafe.Pointer(cXml))
+ ptr := C.virNWFilterDefineXML(c.ptr, cXml)
+ if ptr == nil {
+ return VirNWFilter{}, GetLastError()
+ }
+ return VirNWFilter{ptr: ptr}, nil
+}
+
+func (c *VirConnection) LookupNWFilterByName(name string) (VirNWFilter, error) {
+ cName := C.CString(name)
+ defer C.free(unsafe.Pointer(cName))
+ ptr := C.virNWFilterLookupByName(c.ptr, cName)
+ if ptr == nil {
+ return VirNWFilter{}, GetLastError()
+ }
+ return VirNWFilter{ptr: ptr}, nil
+}
+
+func (c *VirConnection) LookupNWFilterByUUIDString(uuid string) (VirNWFilter, error) {
+ cUuid := C.CString(uuid)
+ defer C.free(unsafe.Pointer(cUuid))
+ ptr := C.virNWFilterLookupByUUIDString(c.ptr, cUuid)
+ if ptr == nil {
+ return VirNWFilter{}, GetLastError()
+ }
+ return VirNWFilter{ptr: ptr}, nil
+}
+
+func (c *VirConnection) LookupStorageVolByKey(key string) (VirStorageVol, error) {
+ cKey := C.CString(key)
+ defer C.free(unsafe.Pointer(cKey))
+ ptr := C.virStorageVolLookupByKey(c.ptr, cKey)
+ if ptr == nil {
+ return VirStorageVol{}, GetLastError()
+ }
+ return VirStorageVol{ptr: ptr}, nil
+}
+
+func (c *VirConnection) LookupStorageVolByPath(path string) (VirStorageVol, error) {
+ cPath := C.CString(path)
+ defer C.free(unsafe.Pointer(cPath))
+ ptr := C.virStorageVolLookupByPath(c.ptr, cPath)
+ if ptr == nil {
+ return VirStorageVol{}, GetLastError()
+ }
+ return VirStorageVol{ptr: ptr}, nil
+}
+
+func (c *VirConnection) SecretDefineXMLFromFile(xmlFile string) (VirSecret, error) {
+ xmlConfig, err := ioutil.ReadFile(xmlFile)
+ if err != nil {
+ return VirSecret{}, err
+ }
+ return c.SecretDefineXML(string(xmlConfig), 0)
+}
+
+func (c *VirConnection) SecretDefineXML(xmlConfig string, flags uint32) (VirSecret, error) {
+ cXml := C.CString(string(xmlConfig))
+ defer C.free(unsafe.Pointer(cXml))
+ ptr := C.virSecretDefineXML(c.ptr, cXml, C.uint(flags))
+ if ptr == nil {
+ return VirSecret{}, GetLastError()
+ }
+ return VirSecret{ptr: ptr}, nil
+}
+
+func (c *VirConnection) SecretSetValue(uuid, value string) error {
+ cUuid := C.CString(uuid)
+ defer C.free(unsafe.Pointer(cUuid))
+ ptr := C.virSecretLookupByUUIDString(c.ptr, cUuid)
+ if ptr == nil {
+ return GetLastError()
+ }
+
+ secret, err := base64.StdEncoding.DecodeString(value)
+ if err != nil {
+ return err
+ }
+ cSecret := C.CString(string(secret))
+ defer C.free(unsafe.Pointer(cSecret))
+
+ res := C.virSecretSetValue(ptr, (*C.uchar)(unsafe.Pointer(cSecret)), C.size_t(len(secret)), 0)
+ if res != 0 {
+ return GetLastError()
+ }
+
+ return nil
+}
+
+func (c *VirConnection) LookupSecretByUUIDString(uuid string) (VirSecret, error) {
+ cUuid := C.CString(uuid)
+ defer C.free(unsafe.Pointer(cUuid))
+ ptr := C.virSecretLookupByUUIDString(c.ptr, cUuid)
+ if ptr == nil {
+ return VirSecret{}, GetLastError()
+ }
+ return VirSecret{ptr: ptr}, nil
+}
+
+func (c *VirConnection) LookupSecretByUsage(usageType int, usageID string) (VirSecret, error) {
+ cUsageID := C.CString(usageID)
+ defer C.free(unsafe.Pointer(cUsageID))
+ ptr := C.virSecretLookupByUsage(c.ptr, C.int(usageType), cUsageID)
+ if ptr == nil {
+ return VirSecret{}, GetLastError()
+ }
+ return VirSecret{ptr: ptr}, nil
+}
+
+func (c *VirConnection) ListAllInterfaces(flags uint32) ([]VirInterface, error) {
+ var cList *C.virInterfacePtr
+ numIfaces := C.virConnectListAllInterfaces(c.ptr, (**C.virInterfacePtr)(&cList), C.uint(flags))
+ if numIfaces == -1 {
+ return nil, GetLastError()
+ }
+ hdr := reflect.SliceHeader{
+ Data: uintptr(unsafe.Pointer(cList)),
+ Len: int(numIfaces),
+ Cap: int(numIfaces),
+ }
+ var ifaces []VirInterface
+ slice := *(*[]C.virInterfacePtr)(unsafe.Pointer(&hdr))
+ for _, ptr := range slice {
+ ifaces = append(ifaces, VirInterface{ptr})
+ }
+ C.free(unsafe.Pointer(cList))
+ return ifaces, nil
+}
+
+func (c *VirConnection) ListAllNetworks(flags uint32) ([]VirNetwork, error) {
+ var cList *C.virNetworkPtr
+ numNets := C.virConnectListAllNetworks(c.ptr, (**C.virNetworkPtr)(&cList), C.uint(flags))
+ if numNets == -1 {
+ return nil, GetLastError()
+ }
+ hdr := reflect.SliceHeader{
+ Data: uintptr(unsafe.Pointer(cList)),
+ Len: int(numNets),
+ Cap: int(numNets),
+ }
+ var nets []VirNetwork
+ slice := *(*[]C.virNetworkPtr)(unsafe.Pointer(&hdr))
+ for _, ptr := range slice {
+ nets = append(nets, VirNetwork{ptr})
+ }
+ C.free(unsafe.Pointer(cList))
+ return nets, nil
+}
+
+func (c *VirConnection) ListAllDomains(flags uint32) ([]VirDomain, error) {
+ var cList *C.virDomainPtr
+ numDomains := C.virConnectListAllDomains(c.ptr, (**C.virDomainPtr)(&cList), C.uint(flags))
+ if numDomains == -1 {
+ return nil, GetLastError()
+ }
+ hdr := reflect.SliceHeader{
+ Data: uintptr(unsafe.Pointer(cList)),
+ Len: int(numDomains),
+ Cap: int(numDomains),
+ }
+ var domains []VirDomain
+ slice := *(*[]C.virDomainPtr)(unsafe.Pointer(&hdr))
+ for _, ptr := range slice {
+ domains = append(domains, VirDomain{ptr})
+ }
+ C.free(unsafe.Pointer(cList))
+ return domains, nil
+}
+
+func (c *VirConnection) ListAllNWFilters(flags uint32) ([]VirNWFilter, error) {
+ var cList *C.virNWFilterPtr
+ numNWFilters := C.virConnectListAllNWFilters(c.ptr, (**C.virNWFilterPtr)(&cList), C.uint(flags))
+ if numNWFilters == -1 {
+ return nil, GetLastError()
+ }
+ hdr := reflect.SliceHeader{
+ Data: uintptr(unsafe.Pointer(cList)),
+ Len: int(numNWFilters),
+ Cap: int(numNWFilters),
+ }
+ var filters []VirNWFilter
+ slice := *(*[]C.virNWFilterPtr)(unsafe.Pointer(&hdr))
+ for _, ptr := range slice {
+ filters = append(filters, VirNWFilter{ptr})
+ }
+ C.free(unsafe.Pointer(cList))
+ return filters, nil
+}
+
+func (c *VirConnection) ListAllStoragePools(flags uint32) ([]VirStoragePool, error) {
+ var cList *C.virStoragePoolPtr
+ numPools := C.virConnectListAllStoragePools(c.ptr, (**C.virStoragePoolPtr)(&cList), C.uint(flags))
+ if numPools == -1 {
+ return nil, GetLastError()
+ }
+ hdr := reflect.SliceHeader{
+ Data: uintptr(unsafe.Pointer(cList)),
+ Len: int(numPools),
+ Cap: int(numPools),
+ }
+ var pools []VirStoragePool
+ slice := *(*[]C.virStoragePoolPtr)(unsafe.Pointer(&hdr))
+ for _, ptr := range slice {
+ pools = append(pools, VirStoragePool{ptr})
+ }
+ C.free(unsafe.Pointer(cList))
+ return pools, nil
+}