github.com/vmware/govmomi@v0.51.0/cli/namespace/service/create.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 service 6 7 import ( 8 "context" 9 "encoding/base64" 10 "flag" 11 "fmt" 12 "os" 13 14 "github.com/vmware/govmomi/cli" 15 "github.com/vmware/govmomi/cli/flags" 16 "github.com/vmware/govmomi/vapi/namespace" 17 ) 18 19 type create struct { 20 *flags.ClientFlag 21 *ServiceVersionFlag 22 } 23 24 func init() { 25 cli.Register("namespace.service.create", &create{}) 26 } 27 28 func (cmd *create) Register(ctx context.Context, f *flag.FlagSet) { 29 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 30 cmd.ClientFlag.Register(ctx, f) 31 32 cmd.ServiceVersionFlag = &ServiceVersionFlag{} 33 cmd.ServiceVersionFlag.Register(ctx, f) 34 } 35 36 func (cmd *create) Description() string { 37 return `Registers a vSphere Supervisor Service version on vCenter for a new service. 38 A service version can be registered once on vCenter and then be installed on multiple vSphere Supervisors managed by this vCenter. 39 A vSphere Supervisor Service contains a list of service versions; this call will create a service and its first version. 40 41 Examples: 42 govc namespace.service.create manifest.yaml` 43 } 44 45 func (cmd *create) Usage() string { 46 return "MANIFEST" 47 } 48 49 func (cmd *create) Process(ctx context.Context) error { 50 if err := cmd.ServiceVersionFlag.Process(ctx); err != nil { 51 return err 52 } 53 return cmd.ClientFlag.Process(ctx) 54 } 55 56 func (cmd *create) Run(ctx context.Context, f *flag.FlagSet) error { 57 if f.NArg() != 1 { 58 return flag.ErrHelp 59 } 60 61 manifestFile := f.Arg(0) 62 63 manifest, err := os.ReadFile(manifestFile) 64 if err != nil { 65 return fmt.Errorf("failed to read manifest file: %s", err) 66 } 67 content := base64.StdEncoding.EncodeToString(manifest) 68 69 service := namespace.SupervisorService{} 70 if cmd.ServiceVersionFlag.SpecType == "carvel" { 71 service.CarvelService = &namespace.SupervisorServicesCarvelSpec{ 72 VersionSpec: namespace.CarvelVersionCreateSpec{ 73 Content: content, 74 }, 75 } 76 } else { 77 service.VsphereService = &namespace.SupervisorServicesVSphereSpec{ 78 VersionSpec: namespace.SupervisorServicesVSphereVersionCreateSpec{ 79 Content: content, 80 AcceptEula: cmd.ServiceVersionFlag.AcceptEULA, 81 TrustedProvider: cmd.ServiceVersionFlag.TrustedProvider, 82 }, 83 } 84 } 85 86 c, err := cmd.RestClient() 87 if err != nil { 88 return err 89 } 90 91 m := namespace.NewManager(c) 92 return m.CreateSupervisorService(ctx, &service) 93 }