Skip to content

Commit

Permalink
Merge pull request #1983 from hashicorp/f-example_import_generation
Browse files Browse the repository at this point in the history
generator: change format for import examples
  • Loading branch information
johnsonaj committed Aug 29, 2024
2 parents b356486 + 725f1b9 commit b684eb8
Show file tree
Hide file tree
Showing 8 changed files with 5,101 additions and 1,047 deletions.
1 change: 1 addition & 0 deletions .copywrite.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ project {
# files or folders should be ignored
header_ignore = [
"internal/provider/generators/allschemas/*.hcl",
"internal/provider/import_examples_gen.json",
"examples/resources/*/import.sh",
"examples/resources/*/*.tf",
"examples/data-sources/*/*.tf",
Expand Down
2 changes: 1 addition & 1 deletion GNUmakefile
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ docs: prereq-go
@tfplugindocs generate

docs-import: prereq-go
$(GO_VER) generate internal/provider/import_examples.go
$(GO_VER) run internal/provider/generators/import-examples/main.go -file=internal/provider/import_examples_gen.json

prereq-go: ## If $(GO_VER) is not installed, install it
@if ! type "$(GO_VER)" > /dev/null 2>&1 ; then \
Expand Down
48 changes: 33 additions & 15 deletions internal/provider/generators/import-examples/main.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

//go:build ignore
// +build ignore
//go:build generate
// +build generate

package main

import (
"encoding/json"
"flag"
"fmt"
"log"
"os"
"regexp"
"strings"
Expand All @@ -17,13 +19,18 @@ import (
)

var (
identifier = flag.String("identifier", "", "Primary identifier for the resource")
resourceName = flag.String("resource", "", "Resource name")
file = flag.String("file", "", "File containing import data in JSON list format")
)

type FileData struct {
Resource string
Identifier []string
Path string
}

func usage() {
fmt.Fprintf(os.Stderr, "Usage:\n")
fmt.Fprintf(os.Stderr, "\tmain.go [flags] -identifier <primary-identifier> -resource <resource-name> -- filename\n\n")
fmt.Fprintf(os.Stderr, "\tmain.go [flags] -file <file>\n\n")
fmt.Fprintf(os.Stderr, "Flags:\n")
flag.PrintDefaults()
}
Expand All @@ -32,18 +39,30 @@ func main() {
flag.Usage = usage
flag.Parse()

args := flag.Args()
filename := args[0]

if *resourceName == "" || filename == "" {
if *file == "" {
flag.Usage()
os.Exit(2)
}

f, err := os.Open(*file)
if err != nil {
os.Exit(2)
}
defer f.Close()

var data []FileData
decoder := json.NewDecoder(f)
err = decoder.Decode(&data)
if err != nil {
log.Fatal(err)
}

g := NewGenerator()

if err := g.GenerateExample(*resourceName, *identifier, filename); err != nil {
g.Fatalf("error generating Terraform %s import example: %s", *resourceName, err)
for _, v := range data {
if err := g.GenerateExample(v.Resource, v.Path, v.Identifier); err != nil {
g.Fatalf("error generating Terraform %s import example: %s", v.Resource, err)
}
}
}

Expand All @@ -57,17 +76,16 @@ func NewGenerator() *Generator {
}
}

func (g *Generator) GenerateExample(resourceName, identifier, filename string) error {
func (g *Generator) GenerateExample(resourceName, filename string, identifier []string) error {
g.Infof("generating Terraform import code for %[1]q ", resourceName)
templateData := &TemplateData{
ResourceType: resourceName,
Identifier: "<resource ID>",
}

if identifier != "" {
ident := strings.Split(identifier, ",")
if len(identifier) != 0 {
var out []string
for _, i := range ident {
for _, i := range identifier {
out = append(out, toSnake(i))
}

Expand Down
20 changes: 10 additions & 10 deletions internal/provider/generators/schema/imports.tmpl
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

// Code generated by generators/schema/main.go; DO NOT EDIT.

{{- range .Resources }}
//go:generate go run generators/import-examples/main.go -resource {{ .ResourceName }} -identifier {{ .Identifier }} -- ../../examples/resources/{{ .ResourceName }}/import.sh
{{- end }}

package {{ .PackageName }}
[
{{- range $i, $e := .Resources }}
{{- if $i}},{{- end}}
{
"resource": "{{ $e.ResourceName }}",
"identifier": [{{- range $i, $v := $e.Identifier }} {{- if $i}},{{- end}}"{{ $v }}"{{- end}}],
"path": "./examples/resources/{{ $e.ResourceName }}/import.sh"
}
{{- end}}
]
7 changes: 3 additions & 4 deletions internal/provider/generators/schema/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ type DataSourceData struct {

type ResourceImportData struct {
ResourceName string
Identifier string
Identifier []string
}

type DataSources struct {
Expand Down Expand Up @@ -534,11 +534,10 @@ func (g *Generator) GenerateResourceImportExamples(packageName, filename string,
out := strings.TrimPrefix(v, "/properties/")
temp = append(temp, out)
}
r.Identifier = strings.Join(temp, ",")
r.Identifier = temp
importsTemplateData.Resources = append(importsTemplateData.Resources, r)
}

i := g.NewGoFileDestination(filename)
i := g.NewUnformattedFileDestination(filename)

if err := i.CreateDirectories(); err != nil {
return err
Expand Down
1,016 changes: 0 additions & 1,016 deletions internal/provider/import_examples.go

This file was deleted.

Loading

0 comments on commit b684eb8

Please sign in to comment.