@@ -3,19 +3,23 @@ package main
3
3
import (
4
4
_ "embed"
5
5
"fmt"
6
- "html/template"
7
6
"log"
8
- "os "
7
+ "text/template "
9
8
"tftemplate/models"
10
9
11
10
"github.com/AlecAivazis/survey/v2"
12
11
)
13
12
14
- //go:embed resource.go.tmpl
15
- var resourceTemplateFile string
16
-
17
- //go:embed resource_test.go.tmpl
18
- var resourceTestTemplateFile string
13
+ var (
14
+ //go:embed resource.go.tmpl
15
+ resourceTemplateFile string
16
+ //go:embed resource_test.go.tmpl
17
+ resourceTestTemplateFile string
18
+ //go:embed helpers.go.tmpl
19
+ resourceHelpersTemplateFile string
20
+ //go:embed waiters.go.tmpl
21
+ resourceWaitersTemplateFile string
22
+ )
19
23
20
24
var resourceQS = []* survey.Question {
21
25
{
@@ -35,48 +39,74 @@ var resourceQS = []*survey.Question{
35
39
Default : "zone" ,
36
40
},
37
41
},
42
+ {
43
+ Name : "helpers" ,
44
+ Prompt : & survey.Confirm {
45
+ Message : "Generate helpers ? Will override scaleway/helpers_{api}.go" ,
46
+ Default : false ,
47
+ },
48
+ },
49
+ {
50
+ Name : "waiters" ,
51
+ Prompt : & survey.Confirm {
52
+ Message : "Generate helpers ? Will be added to scaleway/helpers_{api}.go" ,
53
+ Default : true ,
54
+ },
55
+ },
38
56
}
39
57
40
58
func main () {
41
59
resourceInput := struct {
42
60
API string
43
61
Resource string
44
62
Locality string
63
+ Helpers bool
64
+ Waiters bool
45
65
}{}
46
66
err := survey .Ask (resourceQS , & resourceInput )
47
67
if err != nil {
48
68
log .Fatalln (err )
49
69
}
50
70
resourceData := models .NewResourceTemplate (resourceInput .API , resourceInput .Resource , resourceInput .Locality )
51
71
52
- resourceTemplate , err := template .New ("resource" ).Parse (resourceTemplateFile )
53
- if err != nil {
54
- log .Fatalln (err )
55
- }
56
- resourceTestTemplate , err := template .New ("resource" ).Parse (resourceTestTemplateFile )
57
- if err != nil {
58
- log .Fatalln (err )
59
- }
60
- resourceFile , err := os .Create (fmt .Sprintf ("../../scaleway/resource_%s.go" , resourceData .ResourceHCL ))
61
- if err != nil {
62
- log .Fatalln (err )
63
- }
64
- defer resourceFile .Close ()
65
- err = resourceTemplate .Execute (resourceFile , resourceData )
66
- if err != nil {
67
- log .Println (err )
68
- return
72
+ templates := []* TerraformTemplate {
73
+ {
74
+ FileName : fmt .Sprintf ("../../scaleway/resource_%s.go" , resourceData .ResourceHCL ),
75
+ TemplateFile : resourceTemplateFile ,
76
+ },
77
+ {
78
+ FileName : fmt .Sprintf ("../../scaleway/resource_%s_test.go" , resourceData .ResourceHCL ),
79
+ TemplateFile : resourceTestTemplateFile ,
80
+ },
81
+ {
82
+ FileName : fmt .Sprintf ("../../scaleway/helpers_%s.go" , resourceData .API ),
83
+ TemplateFile : resourceHelpersTemplateFile ,
84
+ Skip : ! resourceInput .Helpers ,
85
+ },
86
+ {
87
+ FileName : fmt .Sprintf ("../../scaleway/helpers_%s.go" , resourceData .API ),
88
+ TemplateFile : resourceWaitersTemplateFile ,
89
+ Skip : ! resourceInput .Waiters ,
90
+ Append : true ,
91
+ },
69
92
}
70
93
71
- resourceTestFile , err := os .Create (fmt .Sprintf ("../../scaleway/resource_%s_test.go" , resourceData .ResourceHCL ))
72
- if err != nil {
73
- log .Println (err )
74
- return
94
+ for _ , tmpl := range templates {
95
+ if tmpl .Template == nil {
96
+ tmpl .Template , err = template .New (tmpl .FileName ).Parse (tmpl .TemplateFile )
97
+ if err != nil {
98
+ log .Fatalln ("failed to template " + tmpl .FileName + ":" + err .Error ())
99
+ }
100
+ }
75
101
}
76
- defer resourceTestFile .Close ()
77
- err = resourceTestTemplate .Execute (resourceTestFile , resourceData )
78
- if err != nil {
79
- log .Println (err )
80
- return
102
+
103
+ for _ , tmpl := range templates {
104
+ if tmpl .Skip {
105
+ continue
106
+ }
107
+ err := executeTemplate (tmpl , resourceData )
108
+ if err != nil {
109
+ log .Println (err )
110
+ }
81
111
}
82
112
}
0 commit comments