fix(auth): address Task 13 deployment review findings
This commit is contained in:
@@ -457,26 +457,6 @@ func inspectRequiredVolumes(ctx context.Context, runner archiveRunner, rendered
|
||||
}
|
||||
|
||||
func imageIdentities(ctx context.Context, installation config.Installation, runner archiveRunner, rendered renderedCompose) ([]ImageIdentity, error) {
|
||||
result, err := runner.Run(ctx, installation.ComposeArgs("images", "--format", "json"), nil)
|
||||
if err != nil {
|
||||
return nil, dockerError("inspect image identities", result, err)
|
||||
}
|
||||
ids := map[string]string{}
|
||||
decoder := json.NewDecoder(strings.NewReader(result.Stdout))
|
||||
for {
|
||||
var item struct {
|
||||
Service string `json:"Service"`
|
||||
ID string `json:"ID"`
|
||||
}
|
||||
err := decoder.Decode(&item)
|
||||
if errors.Is(err, io.EOF) {
|
||||
break
|
||||
}
|
||||
if err != nil || item.Service == "" {
|
||||
return nil, errors.New("Docker Compose returned invalid image identities")
|
||||
}
|
||||
ids[item.Service] = item.ID
|
||||
}
|
||||
services := make([]string, 0, len(rendered.Services))
|
||||
for name, definition := range rendered.Services {
|
||||
if definition.Image != "" {
|
||||
@@ -486,11 +466,70 @@ func imageIdentities(ctx context.Context, installation config.Installation, runn
|
||||
sort.Strings(services)
|
||||
images := make([]ImageIdentity, 0, len(services))
|
||||
for _, name := range services {
|
||||
images = append(images, ImageIdentity{Service: name, Reference: rendered.Services[name].Image, ID: ids[name]})
|
||||
result, err := runner.Run(ctx, installation.ComposeArgs("images", "--format", "json", name), nil)
|
||||
if err != nil {
|
||||
return nil, dockerError("inspect image identities", result, err)
|
||||
}
|
||||
inspected, err := decodeComposeImageIdentities(result.Stdout)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
matching := make([]composeImageIdentity, 0, len(inspected))
|
||||
for _, item := range inspected {
|
||||
if item.Service == "" || item.Service == name {
|
||||
matching = append(matching, item)
|
||||
}
|
||||
}
|
||||
if len(matching) > 1 {
|
||||
return nil, errors.New("Docker Compose returned invalid image identities")
|
||||
}
|
||||
id := ""
|
||||
if len(matching) == 1 {
|
||||
id = matching[0].ID
|
||||
}
|
||||
images = append(images, ImageIdentity{Service: name, Reference: rendered.Services[name].Image, ID: id})
|
||||
}
|
||||
return images, nil
|
||||
}
|
||||
|
||||
type composeImageIdentity struct {
|
||||
Service string `json:"Service"`
|
||||
ContainerName string `json:"ContainerName"`
|
||||
ID string `json:"ID"`
|
||||
}
|
||||
|
||||
func decodeComposeImageIdentities(value string) ([]composeImageIdentity, error) {
|
||||
trimmed := strings.TrimSpace(value)
|
||||
if trimmed == "" {
|
||||
return nil, nil
|
||||
}
|
||||
var identities []composeImageIdentity
|
||||
if strings.HasPrefix(trimmed, "[") {
|
||||
if json.Unmarshal([]byte(trimmed), &identities) != nil {
|
||||
return nil, errors.New("Docker Compose returned invalid image identities")
|
||||
}
|
||||
} else {
|
||||
decoder := json.NewDecoder(strings.NewReader(trimmed))
|
||||
for {
|
||||
var item composeImageIdentity
|
||||
err := decoder.Decode(&item)
|
||||
if errors.Is(err, io.EOF) {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return nil, errors.New("Docker Compose returned invalid image identities")
|
||||
}
|
||||
identities = append(identities, item)
|
||||
}
|
||||
}
|
||||
for _, item := range identities {
|
||||
if item.ID == "" || item.Service == "" && item.ContainerName == "" {
|
||||
return nil, errors.New("Docker Compose returned invalid image identities")
|
||||
}
|
||||
}
|
||||
return identities, nil
|
||||
}
|
||||
|
||||
func installationRunning(ctx context.Context, installation config.Installation, runner archiveRunner) (bool, error) {
|
||||
result, err := runner.Run(ctx, installation.ComposeArgs("ps", "--all", "--format", "json"), nil)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user