github.com/vmware/govmomi@v0.51.0/cli/library/checkout.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 library 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 12 "github.com/vmware/govmomi/cli" 13 "github.com/vmware/govmomi/cli/flags" 14 "github.com/vmware/govmomi/vapi/vcenter" 15 ) 16 17 type checkout struct { 18 *flags.ClusterFlag 19 *flags.FolderFlag 20 *flags.ResourcePoolFlag 21 *flags.HostSystemFlag 22 } 23 24 func init() { 25 cli.Register("library.checkout", &checkout{}) 26 } 27 28 func (cmd *checkout) Register(ctx context.Context, f *flag.FlagSet) { 29 cmd.ClusterFlag, ctx = flags.NewClusterFlag(ctx) 30 cmd.ClusterFlag.Register(ctx, f) 31 32 cmd.ResourcePoolFlag, ctx = flags.NewResourcePoolFlag(ctx) 33 cmd.ResourcePoolFlag.Register(ctx, f) 34 35 cmd.HostSystemFlag, ctx = flags.NewHostSystemFlag(ctx) 36 cmd.HostSystemFlag.Register(ctx, f) 37 38 cmd.FolderFlag, ctx = flags.NewFolderFlag(ctx) 39 cmd.FolderFlag.Register(ctx, f) 40 } 41 42 func (cmd *checkout) Process(ctx context.Context) error { 43 if err := cmd.ClusterFlag.Process(ctx); err != nil { 44 return err 45 } 46 if err := cmd.ResourcePoolFlag.Process(ctx); err != nil { 47 return err 48 } 49 if err := cmd.HostSystemFlag.Process(ctx); err != nil { 50 return err 51 } 52 return cmd.FolderFlag.Process(ctx) 53 } 54 55 func (cmd *checkout) Usage() string { 56 return "PATH NAME" 57 } 58 59 func (cmd *checkout) Description() string { 60 return `Check out Content Library item PATH to vm NAME. 61 62 Note: this command requires vCenter 7.0 or higher. 63 64 Examples: 65 govc library.checkout -cluster my-cluster my-content/template-vm-item my-vm` 66 } 67 68 func (cmd *checkout) Run(ctx context.Context, f *flag.FlagSet) error { 69 path := f.Arg(0) 70 name := f.Arg(1) 71 72 folder, err := cmd.FolderOrDefault("vm") 73 if err != nil { 74 return err 75 } 76 host, err := cmd.HostSystemIfSpecified() 77 if err != nil { 78 return err 79 } 80 cluster, err := cmd.ClusterIfSpecified() 81 if err != nil { 82 return err 83 } 84 pool, err := cmd.ResourcePoolIfSpecified() 85 if err != nil { 86 return err 87 } 88 89 c, err := cmd.RestClient() 90 if err != nil { 91 return err 92 } 93 94 l, err := flags.ContentLibraryItem(ctx, c, path) 95 if err != nil { 96 return err 97 } 98 99 spec := vcenter.CheckOut{ 100 Name: name, 101 Placement: &vcenter.Placement{ 102 Folder: folder.Reference().Value, 103 }, 104 } 105 if pool != nil { 106 spec.Placement.ResourcePool = pool.Reference().Value 107 } 108 if host != nil { 109 spec.Placement.Host = host.Reference().Value 110 } 111 if cluster != nil { 112 spec.Placement.Cluster = cluster.Reference().Value 113 } 114 115 id, err := vcenter.NewManager(c).CheckOut(ctx, l.ID, &spec) 116 if err != nil { 117 return err 118 } 119 120 fmt.Println(id) 121 122 return nil 123 }