github.com/vmware/govmomi@v0.43.0/govc/library/subscriber/create.go (about) 1 /* 2 Copyright (c) 2020 VMware, Inc. All Rights Reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package subscriber 18 19 import ( 20 "context" 21 "flag" 22 "fmt" 23 24 "github.com/vmware/govmomi/govc/cli" 25 "github.com/vmware/govmomi/govc/flags" 26 "github.com/vmware/govmomi/vapi/library" 27 ) 28 29 type create struct { 30 *flags.ClusterFlag 31 *flags.ResourcePoolFlag 32 *flags.HostSystemFlag 33 *flags.NetworkFlag 34 *flags.FolderFlag 35 } 36 37 func init() { 38 cli.Register("library.subscriber.create", &create{}) 39 } 40 41 func (cmd *create) Register(ctx context.Context, f *flag.FlagSet) { 42 cmd.ClusterFlag, ctx = flags.NewClusterFlag(ctx) 43 cmd.ClusterFlag.Register(ctx, f) 44 45 cmd.ResourcePoolFlag, ctx = flags.NewResourcePoolFlag(ctx) 46 cmd.ResourcePoolFlag.Register(ctx, f) 47 48 cmd.HostSystemFlag, ctx = flags.NewHostSystemFlag(ctx) 49 cmd.HostSystemFlag.Register(ctx, f) 50 51 cmd.NetworkFlag, ctx = flags.NewNetworkFlag(ctx) 52 cmd.NetworkFlag.Register(ctx, f) 53 54 cmd.FolderFlag, ctx = flags.NewFolderFlag(ctx) 55 cmd.FolderFlag.Register(ctx, f) 56 } 57 58 func (cmd *create) Process(ctx context.Context) error { 59 if err := cmd.ClusterFlag.Process(ctx); err != nil { 60 return err 61 } 62 if err := cmd.ResourcePoolFlag.Process(ctx); err != nil { 63 return err 64 } 65 if err := cmd.HostSystemFlag.Process(ctx); err != nil { 66 return err 67 } 68 if err := cmd.NetworkFlag.Process(ctx); err != nil { 69 return err 70 } 71 return cmd.FolderFlag.Process(ctx) 72 } 73 74 func (cmd *create) Usage() string { 75 return "PUBLISHED-LIBRARY SUBSCRIPTION-LIBRARY" 76 } 77 78 func (cmd *create) Description() string { 79 return `Create library subscriber. 80 81 Examples: 82 govc library.subscriber.create -cluster my-cluster published-library subscription-library` 83 } 84 85 func (cmd *create) Run(ctx context.Context, f *flag.FlagSet) error { 86 c, err := cmd.RestClient() 87 if err != nil { 88 return err 89 } 90 91 lib, err := flags.ContentLibrary(ctx, c, f.Arg(0)) 92 if err != nil { 93 return err 94 } 95 m := library.NewManager(c) 96 97 sub, err := flags.ContentLibrary(ctx, c, f.Arg(1)) 98 if err != nil { 99 return err 100 } 101 102 cluster, err := cmd.ClusterIfSpecified() 103 if err != nil { 104 return err 105 } 106 pool, err := cmd.ResourcePoolIfSpecified() 107 if err != nil { 108 return err 109 } 110 host, err := cmd.HostSystemIfSpecified() 111 if err != nil { 112 return err 113 } 114 folder, err := cmd.Folder() 115 if err != nil { 116 return err 117 } 118 network, err := cmd.Network() 119 if err != nil { 120 return err 121 } 122 123 spec := library.SubscriberLibrary{ 124 Target: "USE_EXISTING", 125 Location: "LOCAL", 126 LibraryID: sub.ID, 127 Placement: &library.Placement{ 128 Folder: folder.Reference().Value, 129 Network: network.Reference().Value, 130 }, 131 } 132 133 if pool != nil { 134 spec.Placement.ResourcePool = pool.Reference().Value 135 } 136 if host != nil { 137 spec.Placement.Host = host.Reference().Value 138 } 139 if cluster != nil { 140 spec.Placement.Cluster = cluster.Reference().Value 141 } 142 143 id, err := m.CreateSubscriber(ctx, lib, spec) 144 if err != nil { 145 return err 146 } 147 148 fmt.Println(id) 149 return nil 150 }