//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) } }