86 lines
2.1 KiB
Go
86 lines
2.1 KiB
Go
package domain
|
|
|
|
import (
|
|
"context"
|
|
|
|
"deevirt.fr/compute/pkg/api/proto"
|
|
"libvirt.org/go/libvirt"
|
|
)
|
|
|
|
type Events struct {
|
|
NodeID string
|
|
CompanyID string
|
|
DatacenterID string
|
|
Config []byte
|
|
DomainID string
|
|
State int
|
|
Event *libvirt.DomainQemuMonitorEvent
|
|
}
|
|
|
|
type EventsDetail map[string]string
|
|
|
|
func (d *Domain) Event(ctx context.Context, req *proto.DomainEventRequest) (*proto.DomainEventResponse, error) {
|
|
/*var events Events
|
|
|
|
err := json.Unmarshal(req.Event, &events)
|
|
if err != nil {
|
|
fmt.Println("Erreur lors du décodage JSON:", err)
|
|
}
|
|
|
|
var edetail EventsDetail
|
|
|
|
if events.Event.Event == "MIGRATION" {
|
|
err = json.Unmarshal([]byte(events.Event.Details), &edetail)
|
|
if err != nil {
|
|
fmt.Println("Erreur lors du décodage JSON:", err)
|
|
}
|
|
|
|
if edetail["status"] == "setup" {
|
|
r, _ := d.Store.Get(fmt.Sprintf("/etc/libvirt/qemu/%s/%s", events.NodeID, events.DomainID))
|
|
|
|
if r != nil {
|
|
var j raft.DomainStore
|
|
json.Unmarshal(r, &j)
|
|
j.Migrate = true
|
|
|
|
new, _ := json.Marshal(j)
|
|
d.Store.Set(fmt.Sprintf("/etc/libvirt/qemu/%s/%s", events.NodeID, events.DomainID), new)
|
|
} else {
|
|
new, _ := json.Marshal(raft.DomainStore{
|
|
Config: string(events.Config),
|
|
State: events.State,
|
|
Migrate: false,
|
|
})
|
|
d.Store.Set(fmt.Sprintf("/etc/libvirt/qemu/%s/%s", events.NodeID, events.DomainID), new)
|
|
}
|
|
|
|
fmt.Printf("%s => %v\n", events.NodeID, edetail)
|
|
} else if edetail["status"] == "completed" {
|
|
r, _ := d.Store.Get(fmt.Sprintf("/etc/libvirt/qemu/%s/%s", events.NodeID, events.DomainID))
|
|
|
|
if r != nil {
|
|
var j raft.DomainStore
|
|
json.Unmarshal(r, &j)
|
|
|
|
if j.Migrate {
|
|
d.Store.Delete(fmt.Sprintf("/etc/libvirt/qemu/%s/%s", events.NodeID, events.DomainID))
|
|
}
|
|
}
|
|
|
|
fmt.Printf("%s => %v\n", events.NodeID, edetail)
|
|
}
|
|
}
|
|
|
|
// AMQP - On envoi l'évènement brut
|
|
/*e, _ := json.Marshal(events.Event)
|
|
a, _ := amqp.NewAMQP()
|
|
a.Publisher("vmcenter",
|
|
"events."+events.CompanyID+
|
|
"."+events.DatacenterID+
|
|
"."+events.DomainID,
|
|
e)
|
|
defer a.Close()*/
|
|
|
|
return &proto.DomainEventResponse{}, nil
|
|
}
|