Comparison (Fabric/CFT)
General Philosophy#
| Feature | Fabric | CFT | MyOps IAC Library |
|---|---|---|---|
| Target User | Organizations interested in forking, maintaining and customizing Terraform modules. | Organizations interested in using opinionated, prebuilt Terraform modules. | Organizations interested in using opinionated, prebuilt Terraform modules in combination with Terragrunt for dependency management, DRY deployments, and integrated automation. |
| Configuration | Less opinionated allowing end users higher flexibility. | Opinionated by default, end users may need to fork if it does not meet their use case. | Less opinionated, high flexibility. Multiple tested input options for various use cases, to meet different customer needs. |
| Extensibility | Built with extensibility in mind catering to fork and use patterns. Modules are often lightweight and easy to adopt / tailor to specific use cases. | Not built with fork and use extensibility catering primarily to off the shelf consumption. Modules are tailored towards common use cases and extensible via composition. | For off the shelf consumption. Modules tailored for GCP and implementing best practices. Modules by default are extended and cover multiple resources and different use cases. |
| Config customization | Prefer customization using variables via objects, tight variable space. | Prefer customization using variables via primitives. | Various customization options based on Terraform variables or Terragrunt inputs. Aligns with Terragrunt best practices and recommended deployment patterns. |
Module Details#
| Feature | Fabric | CFT | MyOps IAC Library |
|---|---|---|---|
| Examples | Thorough examples for individual modules, and end to end examples composing multiple modules covering a wide variety of use cases from foundations to solutions. | Examples for a module mostly focus on that individual module. Composition is often not shown in examples but in larger modules built using smaller modules. | Examples focus on individual modules. Library modules are interoperable and can be used in tandem, or independently. Composition examples not shown and part of different offering. |
| Resources | Leaner modules wrapping resources. | Heavier root modules that often compose leaner sub modules wrapping resources. | Heavy modules wrapping CFT/Fabric modules and Terraform resources. |
| Resource grouping | Generally grouped by logical entities. | Generally grouped by products/product areas. | Combination of grouping by logical entities and products. |
Distribution & Testing#
| Feature | Fabric | CFT | MyOps IAC Library |
|---|---|---|---|
| Release Cadence | Modules versioned and released together. | Modules versioned and released individually. | Modules versioned and released individually. |
| Individual module usage | Individual modules consumed directly using Git as a module source. For production usage, customers are encouraged to “fork and own” their own repository. |
Individual repositories consumed via the Terraform registry. For production/airgapped usage, customers may also mirror modules to a private registry. |
Individual modules consumed directly using Git as a module source. Every module has its own versioning published as a git tag. Private Terraform registry on the product roadmap. |
| Factories | Fabric implements several "factories" in modules, where users can drive or automate Terraform via YAML files (projects, subnetworks, firewalls, etc.). | CFT does not implement factories and generally show examples usable with variable definitions files (.tfvars). | Part of different offering based on GCP best practices and Terragrunt. |
| Organizational adoption | Mono repo cloned into an organizational VCS (or catalog) and separated into individual modules for internal consumption. | Individual repos forked (for air gap) or wrapping upstream sources to create individual modules for internal consumption. | Mono repo separated into individual modules. |
| Distribution | Distributed via Git/GitHub. | Distributed via Git/GitHub and Terraform Registry. | Distributed via Git/GitHub. |
| Testing | Every PR performs unit tests on modules, examples, and documentation snippets by evaluating a Terraform plan via Python tftest library. | Every PR performs full end-to-end deployment with integration tests using the blueprint test framework. | Pre-release development ensures and runs unit tests on modules, examples, and documentation snippets by evaluating a Terraform plan via Python tftest library. |