Skip to content

Commit eccd03e

Browse files
authored
managed only services will only tail logs on deploy. Update info/warning text (#635)
* managed only services will only tail logs. Update info/warning text * code review updates * update code review: text will should managed resources without explicity depends from other services. * update code review: tell uses to put any dangling managed service as dependencies in depends_on section. * update to not use depends_on (not currently supported). use serviceinfo rather than project * update exit text
1 parent b8d5e38 commit eccd03e

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed

src/cmd/cli/command/compose.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,25 @@ import (
1818
"github.com/spf13/cobra"
1919
)
2020

21+
func isManagedService(service *defangv1.Service) bool {
22+
if service == nil {
23+
return false
24+
}
25+
26+
return service.StaticFiles != nil || service.Redis != nil || service.Postgres != nil
27+
}
28+
29+
func GetUnreferencedManagedResources(serviceInfos []*defangv1.ServiceInfo) []string {
30+
managedResources := make([]string, 0)
31+
for _, service := range serviceInfos {
32+
if isManagedService(service.Service) {
33+
managedResources = append(managedResources, service.Service.Name)
34+
}
35+
}
36+
37+
return managedResources
38+
}
39+
2140
func makeComposeUpCmd() *cobra.Command {
2241
behavior := Behavior(defangv1.Behavior_DEVELOPMENT)
2342
composeUpCmd := &cobra.Command{
@@ -45,6 +64,11 @@ func makeComposeUpCmd() *cobra.Command {
4564

4665
printPlaygroundPortalServiceURLs(deploy.Services)
4766

67+
var managedResources = GetUnreferencedManagedResources(deploy.Services)
68+
if len(managedResources) > 0 {
69+
term.Warnf("Defang cannot monitor status of the following managed service(s): %v.\n To check if the managed service is up, check the status of the service which depends on it.", managedResources)
70+
}
71+
4872
if detach {
4973
term.Info("Detached.")
5074
return nil
@@ -107,6 +131,8 @@ func makeComposeUpCmd() *cobra.Command {
107131
if errors.As(context.Cause(tailCtx), &errDeploymentFailed) {
108132
term.Warn(errDeploymentFailed)
109133
failedServices = []string{errDeploymentFailed.Service}
134+
} else if len(managedResources) > 0 {
135+
term.Warn("Managed services have been deployed but not all services may be available yet.")
110136
} else {
111137
term.Warn("Deployment is not finished. Service(s) might not be running.")
112138
// TODO: some services might be OK and we should only debug the ones that are not

src/cmd/cli/command/compose_test.go

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package command
2+
3+
import (
4+
"testing"
5+
6+
defangv1 "github.com/DefangLabs/defang/src/protos/io/defang/v1"
7+
)
8+
9+
func TestGetUnreferencedManagedResources(t *testing.T) {
10+
11+
t.Run("no services", func(t *testing.T) {
12+
project := []*defangv1.ServiceInfo{}
13+
managed := GetUnreferencedManagedResources(project)
14+
if len(managed) != 0 {
15+
t.Errorf("Expected 0 managed resources, got %d (%v)", len(managed), managed)
16+
}
17+
})
18+
19+
t.Run("one service all managed", func(t *testing.T) {
20+
project := []*defangv1.ServiceInfo{}
21+
project = append(project, &defangv1.ServiceInfo{
22+
Service: &defangv1.Service{Name: "service1", Postgres: &defangv1.Postgres{}}})
23+
24+
managed := GetUnreferencedManagedResources(project)
25+
if len(managed) != 1 {
26+
t.Errorf("Expected 1 managed resource, got %d (%v)", len(managed), managed)
27+
}
28+
})
29+
30+
t.Run("one service unmanaged", func(t *testing.T) {
31+
project := []*defangv1.ServiceInfo{}
32+
project = append(project, &defangv1.ServiceInfo{
33+
Service: &defangv1.Service{Name: "service1"}})
34+
35+
managed := GetUnreferencedManagedResources(project)
36+
if len(managed) != 0 {
37+
t.Errorf("Expected 0 managed resource, got %d (%v)", len(managed), managed)
38+
}
39+
})
40+
41+
t.Run("one service unmanaged, one service managed", func(t *testing.T) {
42+
project := []*defangv1.ServiceInfo{}
43+
project = append(project, &defangv1.ServiceInfo{
44+
Service: &defangv1.Service{Name: "service1"}})
45+
project = append(project, &defangv1.ServiceInfo{
46+
Service: &defangv1.Service{Name: "service2", Postgres: &defangv1.Postgres{}}})
47+
48+
managed := GetUnreferencedManagedResources(project)
49+
if len(managed) != 1 {
50+
t.Errorf("Expected 1 managed resource, got %d (%v)", len(managed), managed)
51+
}
52+
})
53+
54+
t.Run("two service two unmanaged", func(t *testing.T) {
55+
project := []*defangv1.ServiceInfo{}
56+
project = append(project, &defangv1.ServiceInfo{
57+
Service: &defangv1.Service{Name: "service1"}})
58+
project = append(project, &defangv1.ServiceInfo{
59+
Service: &defangv1.Service{Name: "service2"}})
60+
61+
managed := GetUnreferencedManagedResources(project)
62+
if len(managed) != 0 {
63+
t.Errorf("Expected 0 managed resource, got %d (%v)", len(managed), managed)
64+
}
65+
})
66+
67+
t.Run("one service two managed", func(t *testing.T) {
68+
project := []*defangv1.ServiceInfo{}
69+
project = append(project, &defangv1.ServiceInfo{
70+
Service: &defangv1.Service{Name: "service1", Postgres: &defangv1.Postgres{}, Redis: &defangv1.Redis{}}})
71+
72+
managed := GetUnreferencedManagedResources(project)
73+
if len(managed) != 1 {
74+
t.Errorf("Expected 1 managed resource, got %d (%s)", len(managed), managed)
75+
}
76+
})
77+
}

0 commit comments

Comments
 (0)