// Copyright 2021 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.

// Protobuf definitions for the instance configuration sent by an update manager
// to COS Policy Manager. It will translate the instance configuration to device
// policy that can help us to determine the state of other services.
syntax = "proto2";

package protos;
option go_package = "policy_manager/protos";

// HealthMonitorConfig contains all the necessary fields for policy manager to store any
// information related to the configuration of HealthMonitor logging/monitoring.
message  HealthMonitorConfig {
  reserved 4;
  reserved "logging_fluent_bit_enabled";

  // enforced is set to true if policy manager should enforce the HealthMonitoring logging and
  // monitoring to the instance.
  optional bool enforced = 1;

  // logging_enabled is set to true if the instance should report logs
  // to google cloud logging backend.
  optional bool logging_enabled = 2;

  // monitoring_enabled is set to true if the instance should report
  // monitoring statistics to google cloud monitoring backend.
  optional bool monitoring_enabled = 3;
}

// InstanceConfig contains the details necessary for configuring the instance.
// This proto is used in following places:
//  (1) In user specified GCE Metadata - User can specify JSON formatted
//      InstanceConfig in GCE metadata which is fetched and parsed by COS Policy
//      Manager.
//  (2) From Policy Manager to API Server - Policy Manager sends this InstanceConfig
//      as 'user_config' argument to the GetInstanceConfig() call.
//  (3) From API Server to COS Policy Manager client - in response to GetInstanceConfig()
//      call, the server sends the actual InstanceConfig to be applied on the
//      COS instance.
message InstanceConfig {
  // update_strategy specified configuration about update engine selected. The values can be
  // "update_enabled" or ""(default; will disable the update engine).
  optional string update_strategy = 1;

  // metrics_enabled specified configuration about metrics component used in crash reporter
  // service.
  optional bool metrics_enabled = 2;

  // health_monitor_config specifies configuration about health logging/monitoring.
  optional HealthMonitorConfig health_monitor_config = 3;

  // Next number: 4
}
