Added basic HTTP API, lots of internal state work and libvirt domain XML parsing
This commit is contained in:
@@ -1,43 +1,20 @@
|
||||
/*
|
||||
Package libvirt for the overlord VM management software!
|
||||
Has a useful XML export for libvirt domain xml parsing.
|
||||
*/
|
||||
package libvirt
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
log "bitsnthings.dev/overlord/src/log"
|
||||
libvirt "libvirt.org/go/libvirt"
|
||||
)
|
||||
|
||||
var errDomainNotFound = errors.New("Clould not find the domain in internal state!")
|
||||
|
||||
type libvirtConnectFunc func(string) (*libvirt.Connect, error)
|
||||
|
||||
type Domains struct {
|
||||
Active map[string]map[string]libvirt.Domain
|
||||
Inactive map[string]map[string]libvirt.Domain
|
||||
}
|
||||
|
||||
type Stats struct {
|
||||
}
|
||||
|
||||
type Libvirt struct {
|
||||
Hosts map[string]*libvirt.Connect
|
||||
ROHosts map[string]*libvirt.Connect
|
||||
Domains Domains
|
||||
// Auth libvirt.ConnectAuth
|
||||
// Flags libvirt.ConnectFlags
|
||||
Stats Stats
|
||||
}
|
||||
|
||||
func New() Libvirt {
|
||||
return Libvirt{
|
||||
map[string]*libvirt.Connect{},
|
||||
map[string]*libvirt.Connect{},
|
||||
Domains{},
|
||||
Stats{},
|
||||
}
|
||||
}
|
||||
|
||||
func (virt *Libvirt) GetStatus() {
|
||||
virt.getAllDomains()
|
||||
log.PrintLog(log.TRACE, "Fetched libvirt cluster status.")
|
||||
}
|
||||
|
||||
func (virt *Libvirt) IsReadOnly(uri string) bool {
|
||||
if _, ok := virt.ROHosts[uri]; ok {
|
||||
return true
|
||||
@@ -62,3 +39,29 @@ func (virt *Libvirt) ConnectMany(cstrs []string, connFn libvirtConnectFunc) {
|
||||
virt.Connect(cstr, connFn)
|
||||
}
|
||||
}
|
||||
|
||||
func (virt *Libvirt) GetXMLFlags(uri string) libvirt.DomainXMLFlags {
|
||||
var flags libvirt.DomainXMLFlags
|
||||
if !virt.IsReadOnly(uri) {
|
||||
flags = libvirt.DOMAIN_XML_INACTIVE + libvirt.DOMAIN_XML_INACTIVE
|
||||
}
|
||||
return flags
|
||||
}
|
||||
|
||||
func (virt *Libvirt) GetDomainAndStatus(uri string, uuid string) (libvirt.Domain, bool, error) {
|
||||
if host, exists := virt.Domains.Active[uri]; exists {
|
||||
dom, exists := host[uuid]
|
||||
if exists {
|
||||
return dom, true, nil
|
||||
}
|
||||
return libvirt.Domain{}, false, errDomainNotFound
|
||||
}
|
||||
if host, exists := virt.Domains.Inactive[uri]; exists {
|
||||
dom, exists := host[uuid]
|
||||
if exists {
|
||||
return dom, false, nil
|
||||
}
|
||||
return libvirt.Domain{}, false, errDomainNotFound
|
||||
}
|
||||
return libvirt.Domain{}, false, errDomainNotFound
|
||||
}
|
||||
|
Reference in New Issue
Block a user