You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gridscale-check/servers_status.go

57 lines
1.7 KiB
Go

// Copyright 2018 Felix Kronlage <fkr@hazardous.org>
package main
import (
"fmt"
"g.hazardous.org/fkr/libretto/virtualmachine/gridscale"
)
type ServersStatusCommand struct {
Relation string `short:"r" long:"relation" description:"relation uuid to check" required:"no"`
ServerUUID string `short:"u" long:"uuid" description:"uuid of server to check" required:"yes"`
Status string `short:"s" long:"status" description:"value of status to compare against" choice:"active" choice:"deleted" required:"no"`
Type string `short:"t" long:"type" description:"type to check for state" required:"yes"`
}
var serversStatusCommand ServersStatusCommand
func (x *ServersStatusCommand) Execute(args []string) error {
if x.Type == "server.status" {
server, err := gridscale.GetServer(Config.UserId, Config.Token, x.ServerUUID)
if err != nil {
Unknown(fmt.Sprintf("%s: %s", "Error retrieving server", err))
}
if server.Status != x.Status {
Critical(fmt.Sprintf("Server state critical - State required: '%s' - State found: '%s'", x.Status, server.Status))
}
Ok(fmt.Sprintf("State required: '%s' - State found: '%s'", x.Status, server.Status))
}
if x.Type == "firewall.template" {
vm, err := gridscale.GetVM(Config.UserId, Config.Token, x.ServerUUID)
if err != nil {
Unknown(fmt.Sprintf("%s: %s", "Error retrieving server", err))
}
for _, networkRelation := range vm.NetworksRelations {
if networkRelation.FirewallTemplateUUID == x.Relation {
Ok(fmt.Sprintf("Expected firewall template '%s' is active", networkRelation.FirewallTemplateUUID))
}
}
Critical(fmt.Sprintf("Expected firewall template '%s' is NOT active!", x.Relation))
}
// never reached
return nil
}
func init() {
}