github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/cmd/vm-control/changeVmDestroyProtection.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "net" 6 7 "github.com/Cloud-Foundations/Dominator/lib/errors" 8 "github.com/Cloud-Foundations/Dominator/lib/log" 9 proto "github.com/Cloud-Foundations/Dominator/proto/hypervisor" 10 ) 11 12 func changeVmDestroyProtectionSubcommand(args []string, 13 logger log.DebugLogger) error { 14 if err := changeVmDestroyProtection(args[0], logger); err != nil { 15 return fmt.Errorf("Error changing VM destroy protection: %s", err) 16 } 17 return nil 18 } 19 20 func changeVmDestroyProtection(vmHostname string, 21 logger log.DebugLogger) error { 22 if vmIP, hypervisor, err := lookupVmAndHypervisor(vmHostname); err != nil { 23 return err 24 } else { 25 return changeVmDestroyProtectionOnHypervisor(hypervisor, vmIP, logger) 26 } 27 } 28 29 func changeVmDestroyProtectionOnHypervisor(hypervisor string, ipAddr net.IP, 30 logger log.DebugLogger) error { 31 request := proto.ChangeVmDestroyProtectionRequest{ 32 DestroyProtection: *destroyProtection, 33 IpAddress: ipAddr, 34 } 35 client, err := dialHypervisor(hypervisor) 36 if err != nil { 37 return err 38 } 39 defer client.Close() 40 var reply proto.ChangeVmOwnerUsersResponse 41 err = client.RequestReply("Hypervisor.ChangeVmDestroyProtection", 42 request, &reply) 43 if err != nil { 44 return err 45 } 46 return errors.New(reply.Error) 47 }