2022-12-22 13:07:21 +01:00
package main
import (
"context"
"log"
2022-12-23 12:45:12 +01:00
"os"
"github.com/jessevdk/go-flags"
2022-12-22 13:07:21 +01:00
"spamasaurus.com/m/pkg/hypervisor"
)
2022-12-28 14:41:03 +01:00
var Global struct {
FQDN string ` short:"s" long:"server" description:"FQDN of the vCenter appliance" required:"true" `
Username string ` short:"u" long:"username" description:"Username to authenticate with" required:"true" `
Password string ` short:"p" long:"password" description:"Password to authenticate with" required:"true" `
}
var Commands struct {
Datacenter struct {
Name string ` short:"n" long:"name" description:"Name of datacenter" required:"true" `
Network string ` short:"p" long:"portgroup" description:"Name of network portgroup" required:"true" `
} // `command:"datacenter" alias:"dc" description:"Define a Network Protocol Profile within a datacenter"`
VirtualMachine struct {
Datacenter string ` short:"d" long:"datacenter" description:"Name of datacenter" required:"true" `
Name string ` short:"n" long:"name" description:"Name of virtual machine" required:"true" `
Network string ` short:"p" long:"portgroup" description:"Name of network portgroup" required:"true" `
} // `command:"virtualmachine" alias:"vm" description:"Configure a virtual machine for usage of Network Protocol Profiles"`
}
2022-12-22 13:07:21 +01:00
2022-12-28 14:41:03 +01:00
func main ( ) {
parser := flags . NewParser ( & Global , flags . Default )
parser . AddCommand ( "datacenter" , "Define a Network Protocol Profile within a datacenter" , "" , & Commands . Datacenter )
parser . AddCommand ( "dc" , "" , "" , & Commands . Datacenter )
parser . AddCommand ( "virtualmachine" , "Configure a virtual machine for usage of Network Protocol Profiles" , "" , & Commands . VirtualMachine )
parser . AddCommand ( "vm" , "" , "" , & Commands . VirtualMachine )
_ , err := parser . Parse ( )
2022-12-23 12:45:12 +01:00
if err != nil {
2022-12-28 14:41:03 +01:00
if flagsErr , ok := err . ( * flags . Error ) ; ok && flagsErr . Type == flags . ErrHelp {
os . Exit ( 0 )
} else {
os . Exit ( 1 )
2022-12-23 12:45:12 +01:00
}
}
2022-12-22 13:07:21 +01:00
ctx , cancel := context . WithCancel ( context . Background ( ) )
defer cancel ( )
2022-12-28 14:41:03 +01:00
clt , err := hypervisor . NewClient ( ctx , Global . FQDN , Global . Username , Global . Password , true )
2022-12-22 13:07:21 +01:00
if err != nil {
2022-12-23 12:45:12 +01:00
log . Fatalf ( "[ERROR] Login failed: %s" , err )
2022-12-22 13:07:21 +01:00
}
2022-12-28 14:41:03 +01:00
switch parser . Active . Name {
case "datacenter" , "dc" :
if err := hypervisor . CreateNetworkProtocolProfile ( ctx , clt , Commands . Datacenter . Name , Commands . Datacenter . Network ) ; err != nil {
log . Fatalf ( "[ERROR] Could not create network protocol profile: %s" , err )
}
2022-12-22 13:07:21 +01:00
2022-12-28 14:41:03 +01:00
log . Printf ( "[SUCCESS] Hurray! We did it!" )
case "virtualmachine" , "vm" :
if err := hypervisor . SetVirtualMachineProperties ( ctx , clt , Commands . VirtualMachine . Datacenter , Commands . VirtualMachine . Name , Commands . VirtualMachine . Network ) ; err != nil {
log . Fatalf ( "[ERROR] Could not apply vApp properties: %s" , err )
}
2022-12-23 12:50:22 +01:00
2022-12-28 14:41:03 +01:00
log . Printf ( "[SUCCESS] Network protocol profile properties added to virtual machine '%s' and configured for network '%s'" , Commands . VirtualMachine . Name , Commands . VirtualMachine . Network )
}
2022-12-22 13:07:21 +01:00
}