Skip to content
Open
Show file tree
Hide file tree
Changes from 49 commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
86f7a73
option to read secret from volume
Mangaal Jun 19, 2025
7c72d4e
add unit test. make redisCreds private
Mangaal Jun 19, 2025
67bce05
update unit test
Mangaal Jun 19, 2025
6081588
run gofumpt
Mangaal Jun 19, 2025
3437c3f
add logs
Mangaal Jun 30, 2025
ceec705
add documentation
Mangaal Jun 30, 2025
291b88a
update faq documentation
Mangaal Jun 30, 2025
fcda277
add REDIS_CREDS_FILE_PATH env in faq doc
Mangaal Jun 30, 2025
f7a3a46
change fallback log from info to warn
Mangaal Jul 7, 2025
44cab22
standard patch yaml for using password from file mount
Mangaal Jul 10, 2025
633688b
update standalone redis to use redis.conf file
Mangaal Jul 15, 2025
6eba003
provide option forha redis to retrive redis password from file mount
Mangaal Jul 15, 2025
4b7f4a7
provide option for argocd comopnent to retrive redis password from fi…
Mangaal Jul 15, 2025
7a44874
update redis init.sh
Mangaal Jul 16, 2025
0f54ea2
update redis ha overlay to update configmap
Mangaal Jul 16, 2025
dcf08ac
update redis ha overlay to update configmap in kustomize yaml
Mangaal Jul 16, 2025
00b2a69
added a new config-map
Mangaal Jul 16, 2025
7ddfc37
read redis image from redis container
Mangaal Jul 16, 2025
b0a4689
Update generated manifests for Redis secrets volume mount feature
Mangaal Sep 17, 2025
7f821d7
Fix HA Redis chart overlays for Redis secrets volume mount
Mangaal Sep 17, 2025
fb6c17c
Fix syntax error in HA Redis overlay file
Mangaal Sep 17, 2025
926e00b
Fix Redis HA chart version to match master
Mangaal Sep 17, 2025
e39908a
Use exact requirements.lock from master
Mangaal Sep 17, 2025
2026e39
fix rebase issue with redis version
Mangaal Sep 17, 2025
7f12915
Fix Redis probe settings after rebase
Mangaal Sep 17, 2025
93a3014
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 1, 2025
7fd9aa1
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 2, 2025
82fa911
update func name loadRedisCredsFromSecret=>loadRedisCreds
Mangaal Oct 2, 2025
25f6110
fix error in golangci-lint
Mangaal Oct 2, 2025
87ae734
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 2, 2025
48c298b
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 3, 2025
e3d89e1
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 8, 2025
03736bf
error handeling
Mangaal Oct 8, 2025
0b8791f
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 9, 2025
242235b
load secret either from file or env
Mangaal Oct 9, 2025
b8375ed
doc update
Mangaal Oct 9, 2025
40a178a
Trigger test
Mangaal Oct 9, 2025
ca889f6
Ebale File-mounted credentials through toggled in Kustomize
Mangaal Oct 14, 2025
5f1b0e0
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 14, 2025
d77f018
remove new line
Mangaal Oct 14, 2025
0f4e173
update file count
Mangaal Oct 14, 2025
ee5ff7d
file-mount option for Argo CD compenent
Mangaal Oct 14, 2025
8758ffa
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 14, 2025
fa1beb8
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 14, 2025
f785ff6
address review comments
Mangaal Oct 15, 2025
1387a18
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 15, 2025
58225d6
revert manifest and doc
Mangaal Oct 16, 2025
5366361
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 16, 2025
5a252b5
remove trailing newline
Mangaal Oct 16, 2025
e017a3e
add doc
Mangaal Oct 22, 2025
2230fa1
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 22, 2025
95c0842
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 23, 2025
8adbd2d
code refactor
Mangaal Oct 23, 2025
0968954
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 23, 2025
91a6722
fix golangci-lint issue
Mangaal Oct 23, 2025
f707ee7
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 23, 2025
999f62a
doc update
Mangaal Oct 27, 2025
830bb87
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 27, 2025
4d7f634
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 27, 2025
dae6dd2
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Oct 29, 2025
3cf758e
Merge branch 'master' of https://github.com/Mangaal/argo-cd into secr…
Mangaal Nov 5, 2025
085995d
correct Note syntax
Mangaal Nov 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 56 additions & 16 deletions util/cache/cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"fmt"
"math"
"os"
"path/filepath"
"strings"
"time"

