В настоящее время я пишу небольшую программу на go, которую я хотел бы использовать позже для запуска виртуальных машин.Все виртуальные машины основаны на centos7.0. kickstartfile используется для установки виртуальных машин по той же схеме.
Чтобы использовать функцию с кикстарт-файлом, мне нужно активировать прямую загрузку ядра.Я передаю путь к ядру (vmlinuz
), initrd (initrd.img
) и аргументам (ks=http://172.25.35.165/kvm-centos.ks
).
После установки виртуальная машина запускается снова через файл кикстарта, который приводит к постоянномуПроцедура установки.
Сейчас я ищу EventHandler, который уведомляет мою программу go о перезапуске виртуальной машины.Затем я могу отключить параметры загрузки ядра с помощью аргумента kickstartfile.
Я уже пробовал с DomainEventRegister , но событие не вызывается.Пакет libvirt-go также очень плохо документирован, когда дело доходит до обработки событий.
Кто-нибудь знает, как я могу установить функцию CallbackFunction для действий по перезагрузке, чтобы отключить параметры загрузки ядра после успешной установки ВМ?
Вот моя функция go:
// CreateDomain
func CreateDomain(domainCfg *libvirtxml.Domain, conn *libvirt.Connect) error {
domainXML, err := domainCfg.Marshal()
if err != nil {
return err
}
domain, err := conn.DomainDefineXML(domainXML)
if err != nil {
return err
}
conn.DomainEventRegister(nil, func(c *libvirt.Connect, d *libvirt.Domain, event *libvirt.Event) {
log.Println("Reboot")
})
err = domain.CreateWithFlags(libvirt.DOMAIN_NONE)
if err != nil {
return err
}
domainState, _, err := domain.GetState()
for domainState == libvirt.DOMAIN_RUNNING {
state, _, err := domain.GetState()
if err != nil {
return err
}
time.Sleep(time.Second * 10)
log.Println(state)
if state != libvirt.DOMAIN_RUNNING {
break
}
}
return nil
}