Skip to content

Commit

Permalink
Merge pull request #546 from rgooch/master
Browse files Browse the repository at this point in the history
Require VM hostname when creating and show when stopping or destroying.
  • Loading branch information
rgooch committed Jan 1, 2019
2 parents edadd94 + 4eae0f6 commit 54adc58
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 0 deletions.
15 changes: 15 additions & 0 deletions cmd/vm-control/createVm.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand Down Expand Up @@ -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 {
Expand Down
1 change: 1 addition & 0 deletions cmd/vm-control/destroyVm.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
18 changes: 18 additions & 0 deletions cmd/vm-control/stopVm.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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
Expand All @@ -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)
}
5 changes: 5 additions & 0 deletions hypervisor/client/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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)
Expand Down
13 changes: 13 additions & 0 deletions hypervisor/client/impl.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand Down

0 comments on commit 54adc58

Please sign in to comment.