constellation/hack/qemu-metadata-api/main.go
2024-05-24 15:14:16 +02:00

53 lines
1.5 KiB
Go

//go:build cgo
/*
Copyright (c) Edgeless Systems GmbH
SPDX-License-Identifier: AGPL-3.0-only
*/
package main
import (
"flag"
"log/slog"
"os"
"github.com/edgelesssys/constellation/v2/hack/qemu-metadata-api/dhcp/dnsmasq"
"github.com/edgelesssys/constellation/v2/hack/qemu-metadata-api/dhcp/virtwrapper"
"github.com/edgelesssys/constellation/v2/hack/qemu-metadata-api/server"
"github.com/edgelesssys/constellation/v2/internal/logger"
"libvirt.org/go/libvirt"
)
func main() {
bindPort := flag.String("port", "8080", "Port to bind to")
targetNetwork := flag.String("network", "constellation-network", "Name of the network in libvirt")
libvirtURI := flag.String("libvirt-uri", "qemu:///system", "URI of the libvirt connection")
leasesFileName := flag.String("dnsmasq-leases", "", "Path to the dnsmasq leases file")
initSecretHash := flag.String("initsecrethash", "", "brcypt hash of the init secret")
flag.Parse()
log := logger.NewJSONLogger(slog.LevelInfo)
var leaseGetter server.LeaseGetter
if *leasesFileName == "" {
conn, err := libvirt.NewConnect(*libvirtURI)
if err != nil {
log.With(slog.Any("error", err)).Error("Failed to connect to libvirt")
os.Exit(1)
}
defer conn.Close()
leaseGetter = virtwrapper.New(conn, *targetNetwork)
} else {
log.Info("Using dnsmasq leases file")
leaseGetter = dnsmasq.New(*leasesFileName)
}
serv := server.New(log, *targetNetwork, *initSecretHash, leaseGetter)
if err := serv.ListenAndServe(*bindPort); err != nil {
log.With(slog.Any("error", err)).Error("Failed to serve")
os.Exit(1)
}
}