Skip to content

Commit 251c52a

Browse files
authored
fix(describe): use new deploy store API to improve Describe (#1090)
<!-- Provide summary of changes --> Part of #1069. Fixes #1003. <!-- Issue number, if available. E.g. "Fixes #31", "Addresses #42, 77" --> By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.
1 parent c10df7b commit 251c52a

21 files changed

Lines changed: 150 additions & 206 deletions

internal/pkg/cli/mocks/mock_identity.go

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/pkg/cli/mocks/mock_interfaces.go

Lines changed: 2 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/pkg/cli/mocks/mock_progress.go

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/pkg/cli/mocks/mock_prompter.go

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/pkg/deploy/cloudformation/mocks/mock_cloudformation.go

Lines changed: 15 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/pkg/deploy/cloudformation/stack/mocks/mock_backend_svc.go

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/pkg/deploy/cloudformation/stack/mocks/mock_lb_web_svc.go

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/pkg/deploy/deploy.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ type resourceGetter interface {
4444
GetResourcesByTags(resourceType string, tags map[string]string) ([]string, error)
4545
}
4646

47-
type configStoreClient interface {
47+
// ConfigStoreClient wraps config store methods utilized by deploy store.
48+
type ConfigStoreClient interface {
4849
GetEnvironment(appName string, environmentName string) (*config.Environment, error)
4950
ListEnvironments(appName string) ([]*config.Environment, error)
5051
GetService(appName, svcName string) (*config.Service, error)
@@ -53,17 +54,13 @@ type configStoreClient interface {
5354
// Store fetches information on deployed services.
5455
type Store struct {
5556
rgClient resourceGetter
56-
configStore configStoreClient
57+
configStore ConfigStoreClient
5758
newRgClientFromIDs func(string, string) error
5859
newRgClientFromRole func(string, string) error
5960
}
6061

6162
// NewStore returns a new store.
62-
func NewStore() (*Store, error) {
63-
store, err := config.NewStore()
64-
if err != nil {
65-
return nil, fmt.Errorf("connect to config store: %w", err)
66-
}
63+
func NewStore(store ConfigStoreClient) (*Store, error) {
6764
s := &Store{
6865
configStore: store,
6966
}

internal/pkg/describe/backend_service.go

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"text/tabwriter"
1212

1313
"github.com/aws/copilot-cli/internal/pkg/config"
14+
"github.com/aws/copilot-cli/internal/pkg/deploy"
1415
"github.com/aws/copilot-cli/internal/pkg/deploy/cloudformation/stack"
1516
"github.com/aws/copilot-cli/internal/pkg/term/color"
1617
)
@@ -20,25 +21,29 @@ type BackendServiceDescriber struct {
2021
service *config.Service
2122
enableResources bool
2223

23-
store storeSvc
24+
store deployStoreSvc
2425
svcDescriber svcDescriber
2526
initServiceDescriber func(string) error
2627
}
2728

2829
// NewBackendServiceDescriber instantiates a backend service describer.
2930
func NewBackendServiceDescriber(app, svc string) (*BackendServiceDescriber, error) {
30-
store, err := config.NewStore()
31+
configStore, err := config.NewStore()
3132
if err != nil {
3233
return nil, fmt.Errorf("connect to store: %w", err)
3334
}
34-
meta, err := store.GetService(app, svc)
35+
meta, err := configStore.GetService(app, svc)
3536
if err != nil {
3637
return nil, err
3738
}
39+
deployStore, err := deploy.NewStore(configStore)
40+
if err != nil {
41+
return nil, fmt.Errorf("connect to deploy store: %w", err)
42+
}
3843
opts := &BackendServiceDescriber{
3944
service: meta,
4045
enableResources: false,
41-
store: store,
46+
store: deployStore,
4247
}
4348
opts.initServiceDescriber = func(env string) error {
4449
d, err := NewServiceDescriber(app, env, svc)
@@ -81,33 +86,30 @@ func (d *BackendServiceDescriber) URI(envName string) (string, error) {
8186

8287
// Describe returns info of a backend service.
8388
func (d *BackendServiceDescriber) Describe() (HumanJSONStringer, error) {
84-
environments, err := d.store.ListEnvironments(d.service.App)
89+
environments, err := d.store.ListEnvironmentsDeployedTo(d.service.App, d.service.Name)
8590
if err != nil {
86-
return nil, fmt.Errorf("list environments for application %s: %w", d.service.App, err)
91+
return nil, fmt.Errorf("list deployed environments for application %s: %w", d.service.App, err)
8792
}
8893

8994
var configs []*ServiceConfig
9095
var services []*ServiceDiscovery
9196
var envVars []*EnvVars
9297
for _, env := range environments {
93-
err := d.initServiceDescriber(env.Name)
98+
err := d.initServiceDescriber(env)
9499
if err != nil {
95100
return nil, err
96101
}
97102
svcParams, err := d.svcDescriber.Params()
98-
if err != nil && !IsStackNotExistsErr(err) {
99-
return nil, fmt.Errorf("retrieve service deployment configuration: %w", err)
100-
}
101103
if err != nil {
102-
continue
104+
return nil, fmt.Errorf("retrieve service deployment configuration: %w", err)
103105
}
104106
services = appendServiceDiscovery(services, serviceDiscovery{
105107
Service: d.service.Name,
106108
Port: svcParams[stack.LBWebServiceContainerPortParamKey],
107109
App: d.service.App,
108-
}, env.Name)
110+
}, env)
109111
configs = append(configs, &ServiceConfig{
110-
Environment: env.Name,
112+
Environment: env,
111113
Port: svcParams[stack.LBWebServiceContainerPortParamKey],
112114
Tasks: svcParams[stack.ServiceTaskCountParamKey],
113115
CPU: svcParams[stack.ServiceTaskCPUParamKey],
@@ -117,7 +119,7 @@ func (d *BackendServiceDescriber) Describe() (HumanJSONStringer, error) {
117119
if err != nil {
118120
return nil, fmt.Errorf("retrieve environment variables: %w", err)
119121
}
120-
envVars = append(envVars, flattenEnvVars(env.Name, backendSvcEnvVars)...)
122+
envVars = append(envVars, flattenEnvVars(env, backendSvcEnvVars)...)
121123
}
122124
sort.SliceStable(envVars, func(i, j int) bool { return envVars[i].Environment < envVars[j].Environment })
123125
sort.SliceStable(envVars, func(i, j int) bool { return envVars[i].Name < envVars[j].Name })
@@ -126,13 +128,10 @@ func (d *BackendServiceDescriber) Describe() (HumanJSONStringer, error) {
126128
if d.enableResources {
127129
for _, env := range environments {
128130
stackResources, err := d.svcDescriber.ServiceStackResources()
129-
if err != nil && !IsStackNotExistsErr(err) {
130-
return nil, fmt.Errorf("retrieve service resources: %w", err)
131-
}
132131
if err != nil {
133-
continue
132+
return nil, fmt.Errorf("retrieve service resources: %w", err)
134133
}
135-
resources[env.Name] = flattenResources(stackResources)
134+
resources[env] = flattenResources(stackResources)
136135
}
137136
}
138137

0 commit comments

Comments
 (0)