34
34
// templated website directory defaults
35
35
websiteTmp = ""
36
36
37
- websiteSourceDir = "templates" // used for override content
38
- websiteResourceFileTemplate = resourceFileTemplate ("resources/{{ .ShortName }}.md.tmpl" )
39
- websiteResourceFileStatic = []resourceFileTemplate {
37
+ websiteSourceDir = "templates" // used for override content
38
+ websiteResourceFileTemplate = resourceFileTemplate ("resources/{{ .ShortName }}.md.tmpl" )
39
+ websiteResourceFallbackFileTemplate = resourceFileTemplate ("resources.md.tmpl" )
40
+ websiteResourceFileStatic = []resourceFileTemplate {
40
41
resourceFileTemplate ("resources/{{ .ShortName }}.md" ),
41
42
// TODO: warn for all of these, as they won't render? massage them to the proper output file name?
42
43
resourceFileTemplate ("resources/{{ .ShortName }}.markdown" ),
47
48
resourceFileTemplate ("r/{{ .ShortName }}.html.markdown" ),
48
49
resourceFileTemplate ("r/{{ .ShortName }}.html.md" ),
49
50
}
50
- websiteDataSourceFileTemplate = resourceFileTemplate ("data-sources/{{ .ShortName }}.md.tmpl" )
51
- websiteDataSourceFileStatic = []resourceFileTemplate {
51
+ websiteDataSourceFileTemplate = resourceFileTemplate ("data-sources/{{ .ShortName }}.md.tmpl" )
52
+ websiteDataSourceFallbackFileTemplate = resourceFileTemplate ("data-sources.md.tmpl" )
53
+ websiteDataSourceFileStatic = []resourceFileTemplate {
52
54
resourceFileTemplate ("data-sources/{{ .ShortName }}.md" ),
53
55
// TODO: warn for all of these, as they won't render? massage them to the proper output file name?
54
56
resourceFileTemplate ("data-sources/{{ .ShortName }}.markdown" ),
@@ -172,7 +174,7 @@ func (g *generator) Generate(ctx context.Context) error {
172
174
return nil
173
175
}
174
176
175
- func (g * generator ) renderMissingResourceDoc (providerName , name , typeName string , schema * tfjson.Schema , websiteFileTemplate resourceFileTemplate , websiteStaticCandidateTemplates []resourceFileTemplate , examplesFileTemplate resourceFileTemplate , examplesImportTemplate * resourceFileTemplate ) error {
177
+ func (g * generator ) renderMissingResourceDoc (providerName , name , typeName string , schema * tfjson.Schema , websiteFileTemplate resourceFileTemplate , fallbackWebsiteFileTemplate resourceFileTemplate , websiteStaticCandidateTemplates []resourceFileTemplate , examplesFileTemplate resourceFileTemplate , examplesImportTemplate * resourceFileTemplate ) error {
176
178
tmplPath , err := websiteFileTemplate .Render (name , providerName )
177
179
if err != nil {
178
180
return fmt .Errorf ("unable to render path for resource %q: %w" , name , err )
@@ -220,8 +222,24 @@ func (g *generator) renderMissingResourceDoc(providerName, name, typeName string
220
222
}
221
223
}
222
224
225
+ targetResourceTemplate := defaultResourceTemplate
226
+
227
+ fallbackTmplPath , err := fallbackWebsiteFileTemplate .Render (name , providerName )
228
+ if err != nil {
229
+ return fmt .Errorf ("unable to render path for resource %q: %w" , name , err )
230
+ }
231
+ fallbackTmplPath = filepath .Join (websiteTmp , websiteSourceDir , fallbackTmplPath )
232
+ if fileExists (fallbackTmplPath ) {
233
+ g .infof ("resource %q fallback template exists" , name )
234
+ tmplData , err := ioutil .ReadFile (fallbackTmplPath )
235
+ if err != nil {
236
+ return fmt .Errorf ("unable to read file %q: %w" , fallbackTmplPath , err )
237
+ }
238
+ targetResourceTemplate = resourceTemplate (tmplData )
239
+ }
240
+
223
241
g .infof ("generating template for %q" , name )
224
- md , err := defaultResourceTemplate .Render (name , providerName , typeName , examplePath , importPath , schema )
242
+ md , err := targetResourceTemplate .Render (name , providerName , typeName , examplePath , importPath , schema )
225
243
if err != nil {
226
244
return fmt .Errorf ("unable to render template for %q: %w" , name , err )
227
245
}
@@ -287,6 +305,7 @@ func (g *generator) renderMissingDocs(providerName string, providerSchema *tfjso
287
305
for name , schema := range providerSchema .ResourceSchemas {
288
306
err := g .renderMissingResourceDoc (providerName , name , "Resource" , schema ,
289
307
websiteResourceFileTemplate ,
308
+ websiteResourceFallbackFileTemplate ,
290
309
websiteResourceFileStatic ,
291
310
examplesResourceFileTemplate ,
292
311
& examplesResourceImportTemplate )
@@ -299,6 +318,7 @@ func (g *generator) renderMissingDocs(providerName string, providerSchema *tfjso
299
318
for name , schema := range providerSchema .DataSourceSchemas {
300
319
err := g .renderMissingResourceDoc (providerName , name , "Data Source" , schema ,
301
320
websiteDataSourceFileTemplate ,
321
+ websiteDataSourceFallbackFileTemplate ,
302
322
websiteDataSourceFileStatic ,
303
323
examplesDataSourceFileTemplate ,
304
324
nil )
@@ -342,6 +362,14 @@ func (g *generator) renderStaticWebsite(providerName string, providerSchema *tfj
342
362
return err
343
363
}
344
364
365
+ relDir , relFile := filepath .Split (rel )
366
+ relDir = filepath .ToSlash (relDir )
367
+
368
+ // skip special top-level generic resource and data source templates
369
+ if relDir == "" && (relFile == "resources.md.tmpl" || relFile == "data-sources.md.tmpl" ) {
370
+ return nil
371
+ }
372
+
345
373
renderedPath := filepath .Join (renderedWebsiteDir , rel )
346
374
err = os .MkdirAll (filepath .Dir (renderedPath ), 0755 )
347
375
if err != nil {
@@ -368,9 +396,6 @@ func (g *generator) renderStaticWebsite(providerName string, providerSchema *tfj
368
396
defer out .Close ()
369
397
370
398
g .infof ("rendering %q" , rel )
371
-
372
- relDir , relFile := filepath .Split (rel )
373
- relDir = filepath .ToSlash (relDir )
374
399
switch relDir {
375
400
case "data-sources/" :
376
401
resName := shortName + "_" + removeAllExt (relFile )
0 commit comments