Skip to content

Commit 6bd2ddc

Browse files
committed
feat: pass stack config through to pulumi providers
1 parent 0c9439e commit 6bd2ddc

File tree

22 files changed

+431
-226
lines changed

22 files changed

+431
-226
lines changed

hack/allmods/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
"os"
2222
"strings"
2323

24-
"github.com/golangci/golangci-lint/pkg/sliceutil"
24+
"golang.org/x/exp/slices"
2525
"golang.org/x/mod/modfile"
2626
)
2727

@@ -41,7 +41,7 @@ func main() {
4141
mods := []string{}
4242

4343
for _, r := range mf.Require {
44-
if sliceutil.Contains(ignoreList, r.Mod.Path) {
44+
if slices.Contains(ignoreList, r.Mod.Path) {
4545
continue
4646
}
4747

pkg/cmd/stack/root.go

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"log"
2323
"os"
2424
"path"
25-
"path/filepath"
2625
"runtime"
2726

2827
"github.com/AlecAivazis/survey/v2"
@@ -89,21 +88,18 @@ var newStackCmd = &cobra.Command{
8988
pName := ""
9089
err = survey.AskOne(&survey.Select{
9190
Message: "Which Cloud do you wish to deploy to?",
92-
Default: stack.Aws,
93-
Options: stack.Providers,
91+
Default: types.Aws,
92+
Options: types.Providers,
9493
}, &pName)
9594
cobra.CheckErr(err)
9695

9796
pc, err := project.ConfigFromProjectPath("")
9897
cobra.CheckErr(err)
9998

100-
prov, err := provider.NewProvider(project.New(pc), &stack.Config{Name: name, Provider: pName}, map[string]string{}, &types.ProviderOpts{})
99+
prov, err := provider.NewProvider(project.New(pc), name, pName, map[string]string{}, &types.ProviderOpts{})
101100
cobra.CheckErr(err)
102101

103-
sc, err := prov.Ask()
104-
cobra.CheckErr(err)
105-
106-
err = sc.ToFile(filepath.Join(pc.Dir, fmt.Sprintf("nitric-%s.yaml", sc.Name)))
102+
err = prov.AskAndSave()
107103
cobra.CheckErr(err)
108104
},
109105
Args: cobra.MaximumNArgs(2),
@@ -175,7 +171,7 @@ var stackUpdateCmd = &cobra.Command{
175171
}
176172
tasklet.MustRun(codeAsConfig, tasklet.Opts{})
177173

178-
p, err := provider.NewProvider(proj, s, envMap, &types.ProviderOpts{Force: force})
174+
p, err := provider.NewProvider(proj, s.Name, s.Provider, envMap, &types.ProviderOpts{Force: force})
179175
cobra.CheckErr(err)
180176

181177
d := &types.Deployment{}
@@ -236,7 +232,7 @@ nitric stack down -e aws -y`,
236232
proj, err := project.FromConfig(config)
237233
cobra.CheckErr(err)
238234

239-
p, err := provider.NewProvider(proj, s, map[string]string{}, &types.ProviderOpts{Force: true})
235+
p, err := provider.NewProvider(proj, s.Name, s.Provider, map[string]string{}, &types.ProviderOpts{Force: true})
240236
cobra.CheckErr(err)
241237

242238
deploy := tasklet.Runner{
@@ -275,7 +271,7 @@ nitric stack list -s aws
275271
proj, err := project.FromConfig(config)
276272
cobra.CheckErr(err)
277273

278-
p, err := provider.NewProvider(proj, s, map[string]string{}, &types.ProviderOpts{})
274+
p, err := provider.NewProvider(proj, s.Name, s.Provider, map[string]string{}, &types.ProviderOpts{})
279275
cobra.CheckErr(err)
280276

281277
deps, err := p.List()

pkg/codeconfig/codeconfig.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,7 @@ func (c *codeConfig) ToProject() (*project.Project, error) {
606606

607607
fun, ok := s.Functions[f.name]
608608
if !ok {
609-
fun, err = project.FunctionFromHandler(handler, s.Dir)
609+
fun, err = project.FunctionFromHandler(handler)
610610
if err != nil {
611611
errs.Push(fmt.Errorf("can not create function from %s %w", handler, err))
612612
continue

pkg/output/format_test.go

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,11 @@ func Test_printStruct(t *testing.T) {
3535
}{
3636
{
3737
name: "json tags",
38-
object: stack.Config{Name: "prod", Provider: "azure", Region: "somewhere"},
39-
expect: `+----------+-----------+
40-
| NAME | prod |
41-
| PROVIDER | azure |
42-
| REGION | somewhere |
43-
+----------+-----------+
38+
object: stack.Config{Name: "prod", Provider: "azure"},
39+
expect: `+----------+-------+
40+
| NAME | prod |
41+
| PROVIDER | azure |
42+
+----------+-------+
4443
`,
4544
},
4645
}
@@ -64,15 +63,15 @@ func Test_printList(t *testing.T) {
6463
{
6564
name: "json tags",
6665
object: []stack.Config{
67-
{Name: "a", Provider: "azure", Region: "somewhere"},
68-
{Name: "b", Provider: "aws", Region: "xyz"},
66+
{Name: "a", Provider: "azure"},
67+
{Name: "b", Provider: "aws"},
6968
},
70-
expect: `+------+----------+-----------+
71-
| NAME | PROVIDER | REGION |
72-
+------+----------+-----------+
73-
| b | aws | xyz |
74-
| a | azure | somewhere |
75-
+------+----------+-----------+
69+
expect: `+------+----------+
70+
| NAME | PROVIDER |
71+
+------+----------+
72+
| b | aws |
73+
| a | azure |
74+
+------+----------+
7675
`,
7776
},
7877
}
@@ -99,15 +98,15 @@ func Test_printMap(t *testing.T) {
9998
{
10099
name: "json tags",
101100
object: map[string]stack.Config{
102-
"t1": {Provider: "azure", Region: "somewhere"},
103-
"t3": {Provider: "aws", Name: "foo"},
101+
"t1": {Provider: "azure"},
102+
"t3": {Name: "foo", Provider: "aws"},
104103
},
105-
wantOut: `+-----+------+----------+-----------+
106-
| KEY | NAME | PROVIDER | REGION |
107-
+-----+------+----------+-----------+
108-
| t1 | | azure | somewhere |
109-
| t3 | foo | aws | |
110-
+-----+------+----------+-----------+
104+
wantOut: `+-----+------+----------+
105+
| KEY | NAME | PROVIDER |
106+
+-----+------+----------+
107+
| t1 | | azure |
108+
| t3 | foo | aws |
109+
+-----+------+----------+
111110
`,
112111
},
113112
}

pkg/project/options.go

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,44 +30,44 @@ import (
3030

3131
var stackPath string
3232

33-
func FromConfig(p *Config) (*Project, error) {
34-
s := New(p)
33+
func FromConfig(c *Config) (*Project, error) {
34+
p := New(c)
3535

36-
for _, g := range p.Handlers {
37-
maybeFile := filepath.Join(s.Dir, g)
36+
for _, h := range c.Handlers {
37+
maybeFile := filepath.Join(p.Dir, h)
3838

3939
if _, err := os.Stat(maybeFile); err != nil {
40-
fs, err := utils.GlobInDir(stackPath, g)
40+
fs, err := utils.GlobInDir(stackPath, h)
4141
if err != nil {
4242
return nil, err
4343
}
4444

4545
for _, f := range fs {
46-
fn, err := FunctionFromHandler(f, s.Dir)
46+
fn, err := FunctionFromHandler(f)
4747
if err != nil {
4848
return nil, err
4949
}
5050

51-
s.Functions[fn.Name] = fn
51+
p.Functions[fn.Name] = fn
5252
}
5353
} else {
54-
fn, err := FunctionFromHandler(g, s.Dir)
54+
fn, err := FunctionFromHandler(h)
5555
if err != nil {
5656
return nil, err
5757
}
5858

59-
s.Functions[fn.Name] = fn
59+
p.Functions[fn.Name] = fn
6060
}
6161
}
6262

63-
if len(s.Functions) == 0 {
64-
return nil, fmt.Errorf("no functions were found with the glob '%s', try a new pattern", strings.Join(p.Handlers, ","))
63+
if len(p.Functions) == 0 {
64+
return nil, fmt.Errorf("no functions were found with the glob '%s', try a new pattern", strings.Join(c.Handlers, ","))
6565
}
6666

67-
return s, nil
67+
return p, nil
6868
}
6969

70-
func FunctionFromHandler(h, stackDir string) (Function, error) {
70+
func FunctionFromHandler(h string) (Function, error) {
7171
pterm.Debug.Println("Using function from " + h)
7272

7373
rt, err := runtime.NewRunTimeFromHandler(h)
@@ -76,7 +76,9 @@ func FunctionFromHandler(h, stackDir string) (Function, error) {
7676
}
7777

7878
return Function{
79-
ComputeUnit: ComputeUnit{Name: rt.ContainerName()},
80-
Handler: h,
79+
ComputeUnit: ComputeUnit{
80+
Name: rt.ContainerName(),
81+
},
82+
Handler: h,
8183
}, nil
8284
}

pkg/project/options_test.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,10 @@ func TestFromConfig(t *testing.T) {
4343
Name: "project",
4444
Functions: map[string]Function{
4545
"project": {
46-
Handler: "types.go",
47-
ComputeUnit: ComputeUnit{Name: "project"},
46+
Handler: "types.go",
47+
ComputeUnit: ComputeUnit{
48+
Name: "project",
49+
},
4850
},
4951
},
5052
},
@@ -61,8 +63,10 @@ func TestFromConfig(t *testing.T) {
6163
Name: "pkg",
6264
Functions: map[string]Function{
6365
"stack": {
64-
Handler: "stack/options.go",
65-
ComputeUnit: ComputeUnit{Name: "stack"},
66+
Handler: "stack/options.go",
67+
ComputeUnit: ComputeUnit{
68+
Name: "stack",
69+
},
6670
},
6771
},
6872
},

pkg/project/types.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,17 @@ type ComputeUnit struct {
3939
// Triggers used to invoke this compute unit, e.g. Topic Subscriptions
4040
Triggers Triggers `yaml:"triggers,omitempty"`
4141

42-
// The memory of the compute instance in MB
42+
// The memory of the compute instance in MB: default 128
4343
Memory int `yaml:"memory,omitempty"`
4444

45-
// The minimum number of instances to keep alive
45+
// The minimum number of instances to keep alive: default 0
4646
MinScale int `yaml:"minScale,omitempty"`
4747

48-
// The maximum number of instances to scale to
48+
// The maximum number of instances to scale to: default 10
4949
MaxScale int `yaml:"maxScale,omitempty"`
50+
51+
// The max running time of the function: default 15
52+
Timeout int `yaml:"timeout,omitempty"`
5053
}
5154

5255
type Function struct {

pkg/provider/generator.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,14 @@ import (
2222
"github.com/nitrictech/cli/pkg/project"
2323
"github.com/nitrictech/cli/pkg/provider/pulumi"
2424
"github.com/nitrictech/cli/pkg/provider/types"
25-
"github.com/nitrictech/cli/pkg/stack"
2625
"github.com/nitrictech/cli/pkg/utils"
2726
)
2827

29-
func NewProvider(p *project.Project, s *stack.Config, envMap map[string]string, opts *types.ProviderOpts) (types.Provider, error) {
30-
switch s.Provider {
31-
case stack.Aws, stack.Azure, stack.Digitalocean, stack.Gcp:
32-
return pulumi.New(p, s, envMap, opts)
28+
func NewProvider(p *project.Project, name, provider string, envMap map[string]string, opts *types.ProviderOpts) (types.Provider, error) {
29+
switch provider {
30+
case types.Aws, types.Azure, types.Digitalocean, types.Gcp:
31+
return pulumi.New(p, name, provider, envMap, opts)
3332
default:
34-
return nil, utils.NewNotSupportedErr(fmt.Sprintf("provider %s is not supported", s.Provider))
33+
return nil, utils.NewNotSupportedErr(fmt.Sprintf("provider %s is not supported", provider))
3534
}
3635
}

0 commit comments

Comments
 (0)