github.com/vmware/govmomi@v0.51.0/cli/task/set.go (about)

     1  // © Broadcom. All Rights Reserved.
     2  // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package task
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  
    11  	"github.com/vmware/govmomi/cli"
    12  	"github.com/vmware/govmomi/cli/flags"
    13  	"github.com/vmware/govmomi/object"
    14  	"github.com/vmware/govmomi/vim25/types"
    15  )
    16  
    17  type set struct {
    18  	*flags.ClientFlag
    19  
    20  	desc     types.LocalizableMessage
    21  	state    string
    22  	err      string
    23  	progress int
    24  }
    25  
    26  func init() {
    27  	cli.Register("task.set", &set{}, true)
    28  }
    29  
    30  func (cmd *set) Register(ctx context.Context, f *flag.FlagSet) {
    31  	cmd.ClientFlag, ctx = flags.NewClientFlag(ctx)
    32  	cmd.ClientFlag.Register(ctx, f)
    33  
    34  	f.StringVar(&cmd.desc.Key, "d", "", "Task description key")
    35  	f.StringVar(&cmd.desc.Message, "m", "", "Task description message")
    36  	f.StringVar(&cmd.state, "s", "", "Task state")
    37  	f.StringVar(&cmd.err, "e", "", "Task error")
    38  	f.IntVar(&cmd.progress, "p", 0, "Task progress")
    39  }
    40  
    41  func (cmd *set) Description() string {
    42  	return `Set task state.
    43  
    44  Examples:
    45    id=$(govc task.create com.vmware.govmomi.simulator.test)
    46    govc task.set $id -s error
    47    govc task.set $id -p 100 -s success`
    48  }
    49  
    50  func (cmd *set) Usage() string {
    51  	return "ID"
    52  }
    53  
    54  func (cmd *set) Run(ctx context.Context, f *flag.FlagSet) error {
    55  	if f.NArg() != 1 {
    56  		return flag.ErrHelp
    57  	}
    58  
    59  	c, err := cmd.Client()
    60  	if err != nil {
    61  		return err
    62  	}
    63  
    64  	ref := types.ManagedObjectReference{Type: "Task"}
    65  	if !ref.FromString(f.Arg(0)) {
    66  		ref.Value = f.Arg(0)
    67  	}
    68  
    69  	task := object.NewTask(c, ref)
    70  
    71  	if cmd.progress != 0 {
    72  		err := task.UpdateProgress(ctx, cmd.progress)
    73  		if err != nil {
    74  			return err
    75  		}
    76  	}
    77  
    78  	var fault *types.LocalizedMethodFault
    79  
    80  	if cmd.err != "" {
    81  		fault = &types.LocalizedMethodFault{
    82  			Fault:            &types.SystemError{Reason: cmd.err},
    83  			LocalizedMessage: cmd.err,
    84  		}
    85  		cmd.state = string(types.TaskInfoStateError)
    86  	}
    87  
    88  	if cmd.state != "" {
    89  		err := task.SetState(ctx, types.TaskInfoState(cmd.state), nil, fault)
    90  		if err != nil {
    91  			return err
    92  		}
    93  	}
    94  
    95  	if cmd.desc.Key != "" {
    96  		err := task.SetDescription(ctx, cmd.desc)
    97  		if err != nil {
    98  			return err
    99  		}
   100  	}
   101  
   102  	return nil
   103  }