fix: [CDE-473]: Checking default containerUser from the image. (#3105)

* fix: [CDE-473]: Checking default containerUser from the image.
This commit is contained in:
Dhruv Dhruv 2024-12-04 07:24:22 +00:00 committed by Harness
parent aea3067a06
commit ccf7673ee5
3 changed files with 13 additions and 8 deletions

View File

@ -309,21 +309,25 @@ func GetContainerInfo(
return inspectResp.ID, usedPorts, remoteUser, nil return inspectResp.ID, usedPorts, remoteUser, nil
} }
func ExtractMetadataFromImage( func ExtractMetadataAndUserFromImage(
ctx context.Context, ctx context.Context,
imageName string, imageName string,
dockerClient *client.Client, dockerClient *client.Client,
) (map[string]any, error) { ) (map[string]any, string, error) {
imageInspect, _, err := dockerClient.ImageInspectWithRaw(ctx, imageName) imageInspect, _, err := dockerClient.ImageInspectWithRaw(ctx, imageName)
if err != nil { if err != nil {
return nil, fmt.Errorf("error while inspecting image: %w", err) return nil, "", fmt.Errorf("error while inspecting image: %w", err)
}
imageUser := imageInspect.Config.User
if imageUser == "" {
imageUser = "root"
} }
metadataMap := map[string]any{} metadataMap := map[string]any{}
if metadata, ok := imageInspect.Config.Labels["devcontainer.metadata"]; ok { if metadata, ok := imageInspect.Config.Labels["devcontainer.metadata"]; ok {
dst := []map[string]any{} dst := []map[string]any{}
unmarshalErr := json.Unmarshal([]byte(metadata), &dst) unmarshalErr := json.Unmarshal([]byte(metadata), &dst)
if unmarshalErr != nil { if unmarshalErr != nil {
return nil, fmt.Errorf("error while unmarshalling metadata: %w", err) return nil, imageUser, fmt.Errorf("error while unmarshalling metadata: %w", err)
} }
for _, values := range dst { for _, values := range dst {
for k, v := range values { for k, v := range values {
@ -331,7 +335,7 @@ func ExtractMetadataFromImage(
} }
} }
} }
return metadataMap, nil return metadataMap, imageUser, nil
} }
func PullImage( func PullImage(

View File

@ -396,7 +396,7 @@ func (e *EmbeddedDockerOrchestrator) runGitspaceSetupSteps(
return err return err
} }
metadataFromImage, err := ExtractMetadataFromImage(ctx, imageName, dockerClient) metadataFromImage, imageUser, err := ExtractMetadataAndUserFromImage(ctx, imageName, dockerClient)
if err != nil { if err != nil {
return err return err
} }
@ -419,7 +419,7 @@ func (e *EmbeddedDockerOrchestrator) runGitspaceSetupSteps(
gitspaceLogger.Info(fmt.Sprintf("Setting Environment : %v", environment)) gitspaceLogger.Info(fmt.Sprintf("Setting Environment : %v", environment))
} }
containerUser := GetContainerUser(runArgsMap, devcontainerConfig, metadataFromImage) containerUser := GetContainerUser(runArgsMap, devcontainerConfig, metadataFromImage, imageUser)
remoteUser := GetRemoteUser(devcontainerConfig, metadataFromImage, containerUser) remoteUser := GetRemoteUser(devcontainerConfig, metadataFromImage, containerUser)
homeDir := GetUserHomeDir(remoteUser) homeDir := GetUserHomeDir(remoteUser)

View File

@ -51,6 +51,7 @@ func GetContainerUser(
runArgsMap map[types.RunArg]*types.RunArgValue, runArgsMap map[types.RunArg]*types.RunArgValue,
devcontainerConfig types.DevcontainerConfig, devcontainerConfig types.DevcontainerConfig,
metadataFromImage map[string]any, metadataFromImage map[string]any,
imageUser string,
) string { ) string {
if containerUser := getUser(runArgsMap); containerUser != "" { if containerUser := getUser(runArgsMap); containerUser != "" {
return containerUser return containerUser
@ -61,7 +62,7 @@ func GetContainerUser(
if containerUser, ok := metadataFromImage["containerUser"].(string); ok { if containerUser, ok := metadataFromImage["containerUser"].(string); ok {
return containerUser return containerUser
} }
return "" return imageUser
} }
func ExtractRemoteUserFromLabels(inspectResp types2.ContainerJSON) string { func ExtractRemoteUserFromLabels(inspectResp types2.ContainerJSON) string {