@@ -75,9 +75,51 @@ type generator struct {
75
75
websiteTmpDir string
76
76
websiteSourceDir string
77
77
78
+ subcategories SubCategories
79
+
78
80
ui cli.Ui
79
81
}
80
82
83
+ type SubCategories map [string ]string
84
+
85
+ func (s * SubCategories ) String () string {
86
+ if s == nil {
87
+ return ""
88
+ }
89
+
90
+ var subcategories []string
91
+ for k , v := range * s {
92
+ subcategories = append (subcategories , fmt .Sprintf ("%s=%q" , k , v ))
93
+ }
94
+
95
+ return strings .Join (subcategories , ", " )
96
+ }
97
+
98
+ func (s * SubCategories ) Set (v string ) error {
99
+ parts := strings .SplitN (v , "=" , 2 )
100
+ if len (parts ) != 2 {
101
+ return fmt .Errorf ("wrong format for %q, expected prefix=\" SubCategory Name\" " , v )
102
+ }
103
+
104
+ prefix := parts [0 ]
105
+ if sc , found := (* s )[prefix ]; found {
106
+ return fmt .Errorf ("%s is already registered with subcategory %q" , prefix , sc )
107
+ }
108
+
109
+ (* s )[prefix ] = parts [1 ]
110
+ return nil
111
+ }
112
+
113
+ func (s * SubCategories ) Get (name string ) string {
114
+ for k , v := range * s {
115
+ if strings .HasPrefix (name , k ) {
116
+ return v
117
+ }
118
+ }
119
+
120
+ return ""
121
+ }
122
+
81
123
func (g * generator ) infof (format string , a ... interface {}) {
82
124
g .ui .Info (fmt .Sprintf (format , a ... ))
83
125
}
@@ -86,7 +128,7 @@ func (g *generator) warnf(format string, a ...interface{}) {
86
128
g .ui .Warn (fmt .Sprintf (format , a ... ))
87
129
}
88
130
89
- func Generate (ui cli.Ui , legacySidebar bool , providerName , renderedProviderName , renderedWebsiteDir , examplesDir , websiteTmpDir , websiteSourceDir , tfVersion string , ignoreDeprecated bool ) error {
131
+ func Generate (ui cli.Ui , legacySidebar bool , providerName , renderedProviderName , renderedWebsiteDir , examplesDir , websiteTmpDir , websiteSourceDir , tfVersion string , ignoreDeprecated bool , subcategories SubCategories ) error {
90
132
g := & generator {
91
133
ignoreDeprecated : ignoreDeprecated ,
92
134
legacySidebar : legacySidebar ,
@@ -99,6 +141,8 @@ func Generate(ui cli.Ui, legacySidebar bool, providerName, renderedProviderName,
99
141
websiteTmpDir : websiteTmpDir ,
100
142
websiteSourceDir : websiteSourceDir ,
101
143
144
+ subcategories : subcategories ,
145
+
102
146
ui : ui ,
103
147
}
104
148
@@ -192,7 +236,7 @@ func (g *generator) Generate(ctx context.Context) error {
192
236
return nil
193
237
}
194
238
195
- func (g * generator ) renderMissingResourceDoc (providerName , name , typeName string , schema * tfjson.Schema , websiteFileTemplate resourceFileTemplate , fallbackWebsiteFileTemplate resourceFileTemplate , websiteStaticCandidateTemplates []resourceFileTemplate , examplesFileTemplate resourceFileTemplate , examplesImportTemplate * resourceFileTemplate ) error {
239
+ func (g * generator ) renderMissingResourceDoc (providerName , name , typeName , subCategory string , schema * tfjson.Schema , websiteFileTemplate resourceFileTemplate , fallbackWebsiteFileTemplate resourceFileTemplate , websiteStaticCandidateTemplates []resourceFileTemplate , examplesFileTemplate resourceFileTemplate , examplesImportTemplate * resourceFileTemplate ) error {
196
240
tmplPath , err := websiteFileTemplate .Render (name , providerName )
197
241
if err != nil {
198
242
return fmt .Errorf ("unable to render path for resource %q: %w" , name , err )
@@ -257,7 +301,7 @@ func (g *generator) renderMissingResourceDoc(providerName, name, typeName string
257
301
}
258
302
259
303
g .infof ("generating template for %q" , name )
260
- md , err := targetResourceTemplate .Render (name , providerName , g .renderedProviderName , typeName , examplePath , importPath , schema )
304
+ md , err := targetResourceTemplate .Render (name , providerName , g .renderedProviderName , typeName , subCategory , examplePath , importPath , schema )
261
305
if err != nil {
262
306
return fmt .Errorf ("unable to render template for %q: %w" , name , err )
263
307
}
@@ -325,7 +369,10 @@ func (g *generator) renderMissingDocs(providerName string, providerSchema *tfjso
325
369
continue
326
370
}
327
371
328
- err := g .renderMissingResourceDoc (providerName , name , "Resource" , schema ,
372
+ subCategory := g .subcategories .Get (name )
373
+
374
+ err := g .renderMissingResourceDoc (providerName , name , "Resource" , subCategory ,
375
+ schema ,
329
376
websiteResourceFileTemplate ,
330
377
websiteResourceFallbackFileTemplate ,
331
378
websiteResourceFileStatic ,
@@ -342,7 +389,10 @@ func (g *generator) renderMissingDocs(providerName string, providerSchema *tfjso
342
389
continue
343
390
}
344
391
345
- err := g .renderMissingResourceDoc (providerName , name , "Data Source" , schema ,
392
+ subCategory := g .subcategories .Get (name )
393
+
394
+ err := g .renderMissingResourceDoc (providerName , name , "Data Source" , subCategory ,
395
+ schema ,
346
396
websiteDataSourceFileTemplate ,
347
397
websiteDataSourceFallbackFileTemplate ,
348
398
websiteDataSourceFileStatic ,
@@ -425,10 +475,11 @@ func (g *generator) renderStaticWebsite(providerName string, providerSchema *tfj
425
475
switch relDir {
426
476
case "data-sources/" :
427
477
resSchema , resName := resourceSchema (providerSchema .DataSourceSchemas , shortName , relFile )
478
+ subCategory := g .subcategories .Get (resName )
428
479
exampleFilePath := filepath .Join (g .examplesDir , "data-sources" , resName , "data-source.tf" )
429
480
if resSchema != nil {
430
481
tmpl := resourceTemplate (tmplData )
431
- render , err := tmpl .Render (resName , providerName , g .renderedProviderName , "Data Source" , exampleFilePath , "" , resSchema )
482
+ render , err := tmpl .Render (resName , providerName , g .renderedProviderName , "Data Source" , subCategory , exampleFilePath , "" , resSchema )
432
483
if err != nil {
433
484
return fmt .Errorf ("unable to render data source template %q: %w" , rel , err )
434
485
}
@@ -441,12 +492,13 @@ func (g *generator) renderStaticWebsite(providerName string, providerSchema *tfj
441
492
g .warnf ("data source entitled %q, or %q does not exist" , shortName , resName )
442
493
case "resources/" :
443
494
resSchema , resName := resourceSchema (providerSchema .ResourceSchemas , shortName , relFile )
495
+ subCategory := g .subcategories .Get (resName )
444
496
exampleFilePath := filepath .Join (g .examplesDir , "resources" , resName , "resource.tf" )
445
497
importFilePath := filepath .Join (g .examplesDir , "resources" , resName , "import.sh" )
446
498
447
499
if resSchema != nil {
448
500
tmpl := resourceTemplate (tmplData )
449
- render , err := tmpl .Render (resName , providerName , g .renderedProviderName , "Resource" , exampleFilePath , importFilePath , resSchema )
501
+ render , err := tmpl .Render (resName , providerName , g .renderedProviderName , "Resource" , subCategory , exampleFilePath , importFilePath , resSchema )
450
502
if err != nil {
451
503
return fmt .Errorf ("unable to render resource template %q: %w" , rel , err )
452
504
}
0 commit comments