Expand All @@ -33,6 +34,8 @@ const (
envRedisSentinelPassword = "REDIS_SENTINEL_PASSWORD"
// envRedisSentinelUsername is an env variable name which stores redis sentinel username
envRedisSentinelUsername = "REDIS_SENTINEL_USERNAME"
// envRedisCredsFilePath is an env variable name which stores path to redis credentials file
envRedisCredsFilePath = "REDIS_CREDS_FILE_PATH"
)

const (
Expand Down Expand Up @@ -129,6 +132,54 @@ func getFlagVal[T any](cmd *cobra.Command, o Options, name string, getVal func(n
}
}

// loadRedisCreds loads Redis credentials either from file-based mounts or environment variables.
// If a mount path is provided, Redis credentials are expected to be read only from the mounted files.
// If no mount path is provided, the function falls back to reading credentials from environment variables.
func loadRedisCreds(mountPath string, opt Options) (username, password, sentinelUsername, sentinelPassword string) {
if mountPath != "" {
log.Infof("Loading Redis credentials from file: %s", mountPath)
readAuthDetailsFromFile := func(filename string) string {
path := filepath.Join(mountPath, filename)
data, err := os.ReadFile(path)
if errors.Is(err, os.ErrNotExist) {
log.Infof("Redis credential file %s not found", path)
return ""
}
if err != nil {
log.Warnf("Failed to read Redis credential file %s: %v", path, err)
return ""
}
return strings.TrimSpace(string(data))
}
password = readAuthDetailsFromFile("auth")
username = readAuthDetailsFromFile("auth_username")
sentinelUsername = readAuthDetailsFromFile("sentinel_username")
sentinelPassword = readAuthDetailsFromFile("sentinel_auth")
return username, password, sentinelUsername, sentinelPassword
}
log.Info("Loading Redis credentials from environment variables")
username = os.Getenv(envRedisUsername)
password = os.Getenv(envRedisPassword)
sentinelUsername = os.Getenv(envRedisSentinelUsername)
sentinelPassword = os.Getenv(envRedisSentinelPassword)
if opt.FlagPrefix != "" {
pref := opt.getEnvPrefix()
if val := os.Getenv(pref + envRedisUsername); val != "" {
username = val
}
if val := os.Getenv(pref + envRedisPassword); val != "" {
password = val
}
if val := os.Getenv(pref + envRedisSentinelUsername); val != "" {
sentinelUsername = val
}
if val := os.Getenv(pref + envRedisSentinelPassword); val != "" {
sentinelPassword = val
}
}
return username, password, sentinelUsername, sentinelPassword
}

// AddCacheFlagsToCmd adds flags which control caching to the specified command
func AddCacheFlagsToCmd(cmd *cobra.Command, opts ...Options) func() (*Cache, error) {
redisAddress := ""
Expand Down Expand Up @@ -206,25 +257,14 @@ func AddCacheFlagsToCmd(cmd *cobra.Command, opts ...Options) func() (*Cache, err
}
}
}
password := os.Getenv(envRedisPassword)
username := os.Getenv(envRedisUsername)
sentinelUsername := os.Getenv(envRedisSentinelUsername)
sentinelPassword := os.Getenv(envRedisSentinelPassword)
var password, username, sentinelUsername, sentinelPassword string
credsFilePath := os.Getenv(envRedisCredsFilePath)
if opt.FlagPrefix != "" {
if val := os.Getenv(opt.getEnvPrefix() + envRedisUsername); val != "" {
username = val
}
if val := os.Getenv(opt.getEnvPrefix() + envRedisPassword); val != "" {
password = val
}
if val := os.Getenv(opt.getEnvPrefix() + envRedisSentinelUsername); val != "" {
sentinelUsername = val
}
if val := os.Getenv(opt.getEnvPrefix() + envRedisSentinelPassword); val != "" {
sentinelPassword = val
if val := os.Getenv(opt.getEnvPrefix() + envRedisCredsFilePath); val != "" {
credsFilePath = val
}
}

username, password, sentinelUsername, sentinelPassword = loadRedisCreds(credsFilePath, opt)
maxRetries := env.ParseNumFromEnv(envRedisRetryCount, defaultRedisRetryCount, 0, math.MaxInt32)
compression, err := CompressionTypeFromString(compressionStr)
if err != nil {
Expand Down
63 changes: 63 additions & 0 deletions util/cache/cache_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package cache

import (
"os"
"path/filepath"
"testing"
"time"

Expand Down Expand Up @@ -87,3 +89,64 @@ func TestGenerateCacheKey(t *testing.T) {
testKey := cache.generateFullKey("testkey")
assert.Equal(t, "testkey|"+common.CacheVersion, testKey)
}

// Test loading Redis credentials from a file
func TestLoadRedisCreds(t *testing.T) {
dir := t.TempDir()
// Helper to write a file
writeFile := func(name, content string) {
require.NoError(t, os.WriteFile(filepath.Join(dir, name), []byte(content), 0o400))
}
// Write all files
writeFile("auth", "mypassword\n")
writeFile("auth_username", "myuser")
writeFile("sentinel_username", "sentineluser")
writeFile("sentinel_auth", "sentinelpass")

username, password, sentinelUsername, sentinelPassword := loadRedisCreds(dir, Options{})
assert.Equal(t, "mypassword", password)
assert.Equal(t, "myuser", username)
assert.Equal(t, "sentineluser", sentinelUsername)
assert.Equal(t, "sentinelpass", sentinelPassword)
}

// Test loading Redis credentials from environment variables
func TestLoadRedisCredsFromEnv(t *testing.T) {
// Set environment variables
t.Setenv(envRedisPassword, "mypassword")
t.Setenv(envRedisUsername, "myuser")
t.Setenv(envRedisSentinelUsername, "sentineluser")
t.Setenv(envRedisSentinelPassword, "sentinelpass")

username, password, sentinelUsername, sentinelPassword := loadRedisCreds("", Options{})
assert.Equal(t, "mypassword", password)
assert.Equal(t, "myuser", username)
assert.Equal(t, "sentineluser", sentinelUsername)
assert.Equal(t, "sentinelpass", sentinelPassword)
}

// Test loading Redis credentials from both environment variables and a file
func TestLoadRedisCredsFromBothEnvAndFile(t *testing.T) {
// Set environment variables
t.Setenv(envRedisPassword, "mypassword")
t.Setenv(envRedisUsername, "myuser")
t.Setenv(envRedisSentinelUsername, "sentineluser")
t.Setenv(envRedisSentinelPassword, "sentinelpass")

dir := t.TempDir()
// Helper to write a file
writeFile := func(name, content string) {
require.NoError(t, os.WriteFile(filepath.Join(dir, name), []byte(content), 0o400))
}
// Write all files
writeFile("auth", "filepassword\n")
writeFile("auth_username", "fileuser")
writeFile("sentinel_username", "filesentineluser")
writeFile("sentinel_auth", "filesentinelpass")

username, password, sentinelUsername, sentinelPassword := loadRedisCreds(dir, Options{})
assert.Equal(t, "filepassword", password)
assert.Equal(t, "fileuser", username)
assert.Equal(t, "filesentineluser", sentinelUsername)
assert.Equal(t, "filesentinelpass", sentinelPassword)
}
Loading