Skip to content

Commit d6be235

Browse files
committed
Add account id to BYOC delegate domain name
1 parent 2a0552a commit d6be235

File tree

2 files changed

+34
-17
lines changed

2 files changed

+34
-17
lines changed

src/pkg/cli/client/byoc/aws/byoc.go

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,17 @@ func (b *ByocAws) setUp(ctx context.Context) error {
101101
term.Debug("Failed to get subdomain zone:", err)
102102
// return err; FIXME: ignore this error for now
103103
} else {
104-
b.ProjectDomain = b.getProjectDomain(domain.Zone)
104+
// Use STS to get the account ID
105+
cfg, err := b.driver.LoadConfig(ctx)
106+
if err != nil {
107+
return annotateAwsError(err)
108+
}
109+
identity, err := sts.NewFromConfig(cfg).GetCallerIdentity(ctx, &sts.GetCallerIdentityInput{})
110+
if err != nil {
111+
return annotateAwsError(err)
112+
}
113+
114+
b.ProjectDomain = b.getProjectDomain(*identity.Account, domain.Zone)
105115
if b.ProjectDomain != "" {
106116
b.ShouldDelegateSubdomain = true
107117
}
@@ -637,15 +647,22 @@ func (b *ByocAws) getPrivateFqdn(fqn qualifiedName) string {
637647
return fmt.Sprintf("%s.%s", safeFqn, b.PrivateDomain) // TODO: consider merging this with ServiceDNS
638648
}
639649

640-
func (b *ByocAws) getProjectDomain(zone string) string {
650+
func (b *ByocAws) getProjectDomain(account, zone string) string {
641651
if b.ProjectName == "" {
642652
return "" // no project name => no custom domain
643653
}
654+
var buf strings.Builder
655+
if account != "" {
656+
buf.WriteString(account)
657+
buf.WriteByte('.')
658+
}
644659
projectLabel := byoc.DnsSafeLabel(b.ProjectName)
645-
if projectLabel == byoc.DnsSafeLabel(b.TenantID) {
646-
return byoc.DnsSafe(zone) // the zone will already have the tenant ID
660+
if projectLabel != byoc.DnsSafeLabel(b.TenantID) {
661+
buf.WriteString(projectLabel)
662+
buf.WriteByte('.')
647663
}
648-
return projectLabel + "." + byoc.DnsSafe(zone)
664+
buf.WriteString(byoc.DnsSafe(zone))
665+
return buf.String()
649666
}
650667

651668
func (b *ByocAws) TearDown(ctx context.Context) error {

src/pkg/cli/client/byoc/aws/byoc_test.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,17 @@ func TestDomainMultipleProjectSupport(t *testing.T) {
2323
PublicFqdn string
2424
PrivateFqdn string
2525
}{
26-
{"tenant1", "tenant1", "web", port80, "web--80.example.com", "web.example.com", "web.tenant1.internal"},
27-
{"tenant1", "tenant1", "web", hostModePort, "web.tenant1.internal:80", "web.example.com", "web.tenant1.internal"},
28-
{"project1", "tenant1", "web", port80, "web--80.project1.example.com", "web.project1.example.com", "web.project1.internal"},
29-
{"Project1", "tenant1", "web", port80, "web--80.project1.example.com", "web.project1.example.com", "web.project1.internal"},
30-
{"project1", "tenant1", "web", hostModePort, "web.project1.internal:80", "web.project1.example.com", "web.project1.internal"},
31-
{"project1", "tenant1", "api", port8080, "api--8080.project1.example.com", "api.project1.example.com", "api.project1.internal"},
32-
{"tenant1", "tenant1", "web", port80, "web--80.example.com", "web.example.com", "web.tenant1.internal"},
33-
{"tenant1", "tenant1", "web", hostModePort, "web.tenant1.internal:80", "web.example.com", "web.tenant1.internal"},
34-
{"Project1", "tenant1", "web", port80, "web--80.project1.example.com", "web.project1.example.com", "web.project1.internal"},
35-
{"Tenant2", "tenant1", "web", port80, "web--80.tenant2.example.com", "web.tenant2.example.com", "web.tenant2.internal"},
36-
{"tenant1", "tenAnt1", "web", port80, "web--80.example.com", "web.example.com", "web.tenant1.internal"},
26+
{"tenant1", "tenant1", "web", port80, "web--80.123456789012.example.com", "web.123456789012.example.com", "web.tenant1.internal"},
27+
{"tenant1", "tenant1", "web", hostModePort, "web.tenant1.internal:80", "web.123456789012.example.com", "web.tenant1.internal"},
28+
{"project1", "tenant1", "web", port80, "web--80.123456789012.project1.example.com", "web.123456789012.project1.example.com", "web.project1.internal"},
29+
{"Project1", "tenant1", "web", port80, "web--80.123456789012.project1.example.com", "web.123456789012.project1.example.com", "web.project1.internal"},
30+
{"project1", "tenant1", "web", hostModePort, "web.project1.internal:80", "web.123456789012.project1.example.com", "web.project1.internal"},
31+
{"project1", "tenant1", "api", port8080, "api--8080.123456789012.project1.example.com", "api.123456789012.project1.example.com", "api.project1.internal"},
32+
{"tenant1", "tenant1", "web", port80, "web--80.123456789012.example.com", "web.123456789012.example.com", "web.tenant1.internal"},
33+
{"tenant1", "tenant1", "web", hostModePort, "web.tenant1.internal:80", "web.123456789012.example.com", "web.tenant1.internal"},
34+
{"Project1", "tenant1", "web", port80, "web--80.123456789012.project1.example.com", "web.123456789012.project1.example.com", "web.project1.internal"},
35+
{"Tenant2", "tenant1", "web", port80, "web--80.123456789012.tenant2.example.com", "web.123456789012.tenant2.example.com", "web.tenant2.internal"},
36+
{"tenant1", "tenAnt1", "web", port80, "web--80.123456789012.example.com", "web.123456789012.example.com", "web.tenant1.internal"},
3737
}
3838

3939
for _, tt := range tests {
@@ -43,7 +43,7 @@ func TestDomainMultipleProjectSupport(t *testing.T) {
4343
if _, err := b.LoadProject(context.Background()); err != nil {
4444
t.Fatalf("LoadProject() failed: %v", err)
4545
}
46-
b.ProjectDomain = b.getProjectDomain("example.com")
46+
b.ProjectDomain = b.getProjectDomain("123456789012", "example.com")
4747

4848
endpoint := b.getEndpoint(tt.Fqn, tt.Port)
4949
if endpoint != tt.EndPoint {

0 commit comments

Comments
 (0)