3434 // templated website directory defaults
3535 websiteTmp = ""
3636
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 {
4041 resourceFileTemplate ("resources/{{ .ShortName }}.md" ),
4142 // TODO: warn for all of these, as they won't render? massage them to the proper output file name?
4243 resourceFileTemplate ("resources/{{ .ShortName }}.markdown" ),
4748 resourceFileTemplate ("r/{{ .ShortName }}.html.markdown" ),
4849 resourceFileTemplate ("r/{{ .ShortName }}.html.md" ),
4950 }
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 {
5254 resourceFileTemplate ("data-sources/{{ .ShortName }}.md" ),
5355 // TODO: warn for all of these, as they won't render? massage them to the proper output file name?
5456 resourceFileTemplate ("data-sources/{{ .ShortName }}.markdown" ),
@@ -172,7 +174,7 @@ func (g *generator) Generate(ctx context.Context) error {
172174 return nil
173175}
174176
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 {
176178 tmplPath , err := websiteFileTemplate .Render (name , providerName )
177179 if err != nil {
178180 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
220222 }
221223 }
222224
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+
223241 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 )
225243 if err != nil {
226244 return fmt .Errorf ("unable to render template for %q: %w" , name , err )
227245 }
@@ -287,6 +305,7 @@ func (g *generator) renderMissingDocs(providerName string, providerSchema *tfjso
287305 for name , schema := range providerSchema .ResourceSchemas {
288306 err := g .renderMissingResourceDoc (providerName , name , "Resource" , schema ,
289307 websiteResourceFileTemplate ,
308+ websiteResourceFallbackFileTemplate ,
290309 websiteResourceFileStatic ,
291310 examplesResourceFileTemplate ,
292311 & examplesResourceImportTemplate )
@@ -299,6 +318,7 @@ func (g *generator) renderMissingDocs(providerName string, providerSchema *tfjso
299318 for name , schema := range providerSchema .DataSourceSchemas {
300319 err := g .renderMissingResourceDoc (providerName , name , "Data Source" , schema ,
301320 websiteDataSourceFileTemplate ,
321+ websiteDataSourceFallbackFileTemplate ,
302322 websiteDataSourceFileStatic ,
303323 examplesDataSourceFileTemplate ,
304324 nil )
@@ -342,6 +362,14 @@ func (g *generator) renderStaticWebsite(providerName string, providerSchema *tfj
342362 return err
343363 }
344364
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+
345373 renderedPath := filepath .Join (renderedWebsiteDir , rel )
346374 err = os .MkdirAll (filepath .Dir (renderedPath ), 0755 )
347375 if err != nil {
@@ -368,9 +396,6 @@ func (g *generator) renderStaticWebsite(providerName string, providerSchema *tfj
368396 defer out .Close ()
369397
370398 g .infof ("rendering %q" , rel )
371-
372- relDir , relFile := filepath .Split (rel )
373- relDir = filepath .ToSlash (relDir )
374399 switch relDir {
375400 case "data-sources/" :
376401 resName := shortName + "_" + removeAllExt (relFile )
0 commit comments