feat: ghcr external secret generator

This commit is contained in:
eding 2025-11-19 08:37:06 +01:00
parent 85e0a700cb
commit caee4f8a01

View file

@ -76,6 +76,60 @@ func CheckExternalSecretCRD() error {
return nil
}
// CreateGhcrExternalSecret generates and applies the ExternalSecret for GHCR.
func CreateGhcrExternalSecret() error {
fmt.Println("[INFO] Creating ExternalSecret for GHCR in 'flux-system' namespace...")
externalSecret := ExternalSecret{
ApiVersion: "external-secrets.io/v1",
Kind: "ExternalSecret",
Metadata: Metadata{
Name: "ghcr-auth",
Namespace: "flux-system",
},
Spec: ExternalSecretSpec{
SecretStoreRef: SecretStoreRef{
Name: "vault-backend",
Kind: "ClusterSecretStore",
},
Target: ExternalSecretTarget{
Name: "ghcr-auth",
CreationPolicy: "Owner",
Template: ExternalSecretTemplate{
Type: "kubernetes.io/dockerconfigjson",
Data: map[string]string{
".dockerconfigjson": `{{ index . ".dockerconfigjson" | toString }}`,
},
},
},
Data: []ExternalSecretData{
{
SecretKey: ".dockerconfigjson",
RemoteRef: ExternalSecretDataRemoteRef{
Key: vault.GhcrSecretPath,
Property: vault.DockerConfigJSONKey,
},
},
},
},
}
yamlData, err := yaml.Marshal(&externalSecret)
if err != nil {
return fmt.Errorf("failed to marshal ExternalSecret to YAML: %w", err)
}
cmd := exec.Command("kubectl", "apply", "-f", "-")
cmd.Stdin = bytes.NewReader(yamlData)
output, err := cmd.CombinedOutput()
if err != nil {
return fmt.Errorf("failed to apply ExternalSecret: %s\n%w", string(output), err)
}
fmt.Printf("[SUCCESS] Applied ExternalSecret 'ghcr-auth' in 'flux-system' namespace.\n")
return nil
}
// CreateDockerHubExternalSecret generates and applies the ExternalSecret for Docker Hub.
func CreateDockerHubExternalSecret() error {
fmt.Println("[INFO] Creating ExternalSecret for Docker Hub in 'flux-system' namespace...")