109 lines
3.9 KiB
Ruby
109 lines
3.9 KiB
Ruby
class Atmos < Formula
|
|
desc "Universal Tool for DevOps and Cloud Automation"
|
|
homepage "https://github.com/cloudposse/atmos"
|
|
url "https://github.com/cloudposse/atmos/archive/v1.21.0.tar.gz"
|
|
sha256 "77c3b10e68d99e62818ca597eeeec1a560c62e0aee9738c7aae37a38c6b0e685"
|
|
license "Apache-2.0"
|
|
|
|
bottle do
|
|
sha256 cellar: :any_skip_relocation, arm64_ventura: "e93cdb3ba80043f2442f4a91842052957c047e803f943d3f8205f7f8242c5f30"
|
|
sha256 cellar: :any_skip_relocation, arm64_monterey: "ecb171d653c3df9a5c4e5a07a767e132d3b497f59a1f98d5d20476198091cbdb"
|
|
sha256 cellar: :any_skip_relocation, arm64_big_sur: "53b6c6c17d30b8fb63bbde4f2f8452feebd43527995177b117228048f03dad4a"
|
|
sha256 cellar: :any_skip_relocation, ventura: "7da504e0dc83799a4fdeecc7826bdd4bf55f8d8e6542f6cd789ffb40e64bddec"
|
|
sha256 cellar: :any_skip_relocation, monterey: "f8fbcc2ab3d2f9851812acbd377cac4e299bc9914ea26f7891c2fd67027b777c"
|
|
sha256 cellar: :any_skip_relocation, big_sur: "705f268a84a58d0fc422975be131550f7abb50d1ac3e5d55b2f5606fb941a307"
|
|
sha256 cellar: :any_skip_relocation, x86_64_linux: "3738d24d88d7bad60dfc3da7ee0dc153edce5e30d2baf5471c47944325879328"
|
|
end
|
|
|
|
depends_on "go" => :build
|
|
|
|
def install
|
|
system "go", "build", *std_go_args(ldflags: "-s -w -X 'github.com/cloudposse/atmos/cmd.Version=#{version}'")
|
|
|
|
generate_completions_from_executable(bin/"atmos", "completion")
|
|
end
|
|
|
|
test do
|
|
# create basic atmos.yaml
|
|
(testpath/"atmos.yaml").write <<~EOT
|
|
components:
|
|
terraform:
|
|
base_path: "./components/terraform"
|
|
apply_auto_approve: false
|
|
deploy_run_init: true
|
|
auto_generate_backend_file: false
|
|
helmfile:
|
|
base_path: "./components/helmfile"
|
|
kubeconfig_path: "/dev/shm"
|
|
helm_aws_profile_pattern: "{namespace}-{tenant}-gbl-{stage}-helm"
|
|
cluster_name_pattern: "{namespace}-{tenant}-{environment}-{stage}-eks-cluster"
|
|
stacks:
|
|
base_path: "./stacks"
|
|
included_paths:
|
|
- "**/*"
|
|
excluded_paths:
|
|
- "globals/**/*"
|
|
- "catalog/**/*"
|
|
- "**/*globals*"
|
|
name_pattern: "{tenant}-{environment}-{stage}"
|
|
logs:
|
|
verbose: false
|
|
colors: true
|
|
EOT
|
|
|
|
# create scaffold
|
|
mkdir_p testpath/"stacks"
|
|
mkdir_p testpath/"components/terraform/top-level-component1"
|
|
(testpath/"stacks/tenant1-ue2-dev.yaml").write <<~EOT
|
|
terraform:
|
|
backend_type: s3 # s3, remote, vault, static, etc.
|
|
backend:
|
|
s3:
|
|
encrypt: true
|
|
bucket: "eg-ue2-root-tfstate"
|
|
key: "terraform.tfstate"
|
|
dynamodb_table: "eg-ue2-root-tfstate-lock"
|
|
acl: "bucket-owner-full-control"
|
|
region: "us-east-2"
|
|
role_arn: null
|
|
remote:
|
|
vault:
|
|
|
|
vars:
|
|
tenant: tenant1
|
|
region: us-east-2
|
|
environment: ue2
|
|
stage: dev
|
|
|
|
components:
|
|
terraform:
|
|
top-level-component1: {}
|
|
EOT
|
|
|
|
# create expected file
|
|
(testpath/"backend.tf.json").write <<~EOT
|
|
{
|
|
"terraform": {
|
|
"backend": {
|
|
"s3": {
|
|
"workspace_key_prefix": "top-level-component1",
|
|
"acl": "bucket-owner-full-control",
|
|
"bucket": "eg-ue2-root-tfstate",
|
|
"dynamodb_table": "eg-ue2-root-tfstate-lock",
|
|
"encrypt": true,
|
|
"key": "terraform.tfstate",
|
|
"region": "us-east-2",
|
|
"role_arn": null
|
|
}
|
|
}
|
|
}
|
|
}
|
|
EOT
|
|
|
|
system bin/"atmos", "terraform", "generate", "backend", "top-level-component1", "--stack", "tenant1-ue2-dev"
|
|
actual_json = JSON.parse(File.read(testpath/"components/terraform/top-level-component1/backend.tf.json"))
|
|
expected_json = JSON.parse(File.read(testpath/"backend.tf.json"))
|
|
assert_equal expected_json["terraform"].to_set, actual_json["terraform"].to_set
|
|
end
|
|
end
|