diff --git a/cmd/vm-control/createVm.go b/cmd/vm-control/createVm.go index 45c0504d..2cedd877 100644 --- a/cmd/vm-control/createVm.go +++ b/cmd/vm-control/createVm.go @@ -14,6 +14,7 @@ import ( "github.com/Symantec/Dominator/lib/flagutil" "github.com/Symantec/Dominator/lib/log" "github.com/Symantec/Dominator/lib/srpc" + "github.com/Symantec/Dominator/lib/tags" fm_proto "github.com/Symantec/Dominator/proto/fleetmanager" hyper_proto "github.com/Symantec/Dominator/proto/hypervisor" ) @@ -84,6 +85,20 @@ func callCreateVm(client *srpc.Client, request hyper_proto.CreateVmRequest, } func createVm(logger log.DebugLogger) error { + if *vmHostname == "" { + if name := vmTags["Name"]; name == "" { + return errors.New("no hostname specified") + } else { + *vmHostname = name + } + } else { + if name := vmTags["Name"]; name == "" { + if vmTags == nil { + vmTags = make(tags.Tags) + } + vmTags["Name"] = *vmHostname + } + } if hypervisor, err := getHypervisorAddress(); err != nil { return err } else { diff --git a/cmd/vm-control/destroyVm.go b/cmd/vm-control/destroyVm.go index 62a85b20..adbed7c5 100644 --- a/cmd/vm-control/destroyVm.go +++ b/cmd/vm-control/destroyVm.go @@ -32,5 +32,6 @@ func destroyVmOnHypervisor(hypervisor string, ipAddr net.IP, return err } defer client.Close() + logVmName(client, ipAddr, "destroying", logger) return hyperclient.DestroyVm(client, ipAddr, nil) } diff --git a/cmd/vm-control/stopVm.go b/cmd/vm-control/stopVm.go index d71c86da..5d755d53 100644 --- a/cmd/vm-control/stopVm.go +++ b/cmd/vm-control/stopVm.go @@ -7,6 +7,7 @@ import ( hyperclient "github.com/Symantec/Dominator/hypervisor/client" "github.com/Symantec/Dominator/lib/log" + "github.com/Symantec/Dominator/lib/srpc" ) func stopVmSubcommand(args []string, logger log.DebugLogger) { @@ -17,6 +18,22 @@ func stopVmSubcommand(args []string, logger log.DebugLogger) { os.Exit(0) } +func logVmName(client *srpc.Client, ipAddr net.IP, action string, + logger log.DebugLogger) { + if vmInfo, err := hyperclient.GetVmInfo(client, ipAddr); err != nil { + return + } else { + name := vmInfo.Hostname + if name == "" { + name = vmInfo.Tags["Name"] + } + if name == "" { + return + } + logger.Debugf(0, "%s %s\n", action, name) + } +} + func stopVm(vmHostname string, logger log.DebugLogger) error { if vmIP, hypervisor, err := lookupVmAndHypervisor(vmHostname); err != nil { return err @@ -32,5 +49,6 @@ func stopVmOnHypervisor(hypervisor string, ipAddr net.IP, return err } defer client.Close() + logVmName(client, ipAddr, "stopping", logger) return hyperclient.StopVm(client, ipAddr, nil) } diff --git a/hypervisor/client/api.go b/hypervisor/client/api.go index 1ab7e912..cea1108f 100644 --- a/hypervisor/client/api.go +++ b/hypervisor/client/api.go @@ -4,6 +4,7 @@ import ( "net" "github.com/Symantec/Dominator/lib/srpc" + proto "github.com/Symantec/Dominator/proto/hypervisor" ) func DeleteVmVolume(client *srpc.Client, ipAddr net.IP, accessToken []byte, @@ -15,6 +16,10 @@ func DestroyVm(client *srpc.Client, ipAddr net.IP, accessToken []byte) error { return destroyVm(client, ipAddr, accessToken) } +func GetVmInfo(client *srpc.Client, ipAddr net.IP) (proto.VmInfo, error) { + return getVmInfo(client, ipAddr) +} + func PrepareVmForMigration(client *srpc.Client, ipAddr net.IP, accessToken []byte, enable bool) error { return prepareVmForMigration(client, ipAddr, accessToken, enable) diff --git a/hypervisor/client/impl.go b/hypervisor/client/impl.go index 61e7d217..ccfcedee 100644 --- a/hypervisor/client/impl.go +++ b/hypervisor/client/impl.go @@ -36,6 +36,19 @@ func destroyVm(client *srpc.Client, ipAddr net.IP, accessToken []byte) error { return errors.New(reply.Error) } +func getVmInfo(client *srpc.Client, ipAddr net.IP) (proto.VmInfo, error) { + request := proto.GetVmInfoRequest{IpAddress: ipAddr} + var reply proto.GetVmInfoResponse + err := client.RequestReply("Hypervisor.GetVmInfo", request, &reply) + if err != nil { + return proto.VmInfo{}, err + } + if err := errors.New(reply.Error); err != nil { + return proto.VmInfo{}, err + } + return reply.VmInfo, nil +} + func prepareVmForMigration(client *srpc.Client, ipAddr net.IP, accessToken []byte, enable bool) error { request := proto.PrepareVmForMigrationRequest{