Skip to content

Commit

Permalink
feat: allow other credential helpers in Finch VM
Browse files Browse the repository at this point in the history
Signed-off-by: Austin Vazquez <macedonv@amazon.com>
  • Loading branch information
austinvazquez committed Jan 31, 2025
1 parent 5ba6426 commit 2da5dcd
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 5 deletions.
11 changes: 9 additions & 2 deletions pkg/config/nerdctl_config_applier.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,11 +91,18 @@ func addLineToBashrc(fs afero.Fs, profileFilePath string, profStr string, cmd st
func updateEnvironment(fs afero.Fs, fc *Finch, finchDir, homeDir, limaVMHomeDir string) error {
cmdArr := []string{
`export DOCKER_CONFIG="$FINCH_DIR"`,
"[ -L /usr/local/bin/docker-credential-ecr-login ] " +
`|| sudo ln -s "$FINCH_DIR"/cred-helpers/docker-credential-ecr-login /usr/local/bin/`,
`[ -L /root/.aws ] || sudo ln -fs "$AWS_DIR" /root/.aws`,
}

for _, credHelper := range fc.CredsHelpers {
cmdArr = append(cmdArr,
fmt.Sprintf(
`[ -L /usr/local/bin/docker-credential-%s ] || sudo ln -s "$FINCH_DIR"/cred-helpers/docker-credential-%s /usr/local/bin/`,
credHelper, credHelper,
),
)
}

awsDir := fmt.Sprintf("%s/.aws", homeDir)

if *fc.VMType == "wsl2" {
Expand Down
52 changes: 49 additions & 3 deletions pkg/config/nerdctl_config_applier_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ func Test_updateEnvironment(t *testing.T) {
FINCH_DIR=/finch/dir
AWS_DIR=/home/dir/.aws
export DOCKER_CONFIG="$FINCH_DIR"
[ -L /usr/local/bin/docker-credential-ecr-login ] || sudo ln -s "$FINCH_DIR"/cred-helpers/docker-credential-ecr-login /usr/local/bin/
[ -L /root/.aws ] || sudo ln -fs "$AWS_DIR" /root/.aws
[ -L /home/mock_user.linux/.finch ] || ln -s $FINCH_DIR /home/mock_user.linux/.finch`), string(fileBytes))
},
Expand Down Expand Up @@ -95,7 +94,6 @@ export DOCKER_CONFIG="$FINCH_DIR"
FINCH_DIR=/finch/dir
AWS_DIR=/home/dir/.aws
export DOCKER_CONFIG="$FINCH_DIR"
[ -L /usr/local/bin/docker-credential-ecr-login ] || sudo ln -s "$FINCH_DIR"/cred-helpers/docker-credential-ecr-login /usr/local/bin/
[ -L /root/.aws ] || sudo ln -fs "$AWS_DIR" /root/.aws)
[ -L /home/mock_user.linux/.finch ] || ln -s $FINCH_DIR /home/mock_user.linux/.finch`,
),
Expand All @@ -110,7 +108,6 @@ export DOCKER_CONFIG="$FINCH_DIR"
FINCH_DIR=/finch/dir
AWS_DIR=/home/dir/.aws
export DOCKER_CONFIG="$FINCH_DIR"
[ -L /usr/local/bin/docker-credential-ecr-login ] || sudo ln -s "$FINCH_DIR"/cred-helpers/docker-credential-ecr-login /usr/local/bin/
[ -L /root/.aws ] || sudo ln -fs "$AWS_DIR" /root/.aws)
[ -L /home/mock_user.linux/.finch ] || ln -s $FINCH_DIR /home/mock_user.linux/.finch`), string(fileBytes))
},
Expand Down Expand Up @@ -140,6 +137,55 @@ export DOCKER_CONFIG="$FINCH_DIR"
},
),
},
{
name: "put docker-credential-ecr-login in path",
cfg: &Finch{
SharedSettings: SharedSettings{
CredsHelpers: []string{"ecr-login"},
},
},
finchDir: "/finch/dir",
homeDir: "/home/dir",
limaVMHomeDir: "/home/mock_user.linux",
mockSvc: func(_ *testing.T, _ afero.Fs) {},
postRunCheck: func(t *testing.T, fs afero.Fs) {
fileBytes, err := afero.ReadFile(fs, "/home/mock_user.linux/.bashrc")
require.NoError(t, err)
assert.Equal(t, string(`
FINCH_DIR=/finch/dir
AWS_DIR=/home/dir/.aws
export DOCKER_CONFIG="$FINCH_DIR"
[ -L /usr/local/bin/docker-credential-ecr-login ] || sudo ln -s "$FINCH_DIR"/cred-helpers/docker-credential-ecr-login /usr/local/bin/
[ -L /root/.aws ] || sudo ln -fs "$AWS_DIR" /root/.aws)
[ -L /home/mock_user.linux/.finch ] || ln -s $FINCH_DIR /home/mock_user.linux/.finch`), string(fileBytes))
},
want: nil,
},
{
name: "put docker-credential-ecr-login and secretservice in path",
cfg: &Finch{
SharedSettings: SharedSettings{
CredsHelpers: []string{"ecr-login", "secretservice"},
},
},
finchDir: "/finch/dir",
homeDir: "/home/dir",
limaVMHomeDir: "/home/mock_user.linux",
mockSvc: func(_ *testing.T, _ afero.Fs) {},
postRunCheck: func(t *testing.T, fs afero.Fs) {
fileBytes, err := afero.ReadFile(fs, "/home/mock_user.linux/.bashrc")
require.NoError(t, err)
assert.Equal(t, string(`
FINCH_DIR=/finch/dir
AWS_DIR=/home/dir/.aws
export DOCKER_CONFIG="$FINCH_DIR"
[ -L /usr/local/bin/docker-credential-ecr-login ] || sudo ln -s "$FINCH_DIR"/cred-helpers/docker-credential-ecr-login /usr/local/bin/
[ -L /usr/local/bin/docker-credential-secretservice ] || sudo ln -s "$FINCH_DIR"/cred-helpers/docker-credential-secretservice /usr/local/bin/
[ -L /root/.aws ] || sudo ln -fs "$AWS_DIR" /root/.aws)
[ -L /home/mock_user.linux/.finch ] || ln -s $FINCH_DIR /home/mock_user.linux/.finch`), string(fileBytes))
},
want: nil,
},
}

for _, tc := range testCases {
Expand Down

0 comments on commit 2da5dcd

Please sign in to comment.