{"id":19129364,"url":"https://github.com/launchbynttdata/tf-azureado-module_reference-pipeline","last_synced_at":"2026-02-27T01:10:43.862Z","repository":{"id":233321543,"uuid":"777298033","full_name":"launchbynttdata/tf-azureado-module_reference-pipeline","owner":"launchbynttdata","description":null,"archived":false,"fork":false,"pushed_at":"2025-01-20T12:34:37.000Z","size":90,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-25T20:06:37.168Z","etag":null,"topics":["azure-devops","infrastructure-as-code","platform-automation","reference","terraform"],"latest_commit_sha":null,"homepage":null,"language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/launchbynttdata.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-03-25T15:31:00.000Z","updated_at":"2025-01-13T15:20:32.000Z","dependencies_parsed_at":"2025-06-08T16:37:50.896Z","dependency_job_id":"7b2801d9-3123-4ef8-ba80-25e8c169417d","html_url":"https://github.com/launchbynttdata/tf-azureado-module_reference-pipeline","commit_stats":null,"previous_names":["launchbynttdata/tf-azureado-module_reference-pipeline"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/launchbynttdata/tf-azureado-module_reference-pipeline","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchbynttdata%2Ftf-azureado-module_reference-pipeline","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchbynttdata%2Ftf-azureado-module_reference-pipeline/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchbynttdata%2Ftf-azureado-module_reference-pipeline/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchbynttdata%2Ftf-azureado-module_reference-pipeline/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/launchbynttdata","download_url":"https://codeload.github.com/launchbynttdata/tf-azureado-module_reference-pipeline/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchbynttdata%2Ftf-azureado-module_reference-pipeline/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29880008,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T23:51:21.483Z","status":"ssl_error","status_checked_at":"2026-02-26T23:50:46.793Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["azure-devops","infrastructure-as-code","platform-automation","reference","terraform"],"created_at":"2024-11-09T06:07:17.466Z","updated_at":"2026-02-27T01:10:43.848Z","avatar_url":"https://github.com/launchbynttdata.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tf-azureado-module_reference-pipeline\n\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![License: CC BY-NC-ND 4.0](https://img.shields.io/badge/License-CC_BY--NC--ND_4.0-lightgrey.svg)](https://creativecommons.org/licenses/by-nc-nd/4.0/)\n\n## Overview\n\nThis repository contains a reference terraform module\n\n## How to Use This Repo\n\nThis repo is intended to be used as a template for any new TF module. In some cases, we're able to use our VCS to template for us. In other cases, we aren't.\n\n### Prerequisites\n\n- [asdf](https://github.com/asdf-vm/asdf) used for tool version management\n- [make](https://www.gnu.org/software/make/) used for automating various functions of the repo\n- [repo](https://android.googlesource.com/tools/repo) used to pull in all components to create the full repo template\n\n### Repo Init\n\nRun the following commands to prep repo and enable all `Makefile` commands to run\n\n```shell\nasdf plugin add terraform\nasdf plugin add tflint\nasdf plugin add golang\nasdf plugin add golangci-lint\nasdf plugin add nodejs\nasdf plugin add opa\nasdf plugin add conftest\nasdf plugin add pre-commit\nasdf plugin add terragrunt\n\nasdf install\n```\n\n### Templating\n\n#### Manual Templating\n\nThis applies to systems like Azure DevOps and CodeCommit.\n\nWe need to clone the repo, rename it, and start a fresh git history to get rid of the `lcaf-skeleton-terraform` history. Below is a loose explanation of how to do this.\n\n``` shell\ngit clone \u003cthis repo's URL\u003e\nmv lcaf-skeleton-terraform tf-\u003cwhatever it is you're building\u003e\ncd tf-\u003cwhatever it is you're building\u003e\nrm -rf .git\ngit init\nvi .git/HEAD\nChange the HEAD to point to `main` instead of `master` and save the `HEAD`\n```\n\n#### Remove Educational Material\n\nWe need to clear out the example code (different from the boilerplate code). We want to save the repo structure; we don't need the contents. There are `examples`, and `tests` that apply to the boilerplate that we're not going to need as developers of new modules.\n\nNote before you clear these things out, it's useful to actually understand what they are and why they're there. We'll be building our own as we go forward so we need to know what it is we're removing. If this isn't your first module, it's safe to fly through this. If this is your first (or your first several, even), take the time to read the code before you remove it.\n\n```shell\ncd path/to/this/repo\nrm -rf examples/*\nrm -rf README.md\nmv TEMPLATED_README.md README.md\n```\n\n#### Version Control (VCS) Templating\n\nThis applies to systems like GitHub.\n\nTBD\n\n### Repo Setup\n\n#### Overriding Make Behavior\n\nWhen run, `make` will look for a file called `.lcafenv` in the repository root. This file if present will be included, and it can be used to override variables without altering the [Makefile](Makefile). A few examples of variables that can be substituted are commented out in [the file](.lcafenv).\n\n#### Module Configuration\n\n- You'll need to update [`versions.tf`](./versions.tf) based on your provider needs.\n\n## Explanation of the Skeleton\n\n### Resources and Providers\n\n- Terraform modules define resources that can be instantiated via provider\n- Possible providers include but are not limited to `aws`, `azurerm`, and `gcp`\n- In this module we generate text resources with the `random` provider\n\n### Module Guidelines\n\n- Each repository should have a default module in its root\n  - Should have default values and be instantiable with minimal to no inputs\n  - We can think of these default values as the \"default example\"\n- A `Makefile` provides tasks for terraform module development\n  - It will clone and cache `caf-components-tf-module` and `caf-components-platform` git repositories when a `make configure` is ran\n  - For clearing cached components, it provides a `make clean` command\n  - Linter config and all other tasks are defined in `caf-components-tf-module`\n- An `examples` folder contains example uses of the default and nested modules\n  - There should be at least one example for each nested module\n- A `tests` folder contains Go functional tests\n  - Make pre-deploy tests that validate terraform plan json where applicable\n  - Make post-deploy tests that validate the deployment where applicable\n- Provider should be configured by the user, not the module\n  - Modules only define what providers/versions are required\n\n### Go Functional Tests\n\n- Modules are how Go manages dependencies\n- To initiate a new modules run the command: `go mod init [repo_url]`\n  - It is recommended to use the absolute repository url (e.g. github.com/launchbynttdata/lcaf-skeleton-terraform)\n- Relative path is highly discouraged in Go, use absolute path to import a package\n  - (e.g. `github.com/launchbynttdata/lcaf-skeleton-terraform/[path_to_file]`)\n- To update paths or versions run the command: `go get -t ./...`  go will update the dependencies accordingly\n\u003c!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK --\u003e\n## Requirements\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"requirement_terraform\"\u003e\u003c/a\u003e [terraform](#requirement\\_terraform) | ~\u003e 1.0 |\n| \u003ca name=\"requirement_azuredevops\"\u003e\u003c/a\u003e [azuredevops](#requirement\\_azuredevops) | ~\u003e 0.11.0 |\n| \u003ca name=\"requirement_azurerm\"\u003e\u003c/a\u003e [azurerm](#requirement\\_azurerm) | ~\u003e 3.96 |\n\n## Providers\n\nNo providers.\n\n## Modules\n\n| Name | Source | Version |\n|------|--------|---------|\n| \u003ca name=\"module_resource_names\"\u003e\u003c/a\u003e [resource\\_names](#module\\_resource\\_names) | terraform.registry.launch.nttdata.com/module_library/resource_name/launch | ~\u003e 2.0 |\n| \u003ca name=\"module_pipeline\"\u003e\u003c/a\u003e [pipeline](#module\\_pipeline) | terraform.registry.launch.nttdata.com/module_primitive/pipelines/azureado | ~\u003e 1.0 |\n\n## Resources\n\nNo resources.\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_product_family\"\u003e\u003c/a\u003e [product\\_family](#input\\_product\\_family) | (Required) Name of the product family for which the resource is created.\u003cbr\u003e    Example: org\\_name, department\\_name. | `string` | `\"dso\"` | no |\n| \u003ca name=\"input_product_service\"\u003e\u003c/a\u003e [product\\_service](#input\\_product\\_service) | (Required) Name of the product service for which the resource is created.\u003cbr\u003e    For example, backend, frontend, middleware etc. | `string` | `\"azdo\"` | no |\n| \u003ca name=\"input_environment\"\u003e\u003c/a\u003e [environment](#input\\_environment) | Environment in which the resource should be provisioned like dev, qa, prod etc. | `string` | `\"dev\"` | no |\n| \u003ca name=\"input_environment_number\"\u003e\u003c/a\u003e [environment\\_number](#input\\_environment\\_number) | The environment count for the respective environment. Defaults to 000. Increments in value of 1 | `string` | `\"000\"` | no |\n| \u003ca name=\"input_resource_number\"\u003e\u003c/a\u003e [resource\\_number](#input\\_resource\\_number) | The resource count for the respective resource. Defaults to 000. Increments in value of 1 | `string` | `\"000\"` | no |\n| \u003ca name=\"input_region\"\u003e\u003c/a\u003e [region](#input\\_region) | Azure location of the associated resources | `string` | `\"eastus\"` | no |\n| \u003ca name=\"input_use_azure_region_abbr\"\u003e\u003c/a\u003e [use\\_azure\\_region\\_abbr](#input\\_use\\_azure\\_region\\_abbr) | Whether to use Azure region abbreviation for azure region | `bool` | `true` | no |\n| \u003ca name=\"input_resource_names_map\"\u003e\u003c/a\u003e [resource\\_names\\_map](#input\\_resource\\_names\\_map) | A map of key to resource\\_name that will be used by tf-launch-module\\_library-resource\\_name to generate resource names | \u003cpre\u003emap(object(\u003cbr\u003e    {\u003cbr\u003e      name       = string\u003cbr\u003e      max_length = optional(number, 60)\u003cbr\u003e    }\u003cbr\u003e  ))\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"pipeline\": {\u003cbr\u003e    \"max_length\": 60,\u003cbr\u003e    \"name\": \"pipeline\"\u003cbr\u003e  }\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_project_id\"\u003e\u003c/a\u003e [project\\_id](#input\\_project\\_id) | (Required) The project ID or project name. | `string` | n/a | yes |\n| \u003ca name=\"input_path\"\u003e\u003c/a\u003e [path](#input\\_path) | The folder path of the build definition. | `string` | `null` | no |\n| \u003ca name=\"input_agent_pool_name\"\u003e\u003c/a\u003e [agent\\_pool\\_name](#input\\_agent\\_pool\\_name) | The agent pool that should execute the build. Defaults to Azure Pipelines. | `string` | `\"Azure Pipelines\"` | no |\n| \u003ca name=\"input_ci_trigger\"\u003e\u003c/a\u003e [ci\\_trigger](#input\\_ci\\_trigger) | The repository block as documented below. | \u003cpre\u003eobject({\u003cbr\u003e    use_yaml = optional(bool)\u003cbr\u003e    override = optional(object({\u003cbr\u003e      batch = optional(bool)\u003cbr\u003e      branch_filter = optional(object({\u003cbr\u003e        include = optional(list(string))\u003cbr\u003e        exclude = optional(list(string))\u003cbr\u003e      }))\u003cbr\u003e      path_filter = optional(object({\u003cbr\u003e        include = optional(list(string))\u003cbr\u003e        exclude = optional(list(string))\u003cbr\u003e      }))\u003cbr\u003e      max_concurrent_builds_per_branch = number\u003cbr\u003e      polling_interval                 = number\u003cbr\u003e      polling_job_id                   = string\u003cbr\u003e    }))\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"use_yaml\": false\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_pull_request_trigger\"\u003e\u003c/a\u003e [pull\\_request\\_trigger](#input\\_pull\\_request\\_trigger) | Pull Request Integration trigger. | \u003cpre\u003eobject({\u003cbr\u003e    use_yaml       = bool\u003cbr\u003e    initial_branch = optional(string)\u003cbr\u003e    forks = object({\u003cbr\u003e      enabled       = bool\u003cbr\u003e      share_secrets = bool\u003cbr\u003e    })\u003cbr\u003e    override = optional(object({\u003cbr\u003e      auto_cancel = bool\u003cbr\u003e      branch_filter = optional(object({\u003cbr\u003e        include = optional(list(string))\u003cbr\u003e        exclude = optional(list(string))\u003cbr\u003e      }))\u003cbr\u003e      path_filter = optional(object({\u003cbr\u003e        include = optional(list(string))\u003cbr\u003e        exclude = optional(list(string))\u003cbr\u003e      }))\u003cbr\u003e    }))\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"forks\": {\u003cbr\u003e    \"enabled\": false,\u003cbr\u003e    \"share_secrets\": false\u003cbr\u003e  },\u003cbr\u003e  \"use_yaml\": false\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_variable_groups\"\u003e\u003c/a\u003e [variable\\_groups](#input\\_variable\\_groups) | A list of variable group IDs (integers) to link to the build definition. Defaults to {}. | `list(number)` | `null` | no |\n| \u003ca name=\"input_features\"\u003e\u003c/a\u003e [features](#input\\_features) | A list of variable group IDs (integers) to link to the build definition. Defaults to {}. | \u003cpre\u003eobject({\u003cbr\u003e    skip_first_run = optional(bool)\u003cbr\u003e  })\u003c/pre\u003e | `{}` | no |\n| \u003ca name=\"input_queue_status\"\u003e\u003c/a\u003e [queue\\_status](#input\\_queue\\_status) | The queue status of the build definition. Valid values: enabled or paused or disabled. Defaults to enabled. | `string` | `\"enabled\"` | no |\n| \u003ca name=\"input_schedules\"\u003e\u003c/a\u003e [schedules](#input\\_schedules) | The repository block as documented below. | \u003cpre\u003eobject({\u003cbr\u003e    days_to_build              = list(string)\u003cbr\u003e    schedule_only_with_changes = optional(bool)\u003cbr\u003e    start_hours                = optional(string)\u003cbr\u003e    start_minutes              = optional(string)\u003cbr\u003e    time_zone                  = optional(string)\u003cbr\u003e    branch_filter = optional(object({\u003cbr\u003e      include = optional(list(string))\u003cbr\u003e      exclude = optional(list(string))\u003cbr\u003e    }))\u003cbr\u003e  })\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_repository\"\u003e\u003c/a\u003e [repository](#input\\_repository) | The repository block as documented below. | \u003cpre\u003eobject({\u003cbr\u003e    branch_name           = string\u003cbr\u003e    repo_id               = string\u003cbr\u003e    repo_type             = string\u003cbr\u003e    service_connection_id = optional(string)\u003cbr\u003e    yml_path              = optional(string)\u003cbr\u003e    github_enterprise_url = optional(string)\u003cbr\u003e    report_build_status   = optional(bool)\u003cbr\u003e  })\u003c/pre\u003e | n/a | yes |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_id\"\u003e\u003c/a\u003e [id](#output\\_id) | n/a |\n| \u003ca name=\"output_revision\"\u003e\u003c/a\u003e [revision](#output\\_revision) | n/a |\n| \u003ca name=\"output_schedule_id\"\u003e\u003c/a\u003e [schedule\\_id](#output\\_schedule\\_id) | n/a |\n\u003c!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaunchbynttdata%2Ftf-azureado-module_reference-pipeline","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flaunchbynttdata%2Ftf-azureado-module_reference-pipeline","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaunchbynttdata%2Ftf-azureado-module_reference-pipeline/lists"}