mirror of
https://github.com/edgelesssys/constellation.git
synced 2025-05-02 06:16:08 -04:00
Remove PublicIP from QEMU metadata (#396)
Signed-off-by: Daniel Weiße <dw@edgeless.systems>
This commit is contained in:
parent
6d2ec109d0
commit
55cfff034a
15 changed files with 63 additions and 711 deletions
|
@ -41,6 +41,7 @@ func (s *Server) ListenAndServe(port string) error {
|
|||
mux.Handle("/peers", http.HandlerFunc(s.listPeers))
|
||||
mux.Handle("/log", http.HandlerFunc(s.postLog))
|
||||
mux.Handle("/pcrs", http.HandlerFunc(s.exportPCRs))
|
||||
mux.Handle("/endpoint", http.HandlerFunc(s.getEndpoint))
|
||||
|
||||
server := http.Server{
|
||||
Handler: mux,
|
||||
|
@ -75,7 +76,7 @@ func (s *Server) listSelf(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
for _, peer := range peers {
|
||||
if peer.PublicIP == remoteIP {
|
||||
if peer.VPCIP == remoteIP {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
if err := json.NewEncoder(w).Encode(peer); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
|
@ -110,6 +111,43 @@ func (s *Server) listPeers(w http.ResponseWriter, r *http.Request) {
|
|||
log.Infof("Request successful")
|
||||
}
|
||||
|
||||
// getEndpoint returns the IP address of the first control-plane instance.
|
||||
// This allows us to fake a load balancer for QEMU instances.
|
||||
func (s *Server) getEndpoint(w http.ResponseWriter, r *http.Request) {
|
||||
log := s.log.With(zap.String("peer", r.RemoteAddr))
|
||||
log.Infof("Serving GET request for /endpoint")
|
||||
|
||||
net, err := s.virt.LookupNetworkByName(s.network)
|
||||
if err != nil {
|
||||
log.With(zap.Error(err)).Errorf("Failed to lookup network")
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
defer net.Free()
|
||||
|
||||
leases, err := net.GetDHCPLeases()
|
||||
if err != nil {
|
||||
log.With(zap.Error(err)).Errorf("Failed to get DHCP leases")
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
for _, lease := range leases {
|
||||
if strings.HasPrefix(lease.Hostname, "control-plane") &&
|
||||
strings.HasSuffix(lease.Hostname, "0") {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
if err := json.NewEncoder(w).Encode(lease.IPaddr); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
log.Infof("Request successful")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
log.Errorf("Failed to find control-plane peer in active leases")
|
||||
http.Error(w, "No matching peer found", http.StatusNotFound)
|
||||
}
|
||||
|
||||
// postLog writes implements cloud-logging for QEMU instances.
|
||||
func (s *Server) postLog(w http.ResponseWriter, r *http.Request) {
|
||||
log := s.log.With(zap.String("peer", r.RemoteAddr))
|
||||
|
@ -178,7 +216,7 @@ func (s *Server) exportPCRs(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
for _, peer := range peers {
|
||||
if peer.PublicIP == remoteIP {
|
||||
if peer.VPCIP == remoteIP {
|
||||
nodeName = peer.Name
|
||||
}
|
||||
}
|
||||
|
@ -210,7 +248,6 @@ func (s *Server) listAll() ([]metadata.InstanceMetadata, error) {
|
|||
Name: lease.Hostname,
|
||||
Role: instanceRole,
|
||||
VPCIP: lease.IPaddr,
|
||||
PublicIP: lease.IPaddr,
|
||||
ProviderID: "qemu:///hostname/" + lease.Hostname,
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue