// 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_disabled" or ""(default; will enable the update engine to run).
  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
}
