{"id":48887880,"url":"https://github.com/gilbertrios/terraform-provider-utils","last_synced_at":"2026-04-16T05:36:39.627Z","repository":{"id":323209252,"uuid":"1092400928","full_name":"gilbertrios/terraform-provider-utils","owner":"gilbertrios","description":"Terraform function-only provider with utilities for string manipulation, encoding, hashing, and data transformation. Perfect for resource naming and data processing.","archived":false,"fork":false,"pushed_at":"2025-11-16T19:25:00.000Z","size":45,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-16T21:15:07.820Z","etag":null,"topics":["data-transformation","hashicorp","string-manipulation","terraform-functions","terraform-plugin","utility-functions"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gilbertrios.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-08T15:04:53.000Z","updated_at":"2025-11-16T19:25:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/gilbertrios/terraform-provider-utils","commit_stats":null,"previous_names":["gilbertrios/terraform-provider-utils"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gilbertrios/terraform-provider-utils","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gilbertrios%2Fterraform-provider-utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gilbertrios%2Fterraform-provider-utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gilbertrios%2Fterraform-provider-utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gilbertrios%2Fterraform-provider-utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gilbertrios","download_url":"https://codeload.github.com/gilbertrios/terraform-provider-utils/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gilbertrios%2Fterraform-provider-utils/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31872703,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"online","status_checked_at":"2026-04-16T02:00:06.042Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-transformation","hashicorp","string-manipulation","terraform-functions","terraform-plugin","utility-functions"],"created_at":"2026-04-16T05:36:39.075Z","updated_at":"2026-04-16T05:36:39.616Z","avatar_url":"https://github.com/gilbertrios.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Terraform Provider Utils\n\n[![Go Version](https://img.shields.io/github/go-mod/go-version/gilbertrios/terraform-provider-utils)](https://golang.org)\n[![License](https://img.shields.io/github/license/gilbertrios/terraform-provider-utils)](LICENSE)\n\nA function-only Terraform provider that provides utility functions for data manipulation and transformation in your Terraform configurations.\n\n## 🎯 Key Features\n\n- **Encoding \u0026 Hashing** - Base64 encoding/decoding, SHA256, MD5 hashing\n- **Deterministic ID Generation** - UUID v4 generation from seed values\n- **String Manipulation** - Slugify, truncate, reverse, trim, case conversion\n- **List Operations** - Join and split operations for list handling\n- **Zero Configuration** - No provider configuration required\n- **Lightweight** - Pure function provider with no external dependencies\n- **Type-Safe** - Strong typing with proper error handling\n\n## 🌟 What This Repo Demonstrates\n\n### Terraform Best Practices\n- ✅ Function-only provider implementation\n- ✅ Terraform Plugin Framework usage\n- ✅ Type-safe function definitions\n- ✅ Comprehensive testing strategy\n\n### Development Best Practices\n- ✅ Clean, modular Go code\n- ✅ Extensive unit test coverage\n- ✅ CI/CD automation with GitHub Actions\n- ✅ Cross-platform build support\n\n### Documentation\n- ✅ Comprehensive function reference\n- ✅ Real-world usage examples\n- ✅ Developer-friendly guides\n\n## 🛠️ Tech Stack\n\n**Application**\n- Go 1.21+ - Modern Go with generics support\n- Terraform Plugin Framework - Official provider framework\n- Terraform 1.8+ - Provider-defined functions support\n\n**DevOps**\n- GitHub Actions - CI/CD automation\n- Makefile - Build automation\n- golangci-lint - Code quality checks\n\n## 📋 Available Functions\n\n| Category | Functions |\n|----------|-----------|\n| **Encoding \u0026 Hashing** | `base64_encode`, `base64_decode`, `sha256`, `md5` |\n| **ID Generation** | `uuidv4` |\n| **String Manipulation** | `slugify`, `truncate`, `reverse`, `trim`, `to_upper`, `to_lower` |\n| **List Operations** | `join`, `split` |\n\nSee [Function Reference](docs/functions.md) for complete documentation.\n\n## 💻 Quick Start\n\n### Installation\n\n```bash\ngit clone https://github.com/gilbertrios/terraform-provider-utils.git\ncd terraform-provider-utils\nmake install\n```\n\nSee [Installation Guide](docs/installation.md) for manual installation and platform-specific instructions.\n\n### Basic Usage\n\nAdd the provider to your Terraform configuration:\n\n```hcl\nterraform {\n  required_providers {\n    utils = {\n      source = \"gilbertrios/utils\"\n    }\n  }\n}\n\nprovider \"utils\" {}\n```\n\n### Example: Resource Naming\n\n```hcl\nlocals {\n  environment = \"production\"\n  application = \"web-app\"\n  \n  # Generate URL-friendly resource name\n  resource_name = provider::utils::slugify(\"${local.application} ${local.environment}\")\n  # Result: \"web-app-production\"\n  \n  # Create deterministic UUID\n  resource_id = provider::utils::uuidv4(local.resource_name)\n  # Result: \"a1b2c3d4-e5f6-4789-a012-b3c4d5e6f7a8\"\n}\n```\n\n### Example: Data Transformation\n\n```hcl\nlocals {\n  # Parse CSV data\n  ip_ranges = \"10.0.1.0/24,10.0.2.0/24,10.0.3.0/24\"\n  ip_list   = provider::utils::split(local.ip_ranges, \",\")\n  \n  # Join tags\n  tags       = [\"production\", \"web\", \"critical\"]\n  tag_string = provider::utils::join(local.tags, \"-\")\n  # Result: \"production-web-critical\"\n}\n```\n\n### Example: Content Hashing\n\n```hcl\nlocals {\n  config_content = jsonencode({\n    version  = \"1.0\"\n    features = [\"auth\", \"api\"]\n  })\n  \n  # Generate content hash for cache busting\n  config_hash = provider::utils::sha256(local.config_content)\n}\n```\n\n## 🏗️ Repository Structure\n\n```\nterraform-provider-utils/\n├── main.go                      # Provider entry point\n├── go.mod                       # Go module definition\n├── Makefile                     # Build automation\n├── README.md                    # This file\n├── LICENSE                      # MIT License\n├── CHANGELOG.md                 # Version history\n│\n├── internal/\n│   └── provider/\n│       ├── provider.go          # Provider definition\n│       ├── provider_test.go     # Provider tests\n│       ├── functions.go         # Function implementations\n│       └── functions_test.go    # Function tests\n│\n├── examples/                    # Example configurations\n│   ├── basic/                   # Basic usage examples\n│   └── advanced/                # Real-world use cases\n│\n└── docs/                        # Documentation\n    ├── installation.md          # Installation guide\n    ├── quickstart.md            # Quick start guide\n    ├── functions.md             # Function reference\n    ├── usage.md                 # Usage patterns\n    ├── development.md           # Development guide\n    └── contributing.md          # Contributing guidelines\n```\n\n## 📚 Documentation\n\n### Getting Started\n- [Installation Guide](docs/installation.md) - Install the provider\n- [Quick Start Guide](docs/quickstart.md) - Get up and running quickly\n- [Usage Guide](docs/usage.md) - Common patterns and best practices\n\n### Reference\n- [Function Reference](docs/functions.md) - Complete API documentation\n- [Examples](examples/) - Working example configurations\n\n### Development\n- [Development Guide](docs/development.md) - Build and test the provider\n- [Contributing Guidelines](docs/contributing.md) - How to contribute\n\n## 🧪 Testing\n\nRun the test suite:\n\n```bash\n# Run all tests\nmake test\n\n# Run with coverage\nmake test-coverage\n\n# Run specific test\ngo test ./internal/provider -run TestBase64Encode\n```\n\nSee [Development Guide](docs/development.md) for detailed testing documentation.\n\n## 🚀 CI/CD Pipeline\n\nAutomated workflow for:\n- ✅ Running tests on multiple Go versions\n- ✅ Linting and formatting checks\n- ✅ Building binaries for multiple platforms\n- ✅ Release automation ready\n\n## 💡 Use Cases\n\n### Consistent Resource Naming\nGenerate deterministic, URL-friendly names across environments:\n```hcl\nresource_name = provider::utils::slugify(\"${var.app_name} ${var.environment}\")\n```\n\n### Content Hashing\nCreate cache keys and version identifiers:\n```hcl\nversion_id = provider::utils::sha256(local.config_content)\n```\n\n### Data Processing\nTransform external data sources (CSV, JSON) for Terraform:\n```hcl\nip_list = provider::utils::split(data.http.allowed_ips.body, \",\")\n```\n\n### Length Constraints\nHandle cloud provider name length restrictions:\n```hcl\nbucket_name = provider::utils::truncate(local.full_name, 63, \"\")\n```\n\nSee [Usage Guide](docs/usage.md) for more examples and patterns.\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-function`)\n3. Commit your changes (`git commit -m 'Add some amazing function'`)\n4. Push to the branch (`git push origin feature/amazing-function`)\n5. Open a Pull Request\n\nSee [Contributing Guidelines](docs/contributing.md) for detailed instructions.\n\n### 🌐 Connect With Me\nInterested in Infrastructure as Code, Azure, or DevOps? Let's connect!\n\n- 💼 LinkedIn: [Connect with me](https://linkedin.com/in/gilbert-rios-22586918)\n- 📧 Email: [gilbertrios@hotmail.com](mailto:gilbertrios@hotmail.com)\n- 💡 GitHub: [@gilbertrios](https://github.com/gilbertrios)\n\n## 🎓 Quick Links\n\n- [Quick Start Guide](docs/quickstart.md) - Get started in 5 minutes\n- [Function Reference](docs/functions.md) - Complete API documentation\n- [Usage Guide](docs/usage.md) - Real-world patterns and examples\n- [Examples Directory](examples/) - Working configurations\n\n---\n\n⭐ If you find this project useful, please consider giving it a star!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgilbertrios%2Fterraform-provider-utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgilbertrios%2Fterraform-provider-utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgilbertrios%2Fterraform-provider-utils/lists"}