Skip to content
This repository has been archived by the owner on Dec 15, 2022. It is now read-only.

Commit

Permalink
Merge pull request #155 from muvaf/fix-tmpl
Browse files Browse the repository at this point in the history
pipeline: use generated parameters name instead of hard-coded
  • Loading branch information
muvaf authored Nov 19, 2021
2 parents d9b1c93 + c6e874d commit b9fa3b6
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 15 deletions.
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,13 @@ See [design document][design-doc] for more details.

Feel free to test the following Crossplane providers built using Terrajet:

* [Provider TF AWS](https://github.com/crossplane-contrib/provider-jet-aws/releases)
* [Provider TF Azure](https://github.com/crossplane-contrib/provider-jet-azure/releases)
* [Provider TF GCP](https://github.com/crossplane-contrib/provider-jet-gcp/releases)
* [Provider Jet AWS](https://github.com/crossplane-contrib/provider-jet-aws/releases)
* [Provider Jet Azure](https://github.com/crossplane-contrib/provider-jet-azure/releases)
* [Provider Jet GCP](https://github.com/crossplane-contrib/provider-jet-gcp/releases)

**NOTE**: Terrajet is in its very early stages. We expect many breaking changes
in the coming weeks. Relying on it for production usage is not recommended yet.
**NOTE**: Terrajet is in its very early stages and we're making many changes that
can affect the output and the runtime. Please check the generated code before
running in production.

## Generating a New Provider Using Terrajet

Expand Down
8 changes: 4 additions & 4 deletions pkg/pipeline/crd.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ type CRDGenerator struct {
}

// Generate builds and writes a new CRD out of Terraform resource definition.
func (cg *CRDGenerator) Generate(cfg *config.Resource) error {
func (cg *CRDGenerator) Generate(cfg *config.Resource) (string, error) {
file := wrapper.NewFile(cg.pkg.Path(), cg.pkg.Name(), templates.CRDTypesTemplate,
wrapper.WithGenStatement(GenStatement),
wrapper.WithHeaderPath(cg.LicenseHeaderPath),
Expand All @@ -68,7 +68,7 @@ func (cg *CRDGenerator) Generate(cfg *config.Resource) error {
}
gen, err := tjtypes.NewBuilder(cg.pkg).Build(cfg)
if err != nil {
return errors.Wrapf(err, "cannot build types for %s", cfg.Kind)
return "", errors.Wrapf(err, "cannot build types for %s", cfg.Kind)
}
// TODO(muvaf): TypePrinter uses the given scope to see if the type exists
// before printing. We should ideally load the package in file system but
Expand All @@ -79,7 +79,7 @@ func (cg *CRDGenerator) Generate(cfg *config.Resource) error {
typePrinter := twtypes.NewPrinter(file.Imports, pkg.Scope(), twtypes.WithComments(gen.Comments))
typesStr, err := typePrinter.Print(gen.Types)
if err != nil {
return errors.Wrap(err, "cannot print the type list")
return "", errors.Wrap(err, "cannot print the type list")
}
vars := map[string]interface{}{
"Types": typesStr,
Expand All @@ -96,5 +96,5 @@ func (cg *CRDGenerator) Generate(cfg *config.Resource) error {
"XPCommonAPIsPackageAlias": file.Imports.UsePackage(tjtypes.PackagePathXPCommonAPIs),
}
filePath := filepath.Join(cg.LocalDirectoryPath, fmt.Sprintf("zz_%s_types.go", strings.ToLower(cfg.Kind)))
return errors.Wrap(file.Write(filePath, vars, os.ModePerm), "cannot write crd file")
return gen.ForProviderType.Obj().Name(), errors.Wrap(file.Write(filePath, vars, os.ModePerm), "cannot write crd file")
}
5 changes: 3 additions & 2 deletions pkg/pipeline/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,11 @@ func Run(pc *config.Provider, rootDir string) { // nolint:gocyclo
ctrlGen := NewControllerGenerator(rootDir, pc.ModulePath, group)

for _, name := range sortedResources(resources) {
if err := crdGen.Generate(resources[name]); err != nil {
paramTypeName, err := crdGen.Generate(resources[name])
if err != nil {
panic(errors.Wrapf(err, "cannot generate crd for resource %s", name))
}
if err := tfGen.Generate(resources[name]); err != nil {
if err := tfGen.Generate(resources[name], paramTypeName); err != nil {
panic(errors.Wrapf(err, "cannot generate terraformed for resource %s", name))
}
ctrlPkgPath, err := ctrlGen.Generate(resources[name], versionGen.Package().Path())
Expand Down
2 changes: 1 addition & 1 deletion pkg/pipeline/templates/terraformed.go.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ func (tr *{{ .CRD.Kind }}) SetParameters(params map[string]interface{}) error {
// LateInitialize this {{ .CRD.Kind }} using its observed tfState.
// returns True if there are any spec changes for the resource.
func (tr *{{ .CRD.Kind }}) LateInitialize(attrs []byte) (bool, error) {
params := &{{ .CRD.Kind }}Parameters{}
params := &{{ .CRD.ParametersTypeName }}{}
if err := json.TFParser.Unmarshal(attrs, params); err != nil {
return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization")
}
Expand Down
7 changes: 4 additions & 3 deletions pkg/pipeline/terraformed.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,16 @@ type TerraformedGenerator struct {
}

// Generate writes generated Terraformed interface functions
func (tg *TerraformedGenerator) Generate(cfg *config.Resource) error {
func (tg *TerraformedGenerator) Generate(cfg *config.Resource, parametersTypeName string) error {
trFile := wrapper.NewFile(tg.pkg.Path(), tg.pkg.Name(), templates.TerraformedTemplate,
wrapper.WithGenStatement(GenStatement),
wrapper.WithHeaderPath(tg.LicenseHeaderPath),
)
vars := map[string]interface{}{
"CRD": map[string]string{
"APIVersion": cfg.Version,
"Kind": cfg.Kind,
"APIVersion": cfg.Version,
"Kind": cfg.Kind,
"ParametersTypeName": parametersTypeName,
},
"Terraform": map[string]interface{}{
"ResourceType": cfg.Name,
Expand Down

0 comments on commit b9fa3b6

Please sign in to comment.