commands/cluster/agent/bootstrap/kubectl.go (60 lines of code) (raw):

package bootstrap import ( "bytes" "fmt" ) var _ KubectlWrapper = (*localKubectlWrapper)(nil) func NewLocalKubectlWrapper(cmd Cmd, binary string, gitlabAgentNamespace string, gitlabAgentTokenSecretName string) KubectlWrapper { return &localKubectlWrapper{ cmd: cmd, binary: binary, gitlabAgentNamespace: gitlabAgentNamespace, gitlabAgentTokenSecretName: gitlabAgentTokenSecretName, } } type localKubectlWrapper struct { cmd Cmd binary string gitlabAgentNamespace string gitlabAgentTokenSecretName string } func (k *localKubectlWrapper) createAgentTokenSecret(tokenID int, token string) error { namespaceFlag := fmt.Sprintf("-n=%s", k.gitlabAgentNamespace) output, err := k.cmd.RunWithOutput(k.binary, "create", "namespace", k.gitlabAgentNamespace) if err != nil { if !bytes.Contains(output, []byte("already exists")) { return err } // let's not even bother to first check if the secret exists or not - just attempt to delete it ... output, err = k.cmd.RunWithOutput(k.binary, "delete", "secret", k.gitlabAgentTokenSecretName, namespaceFlag) if err != nil { if !bytes.Contains(output, []byte("not found")) { return err } } } // create the secret (again) with the next token _, err = k.cmd.RunWithOutput( k.binary, "create", "secret", "generic", k.gitlabAgentTokenSecretName, namespaceFlag, "--type=Opaque", fmt.Sprintf("--from-literal=token=%s", token), ) if err != nil { return err } // annotate the secret with some metadata _, err = k.cmd.RunWithOutput( k.binary, "annotate", "secrets", k.gitlabAgentTokenSecretName, namespaceFlag, fmt.Sprintf("gitlab.com/agent-token-id=%d", tokenID), ) if err != nil { return err } return nil }