Blame vendor/github.com/vmware/govmomi/govc/flags/virtual_machine.go

Packit 63bb0d
/*
Packit 63bb0d
Copyright (c) 2014-2015 VMware, Inc. All Rights Reserved.
Packit 63bb0d
Packit 63bb0d
Licensed under the Apache License, Version 2.0 (the "License");
Packit 63bb0d
you may not use this file except in compliance with the License.
Packit 63bb0d
You may obtain a copy of the License at
Packit 63bb0d
Packit 63bb0d
    http://www.apache.org/licenses/LICENSE-2.0
Packit 63bb0d
Packit 63bb0d
Unless required by applicable law or agreed to in writing, software
Packit 63bb0d
distributed under the License is distributed on an "AS IS" BASIS,
Packit 63bb0d
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 63bb0d
See the License for the specific language governing permissions and
Packit 63bb0d
limitations under the License.
Packit 63bb0d
*/
Packit 63bb0d
Packit 63bb0d
package flags
Packit 63bb0d
Packit 63bb0d
import (
Packit 63bb0d
	"context"
Packit 63bb0d
	"flag"
Packit 63bb0d
	"fmt"
Packit 63bb0d
	"os"
Packit 63bb0d
Packit 63bb0d
	"github.com/vmware/govmomi/object"
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
type VirtualMachineFlag struct {
Packit 63bb0d
	common
Packit 63bb0d
Packit 63bb0d
	*ClientFlag
Packit 63bb0d
	*DatacenterFlag
Packit 63bb0d
	*SearchFlag
Packit 63bb0d
Packit 63bb0d
	name string
Packit 63bb0d
	vm   *object.VirtualMachine
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
var virtualMachineFlagKey = flagKey("virtualMachine")
Packit 63bb0d
Packit 63bb0d
func NewVirtualMachineFlag(ctx context.Context) (*VirtualMachineFlag, context.Context) {
Packit 63bb0d
	if v := ctx.Value(virtualMachineFlagKey); v != nil {
Packit 63bb0d
		return v.(*VirtualMachineFlag), ctx
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	v := &VirtualMachineFlag{}
Packit 63bb0d
	v.ClientFlag, ctx = NewClientFlag(ctx)
Packit 63bb0d
	v.DatacenterFlag, ctx = NewDatacenterFlag(ctx)
Packit 63bb0d
	v.SearchFlag, ctx = NewSearchFlag(ctx, SearchVirtualMachines)
Packit 63bb0d
	ctx = context.WithValue(ctx, virtualMachineFlagKey, v)
Packit 63bb0d
	return v, ctx
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (flag *VirtualMachineFlag) Register(ctx context.Context, f *flag.FlagSet) {
Packit 63bb0d
	flag.RegisterOnce(func() {
Packit 63bb0d
		flag.ClientFlag.Register(ctx, f)
Packit 63bb0d
		flag.DatacenterFlag.Register(ctx, f)
Packit 63bb0d
		flag.SearchFlag.Register(ctx, f)
Packit 63bb0d
Packit 63bb0d
		env := "GOVC_VM"
Packit 63bb0d
		value := os.Getenv(env)
Packit 63bb0d
		usage := fmt.Sprintf("Virtual machine [%s]", env)
Packit 63bb0d
		f.StringVar(&flag.name, "vm", value, usage)
Packit 63bb0d
	})
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (flag *VirtualMachineFlag) Process(ctx context.Context) error {
Packit 63bb0d
	return flag.ProcessOnce(func() error {
Packit 63bb0d
		if err := flag.ClientFlag.Process(ctx); err != nil {
Packit 63bb0d
			return err
Packit 63bb0d
		}
Packit 63bb0d
		if err := flag.DatacenterFlag.Process(ctx); err != nil {
Packit 63bb0d
			return err
Packit 63bb0d
		}
Packit 63bb0d
		if err := flag.SearchFlag.Process(ctx); err != nil {
Packit 63bb0d
			return err
Packit 63bb0d
		}
Packit 63bb0d
		return nil
Packit 63bb0d
	})
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (flag *VirtualMachineFlag) VirtualMachine() (*object.VirtualMachine, error) {
Packit 63bb0d
	ctx := context.TODO()
Packit 63bb0d
Packit 63bb0d
	if flag.vm != nil {
Packit 63bb0d
		return flag.vm, nil
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	// Use search flags if specified.
Packit 63bb0d
	if flag.SearchFlag.IsSet() {
Packit 63bb0d
		vm, err := flag.SearchFlag.VirtualMachine()
Packit 63bb0d
		if err != nil {
Packit 63bb0d
			return nil, err
Packit 63bb0d
		}
Packit 63bb0d
Packit 63bb0d
		flag.vm = vm
Packit 63bb0d
		return flag.vm, nil
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	// Never look for a default virtual machine.
Packit 63bb0d
	if flag.name == "" {
Packit 63bb0d
		return nil, nil
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	finder, err := flag.Finder()
Packit 63bb0d
	if err != nil {
Packit 63bb0d
		return nil, err
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	flag.vm, err = finder.VirtualMachine(ctx, flag.name)
Packit 63bb0d
	return flag.vm, err
Packit 63bb0d
}