Git Product home page Git Product logo

cloudposse / terraform-provider-utils Goto Github PK

View Code? Open in Web Editor NEW
94.0 18.0 15.0 1.06 MB

The Cloud Posse Terraform Provider for various utilities (e.g. deep merging, stack configuration management)

Home Page: https://cloudposse.com/accelerate

License: Apache License 2.0

Makefile 1.51% Go 98.49%
terraform terraform-providers provider utilities utils deep-merge stack config configuration configuration-management

terraform-provider-utils's Introduction

terraform-provider-utils

TestsTestsTestsTestsTestsLatest ReleaseLast UpdatedSlack CommunityTests

Terraform provider for various utilities (deep merging, Atmos stack configuration management), and to add additional missing functionality to Terraform

Tip

πŸ‘½ Use Atmos with Terraform

Cloud Posse uses atmos to easily orchestrate multiple environments using Terraform.
Works with Github Actions, Atlantis, or Spacelift.

Watch demo of using Atmos with Terraform
Example of running atmos to manage infrastructure from our Quick Start tutorial.

Usage

Here is how to use this provider in your own Terraform code:

terraform {
  required_providers {
    utils = {
      source = "cloudposse/utils"
      version = ">= 1.17.0"
    }
  }
}

See the Docs for additional information.

Important

In Cloud Posse's examples, we avoid pinning modules to specific versions to prevent discrepancies between the documentation and the latest released versions. However, for your own projects, we strongly advise pinning each module to the exact version you're using. This practice ensures the stability of your infrastructure. Additionally, we recommend implementing a systematic approach for updating versions to avoid unexpected changes.

Examples

Here is an example of using this provider:

terraform {
  required_providers {
    utils = {
      source = "cloudposse/utils"
    }
  }
}

locals {
  yaml_data_1 = file("${path.module}/data1.yaml")
  yaml_data_2 = file("${path.module}/data2.yaml")
}

data "utils_deep_merge_yaml" "example" {
  input = [
    local.yaml_data_1,
    local.yaml_data_2
  ]
}

output "deep_merge_output" {
  value = data.utils_deep_merge_yaml.example.output
}

Here are some additional examples:

Developing the Provider

If you wish to work on the provider, you'll first need Go installed on your machine (see Requirements above).

To compile the provider, run go install. This will build the provider and put the provider binary in the $GOPATH/bin directory.

To generate or update documentation, run go generate.

In order to run the full suite of Acceptance tests, run make testacc.

Note: Acceptance tests create real resources, and often cost money to run.

$ make testacc

Testing Locally

You can test the provider locally by using the provider_installation functionality.

For testing this provider, you can edit your ~/.terraformrc file with the following:

provider_installation {
  dev_overrides  {
    "cloudposse/utils" = "/path/to/your/code/github.com/cloudposse/terraform-provider-utils/"
  }

  # For all other providers, install them directly from their origin provider
  # registries as normal. If you omit this, Terraform will _only_ use
  # the dev_overrides block, and so no other providers will be available.
  direct {}
}

With that in place, you can build the provider (see above) and add a provider block:

required_providers {
    utils = {
      source = "cloudposse/utils"
    }
  }

Then run terraform init, terraform plan and terraform apply as normal.

$ terraform init
Initializing the backend...

Initializing provider plugins...
- Finding latest version of cloudposse/utils...

Warning: Provider development overrides are in effect

The following provider development overrides are set in the CLI configuration:
 - cloudposse/utils in /path/to/your/code/github.com/cloudposse/terraform-provider-utils

The behavior may therefore not match any released version of the provider and
applying changes may cause the state to become incompatible with published
releases.
terraform apply

Warning: Provider development overrides are in effect

The following provider development overrides are set in the CLI configuration:
 - cloudposse/utils in /Users/matt/code/src/github.com/cloudposse/terraform-provider-utils

The behavior may therefore not match any released version of the provider and
applying changes may cause the state to become incompatible with published
releases.


An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:

Terraform will perform the following actions:

Plan: 0 to add, 0 to change, 0 to destroy.

