MCPcopy Create free account
hub / github.com/buildkite/agent-stack-k8s / runController

Function runController

cmd/controller/controller.go:121–172  ·  view source on GitHub ↗
(cfg *config.Config)

Source from the content-addressed store, hash-verified

119}
120
121func runController(cfg *config.Config) error {
122 ctx := signals.SetupSignalHandler()
123
124 level := slog.LevelInfo
125 if cfg.LogLevel != "" {
126 if err := level.UnmarshalText([]byte(cfg.LogLevel)); err != nil {
127 return fmt.Errorf("invalid log level %q: %w", cfg.LogLevel, err)
128 }
129 }
130
131 if cfg.Debug {
132 level = slog.LevelDebug
133 }
134
135 var handler slog.Handler
136 switch cfg.LogFormat {
137 case "json":
138 handler = slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: level})
139
140 case "logfmt", "":
141 handler = tint.NewHandler(os.Stdout, &tint.Options{
142 AddSource: true,
143 Level: level,
144 NoColor: cfg.NoColor || !isatty.IsTerminal(os.Stdout.Fd()),
145 })
146
147 default:
148 return fmt.Errorf("unknown log format: %s", cfg.LogFormat)
149 }
150
151 logger := slog.New(handler)
152 klog.SetLogger(logr.FromSlogHandler(handler))
153 logger.Debug("configuration loaded", "config", cfg)
154
155 clientConfig := restconfig.GetConfigOrDie()
156 clientConfig.QPS = float32(cfg.K8sClientRateLimiterQPS)
157 clientConfig.Burst = cfg.K8sClientRateLimiterBurst
158
159 // Default to Protobuf encoding for API responses, support fallback to JSON
160 clientConfig.AcceptContentTypes = "application/vnd.kubernetes.protobuf,application/json"
161 clientConfig.ContentType = "application/vnd.kubernetes.protobuf"
162
163 k8sClient, err := kubernetes.NewForConfig(clientConfig)
164 if err != nil {
165 logger.Error("failed to create clientset", "error", err)
166 return err
167 }
168
169 controller.Run(ctx, logger, k8sClient, cfg)
170
171 return nil
172}

Callers 1

RunFunction · 0.85

Calls 2

RunFunction · 0.92
ErrorMethod · 0.80

Tested by

no test coverage detected