cmd/ops_agent_uap_plugin/plugin_comm.proto (103 lines of code) (raw):

// 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 // https://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. syntax = "proto3"; package plugin_comm; import "google/protobuf/any.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/struct.proto"; option go_package = "google_guest_agent/plugin"; // GuestAgentPlugin service allows Guest Agent to communicate with plugins // and manage their lifecycle. Each Guest Agent plugin must implement this // gRPC interface. service GuestAgentPlugin { // Start command - request to start the plugin. rpc Start(StartRequest) returns (StartResponse) {} // Stop command - request to stop and exit the plugin process. rpc Stop(StopRequest) returns (StopResponse) {} // Status command - request to get current plugin status. rpc GetStatus(GetStatusRequest) returns (Status) {} // Apply command - request to apply config or some work received for plugin. rpc Apply(ApplyRequest) returns (ApplyResponse) {} } // Request sent to plugins to start. message StartRequest { // Config is Guest Agent managed config that is passed to the every plugin on // startup. message Config { // Path to the state directory where plugins are allowed to store any state // that they want to persist across revisions. string state_directory_path = 1; } // Any config like the state directory path can be passed here on startup. Config config = 1; // Data is any additional Guest Agent agnostic payload handed off to the // plugin on every start request. Payload is optional and defined by the // service and plugin itself. oneof service_config { // String configuration. Any string payload that the plugin understands. string string_config = 2; // Struct configuration. Usually used for reading file based configuration // like JSON or yaml. google.protobuf.Struct struct_config = 3; } } // Guest Agent does not expect any response from plugins for start request, it // will poll for status with health check requests later. In case of any error // plugins should throw RPC error. // https://pkg.go.dev/google.golang.org/grpc/status#ErrorProto message StartResponse {} // Guest Agent agnostic request from services forwarded to the plugins. message ApplyRequest { // Apply data is Guest Agent agnostic, it's a data payload handed off to the // plugin, the actual contract is established between the service and the // plugin itself. google.protobuf.Any data = 1; } // Response from plugins for apply request. message ApplyResponse {} // Guest Agent sends requests to get current status. message GetStatusRequest { // This data payload is optionally supplied to the plugin. It's empty for // regular periodic health checks and contains context on what request is for // (like task ID) in specialized requests. // General periodic health check is the request that agent makes to verify // plugins are healthy and running. Plugins can report any ongoing // status which will be sent back to the service. // Specialized status request is something that plugin owners can // define on each plugin similar to apply request. This can be used to // request specific status. For e.g. if Apply() request was made to make run // some task, this type can be used to check status for it. optional string data = 2; } // Response from plugins for status request. message Status { // Non-zero code would mean plugin is unhealthy for health check. // For specialized request contract can be defined between service and plugin // itself, Guest Agent will make no interpretation and simply report as is. int32 code = 1; // Human readable summary on current status describing the status code. // Can include one or more error logs or details describing the issue. repeated string results = 2; } // Request sent to plugins to stop and exit the process. // Plugins processes are killed immediately after this request returns. message StopRequest { // Cleanup is set to true to notify plugins to remove any state stored on // disk. Stop request can be sent as part of plugin restart which does not // require cleanup whereas plugin remove does require. bool cleanup = 1; // Guest Agent will wait for this deadline, if the plugin gracefully // exits, guest agent will do nothing. If the plugin process is still // running, then it is killed. google.protobuf.Duration deadline = 2; } // Response from plugins for stop request. message StopResponse {}