Changes to Outputs:
  + deep_merge_output = <<-EOT
        Statement:
        - Action:
          - s3:*
          Effect: Allow
          Resource:
          - '*'
          Sid: FullAccess
        - Action:
          - s3:*
          Complex:
            ExtraComplex:
              ExtraExtraComplex:
                Foo: bazzz
                SomeArray:
                - one
                - two
                - three
          Effect: Deny
          Resource:
          - arn:aws:s3:::customer
          - arn:aws:s3:::customer/*
          - foo
          Sid: DenyCustomerBucket
        Version: "2012-10-17"
    EOT

Related Projects

Check out these related projects.

References

For additional context, refer to some of these links.

  • Terraform Plugins - Terraform is logically split into two main parts: Terraform Core and Terraform Plugins. Each plugin exposes an implementation for a specific service, such as the AWS provider or the cloud-init provider.

Tip

Use Terraform Reference Architectures for AWS

Use Cloud Posse's ready-to-go terraform architecture blueprints for AWS to get up and running quickly.

βœ… We build it with you.
βœ… You own everything.
βœ… Your team wins.

Request Quote

πŸ“š Learn More

Cloud Posse is the leading DevOps Accelerator for funded startups and enterprises.

Your team can operate like a pro today.

Ensure that your team succeeds by using Cloud Posse's proven process and turnkey blueprints. Plus, we stick around until you succeed.

Day-0: Your Foundation for Success

  • Reference Architecture. You'll get everything you need from the ground up built using 100% infrastructure as code.
  • Deployment Strategy. Adopt a proven deployment strategy with GitHub Actions, enabling automated, repeatable, and reliable software releases.
  • Site Reliability Engineering. Gain total visibility into your applications and services with Datadog, ensuring high availability and performance.
  • Security Baseline. Establish a secure environment from the start, with built-in governance, accountability, and comprehensive audit logs, safeguarding your operations.
  • GitOps. Empower your team to manage infrastructure changes confidently and efficiently through Pull Requests, leveraging the full power of GitHub Actions.

Request Quote

Day-2: Your Operational Mastery

  • Training. Equip your team with the knowledge and skills to confidently manage the infrastructure, ensuring long-term success and self-sufficiency.
  • Support. Benefit from a seamless communication over Slack with our experts, ensuring you have the support you need, whenever you need it.
  • Troubleshooting. Access expert assistance to quickly resolve any operational challenges, minimizing downtime and maintaining business continuity.
  • Code Reviews. Enhance your team’s code quality with our expert feedback, fostering continuous improvement and collaboration.
  • Bug Fixes. Rely on our team to troubleshoot and resolve any issues, ensuring your systems run smoothly.
  • Migration Assistance. Accelerate your migration process with our dedicated support, minimizing disruption and speeding up time-to-value.
  • Customer Workshops. Engage with our team in weekly workshops, gaining insights and strategies to continuously improve and innovate.

Request Quote

✨ Contributing

This project is under active development, and we encourage contributions from our community.

Many thanks to our outstanding contributors:

For πŸ› bug reports & feature requests, please use the issue tracker.

In general, PRs are welcome. We follow the typical "fork-and-pull" Git workflow.

  1. Review our Code of Conduct and Contributor Guidelines.
  2. Fork the repo on GitHub
  3. Clone the project to your own machine
  4. Commit changes to your own branch
  5. Push your work back up to your fork
  6. Submit a Pull Request so that we can review your changes

NOTE: Be sure to merge the latest changes from "upstream" before making a pull request!

🌎 Slack Community

Join our Open Source Community on Slack. It's FREE for everyone! Our "SweetOps" community is where you get to talk with others who share a similar vision for how to rollout and manage infrastructure. This is the best place to talk shop, ask questions, solicit feedback, and work together as a community to build totally sweet infrastructure.

πŸ“° Newsletter

Sign up for our newsletter and join 3,000+ DevOps engineers, CTOs, and founders who get insider access to the latest DevOps trends, so you can always stay in the know. Dropped straight into your Inbox every week β€” and usually a 5-minute read.

πŸ“† Office Hours

Join us every Wednesday via Zoom for your weekly dose of insider DevOps trends, AWS news and Terraform insights, all sourced from our SweetOps community, plus a live Q&A that you can’t find anywhere else. It's FREE for everyone!

License

License

Preamble to the Apache License, Version 2.0

Complete license is available in the LICENSE file.

Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.

Trademarks

All other trademarks referenced herein are the property of their respective owners.

Copyrights

Copyright Β© 2021-2024 Cloud Posse, LLC

README footer

Beacon

terraform-provider-utils's People

Contributors

aknysh avatar danischm avatar dependabot[bot] avatar goruha avatar martinhaus avatar mcalhoun avatar nitrocode avatar nuru avatar osterman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

terraform-provider-utils's Issues

Provider does not work with AWS SSO

Describe the Bug

β”‚ Error: error configuring Terraform AWS Provider: loading configuration: profile "vev-production" is configured to use SSO but is missing required configuration: sso_region, sso_start_url
β”‚
β”‚ with provider["registry.terraform.io/cloudposse/awsutils"],
β”‚ on provider.tf line 6, in provider "awsutils":
β”‚ 6: provider "awsutils" {

Expected Behavior

Uses the AWS SSO configuration to load profile

Steps to Reproduce

  1. Setup an AWS account with IAM Identity Center enabled
  2. Configure profile locally https://awscli.amazonaws.com/v2/documentation/api/latest/reference/configure/sso.html
  3. Use provider

Screenshots

No response

Environment

OSX
Terraform 1.6.3
Provider 0.18.1

Additional Context

Looks like terragrunt fixed this by bumping the AWS SDK version gruntwork-io/terragrunt@5c817c9

Add method to load multi-yaml document

Describe the Feature

When processing k8s yaml files, it's very common that these have multi-document yaml files.
At the moment there are not many general and well supported ways of getting these files into HCL-land.
Since the deep_merge method is also one of the only ways to do a common yaml operation in HCL, I would like to kindly suggest that a method to parse multi-document YAMLs into a list of individual YAMLs (ie, into list(str)).

Expected Behavior

parsing a YAML file (str) into a list of YAMLs (list(str))
if file is already single document, a list with only 1 string will be returned.

Use Case

Processing of k8s manifest files (and flux2 files, and ...)

Describe Ideal Solution

parsing a YAML file (str) into a list of YAMLs (list(str))
if file is already single document, a list with only 1 string will be returned.

Alternatives Considered

There is currently something similar in alekc/kubectl (from gavinbunney/kubectl) in the form of kubectl_file_documents and kubectl_path_documents, but this is not generic YAML.
A discussion on adding similar capabilities to terraform here hashicorp/terraform#29729

Additional Context

No response

Update from `0.17.7` to `0.17.8` cause `fatal error: stack overflow`

Describe the Bug

After update from 0.17.7 to 0.17.8 cause fatal error: stack overflow

[01FPC6WFPV6EYSVD3D5PW96T83] Planning changes with 0 custom hooks...
β•·
β”‚ Warning: Value for undeclared variable
β”‚ 
β”‚ The root module does not declare a variable named "region" but a value was
β”‚ found in file "spacelift.auto.tfvars.json". If you meant to use this value,
β”‚ add a "variable" block to the configuration.
β”‚ 
β”‚ To silence these warnings, use TF_VAR_... environment variables to provide
β”‚ certain "global" settings to all configurations in your organization. To
β”‚ reduce the verbosity of these warnings, use the -compact-warnings option.
β•΅
β•·
β”‚ Error: Request cancelled
β”‚ 
β”‚   with module.bastion.module.backend_config.data.utils_stack_config_yaml.config,
β”‚   on .terraform/modules/bastion/modules/backend/main.tf line 5, in data "utils_stack_config_yaml" "config":
β”‚    5: data "utils_stack_config_yaml" "config" {
β”‚ 
β”‚ The plugin.(*GRPCProvider).ReadDataSource request was cancelled.
β•΅

Stack trace from the terraform-provider-utils_v0.17.8 plugin:

fatal error: stack overflow

runtime stack:
runtime.throw(0xdcd4bb, 0xe)
	runtime/panic.go:1117 +0x72
runtime.newstack()
	runtime/stack.go:1069 +0x7ed
runtime.morestack()
	runtime/asm_amd64.s:458 +0x8f

goroutine 29 [running]:
runtime.typehash(0xc98440, 0xc020a344f0, 0x756ea1a5c6d983, 0x0)
	runtime/alg.go:144 +0x65d fp=0xc020a34368 sp=0xc020a34360 pc=0x403e3d
runtime.nilinterhash(0xc020a34500, 0xcf907fa2, 0x0)
	runtime/alg.go:130 +0xba fp=0xc020a343b0 sp=0xc020a34368 pc=0x40371a
runtime.mapaccess2(0xccb160, 0xc00054aba0, 0xc020a34500, 0x0, 0x0)
	runtime/map.go:471 +0x68 fp=0xc020a343f0 sp=0xc020a343b0 pc=0x40f488
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:668 +0x9b fp=0xc020a345e0 sp=0xc020a343f0 pc=0x85c09b
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a347d0 sp=0xc020a345e0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a349c0 sp=0xc020a347d0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a34bb0 sp=0xc020a349c0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a34da0 sp=0xc020a34bb0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a34f90 sp=0xc020a34da0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a35180 sp=0xc020a34f90 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a35370 sp=0xc020a35180 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a35560 sp=0xc020a35370 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a35750 sp=0xc020a35560 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a35940 sp=0xc020a35750 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a35b30 sp=0xc020a35940 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a35d20 sp=0xc020a35b30 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a35f10 sp=0xc020a35d20 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a36100 sp=0xc020a35f10 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a362f0 sp=0xc020a36100 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a364e0 sp=0xc020a362f0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a366d0 sp=0xc020a364e0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a368c0 sp=0xc020a366d0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a36ab0 sp=0xc020a368c0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a36ca0 sp=0xc020a36ab0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a36e90 sp=0xc020a36ca0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a37080 sp=0xc020a36e90 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a37270 sp=0xc020a37080 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a37460 sp=0xc020a37270 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a37650 sp=0xc020a37460 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a37840 sp=0xc020a37650 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a37a30 sp=0xc020a37840 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a37c20 sp=0xc020a37a30 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a37e10 sp=0xc020a37c20 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a38000 sp=0xc020a37e10 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a381f0 sp=0xc020a38000 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a383e0 sp=0xc020a381f0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a385d0 sp=0xc020a383e0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a387c0 sp=0xc020a385d0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a389b0 sp=0xc020a387c0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a38ba0 sp=0xc020a389b0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a38d90 sp=0xc020a38ba0 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a38f80 sp=0xc020a38d90 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a39170 sp=0xc020a38f80 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a39360 sp=0xc020a39170 pc=0x85c199
github.com/cloudposse/atmos/pkg/stack.processBaseComponentConfig(0xc040a337e8, 0xc00054aba0, 0xc0007897e8, 0x18, 0xc0000373c0, 0x20, 0xc0007897e8, 0x18, 0x0, 0x0)
	github.com/cloudposse/[email protected]/pkg/stack/stack_processor.go:673 +0x199 fp=0xc020a39550 sp=0xc020a39360 pc=0x85c199

Error: The terraform-provider-utils_v0.17.8 plugin crashed!

This is always indicative of a bug within the plugin. It would be immensely
helpful if you could report the crash with the plugin's maintainers so that it
can be fixed. The output above should help diagnose the issue.

[01FPC6WFPV6EYSVD3D5PW96T83] Unexpected exit code when planning changes: 1

Deepmerge yaml array overriding

Describe the Bug

If I deep merge for exemple:
yaml-1:

root:
  key1:
    array:
       - key: yaml-1
         value: yaml-1

yaml-2:

root:
  key1:
    array:
       - key: yaml-2
         value: yaml-2

but it is producing
resulting-yaml:

root:
  key1:
    array:
       - key: yaml-2
         value: yaml-2

Expected Behavior

resulting-yaml:

root:
  key1:
    array:
       - key: yaml-1
         value: yaml-1
       - key: yaml-2
         value: yaml-2

Steps to Reproduce

2 yaml as described using utils_deep_merge_yaml

Screenshots

No response

Environment

Terraform v1.6.2
on windows_386

  • provider registry.terraform.io/cloudposse/utils v1.18.0

Additional Context

No response

Submit signatures for provider to OpenTofu registry

Describe the Feature

output when using with opentofu:

- Installed cloudposse/utils v1.15.0. Signature validation was skipped due to the registry not containing GPG keys for this provider

Expected Behavior

Signatures in registry would be nice to have

Use Case

blank

Describe Ideal Solution

blank

Alternatives Considered

No response

Additional Context

No response

Error using provided examples

Found a bug? Maybe our Slack Community can help.

Slack Community

Describe the Bug

I have tried to use this provider, and fallen back to the provided examples at terraform-provider-utils/examples/data-sources/utils_deep_merge_json. I get the following error:

$ terraform plan
β•·
β”‚ Error: json: unsupported type: map[interface {}]interface {}
β”‚ 
β”‚   with data.utils_deep_merge_json.example,
β”‚   on deep_merge.tf line 14, in data "utils_deep_merge_json" "example":
β”‚   14: data "utils_deep_merge_json" "example" {
β”‚ 
β•΅

Expected Behavior

I would expect that the examples work.

Steps to Reproduce

Steps to reproduce the behavior:

  1. Go to 'terraform-provider-utils/examples/data-sources/utils_deep_merge_json'
  2. Run 'terraform init && terraform plan'
  3. See error

Environment (please complete the following information):

Anything that will help us triage the bug will help. Here are some ideas:

  • OS: macos 11.5.2
  • Terraform: v1.0.7
  • provider registry.terraform.io/cloudposse/utils v0.14.1

Update releases with the respective atmos version

Have a question? Please checkout our Slack Community or visit our Slack Archive.

Slack Community

Describe the Feature

It would be nice to see the releases with the respective atmos version. The releases are generally patch releases and most people do not pin their releases to a specific version but pin to the latest patch release. Sometimes a newer patch release comes out and breaks terraform runs because the local atmos also needs to be updated.

Expected Behavior

If the atmos version is included with the utils provider, it would be less hunting to find the associated atmos release associated. Sometimes these new releases do not include an atmos release update so it would be fine for those releases to use the current atmos version associated.

Then if something breaks, we can ensure the provider release and atmos release are aligned, before submitting an issue.

e.g. provider version 0.17.23 points to atmos version 1.4.11 so they should be used together to eliminate a version difference.

Provider "utils" not available for installation.

Found a bug? Maybe our Slack Community can help.

Slack Community

Describe the Bug

A provider named "utils" could not be found in the Terraform Registry.

utils = {
source = "cloudposse/utils"
version = ">= 0.12.0"
}

Expected Behavior

A clear and concise description of what you expected to happen.

Steps to Reproduce

Steps to reproduce the behavior:

  1. Go to '...'
  2. Run '....'
  3. Enter '....'
  4. See error

Screenshots

If applicable, add screenshots or logs to help explain your problem.

Environment (please complete the following information):

Anything that will help us triage the bug will help. Here are some ideas:

  • OS: [e.g. Linux, OSX, WSL, etc]
  • Version [e.g. 10.15]

Additional Context

Add any other context about the problem here.

Optionally implement terraform-provider-utils as provider-defined functions for Terraform 1.8+

Describe the Feature

Thank you for supporting the Terraform community with this data provider! If you were using the data provider construct to work around the lack of support in Terraform for external functions, please consider the following new feature of Terraform.

Terraform version 1.8 launches with support of provider-defined functions. It is now possible to implement this functionality as a function, rather than wrap the functionality in a data provider. Provider-based functions have the advantage of a simpler in-line syntax that does not require the data block (or any other resource blocks) to use.

The caveat is that, as provider-defined functions are new to Terraform 1.8, you would need to continue to maintain the current data provider functionality if you wished to continue to support earlier versions of Terraform.

Please see the provider-defined functions documentation to learn how to implement functions in your providers. If you have any questions, please visit the Terraform topic in our official forum.

We greatly appreciate your support of the Terraform community with your contributions. If you do not wish to implement this functionality as a function, please feel free to close this issue. This issue is simply to raise awareness of the new capability. Thanks again!

Expected Behavior

n/a

Use Case

n/a

Describe Ideal Solution

n/a

Alternatives Considered

No response

Additional Context

No response

Support an updated `template_file` until string templates are in terraform core

Have a question? Please checkout our Slack Community or visit our Slack Archive.

Slack Community

Describe the Feature

The templatefile function cannot use a string. It has to use a file that has been created prior to the terraform commands.

Feature would be similar to the archived template_file data source

Unfortunately hashicorp/terraform-provider-template has been archived before darwin osx supported binary was released.

This maybe... would be a stop gap solution until PR hashicorp/terraform#28700 is implemented.

Expected Behavior

Allow creating template strings without having to create the file

Use Case

For example, if you use a data source with templated variables like the data source aws_iam_policy_document, you could previously feed in its json text into the template_file data source and allow replacements. With templatefile, you can no longer do this easily.

Describe Ideal Solution

Ideal solution would be to implement a templatestring() but custom providers cannot add new functions.

So the ideal solution would be to recreate the original data source template_file.

Alternatives Considered

  • Manually create a template file containing the iam policy document, add in the appropriate variables, then use templatefile to replace them.
  • Use multiple replace functions which is pretty hacky and could cause issues (example)

Additional Context

Cannot use a list as an input for `utils_deep_merge_yaml` data source

Found a bug? Maybe our Slack Community can help.

Slack Community

Describe the Bug

I cannot input 2 list of correct yaml to deep merge.

Expected Behavior

It should allow a set of lists or maps

Steps to Reproduce

terraform {
  required_providers {
    utils = {
      source = "cloudposse/utils"
    }
  }
}

locals {
  yaml_data_1 = [
    {
      a = "alpha"
    },
    {
      b = "beta"
    },
    {
      c = "charlier"
    },
  ]
  yaml_data_2 = [
    {
      b = "banana"
    }
  ]
}

This fails as the inputs are both lists

data "utils_deep_merge_yaml" "example" {
  input = [
    yamlencode(local.yaml_data_1),
    yamlencode(local.yaml_data_2),
  ]
}

output "deep_merge_output" {
  value = data.utils_deep_merge_yaml.example.output
}
$ terraform apply
β•·
β”‚ Error: yaml: unmarshal errors:
β”‚   line 1: cannot unmarshal !!seq into map[interface {}]interface {}
β”‚ 
β”‚   with data.utils_deep_merge_yaml.example,
β”‚   on text.tf line 28, in data "utils_deep_merge_yaml" "example":
β”‚   28: data "utils_deep_merge_yaml" "example" {
β”‚ 
β•΅

This works by creating a custom mapping key which then needs to be removed later

data "utils_deep_merge_yaml" "example" {
  input = [
    yamlencode({ mapping = local.yaml_data_1 }),
    yamlencode({ mapping = local.yaml_data_2 }),
  ]
}

output "deep_merge_output" {
  value = yamldecode(data.utils_deep_merge_yaml.example.output).mapping
}
$ terraform apply   

Changes to Outputs:
  + deep_merge_output = [
      + {
          + b = "banana"
        },
    ]

Screenshots

N/A

Environment (please complete the following information):

Anything that will help us triage the bug will help. Here are some ideas:

  • OS: Linux
  • Version: 5.4.0-74-generic

Additional Context

N/A

Support sensitive values merge

Since terraform 0.15 sensitive values are treated carefully throughout terraform itself. But resources need to declare inputs as sensitive to benefit from that change. It would be great to be able to merge sensitive values.

I would propose to either

  • create a new resource utils_sensitive_deep_merge_yaml where input and output schemas are declared sensible
  • or add sensitive_input and sensitive_output schemas to the existing resource

What do you think? In case you are interested, I would quickly prepare a PR.

utils_deep_merge_* expose the object

Describe the Feature

After mergin the files you need to convert to an object the string. If you are chaining the merge a double encode is needed

Use Case

data "utils_deep_merge_json" "example" {
  for_each  = local.some_array
  input = [for s in each.value: jsonencode(s)]
}

resource "kubectl_manifest" "example" {    
  for_each  = data.utils_deep_merge_json.example
  yaml_body =  templatefile(**jsondecode(each.value.output).template**", merge(
                  **jsondecode(each.value.output).some_object**,
                  {
                    namespace = var.ns                    
                  },
                ))
}


Describe Ideal Solution

Expose the merged string as an object

Consider making utils_deep_merge_* local-only data sources

Describe the Feature

Currently utils_deep_merge_yaml and utils_deep_merge_json are implemented as normal data sources, not local-only data sources. This causes changes to the yaml files on disk to not take effect when running something like a terraform import which loads the cached result from state.

Expected Behavior

These data sources that merge strings should be local-only data sources so that the result is re-computed every time rather than cached.

Use Case

We use yaml files to store some configuration. We flipped a boolean there that allows us to import a Route53 hosted zone, but are getting errors during the import but not during the plan because the import is using the cached merge rather than re-evaluating the new boolean. This also is present during the usage of terraform console.

Describe Ideal Solution

Ideal solution would be to make these local-only data sources so that the result is re-computed every time.

Alternatives Considered

I ran tf apply -target=data.utils_deep_merge_yaml.environment_config which reported no changes but updated the value in state, which allowed the next import to succeed.

This provider does not seem to work.

Running both yaml and json examples from this project, what I get is just a list of maps, not the merge

i.e.

cd examples/data-sources/utils_deep_merge_json
terraform init
terraform apply
terraform output -json | jq -r .deep_merge_output.value | jq

The end result is this JSON

[
  {
    "Statement": [
      {
        "Action": [
          "s3:*"
        ],
        "Effect": "Allow",
        "Resource": [
          "*"
        ],
        "Sid": "FullAccess"
      },
      {
        "Action": [
          "s3:*"
        ],
        "Complex": {
          "ExtraComplex": {
            "ExtraExtraComplex": {
              "Foo": "bar",
              "SomeArray": [
                "four"
              ]
            }
          }
        },
        "Effect": "Allow",
        "Resource": [
          "arn:aws:s3:::customer",
          "arn:aws:s3:::customer/*"
        ],
        "Sid": "DenyCustomerBucket"
      }
    ],
    "Version": "2012-10-17"
  },
  {
    "Statement": [
      {
        "Action": [
          "s3:*"
        ],
        "Effect": "Allow",
        "Resource": [
          "*"
        ],
        "Sid": "FullAccess"
      },
      {
        "Action": [
          "s3:*"
        ],
        "Complex": {
          "ExtraComplex": {
            "ExtraExtraComplex": {
              "Foo": "bazzz",
              "SomeArray": [
                "one",
                "two",
                "three"
              ]
            }
          }
        },
        "Effect": "Deny",
        "Resource": [
          "arn:aws:s3:::customer",
          "arn:aws:s3:::customer/*",
          "foo"
        ],
        "Sid": "DenyCustomerBucket"
      }
    ],
    "Version": "2012-10-17"
  }
]

As you can see the end result is a json list of input maps, not a map of merged inputs.

fatal error: concurrent map writes

Found a bug? Maybe our Slack Community can help.

Slack Community

Describe the Bug

Running a plan from atmos or from spacelift randomly returns this error

fatal error: concurrent map writes
goroutine 196 [running]:
runtime.throw(0xc3fe23, 0x15)
	runtime/panic.go:1117 +0x72 fp=0xc000119eb0 sp=0xc000119e80 pc=0x436352
runtime.mapassign_faststr(0xb68580, 0xc00016d5c0, 0xc0008f0180, 0xf, 0xc00016d5c0)
	runtime/map_faststr.go:211 +0x3f1 fp=0xc000119f18 sp=0xc000119eb0 pc=0x414491
github.com/cloudposse/terraform-provider-utils/internal/stack.ProcessYAMLConfigFile.func1(0xc0008f0780, 0xc00016d5c0, 0xc0008ed170, 0xc0008f0758, 0xc0006b64e0, 0xc0008f0180, 0xf, 0xc0000e8c00, 0x24)
	github.com/cloudposse/terraform-provider-utils/internal/stack/stack_processor.go:132 +0x185 fp=0xc000119f98 sp=0xc000119f18 pc=0x7d2a85
runtime.goexit()
	runtime/asm_amd64.s:1371 +0x1 fp=0xc000119fa0 sp=0xc000119f98 pc=0x46c401
created by github.com/cloudposse/terraform-provider-utils/internal/stack.ProcessYAMLConfigFile
	github.com/cloudposse/terraform-provider-utils/internal/stack/stack_processor.go:120 +0x39c

Expected Behavior

No error

Steps to Reproduce

Steps to reproduce the behavior:

  1. atmos terraform plan

It's not reproducible. Retrying works.

Screenshots

N/A

Environment (please complete the following information):

Anything that will help us triage the bug will help. Here are some ideas:

  • OS: OSX
  • Version 11.5.1

Additional Context

Terraform 1.0.3

v0.12 - Infinite Looping Dag Walk for Stack Config Remote State Module

Describe the Bug

With the v0.12, there is now a bug that causes an infinite loop of dag/walk: vertex (via trace tf logging). The tracing logging show it is waiting on something from X (fill in the blank) remote-state to expand.

Expected Behavior

Prevent infinite looping.

Steps to Reproduce

This is an assumption but I may reproduce when deploying anything depends on cloudposse/stack-config/yaml//modules/remote-state but with cloudposse/utils pinned to 0.12 at the root module/component.

In my case, I was deploying cloudposse/ecs-web-app/aws (with slight modifications) that was using remote-state components to get the vpc, ecs, and logs-bucket data.

Anything that will help us triage the bug will help. Here are some ideas:

  • atmos container
  • tf v1.0.3

Additional Context

This is a subsample of the logs that were repeating infinitely. module.vpc, module.ecs, module.logs_bucket, and module.ecs are remote-state modules.


2021-08-03T09:33:31.106Z [TRACE] dag/walk: vertex "module.ecr.module.backend_config.output.backend (expand)" is waiting for "module.ecr.module.backend_config.local.backend (expand)"
2021-08-03T09:33:31.106Z [TRACE] dag/walk: vertex "root" is waiting for "provider[\"terraform.io/builtin/terraform\"] (close)"
2021-08-03T09:33:31.106Z [TRACE] dag/walk: vertex "module.ecr.output.s3_workspace_name (expand)" is waiting for "module.ecr.local.s3_workspace (expand)"
2021-08-03T09:33:31.106Z [TRACE] dag/walk: vertex "module.vpc.module.backend_config.local.final_component (expand)" is waiting for "module.vpc.module.backend_config.local.base_component (expand)"
2021-08-03T09:33:31.106Z [TRACE] dag/walk: vertex "module.web_app.local.load_balancers (expand)" is waiting for "module.web_app.local.alb (expand)"
2021-08-03T09:33:31.106Z [TRACE] dag/walk: vertex "module.vpc.local.remote_states (expand)" is waiting for "module.vpc.data.terraform_remote_state.remote (expand)"
2021-08-03T09:33:31.106Z [TRACE] dag/walk: vertex "module.alb.output.http_redirect_listener_arn (expand)" is waiting for "module.alb.aws_lb_listener.http_redirect (expand)"
2021-08-03T09:33:31.106Z [TRACE] dag/walk: vertex "module.web_app.module.alb_ingress.local.target_group_arn (expand)" is waiting for "module.web_app.module.alb_ingress.var.target_group_arn (expand)"
2021-08-03T09:33:31.146Z [TRACE] dag/walk: vertex "module.ecr.local.include_component_in_workspace_name (expand)" is waiting for "module.ecr.local.base_component (expand)"
2021-08-03T09:33:31.146Z [TRACE] dag/walk: vertex "module.alb.aws_lb_listener.http_redirect (expand)" is waiting for "module.alb.aws_lb_target_group.default (expand)"
2021-08-03T09:33:31.153Z [TRACE] dag/walk: vertex "module.alb.aws_security_group_rule.https_ingress (expand)" is waiting for "module.alb.aws_security_group.default (expand)"
2021-08-03T09:33:31.160Z [TRACE] dag/walk: vertex "module.alb.aws_lb_listener.https (expand)" is waiting for "module.alb.aws_lb_target_group.default (expand)"
2021-08-03T09:33:31.160Z [TRACE] dag/walk: vertex "module.alb.aws_lb_listener.http_forward (expand)" is waiting for "module.alb.aws_lb_target_group.default (expand)"
2021-08-03T09:33:31.160Z [TRACE] dag/walk: vertex "module.alb.aws_security_group_rule.http_ingress (expand)" is waiting for "module.alb.aws_security_group.default (expand)"
2021-08-03T09:33:31.161Z [TRACE] dag/walk: vertex "module.alb.aws_lb.default (expand)" is waiting for "module.alb.var.subnet_ids (expand)"
2021-08-03T09:33:31.169Z [TRACE] dag/walk: vertex "module.vpc.local.s3_workspace (expand)" is waiting for "module.vpc.local.s3_workspace_from_stack (expand)"
2021-08-03T09:33:31.176Z [TRACE] dag/walk: vertex "module.ecr.data.terraform_remote_state.remote (expand)" is waiting for "module.ecr.local.backend (expand)"
2021-08-03T09:33:31.178Z [TRACE] dag/walk: vertex "module.ecr.data.terraform_remote_state.s3 (expand)" is waiting for "module.ecr.local.backend_type (expand)"
2021-08-03T09:33:31.182Z [TRACE] dag/walk: vertex "module.vpc.module.backend_config.local.base_component (expand)" is waiting for "module.vpc.module.backend_config.local.config (expand)"
2021-08-03T09:33:31.210Z [TRACE] dag/walk: vertex "module.ecs.module.backend_config.local.base_component (expand)" is waiting for "module.ecs.module.backend_config.local.config (expand)"
2021-08-03T09:33:31.213Z [TRACE] dag/walk: vertex "module.ecr.module.backend_config.local.base_component (expand)" is waiting for "module.ecr.module.backend_config.local.config (expand)"
2021-08-03T09:33:31.24

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.