| // Copyright 2024 Google LLC |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package main |
| |
| import ( |
| "context" |
| |
| "github.com/GoogleCloudPlatform/galog" |
| "google.golang.org/grpc" |
| |
| pb "github.com/GoogleCloudPlatform/google-guest-agent/pkg/proto/plugin_comm" |
| ) |
| |
| // PluginServer implements the plugin RPC server interface. |
| type PluginServer struct { |
| pb.UnimplementedGuestAgentPluginServer |
| server *grpc.Server |
| } |
| |
| // Apply applies the config sent or performs the work defined in the message. |
| // ApplyRequest is opaque to the agent and is expected to be well known contract |
| // between Plugin and the server itself. For e.g. service might want to update |
| // plugin config to enable/disable feature here plugins can react to such requests. |
| func (ps *PluginServer) Apply(ctx context.Context, msg *pb.ApplyRequest) (*pb.ApplyResponse, error) { |
| galog.Infof("Received apply request: %+v", msg) |
| return &pb.ApplyResponse{}, nil |
| } |
| |
| // Start starts the plugin and initiates the plugin functionality. |
| // Until plugin receives Start request plugin is expected to be not functioning |
| // and just listening on the address handed off waiting for the request. |
| func (ps *PluginServer) Start(ctx context.Context, msg *pb.StartRequest) (*pb.StartResponse, error) { |
| galog.Infof("Received start request: %+v", msg) |
| return &pb.StartResponse{}, nil |
| } |
| |
| // Stop is the stop hook and implements any cleanup if required. |
| // Stop maybe called if plugin revision is being changed. |
| // For e.g. if plugins want to stop some task it was performing or remove some |
| // state before exiting it can be done on this request. |
| func (ps *PluginServer) Stop(ctx context.Context, msg *pb.StopRequest) (*pb.StopResponse, error) { |
| galog.Infof("Received stop request: %+v", msg) |
| return &pb.StopResponse{}, nil |
| } |
| |
| // GetStatus is the health check agent would perform to make sure plugin process |
| // is alive. If request fails process is considered dead and relaunched. Plugins |
| // can share any additional information to report it to the service. For e.g. if |
| // plugins detect some non-fatal errors causing it unable to offer some features |
| // it can reported in status which is sent back to the service by agent. |
| func (ps *PluginServer) GetStatus(ctx context.Context, msg *pb.GetStatusRequest) (*pb.Status, error) { |
| galog.Infof("Received get status request: %+v", msg) |
| return &pb.Status{Code: 0, Results: []string{"Plugin is running ok"}}, nil |
| } |