base code for libvirt connections

This commit is contained in:
Sivert V. Sæther 2021-09-09 03:28:05 +02:00
parent 7b9c7c57ef
commit c2d111a928
8 changed files with 120 additions and 1 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
lord.json
overlord
data/

View File

@ -1,3 +1,3 @@
# overlord
# Overlord
Full management suite for libvirt and kubernetes clusters!

5
go.mod Normal file
View File

@ -0,0 +1,5 @@
module bitsnthings.dev/overlord
go 1.17
require libvirt.org/go/libvirt v1.7007.0 // indirect

4
go.sum Normal file
View File

@ -0,0 +1,4 @@
libvirt.org/go/libvirt v1.7007.0 h1:pTe6uRhxDpWzGS06SXvgeQXqWcG1aTKRfL+gS5xI9Kw=
libvirt.org/go/libvirt v1.7007.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ=
libvirt.org/libvirt-go v7.4.0+incompatible h1:1gFJevSrEoxx/5nZPB6GaTDdoc902NP2KyVPwQ07Ji4=
libvirt.org/libvirt-go v7.4.0+incompatible/go.mod h1:CPoljLoiC2aEw+62g1rZXl2oXAJaNsrq4YCSmJOELek=

15
overlord.go Normal file
View File

@ -0,0 +1,15 @@
package main
import (
"log"
overlord "bitsnthings.dev/overlord/src"
)
func main() {
log.Println("Starting Overlord.")
state := overlord.NewState()
state.Setup()
log.Println("Stopping Overlord.")
state.Stop()
}

28
src/conf.go Normal file
View File

@ -0,0 +1,28 @@
package overlord
import (
"encoding/json"
"flag"
"log"
"os"
)
type Config struct {
LibvirtHosts []string
PrivateKey string
ConfFilePath string
LogFilePath string
}
func (conf *Config) ReadConfig() {
flag.StringVar(&conf.ConfFilePath, "c", "lord.json", "Config file path.")
flag.StringVar(&conf.LogFilePath, "l", "", "Log file path.")
flag.Parse()
file, err := os.Open(conf.ConfFilePath)
if err != nil {
log.Printf("Error opening config file! %s", err)
} else {
defer file.Close()
json.NewDecoder(file).Decode(&conf)
}
}

27
src/libvirt.go Normal file
View File

@ -0,0 +1,27 @@
package overlord
import (
"log"
libvirt "libvirt.org/go/libvirt"
)
type Libvirt struct {
Hosts []*libvirt.Connect
Auth libvirt.ConnectAuth
Flags libvirt.ConnectFlags
}
func (virt *Libvirt) Connect(cstr string) (*libvirt.Connect, error) {
conn, err := libvirt.NewConnect(cstr) //, &virt.Auth, virt.Flags)
if err != nil {
log.Printf("Error connecting to libvirt host! %s", err)
}
return conn, err
}
func (virt *Libvirt) ConnectMany(cstrs []string) {
for _, cstr := range cstrs {
virt.Connect(cstr)
}
}

37
src/state.go Normal file
View File

@ -0,0 +1,37 @@
package overlord
import (
"log"
"os"
)
type State struct {
Libvirt Libvirt
Config Config
}
func NewState() State {
return State{
Libvirt{},
Config{},
}
}
func (state *State) Setup() {
state.Config.ReadConfig()
if state.Config.LogFilePath != "" {
file, err := os.OpenFile(state.Config.LogFilePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
log.Printf("Could not open log file! %s", state.Config.LogFilePath)
} else {
log.SetOutput(file)
}
}
state.Libvirt.ConnectMany(state.Config.LibvirtHosts)
}
func (state *State) Stop() {
for _, conn := range state.Libvirt.Hosts {
conn.Close()
}
}