How to use startGRPCPlugin method of plugin Package

Best Gauge code snippet using plugin.startGRPCPlugin

grpc_plugin.go

Source:grpc_plugin.go Github

copy

Full Screen

...15 "github.com/ovh/cds/sdk"16 "github.com/ovh/cds/sdk/grpcplugin"17 "github.com/ovh/cds/sdk/log"18)19type startGRPCPluginOptions struct {20 envs []string21}22type pluginClientSocket struct {23 Socket string24 StdPipe io.Reader25 Client interface{}26}27func enablePluginLogger(ctx context.Context, done chan struct{}, c *pluginClientSocket, w workerruntime.Runtime) {28 reader := bufio.NewReader(c.StdPipe)29 var accumulator string30 var shouldExit bool31 defer func() {32 if accumulator != "" {33 w.SendLog(ctx, workerruntime.LevelInfo, accumulator)34 }35 close(done)36 }()37 for {38 if ctx.Err() != nil {39 shouldExit = true40 }41 if reader.Buffered() == 0 && shouldExit {42 return43 }44 b, err := reader.ReadByte()45 if err == io.EOF {46 if shouldExit {47 return48 }49 continue50 }51 content := string(b)52 switch content {53 case "":54 continue55 case "\n":56 accumulator += content57 w.SendLog(ctx, workerruntime.LevelInfo, accumulator)58 accumulator = ""59 continue60 default:61 accumulator += content62 continue63 }64 }65}66func RunGRPCPlugin(ctx context.Context, actionName string, params []sdk.Parameter, action sdk.Action, w workerruntime.Runtime, chanRes chan sdk.Result, done chan struct{}) {67 //For the moment we consider that plugin name = action name68 pluginName := actionName69 var envs []string70 //set up environment variables from job parameters71 for _, p := range params {72 // avoid put private key in environment var as it's a binary value73 if (p.Type == sdk.KeyPGPParameter || p.Type == sdk.KeySSHParameter) && strings.HasSuffix(p.Name, ".priv") {74 continue75 }76 if p.Type == sdk.KeyParameter && !strings.HasSuffix(p.Name, ".pub") {77 continue78 }79 envs = append(envs, sdk.EnvVartoENV(p)...)80 envName := strings.Replace(p.Name, ".", "_", -1)81 envName = strings.ToUpper(envName)82 envs = append(envs, fmt.Sprintf("%s=%s", envName, p.Value))83 }84 pluginSocket, err := startGRPCPlugin(ctx, pluginName, w, nil, startGRPCPluginOptions{85 envs: envs,86 })87 if err != nil {88 close(done)89 pluginFail(ctx, w, chanRes, fmt.Sprintf("Unable to start grpc plugin... Aborting (%v)", err))90 return91 }92 c, err := actionplugin.Client(ctx, pluginSocket.Socket)93 if err != nil {94 close(done)95 pluginFail(ctx, w, chanRes, fmt.Sprintf("Unable to call grpc plugin... Aborting (%v)", err))96 return97 }98 qPort := actionplugin.WorkerHTTPPortQuery{Port: w.HTTPPort()}99 if _, err := c.WorkerHTTPPort(ctx, &qPort); err != nil {100 close(done)101 pluginFail(ctx, w, chanRes, fmt.Sprintf("Unable to set worker http port for grpc plugin... Aborting (%v)", err))102 return103 }104 pluginSocket.Client = c105 pluginClient := pluginSocket.Client106 actionPluginClient, ok := pluginClient.(actionplugin.ActionPluginClient)107 if !ok {108 close(done)109 pluginFail(ctx, w, chanRes, "Unable to retrieve plugin client... Aborting")110 return111 }112 logCtx, stopLogs := context.WithCancel(ctx)113 go enablePluginLogger(logCtx, done, pluginSocket, w)114 manifest, err := actionPluginClient.Manifest(ctx, &empty.Empty{})115 if err != nil {116 pluginFail(ctx, w, chanRes, fmt.Sprintf("Unable to retrieve plugin manifest... Aborting (%v)", err))117 actionPluginClientStop(ctx, actionPluginClient, stopLogs)118 return119 }120 log.Debug("plugin successfully initialized: %#v", manifest)121 w.SendLog(ctx, workerruntime.LevelInfo, fmt.Sprintf("# Plugin %s version %s is ready", manifest.Name, manifest.Version))122 jobID, err := workerruntime.JobID(ctx)123 if err != nil {124 pluginFail(ctx, w, chanRes, fmt.Sprintf("Unable to retrieve job ID... Aborting (%v)", err))125 actionPluginClientStop(ctx, actionPluginClient, stopLogs)126 return127 }128 query := actionplugin.ActionQuery{129 Options: sdk.ParametersMapMerge(sdk.ParametersToMap(params), sdk.ParametersToMap(action.Parameters), sdk.MapMergeOptions.ExcludeGitParams),130 JobID: jobID,131 }132 result, err := actionPluginClient.Run(ctx, &query)133 pluginDetails := fmt.Sprintf("plugin %s v%s", manifest.Name, manifest.Version)134 if err != nil {135 t := fmt.Sprintf("failure %s err: %v", pluginDetails, err)136 actionPluginClientStop(ctx, actionPluginClient, stopLogs)137 log.Error(ctx, t)138 pluginFail(ctx, w, chanRes, fmt.Sprintf("Error running action: %v", err))139 return140 }141 actionPluginClientStop(ctx, actionPluginClient, stopLogs)142 chanRes <- sdk.Result{143 Status: result.GetStatus(),144 Reason: result.GetDetails(),145 }146}147func startGRPCPlugin(ctx context.Context, pluginName string, w workerruntime.Runtime, p *sdk.GRPCPluginBinary, opts startGRPCPluginOptions) (*pluginClientSocket, error) {148 currentOS := strings.ToLower(sdk.GOOS)149 currentARCH := strings.ToLower(sdk.GOARCH)150 binary := p151 if binary == nil {152 var errBi error153 binary, errBi = w.Client().PluginGetBinaryInfos(pluginName, currentOS, currentARCH)154 if errBi != nil {155 return nil, sdk.WrapError(errBi, "plugin:%s Unable to get plugin binary infos... Aborting", pluginName)156 } else if binary == nil {157 return nil, fmt.Errorf("plugin:%s Unable to get plugin binary infos - binary is nil... Aborting", pluginName)158 }159 }160 // then try to download the plugin161 pluginBinary := binary.Name...

Full Screen

Full Screen

builtin_deploy_application.go

Source:builtin_deploy_application.go Github

copy

Full Screen

...40 }41 if binary == nil {42 return sdk.Result{}, fmt.Errorf("Unable to retrieve the plugin for deployment integration %s... Aborting", pf.Model.Name)43 }44 pluginSocket, err := startGRPCPlugin(ctx, binary.PluginName, wk, binary, startGRPCPluginOptions{})45 if err != nil {46 return sdk.Result{}, fmt.Errorf("unable to start GRPCPlugin: %v", err)47 }48 c, err := integrationplugin.Client(context.Background(), pluginSocket.Socket)49 if err != nil {50 return sdk.Result{}, fmt.Errorf("unable to call GRPCPlugin: %v", err)51 }52 pluginSocket.Client = c53 if _, err := c.Manifest(context.Background(), new(empty.Empty)); err != nil {54 return sdk.Result{}, fmt.Errorf("unable to call GRPCPlugin: %v", err)55 }56 pluginClient := pluginSocket.Client57 integrationPluginClient, ok := pluginClient.(integrationplugin.IntegrationPluginClient)58 if !ok {...

Full Screen

Full Screen

startGRPCPlugin

Using AI Code Generation

copy

Full Screen

1func main() {2 plugin.Serve(&plugin.ServeConfig{3 Plugins: map[string]plugin.Plugin{4 "plugin": &Plugin{},5 },6 })7}8func main() {9 client, err := plugin.Dial("tcp", "

Full Screen

Full Screen

startGRPCPlugin

Using AI Code Generation

copy

Full Screen

1func main() {2 plugin.StartGRPCPlugin(new(HelloWorldPlugin))3}4func main() {5 plugin.StartGRPCPlugin(new(HelloWorldPlugin))6}7func main() {8 plugin.StartGRPCPlugin(new(HelloWorldPlugin))9}10func main() {11 plugin.StartGRPCPlugin(new(HelloWorldPlugin))12}13func main() {14 plugin.StartGRPCPlugin(new(HelloWorldPlugin))15}16func main() {17 plugin.StartGRPCPlugin(new(HelloWorldPlugin))18}19func main() {20 plugin.StartGRPCPlugin(new(HelloWorldPlugin))21}22func main() {23 plugin.StartGRPCPlugin(new(HelloWorldPlugin))24}25func main() {26 plugin.StartGRPCPlugin(new(HelloWorldPlugin))27}28func main() {29 plugin.StartGRPCPlugin(new(HelloWorldPlugin))30}31func main() {32 plugin.StartGRPCPlugin(new(HelloWorldPlugin))33}34func main() {35 plugin.StartGRPCPlugin(new(HelloWorldPlugin))36}37func main() {38 plugin.StartGRPCPlugin(new(HelloWorldPlugin))39}40func main() {41 plugin.StartGRPCPlugin(new(HelloWorldPlugin))42}

Full Screen

Full Screen

startGRPCPlugin

Using AI Code Generation

copy

Full Screen

1func main() {2 go func() {3 if err := plugin.StartGRPCPlugin(); err != nil {4 log.Fatal(err)5 }6 }()7 time.Sleep(1 * time.Second)8 client, err := plugin.NewGRPCPluginClient("tcp", "

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful