Skip to content

Commit 7f0f9af

Browse files
committed
feat(deploy): Print the api endpoints after deploying
1 parent 7872c10 commit 7f0f9af

File tree

7 files changed

+68
-23
lines changed

7 files changed

+68
-23
lines changed

pkg/cmd/deployment/root.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/nitrictech/cli/pkg/codeconfig"
2727
"github.com/nitrictech/cli/pkg/output"
2828
"github.com/nitrictech/cli/pkg/provider"
29+
"github.com/nitrictech/cli/pkg/provider/types"
2930
"github.com/nitrictech/cli/pkg/stack"
3031
"github.com/nitrictech/cli/pkg/target"
3132
"github.com/nitrictech/cli/pkg/tasklet"
@@ -97,14 +98,22 @@ nitric deployment apply -n prod -t aws`,
9798
}
9899
tasklet.MustRun(buildImages, tasklet.Opts{})
99100

101+
d := &types.Deployment{}
100102
deploy := tasklet.Runner{
101103
StartMsg: "Deploying..",
102104
Runner: func(progress output.Progress) error {
103-
return p.Apply(progress, deploymentName)
105+
d, err = p.Apply(progress, deploymentName)
106+
return err
104107
},
105108
StopMsg: "Stack",
106109
}
107110
tasklet.MustRun(deploy, tasklet.Opts{SuccessPrefix: "Deployed"})
111+
112+
rows := [][]string{{"API", "Endpoint"}}
113+
for k, v := range d.ApiEndpoints {
114+
rows = append(rows, []string{k, v})
115+
}
116+
_ = pterm.DefaultTable.WithBoxed().WithData(rows).Render()
108117
},
109118
Args: cobra.MinimumNArgs(0),
110119
}

pkg/provider/pulumi/aws/gateway.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ func newApiGateway(ctx *pulumi.Context, name string, args *ApiGatewayArgs, opts
5151
return nil, err
5252
}
5353

54+
opts = append(opts, pulumi.Parent(res))
55+
5456
nameArnPairs := make([]interface{}, 0, len(args.LambdaFunctions))
5557

5658
// collect name arn pairs for output iteration
@@ -103,7 +105,7 @@ func newApiGateway(ctx *pulumi.Context, name string, args *ApiGatewayArgs, opts
103105
Body: doc,
104106
ProtocolType: pulumi.String("HTTP"),
105107
Tags: common.Tags(ctx, name),
106-
}, pulumi.Parent(res))
108+
}, opts...)
107109
if err != nil {
108110
return nil, err
109111
}
@@ -113,7 +115,7 @@ func newApiGateway(ctx *pulumi.Context, name string, args *ApiGatewayArgs, opts
113115
Name: pulumi.String("$default"),
114116
ApiId: res.Api.ID(),
115117
Tags: common.Tags(ctx, name+"DefaultStage"),
116-
}, pulumi.Parent(res))
118+
}, opts...)
117119
if err != nil {
118120
return nil, err
119121
}
@@ -125,16 +127,19 @@ func newApiGateway(ctx *pulumi.Context, name string, args *ApiGatewayArgs, opts
125127
Action: pulumi.String("lambda:InvokeFunction"),
126128
Principal: pulumi.String("apigateway.amazonaws.com"),
127129
SourceArn: pulumi.Sprintf("%s/*/*/*", res.Api.ExecutionArn),
128-
}, pulumi.Parent(res))
130+
}, opts...)
129131
if err != nil {
130132
return nil, err
131133
}
132134
}
133135

134-
return res, ctx.RegisterResourceOutputs(res, pulumi.Map{
135-
"name": pulumi.String(name),
136-
"api": res.Api,
137-
})
136+
endPoint := res.Api.ApiEndpoint.ApplyT(func(ep string) string {
137+
return ep
138+
}).(pulumi.StringInput)
139+
140+
ctx.Export("api:"+name, endPoint)
141+
142+
return res, nil
138143
}
139144

140145
func awsOperation(op *openapi3.Operation, funcs map[string]string) *openapi3.Operation {

pkg/provider/pulumi/aws/lambda.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ func newLambda(ctx *pulumi.Context, name string, args *LambdaArgs, opts ...pulum
5151
return nil, err
5252
}
5353

54+
opts = append(opts, pulumi.Parent(res))
55+
5456
tmpJSON, err := json.Marshal(map[string]interface{}{
5557
"Version": "2012-10-17",
5658
"Statement": []map[string]interface{}{
@@ -71,15 +73,15 @@ func newLambda(ctx *pulumi.Context, name string, args *LambdaArgs, opts ...pulum
7173
res.Role, err = iam.NewRole(ctx, name+"LambdaRole", &iam.RoleArgs{
7274
AssumeRolePolicy: pulumi.String(tmpJSON),
7375
Tags: common.Tags(ctx, name+"LambdaRole"),
74-
}, pulumi.Parent(res))
76+
}, opts...)
7577
if err != nil {
7678
return nil, err
7779
}
7880

7981
_, err = iam.NewRolePolicyAttachment(ctx, name+"LambdaBasicExecution", &iam.RolePolicyAttachmentArgs{
8082
PolicyArn: iam.ManagedPolicyAWSLambdaBasicExecutionRole,
8183
Role: res.Role.ID(),
82-
}, pulumi.Parent(res))
84+
}, opts...)
8385
if err != nil {
8486
return nil, err
8587
}
@@ -112,7 +114,7 @@ func newLambda(ctx *pulumi.Context, name string, args *LambdaArgs, opts ...pulum
112114
_, err = iam.NewRolePolicy(ctx, name+"ListAccess", &iam.RolePolicyArgs{
113115
Role: res.Role.ID(),
114116
Policy: pulumi.String(tmpJSON),
115-
}, pulumi.Parent(res))
117+
}, opts...)
116118
if err != nil {
117119
return nil, err
118120
}
@@ -150,7 +152,7 @@ func newLambda(ctx *pulumi.Context, name string, args *LambdaArgs, opts ...pulum
150152
_, err = iam.NewRolePolicy(ctx, name+"SecretsAccess", &iam.RolePolicyArgs{
151153
Role: res.Role.ID(),
152154
Policy: pulumi.String(tmpJSON),
153-
}, pulumi.Parent(res))
155+
}, opts...)
154156
if err != nil {
155157
return nil, err
156158
}
@@ -163,7 +165,7 @@ func newLambda(ctx *pulumi.Context, name string, args *LambdaArgs, opts ...pulum
163165
PackageType: pulumi.String("Image"),
164166
Role: res.Role.Arn,
165167
Tags: common.Tags(ctx, name),
166-
}, pulumi.Parent(res))
168+
}, opts...)
167169
if err != nil {
168170
return nil, err
169171
}
@@ -176,7 +178,7 @@ func newLambda(ctx *pulumi.Context, name string, args *LambdaArgs, opts ...pulum
176178
Function: res.Function.Name,
177179
Principal: pulumi.String("sns.amazonaws.com"),
178180
Action: pulumi.String("lambda:InvokeFunction"),
179-
}, pulumi.Parent(res))
181+
}, opts...)
180182
if err != nil {
181183
return nil, err
182184
}
@@ -185,7 +187,7 @@ func newLambda(ctx *pulumi.Context, name string, args *LambdaArgs, opts ...pulum
185187
Endpoint: res.Function.Arn,
186188
Protocol: pulumi.String("lambda"),
187189
Topic: topic.ID(), // TODO check (was topic.sns)
188-
}, pulumi.Parent(res))
190+
}, opts...)
189191
if err != nil {
190192
return nil, err
191193
}

pkg/provider/pulumi/aws/schedule.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ func (a *awsProvider) newSchedule(ctx *pulumi.Context, name string, args Schedul
5050
return nil, err
5151
}
5252

53+
opts = append(opts, pulumi.Parent(res))
54+
5355
awsCronValue, err := cron.ConvertToAWS(args.Expression)
5456
if err != nil {
5557
return nil, err
@@ -58,15 +60,15 @@ func (a *awsProvider) newSchedule(ctx *pulumi.Context, name string, args Schedul
5860
res.EventRule, err = cloudwatch.NewEventRule(ctx, name+"Schedule", &cloudwatch.EventRuleArgs{
5961
ScheduleExpression: pulumi.String(awsCronValue),
6062
Tags: common.Tags(ctx, name+"Schedule"),
61-
}, pulumi.Parent(res))
63+
}, opts...)
6264
if err != nil {
6365
return nil, err
6466
}
6567

6668
res.EventTarget, err = cloudwatch.NewEventTarget(ctx, name+"Target", &cloudwatch.EventTargetArgs{
6769
Rule: res.EventRule.Name,
6870
Arn: args.TopicArn,
69-
}, pulumi.Parent(res))
71+
}, opts...)
7072
if err != nil {
7173
return nil, err
7274
}
@@ -95,7 +97,7 @@ func (a *awsProvider) newSchedule(ctx *pulumi.Context, name string, args Schedul
9597
_, err = sns.NewTopicPolicy(ctx, fmt.Sprintf("%sTarget%vPolicy", name, args.TopicName), &sns.TopicPolicyArgs{
9698
Arn: args.TopicArn,
9799
Policy: pdocJSON,
98-
}, pulumi.Parent(res))
100+
}, opts...)
99101

100102
return res, err
101103
}

pkg/provider/pulumi/azure/apimanagement.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package azure
1818

1919
import (
20+
"fmt"
21+
2022
"github.com/getkin/kin-openapi/openapi3"
2123
"github.com/pkg/errors"
2224
apimanagement "github.com/pulumi/pulumi-azure-native/sdk/go/azure/apimanagement/v20201201"
@@ -90,6 +92,15 @@ func newAzureApiManagement(ctx *pulumi.Context, name string, args *AzureApiManag
9092
return nil, err
9193
}
9294

95+
endPoint := res.Api.ServiceUrl.ApplyT(func(ep *string) (string, error) {
96+
if ep == nil {
97+
return "", fmt.Errorf("api %s returned nil serviceUrl", res.Name)
98+
}
99+
return *ep, nil
100+
}).(pulumi.StringInput)
101+
102+
ctx.Export("api:"+name, endPoint)
103+
93104
for _, pathItem := range args.OpenAPISpec.Paths {
94105
for _, op := range pathItem.Operations() {
95106
if v, ok := op.Extensions["x-nitric-target"]; ok {

pkg/provider/pulumi/generator.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ package pulumi
1818

1919
import (
2020
"context"
21+
"fmt"
22+
"strings"
2123

2224
"github.com/pkg/errors"
2325
"github.com/pulumi/pulumi/sdk/v3/go/auto"
@@ -98,18 +100,28 @@ func (p *pulumiDeployment) load(name string) (*auto.Stack, error) {
98100
return &s, errors.WithMessage(err, "Refresh")
99101
}
100102

101-
func (p *pulumiDeployment) Apply(log output.Progress, name string) error {
103+
func (p *pulumiDeployment) Apply(log output.Progress, name string) (*types.Deployment, error) {
102104
s, err := p.load(name)
103105
if err != nil {
104-
return errors.WithMessage(err, "loading pulumi stack")
106+
return nil, errors.WithMessage(err, "loading pulumi stack")
105107
}
106108

107109
res, err := s.Up(context.Background(), updateLoggingOpts(log)...)
108110
defer p.p.CleanUp()
109111
if err != nil {
110-
return errors.WithMessage(err, "Updating pulumi stack "+res.Summary.Message)
112+
return nil, errors.WithMessage(err, "Updating pulumi stack "+res.Summary.Message)
111113
}
112-
return nil
114+
115+
d := &types.Deployment{
116+
ApiEndpoints: map[string]string{},
117+
}
118+
119+
for k, v := range res.Outputs {
120+
if strings.HasPrefix(k, "api:") {
121+
d.ApiEndpoints[strings.TrimPrefix(k, "api:")] = fmt.Sprint(v.Value)
122+
}
123+
}
124+
return d, nil
113125
}
114126

115127
func (p *pulumiDeployment) List() (interface{}, error) {

pkg/provider/types/interface.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,12 @@ package types
1818

1919
import "github.com/nitrictech/cli/pkg/output"
2020

21+
type Deployment struct {
22+
ApiEndpoints map[string]string `json:"apiEndpoints,omitempty"`
23+
}
24+
2125
type Provider interface {
22-
Apply(log output.Progress, deploymentName string) error
26+
Apply(log output.Progress, deploymentName string) (*Deployment, error)
2327
Delete(log output.Progress, deploymentName string) error
2428
List() (interface{}, error)
2529
//Status()

0 commit comments

Comments
 (0)