in aks-node-controller/app.go [87:122]
func (a *App) Provision(ctx context.Context, flags ProvisionFlags) error {
inputJSON, err := os.ReadFile(flags.ProvisionConfig)
if err != nil {
return fmt.Errorf("open provision file %s: %w", flags.ProvisionConfig, err)
}
config, err := nodeconfigutils.UnmarshalConfigurationV1(inputJSON)
if err != nil {
return fmt.Errorf("unmarshal provision config: %w", err)
}
// TODO: "v0" were a mistake. We are not going to have different logic maintaining both v0 and v1
// Disallow "v0" after some time (allow some time to update consumers)
if config.Version != "v0" && config.Version != "v1" {
return fmt.Errorf("unsupported version: %s", config.Version)
}
if config.Version == "v0" {
slog.Error("v0 version is deprecated, please use v1 instead")
}
cmd, err := parser.BuildCSECmd(ctx, config)
if err != nil {
return fmt.Errorf("build CSE command: %w", err)
}
var stdoutBuf, stderrBuf bytes.Buffer
cmd.Stdout = io.MultiWriter(os.Stdout, &stdoutBuf)
cmd.Stderr = io.MultiWriter(os.Stderr, &stderrBuf)
err = a.cmdRunner(cmd)
exitCode := -1
if cmd.ProcessState != nil {
exitCode = cmd.ProcessState.ExitCode()
}
// Is it ok to log a single line? Is it too much?
slog.Info("CSE finished", "exitCode", exitCode, "stdout", stdoutBuf.String(), "stderr", stderrBuf.String(), "error", err)
return err
}