func (cmd *register) Run(f *flag.FlagSet) error { ctx := context.TODO() c, err := cmd.Client() if err != nil { return err } m, err := object.GetExtensionManager(c) if err != nil { return err } b, err := ioutil.ReadAll(os.Stdin) if err != nil { return err } var e types.Extension e.Description = new(types.Description) if err = json.Unmarshal(b, &e); err != nil { return err } e.LastHeartbeatTime = time.Now().UTC() if cmd.update { return m.Update(ctx, e) } return m.Register(ctx, e) }
func (cmd *register) Run(ctx context.Context, f *flag.FlagSet) error { c, err := cmd.Client() if err != nil { return err } m, err := object.GetExtensionManager(c) if err != nil { return err } var e types.Extension e.Description = new(types.Description) if err = json.NewDecoder(os.Stdin).Decode(&e); err != nil { return err } e.LastHeartbeatTime = time.Now().UTC() if cmd.update { return m.Update(ctx, e) } return m.Register(ctx, e) }
func (d *Dispatcher) RegisterExtension(conf *config.VirtualContainerHostConfigSpec, extension types.Extension) error { defer trace.End(trace.Begin(conf.ExtensionName)) log.Infoln("Registering VCH as a vSphere extension") // vSphere confusingly calls the 'name' of the extension a 'key' // This variable is named IdKey as to not confuse it with its private key if conf.ExtensionCert == "" { return errors.Errorf("Extension certificate does not exist") } extensionManager := object.NewExtensionManager(d.session.Vim25()) extension.LastHeartbeatTime = time.Now().UTC() if err := extensionManager.Register(d.ctx, extension); err != nil { log.Errorf("Could not register the vSphere extension due to err: %s", err) return err } if err := extensionManager.SetCertificate(d.ctx, conf.ExtensionName, conf.ExtensionCert); err != nil { log.Errorf("Could not set the certificate on the vSphere extension due to error: %s", err) return err } return nil }
// Register installs an extension to the target func (p *Pluginator) Register() error { defer trace.End(trace.Begin("")) var err error if !p.connected { return errors.New("not connected") } desc := types.Description{ Label: p.info.Name, Summary: p.info.Summary, } e := types.Extension{ Key: p.info.Key, Version: p.info.Version, Company: p.info.Company, Description: &desc, } eci := types.ExtensionClientInfo{ Version: p.info.Version, Company: p.info.Company, Description: &desc, Type: p.info.Type, Url: p.info.URL, } e.Client = append(e.Client, eci) d := types.KeyValue{ Key: "name", Value: p.info.Name, } eri := types.ExtensionResourceInfo{ Locale: "en_US", Module: "name", } eri.Data = append(eri.Data, d) e.ResourceList = append(e.ResourceList, eri) // HTTPS requires extension server info if strings.HasPrefix(strings.ToLower(p.info.URL), "https://") { esi := types.ExtensionServerInfo{ Url: p.info.URL, Description: &desc, Company: p.info.Company, Type: "HTTPS", AdminEmail: []string{"*****@*****.**"}, ServerThumbprint: p.info.ServerThumbprint, } e.Server = append(e.Server, esi) } e.ShownInSolutionManager = &p.info.ShowInSolutionManager e.LastHeartbeatTime = time.Now().UTC() err = p.ExtensionManager.Register(p.Context, e) if err != nil { return err } return nil }