in commands/cluster/agent/bootstrap/agent_bootstrap.go [381:476]
func (c *bootstrapCmd) run() error {
// 1. Register the agent
fmt.Fprintf(c.stderr, "Registering Agent ... ")
agent, err := c.registerAgent()
if err != nil {
fmt.Fprintf(c.stderr, "[FAILED]\n")
return err
}
fmt.Fprintf(c.stderr, "[OK]\n")
// 2. Configure the Agent
fmt.Fprintf(c.stderr, "Configuring Agent ... ")
err = c.configureAgent(agent)
if err != nil {
fmt.Fprintf(c.stderr, "[FAILED]\n")
return err
}
fmt.Fprintf(c.stderr, "[OK]\n")
// 3. Configure Environment for Agent
fmt.Fprintf(c.stderr, "Configuring Environment with Dashboard for Agent ... ")
if c.agentEnvironmentCfg != nil {
err = c.configureEnvironment(agent, c.agentEnvironmentCfg)
if err != nil {
fmt.Fprintf(c.stderr, "[FAILED]\n")
return err
}
fmt.Fprintf(c.stderr, "[OK]\n")
} else {
fmt.Fprintf(c.stderr, "[SKIPPED]\n")
}
// 4. Configure Environment for FluxCD
fmt.Fprintf(c.stderr, "Configuring Environment with Dashboard for FluxCD ... ")
if c.fluxEnvironmentCfg != nil {
err = c.configureEnvironment(agent, c.fluxEnvironmentCfg)
if err != nil {
fmt.Fprintf(c.stderr, "[FAILED]\n")
return err
}
fmt.Fprintf(c.stderr, "[OK]\n")
} else {
fmt.Fprintf(c.stderr, "[SKIPPED]\n")
}
// 5. Create a token for the registered agent
fmt.Fprintf(c.stderr, "Creating Agent Token ... ")
agentToken, err := c.createAgentToken(agent)
if err != nil {
fmt.Fprintf(c.stderr, "[FAILED]\n")
return err
}
fmt.Fprintf(c.stderr, "[OK]\n")
// 6. Push token in Kubernetes secret to cluster
fmt.Fprintf(c.stderr, "Creating Kubernetes Secret with Agent Token ... ")
err = c.createAgentTokenKubernetesSecret(agentToken)
if err != nil {
fmt.Fprintf(c.stderr, "[FAILED]\n")
return err
}
fmt.Fprintf(c.stderr, "[OK]\n")
// 7. Create Flux Helm Resources
fmt.Fprintf(c.stderr, "Creating Flux Helm Resources ... ")
helmResourceFiles, err := c.createFluxHelmResources()
if err != nil {
fmt.Fprintf(c.stderr, "[FAILED]\n")
return err
}
fmt.Fprintf(c.stderr, "[OK]\n")
// 8. Sync Flux Helm Resources
fmt.Fprintf(c.stderr, "Syncing Flux Helm Resources ... ")
err = c.syncFluxHelmResourceFiles(helmResourceFiles)
if err != nil {
fmt.Fprintf(c.stderr, "[FAILED]\n")
return err
}
fmt.Fprintf(c.stderr, "[OK]\n")
// 9. Flux Reconcile
fmt.Fprintf(c.stderr, "Reconciling Flux Helm Resources ... ")
if !c.noReconcile {
fmt.Fprintln(c.stderr, "Output from flux command:")
err = c.fluxReconcile()
if err != nil {
return fmt.Errorf("%w:\n%w", reconcileErr, err)
}
} else {
fmt.Fprintf(c.stderr, "[SKIPPED]\n")
}
fmt.Fprintln(c.stderr, "Successfully bootstrapped the GitLab Agent")
return nil
}