Skip to content

Commit 573cddc

Browse files
committed
Simplify some more the env management
Signed-off-by: David Gageot <david.gageot@docker.com>
1 parent ac0b7d6 commit 573cddc

15 files changed

Lines changed: 70 additions & 152 deletions

File tree

pkg/environment/1password.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,15 @@ func NewOnePasswordProvider(ctx context.Context) (*OnePasswordProvider, error) {
3333
}, nil
3434
}
3535

36-
func (p *OnePasswordProvider) Get(ctx context.Context, name string) (string, error) {
36+
func (p *OnePasswordProvider) Get(ctx context.Context, name string) string {
3737
path := "op://cagent/" + name + "/password"
3838
slog.Debug("Looking for environment variable in 1Password", "path", path)
3939

4040
secret, err := p.secrets.Resolve(ctx, "op://cagent/"+name+"/password")
4141
if err != nil {
42-
return "", fmt.Errorf("failed to find environment variable (%s) in 1Password: %w", name, err)
42+
// Ignore error
43+
return ""
4344
}
4445

45-
return secret, nil
46+
return secret
4647
}

pkg/environment/default.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@ func NewDefaultProvider(ctx context.Context) Provider {
99

1010
// Append 1Password provider at the end if available
1111
if onePasswordProvider, err := NewOnePasswordProvider(ctx); err == nil {
12-
providers = append(providers, NewNoFailProvider(onePasswordProvider))
12+
providers = append(providers, onePasswordProvider)
1313
}
1414

1515
// Append pass provider at the end if available
1616
if passProvider, err := NewPassProvider(); err == nil {
17-
providers = append(providers, NewNoFailProvider(passProvider))
17+
providers = append(providers, passProvider)
1818
}
1919

2020
// Append keychain provider if available
2121
if keychainProvider, err := NewKeychainProvider(); err == nil {
22-
providers = append(providers, NewNoFailProvider(keychainProvider))
22+
providers = append(providers, keychainProvider)
2323
}
2424

2525
return NewMultiProvider(providers...)

pkg/environment/env.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,31 +12,31 @@ func NewOsEnvProvider() *OsEnvProvider {
1212
return &OsEnvProvider{}
1313
}
1414

15-
func (p *OsEnvProvider) Get(_ context.Context, name string) (string, error) {
16-
return os.Getenv(name), nil
15+
func (p *OsEnvProvider) Get(_ context.Context, name string) string {
16+
return os.Getenv(name)
1717
}
1818

1919
type EnvFilesProviders struct {
20-
absEnvFiles []string
20+
values []KeyValuePair
2121
}
2222

23-
func NewEnvFilesProvider(absEnvFiles []string) *EnvFilesProviders {
24-
return &EnvFilesProviders{
25-
absEnvFiles: absEnvFiles,
26-
}
27-
}
28-
29-
func (p *EnvFilesProviders) Get(_ context.Context, name string) (string, error) {
30-
values, err := ReadEnvFiles(p.absEnvFiles)
23+
func NewEnvFilesProvider(absEnvFiles []string) (*EnvFilesProviders, error) {
24+
values, err := ReadEnvFiles(absEnvFiles)
3125
if err != nil {
32-
return "", err
26+
return nil, err
3327
}
3428

35-
for _, kv := range values {
29+
return &EnvFilesProviders{
30+
values: values,
31+
}, nil
32+
}
33+
34+
func (p *EnvFilesProviders) Get(_ context.Context, name string) string {
35+
for _, kv := range p.values {
3636
if kv.Key == name {
37-
return kv.Value, nil
37+
return kv.Value
3838
}
3939
}
4040

41-
return "", nil
41+
return ""
4242
}

pkg/environment/env_test.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"testing"
55

66
"github.com/stretchr/testify/assert"
7-
"github.com/stretchr/testify/require"
87
)
98

109
func TestOsEnvProvider(t *testing.T) {
@@ -13,15 +12,12 @@ func TestOsEnvProvider(t *testing.T) {
1312

1413
provider := NewOsEnvProvider()
1514

16-
value, err := provider.Get(t.Context(), "TEST1")
17-
require.NoError(t, err)
15+
value := provider.Get(t.Context(), "TEST1")
1816
assert.Equal(t, "VALUE1", value)
1917

20-
value, err = provider.Get(t.Context(), "TEST2")
21-
require.NoError(t, err)
18+
value = provider.Get(t.Context(), "TEST2")
2219
assert.Equal(t, "VALUE2", value)
2320

24-
value, err = provider.Get(t.Context(), "NOT_FOUND")
25-
require.NoError(t, err)
21+
value = provider.Get(t.Context(), "NOT_FOUND")
2622
assert.Empty(t, value)
2723
}

pkg/environment/keychain.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"bytes"
55
"context"
66
"errors"
7-
"fmt"
87
"log/slog"
98
"os/exec"
109
"strings"
@@ -35,7 +34,7 @@ func NewKeychainProvider() (*KeychainProvider, error) {
3534

3635
// Get retrieves the value of a secret by its service name from the macOS keychain.
3736
// It uses the `security find-generic-password -w -s <name>` command to fetch the password.
38-
func (p *KeychainProvider) Get(ctx context.Context, name string) (string, error) {
37+
func (p *KeychainProvider) Get(ctx context.Context, name string) string {
3938
cmd := exec.CommandContext(ctx, "security", "find-generic-password", "-w", "-s", name)
4039

4140
var out bytes.Buffer
@@ -45,8 +44,9 @@ func (p *KeychainProvider) Get(ctx context.Context, name string) (string, error)
4544

4645
err := cmd.Run()
4746
if err != nil {
48-
return "", fmt.Errorf("failed to retrieve secret from keychain: %w, stderr: %v", err, stderr.String())
47+
// Ignore error
48+
return ""
4949
}
5050

51-
return strings.TrimSpace(out.String()), nil
51+
return strings.TrimSpace(out.String())
5252
}

pkg/environment/multi.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,13 @@ func NewMultiProvider(providers ...Provider) *MultiProvider {
1212
}
1313
}
1414

15-
func (p *MultiProvider) Get(ctx context.Context, name string) (string, error) {
15+
func (p *MultiProvider) Get(ctx context.Context, name string) string {
1616
for _, provider := range p.providers {
17-
value, err := provider.Get(ctx, name)
18-
if err != nil {
19-
return "", err
20-
}
21-
17+
value := provider.Get(ctx, name)
2218
if value != "" {
23-
return value, nil
19+
return value
2420
}
2521
}
2622

27-
return "", nil
23+
return ""
2824
}

pkg/environment/multi_test.go

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,49 +5,37 @@ import (
55
"testing"
66

77
"github.com/stretchr/testify/assert"
8-
"github.com/stretchr/testify/require"
98
)
109

1110
func TestMultiProviderNone(t *testing.T) {
1211
provider := NewMultiProvider()
13-
value, err := provider.Get(t.Context(), "TEST1")
12+
value := provider.Get(t.Context(), "TEST1")
1413

15-
require.NoError(t, err)
1614
assert.Empty(t, value)
1715
}
1816

1917
func TestMultiProviderDelegate(t *testing.T) {
20-
provider := NewMultiProvider(&alwaysFound{}, &neverFound{}, &alwaysFailProvider{})
21-
value, err := provider.Get(t.Context(), "TEST2")
18+
provider := NewMultiProvider(&alwaysFound{}, &neverFound{})
19+
value := provider.Get(t.Context(), "TEST2")
2220

23-
require.NoError(t, err)
2421
assert.Equal(t, "FOUND", value)
2522
}
2623

2724
func TestMultiProviderTryInOrder(t *testing.T) {
28-
provider := NewMultiProvider(&neverFound{}, &alwaysFound{}, &alwaysFailProvider{})
29-
value, err := provider.Get(t.Context(), "TEST3")
25+
provider := NewMultiProvider(&neverFound{}, &alwaysFound{})
26+
value := provider.Get(t.Context(), "TEST3")
3027

31-
require.NoError(t, err)
3228
assert.Equal(t, "FOUND", value)
3329
}
3430

35-
func TestMultiProviderFails(t *testing.T) {
36-
provider := NewMultiProvider(&alwaysFailProvider{})
37-
value, err := provider.Get(t.Context(), "TEST4")
38-
39-
require.Error(t, err)
40-
assert.Empty(t, value)
41-
}
42-
4331
type neverFound struct{}
4432

45-
func (p *neverFound) Get(context.Context, string) (string, error) {
46-
return "", nil
33+
func (p *neverFound) Get(context.Context, string) string {
34+
return ""
4735
}
4836

4937
type alwaysFound struct{}
5038

51-
func (p *alwaysFound) Get(context.Context, string) (string, error) {
52-
return "FOUND", nil
39+
func (p *alwaysFound) Get(context.Context, string) string {
40+
return "FOUND"
5341
}

pkg/environment/nofail.go

Lines changed: 0 additions & 23 deletions
This file was deleted.

pkg/environment/nofail_test.go

Lines changed: 0 additions & 44 deletions
This file was deleted.

pkg/environment/pass.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"bytes"
55
"context"
66
"errors"
7-
"fmt"
87
"log/slog"
98
"os/exec"
109
"strings"
@@ -34,7 +33,7 @@ func NewPassProvider() (*PassProvider, error) {
3433

3534
// Get retrieves the value of a secret by its name using the `pass` CLI.
3635
// The name corresponds to the path in the `pass` store.
37-
func (p *PassProvider) Get(ctx context.Context, name string) (string, error) {
36+
func (p *PassProvider) Get(ctx context.Context, name string) string {
3837
cmd := exec.CommandContext(ctx, "pass", "show", name)
3938

4039
var out bytes.Buffer
@@ -44,8 +43,9 @@ func (p *PassProvider) Get(ctx context.Context, name string) (string, error) {
4443

4544
err := cmd.Run()
4645
if err != nil {
47-
return "", fmt.Errorf("failed to retrieve secret with `pass`: %w, stderr: %v", err, stderr.String())
46+
// Ignore error
47+
return ""
4848
}
4949

50-
return strings.TrimSpace(out.String()), nil
50+
return strings.TrimSpace(out.String())
5151
}

0 commit comments

Comments
 (0)