feat: updated docker auth secret creation
This commit is contained in:
parent
972646295a
commit
b2b43a98fd
21
main.go
21
main.go
|
|
@ -40,10 +40,16 @@ func main() {
|
||||||
|
|
||||||
var createDockerSecretCmd = &cobra.Command{
|
var createDockerSecretCmd = &cobra.Command{
|
||||||
Use: "create-docker-secret",
|
Use: "create-docker-secret",
|
||||||
Short: "Creates a Docker registry secret in Vault for GHCR authentication.",
|
Short: "Creates a Docker registry secret in Vault for Docker Hub.",
|
||||||
Run: runCreateDockerSecret,
|
Run: runCreateDockerSecret,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var createGhcrSecretCmd = &cobra.Command{
|
||||||
|
Use: "create-ghcr-secret",
|
||||||
|
Short: "Creates a Docker registry secret in Vault for GHCR.",
|
||||||
|
Run: runCreateGhcrSecret,
|
||||||
|
}
|
||||||
|
|
||||||
var createGithubSecretCmd = &cobra.Command{
|
var createGithubSecretCmd = &cobra.Command{
|
||||||
Use: "create-github-secret",
|
Use: "create-github-secret",
|
||||||
Short: "Creates or updates a GitHub authentication secret in Vault.",
|
Short: "Creates or updates a GitHub authentication secret in Vault.",
|
||||||
|
|
@ -60,6 +66,7 @@ func main() {
|
||||||
// Add commands to their parent commands
|
// Add commands to their parent commands
|
||||||
repoCmd.AddCommand(initCmd)
|
repoCmd.AddCommand(initCmd)
|
||||||
vaultCmd.AddCommand(createDockerSecretCmd)
|
vaultCmd.AddCommand(createDockerSecretCmd)
|
||||||
|
vaultCmd.AddCommand(createGhcrSecretCmd)
|
||||||
vaultCmd.AddCommand(createGithubSecretCmd)
|
vaultCmd.AddCommand(createGithubSecretCmd)
|
||||||
rootCmd.AddCommand(repoCmd)
|
rootCmd.AddCommand(repoCmd)
|
||||||
rootCmd.AddCommand(vaultCmd)
|
rootCmd.AddCommand(vaultCmd)
|
||||||
|
|
@ -96,11 +103,17 @@ func runInitRepo(cmd *cobra.Command, args []string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func runCreateDockerSecret(cmd *cobra.Command, args []string) {
|
func runCreateDockerSecret(cmd *cobra.Command, args []string) {
|
||||||
if err := createAndStoreSecrets(); err != nil {
|
if err := createDockerHubSecretWorkflow(); err != nil {
|
||||||
fmt.Printf("[ERROR] Failed to create Docker registry secret: %v\n", err)
|
fmt.Printf("[ERROR] Failed to create Docker Hub secret: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func runCreateGhcrSecret(cmd *cobra.Command, args []string) {
|
||||||
|
if err := createGhcrSecretWorkflow(); err != nil {
|
||||||
|
fmt.Printf("[ERROR] Failed to create GHCR secret: %v\n", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
fmt.Println("[SUCCESS] Docker registry secret created successfully in Vault!")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func runCreateGithubSecret(cmd *cobra.Command, args []string) {
|
func runCreateGithubSecret(cmd *cobra.Command, args []string) {
|
||||||
|
|
|
||||||
87
vault.go
87
vault.go
|
|
@ -20,11 +20,13 @@ const (
|
||||||
vaultRootTokenSecretName = "vault-unseal-keys"
|
vaultRootTokenSecretName = "vault-unseal-keys"
|
||||||
vaultRootTokenSecretKey = "vault-root"
|
vaultRootTokenSecretKey = "vault-root"
|
||||||
ghcrSecretPath = "secret/ghcr-auth"
|
ghcrSecretPath = "secret/ghcr-auth"
|
||||||
|
dockerHubSecretPath = "secret/dockerhub-auth"
|
||||||
githubAuthSecretPath = "secret/github-auth"
|
githubAuthSecretPath = "secret/github-auth"
|
||||||
orgManagementSecretPath = "secret/org-management-pat"
|
orgManagementSecretPath = "secret/org-management-pat"
|
||||||
dockerConfigJSONKey = ".dockerconfigjson"
|
dockerConfigJSONKey = ".dockerconfigjson"
|
||||||
orgManagementPATKey = "ORG_MANAGEMENT_PAT"
|
orgManagementPATKey = "ORG_MANAGEMENT_PAT"
|
||||||
ghcrRegistry = "ghcr.io"
|
ghcrRegistry = "ghcr.io"
|
||||||
|
dockerHubRegistry = "docker.io"
|
||||||
defaultVaultAddress = "https://127.0.0.1:8200"
|
defaultVaultAddress = "https://127.0.0.1:8200"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -161,33 +163,41 @@ func (vm *VaultManager) StoreSecret(path string, data map[string]string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Main Workflow Function ---
|
// --- Main Workflow Functions ---
|
||||||
func createAndStoreSecrets() error {
|
func createDockerHubSecretWorkflow() error {
|
||||||
// 1. Get User Input
|
|
||||||
username, registryToken, orgToken, err := getUserInput()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. Initialize Vault Manager
|
|
||||||
// This handles kubectl checks, pod discovery, and token retrieval.
|
|
||||||
vm, err := NewVaultManager()
|
vm, err := NewVaultManager()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to initialize Vault manager: %w", err)
|
return fmt.Errorf("failed to initialize Vault manager: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Create and Store Docker Registry Secret
|
return createDockerHubSecret(vm)
|
||||||
dockerConfigJSON, err := createDockerConfig(username, registryToken)
|
}
|
||||||
|
|
||||||
|
func createGhcrSecretWorkflow() error {
|
||||||
|
vm, err := NewVaultManager()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to initialize Vault manager: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return createGhcrSecrets(vm)
|
||||||
|
}
|
||||||
|
|
||||||
|
func createGhcrSecrets(vm *VaultManager) error {
|
||||||
|
fmt.Println("\n[INFO] Configuring secret for GitHub Container Registry (GHCR)...")
|
||||||
|
username, registryToken, orgToken, err := getGHCRUserInput()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
dockerConfigJSON, err := createDockerConfig(ghcrRegistry, username, registryToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to create Docker config: %w", err)
|
return fmt.Errorf("failed to create Docker config: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
dockerSecretData := map[string]string{dockerConfigJSONKey: dockerConfigJSON}
|
dockerSecretData := map[string]string{dockerConfigJSONKey: dockerConfigJSON}
|
||||||
if err := vm.StoreSecret(ghcrSecretPath, dockerSecretData); err != nil {
|
if err := vm.StoreSecret(ghcrSecretPath, dockerSecretData); err != nil {
|
||||||
return fmt.Errorf("failed to store Docker registry secret: %w", err)
|
return fmt.Errorf("failed to store Docker registry secret: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. Create and Store Organization Management PAT
|
|
||||||
orgSecretData := map[string]string{orgManagementPATKey: orgToken}
|
orgSecretData := map[string]string{orgManagementPATKey: orgToken}
|
||||||
if err := vm.StoreSecret(orgManagementSecretPath, orgSecretData); err != nil {
|
if err := vm.StoreSecret(orgManagementSecretPath, orgSecretData); err != nil {
|
||||||
return fmt.Errorf("failed to store organization management PAT: %w", err)
|
return fmt.Errorf("failed to store organization management PAT: %w", err)
|
||||||
|
|
@ -196,6 +206,26 @@ func createAndStoreSecrets() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createDockerHubSecret(vm *VaultManager) error {
|
||||||
|
fmt.Println("\n[INFO] Configuring secret for Docker Hub...")
|
||||||
|
username, password, err := getUserInputForDockerHub()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
dockerConfigJSON, err := createDockerConfig(dockerHubRegistry, username, password)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to create Docker config: %w", err)
|
||||||
|
}
|
||||||
|
dockerSecretData := map[string]string{dockerConfigJSONKey: dockerConfigJSON}
|
||||||
|
|
||||||
|
if err := vm.StoreSecret(dockerHubSecretPath, dockerSecretData); err != nil {
|
||||||
|
return fmt.Errorf("failed to store Docker Hub secret: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func createAndStoreGithubAuthSecret() error {
|
func createAndStoreGithubAuthSecret() error {
|
||||||
username, token, err := getUserInputForGithubAuth()
|
username, token, err := getUserInputForGithubAuth()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -219,7 +249,7 @@ func createAndStoreGithubAuthSecret() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- User Input and Helper Functions ---
|
// --- User Input and Helper Functions ---
|
||||||
func getUserInput() (username, registryToken, orgToken string, err error) {
|
func getGHCRUserInput() (username, registryToken, orgToken string, err error) {
|
||||||
reader := bufio.NewReader(os.Stdin)
|
reader := bufio.NewReader(os.Stdin)
|
||||||
|
|
||||||
fmt.Print("Enter your GitHub username: ")
|
fmt.Print("Enter your GitHub username: ")
|
||||||
|
|
@ -246,6 +276,29 @@ func getUserInput() (username, registryToken, orgToken string, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getUserInputForDockerHub() (username, password string, err error) {
|
||||||
|
reader := bufio.NewReader(os.Stdin)
|
||||||
|
fmt.Print("Enter your Docker Hub username: ")
|
||||||
|
username, err = reader.ReadString('\n')
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
username = strings.TrimSpace(username)
|
||||||
|
|
||||||
|
fmt.Print("Enter your Docker Hub password or access token: ")
|
||||||
|
passwordBytes, err := term.ReadPassword(int(syscall.Stdin))
|
||||||
|
fmt.Println()
|
||||||
|
if err != nil {
|
||||||
|
return "", "", err
|
||||||
|
}
|
||||||
|
password = string(passwordBytes)
|
||||||
|
|
||||||
|
if username == "" || password == "" {
|
||||||
|
err = fmt.Errorf("username and password cannot be empty")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func getUserInputForGithubAuth() (username, token string, err error) {
|
func getUserInputForGithubAuth() (username, token string, err error) {
|
||||||
reader := bufio.NewReader(os.Stdin)
|
reader := bufio.NewReader(os.Stdin)
|
||||||
|
|
||||||
|
|
@ -304,11 +357,11 @@ func promptForToken(reader *bufio.Reader, prompt string) (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// createDockerConfig creates a Docker config JSON string.
|
// createDockerConfig creates a Docker config JSON string.
|
||||||
func createDockerConfig(username, token string) (string, error) {
|
func createDockerConfig(registry, username, token string) (string, error) {
|
||||||
auth := base64.StdEncoding.EncodeToString([]byte(username + ":" + token))
|
auth := base64.StdEncoding.EncodeToString([]byte(username + ":" + token))
|
||||||
config := DockerConfig{
|
config := DockerConfig{
|
||||||
Auths: map[string]DockerAuth{
|
Auths: map[string]DockerAuth{
|
||||||
ghcrRegistry: {
|
registry: {
|
||||||
Username: username,
|
Username: username,
|
||||||
Password: token,
|
Password: token,
|
||||||
Auth: auth,
|
Auth: auth,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue