blob: 094b8192350f738c73af44f71f03efc0d516bd64 [file] [log] [blame]
// 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.
/*
This file implements the client for the COS(Container-Optimized OS) Image update control plane.
It is reponsible for collecting and reporting the current instance status.
When run with the "monitor" command, it will perform initialization and then
periodically fetch update config from the API backend by sending the instance
status to the API.
When run with the "show_config" command, the current config applied to the system
is written to stdout.
Example Output:
update_strategy: ""
metrics_enabled: true
health_monitor_config: <
enforced: false
logging_enabled: false
monitoring_enabled: false
>
*/
package main
import (
"flag"
"fmt"
"policy-manager/cmd/monitor"
"policy-manager/cmd/showconfig"
"github.com/golang/glog"
)
// Command line flags for monitor mode.
var monitorModeFlags *flag.FlagSet
// Command line flags for show_config mode.
var showConfigModeFlags *flag.FlagSet
const (
// Command names.
monitorModeCommand = "monitor"
showConfigCommand = "show_config"
)
func init() {
// Flags for monitor mode.
monitorModeFlags = flag.NewFlagSet(monitorModeCommand, flag.ExitOnError)
monitorModeFlags.Usage = func() {
fmt.Println("Initialize and monitor changes to instance config periodically without terminating")
}
// Flags for show_config.
showConfigModeFlags = flag.NewFlagSet(showConfigCommand, flag.ExitOnError)
showConfigModeFlags.Usage = func() {
fmt.Println("Prints the current device policy for this instance to stdout.")
}
// Log to stderr only by default
flag.Set("logtostderr", "true")
}
func main() {
flag.Usage = func() {
fmt.Println("Usage: device_policy_manager [logging flags] command [args...]")
fmt.Println("")
fmt.Println("Supported logging flags:")
flag.PrintDefaults()
fmt.Println("")
fmt.Printf("Supported commands:\n%s,%s\n",
monitorModeCommand, showConfigCommand)
}
// Parse the glog flags.
flag.Parse()
// If no flags are left after the glog flags are processed, print usage
// message and exit.
if flag.NArg() == 0 {
flag.Usage()
return
}
// Get the command and the arguments for the command.
command := flag.Arg(0)
switch command {
case monitorModeCommand:
monitor.InitDevicePolicy()
monitor.HandleMonitorCmd()
case showConfigCommand:
showconfig.HandleShowConfigCmd()
default:
glog.Errorf("Unrecognized command: %s\n", command)
flag.Usage()
}
}