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

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