Releases: cloudposse/atmos
v1.92.0
Improve error handling @haitham911 (#726)
what
- Improve error handling , check log level
Trace
for detailed trace information
why
- Print detailed error only when log level
Trace
v1.91.0
feat: support for `.yml` and `.yaml` file extensions for component vendoring @RoseSecurity (#725)
## what- Support for
.yml
and.yaml
when vendoring usingcomponent.yaml
why
- The tool is strict about needing
component.yaml
, file ending for yaml files is a matter of preference and both should be accepted.
testing
-
make build
# component.yml
❯ ./build/atmos vendor pull -c aurora-postgres-resources
Pulling sources for the component 'aurora-postgres-resources' from 'github.com/cloudposse/terraform-aws-components.git//modules/aurora-postgres-resources?ref=1.511.0' into
'/Users/infra/components/terraform/aurora-postgres-resources'
# component.yaml
❯ ./build/atmos vendor pull -c aurora-postgres-resources
Pulling sources for the component 'aurora-postgres-resources' from 'github.com/cloudposse/terraform-aws-components.git//modules/aurora-postgres-resources?ref=1.511.0' into
'/Users/infra/components/terraform/aurora-postgres-resources'
# Missing both
❯ ./build/atmos vendor pull -c aurora-postgres-resources
component vendoring config file does not exist in the '/Users/infra/components/terraform/aurora-postgres-resources' folder
references
- Closes the following issue
Summary by CodeRabbit
Summary by CodeRabbit
-
New Features
- Enhanced file existence checks for component configuration, now supporting both
.yaml
and.yml
file formats.
- Enhanced file existence checks for component configuration, now supporting both
-
Refactor
- Streamlined variable declarations for improved readability without changing logic.
Add the guide to install atmos using aqua @suzuki-shunsuke (#720)
## whatAdd the guide to install atmos using aqua.
why
aqua is a CLI Version Manager written in Go.
aqua supports various tools including atmos, Terraform, Helm, Helmfile.
Confirmation
I have launched the webserver on my laptop according to the guide.
references
Summary by CodeRabbit
-
New Features
- Introduced a new installation method for Atmos using the
aqua
CLI version manager. - Added a dedicated tab in the installation guide for
aqua
, including instructions for setup and usage.
- Introduced a new installation method for Atmos using the
-
Documentation
- Updated the "Install Atmos" document to enhance user guidance on installation options.
v1.90.0
Always template vendor source and targets @mss (#712)
## whatThis change improves the templating within vendor manifests slightly: It officially adds support for the Component
field to both source
and targets
.
These features were already supported but mostly undocumented and hidden behind an implicit switch: The templating was only triggered if the Version
field was set. Which was also the only officially supported field.
In reality though all fields from the current source definition were available but in the state they were currently in, depending on the order of the templates.
With this change
- It is clearly documented which fields are supported in which YAML values.
- Only the two static fields are supported.
- The values are always templated.
Theoretically this could be a breaking change if somebody used no version
field but curly braces in their paths. Or relied on the half-populated source data structure to refer to unsupported fields. If xkcd 1172 applies it should be possible to amend this logic to add more officially supported fields.
why
I was looking for a way to restructure our vendoring like the examples in examples/demo-vendoring/vendor.yaml
to avoid copy and paste errors when we release new component versions.
I actually only found out about that demo when I was done writing this code since the templating was never triggered without a version
field and the documentation didn't mention it.
references
- https://github.com/cloudposse/atmos/blob/v1.88.1/examples/demo-vendoring/vendor.yaml
- https://atmos.tools/core-concepts/vendor/vendor-manifest/#vendoring-manifest
Summary by CodeRabbit
-
New Features
- Enhanced vendoring configuration with support for dynamic component referencing in
vendor.yaml
. - Improved handling of
source
andtargets
attributes for better organization and flexibility.
- Enhanced vendoring configuration with support for dynamic component referencing in
-
Documentation
- Updated documentation for vendoring configuration, including clearer instructions and examples for managing multiple vendor manifests.
- Added explanations for
included_paths
andexcluded_paths
attributes to improve understanding.
Fix a reference to an undefined output in GitHub Actions @suzuki-shunsuke (#718)
## what- Fix a reference to an undefined output in GitHub Actions.
The step config
is not found.
This bug was added in #612 .
- Use a version variable for easier updates.
env:
TERRAFORM_VERSION: "1.9.7"
steps:
- uses: hashicorp/setup-terraform@v3
with:
terraform_version: ${{ env.TERRAFORM_VERSION }}
- Stop installing terraform wrapper
By default hashicorp/setup-terraform
installs a wrapper of Terraform to output Terraform stdout and stderr as step's outputs.
But we don't need them, so we shouldn't install the wrapper.
https://github.com/hashicorp/setup-terraform
- uses: hashicorp/setup-terraform@v3
with:
terraform_wrapper: false
why
references
Summary by CodeRabbit
- Chores
- Updated workflow configurations for improved maintainability.
- Introduced a new environment variable
TERRAFORM_VERSION
for version management.
ci: install Terraform to fix CI failure that Terraform is not found @suzuki-shunsuke (#717)
## whatInstall Terraform using hashicorp/setup-terraform
action in CI.
why
CI failed because Terraform wasn't found.
https://github.com/cloudposse/atmos/actions/runs/11307359580/job/31449045566
https://github.com/cloudposse/atmos/actions/runs/11307359580/job/31449046010
Run cd examples/demo-context
all stacks validated successfully
exec: "terraform": executable file not found in $PATH
This is because ubuntu-latest was updated to ubuntu-24.04 and Terraform was removed from it.
https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2404-Readme.md
On the other hand, Ubuntu 22.04 has Terraform.
https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2204-Readme.md
references
Summary by CodeRabbit
- Chores
- Enhanced workflow for testing and linting by integrating Terraform setup in multiple job sections.
- Updated the lint job to dynamically retrieve the Terraform version for improved flexibility.
v1.89.0
Improve error stack trace. Add `--stack` flag to `atmos describe affected` command. Improve `atmos.Component` template function @aknysh (#714)
## what- Improve error stack trace
- Add
--stack
flag toatmos describe affected
command - Improve
atmos.Component
template function
why
-
On any error in the CLI, print
Go
stack trace only when Atmos log level isTrace
- improve user experience -
The
--stack
flag in theatmos describe affected
command allows filtering the results by the specific stack only:
atmos describe affected --stack plat-ue2-prod
Affected components and stacks:
[
{
"component": "vpc",
"component_type": "terraform",
"component_path": "examples/quick-start-advanced/components/terraform/vpc",
"stack": "plat-ue2-prod",
"stack_slug": "plat-ue2-prod-vpc",
"affected": "stack.vars"
}
]
- In the
atmos.Component
template function, don't executeterraform output
on disabled and abstract components. The disabled components (whenenabled: false
) don't produce any terraform outputs. The abstract components are not meant to be provisioned (they are just blueprints for other components with default values), and they don't have any outputs.
Summary by CodeRabbit
Release Notes
-
New Features
- Added a
--stack
flag to theatmos describe affected
command for filtering results by stack. - Enhanced error handling across various commands to include configuration context in error logs.
- Added a
-
Documentation
- Updated documentation for the
atmos describe affected
command to reflect the new--stack
flag. - Revised "Atlantis Integration" documentation to highlight support for Terraform Pull Request Automation.
- Updated documentation for the
-
Dependency Updates
- Upgraded several dependencies, including Atmos version from
1.88.0
to1.89.0
and Terraform version from1.9.5
to1.9.7
.
- Upgraded several dependencies, including Atmos version from
Correct outdated 'myapp' references in simple tutorial @jasonwashburn (#707)
## whatCorrects several (assuming) outdated references to a 'myapp' component rather than the correct 'station' component in the simple tutorial.
Also corrects the provided example repository hyperlink to refer to the correct weather example 'quick-start-simple' used in the tutorial rather than 'demo-stacks'
why
Appears that the 'myapp' references were likely just missed during a refactor of the simple tutorial. Fixing them alleviates confusion/friction for new users following the tutorial. Attempting to use the examples/references as-is results in various errors as there is no 'myapp' component defined.
references
Also closes #664
Summary by CodeRabbit
-
New Features
- Renamed the component from
myapp
tostation
in the configuration. - Updated provisioning commands in documentation to reflect the new component name.
- Renamed the component from
-
Documentation
- Revised "Deploy Everything" document to replace
myapp
withstation
. - Enhanced "Simple Atmos Tutorial" with updated example link and clarified instructional content.
- Revised "Deploy Everything" document to replace
Fix incorrect terraform flag in simple tutorial workflow example @jasonwashburn (#709)
## whatFixes inconsistencies in the simple-tutorial extra credit section on workflows that prevent successful execution when following along.
why
As written, the tutorial results in two errors, one due to an incorrect terraform flag, and one due to a mismatch between the defined workflow name, and the provided command in the tutorial to execute it.
references
Closes #708
Fix typos @NathanBaulch (#703)
Just thought I'd contribute some typo fixes that I stumbled on. Nothing controversial (hopefully).Use the following command to get a quick summary of the specific corrections made:
git diff HEAD^! --word-diff-regex='\w+' -U0 \
| grep -E '\[\-.*\-\]\{\+.*\+\}' \
| sed -r 's/.*\[\-(.*)\-\]\{\+(.*)\+\}.*/\1 \2/' \
| sort | uniq -c | sort -n
FWIW, the top typos are:
- usign
- accross
- overriden
- propogate
- verions
- combinatino
- compoenents
- conffig
- conventionss
- defind
Fix version command in simple tutorial @jasonwashburn (#705)
## what- Corrects incorrect
atmos --version
command toatmos version
in simple tutorial docs.
why
- Documentation is incorrect.
references
closes #704
docs: add installation guides for asdf and Mise @mtweeman (#699)
## whatDocs for installing Atmos via asdf or Mise
why
As of recent, Atmos can be installed by asdf and Mise. Installation guides are not yet included on the website. This PR aims to fill this gap.
references
Use Latest Atmos GitHub Workflows Examples with `RemoteFile` Component @milldr (#695)
## what - Created the `RemoteFile` component - Replace all hard-coded files with `RemoteFile` callwhy
- These workflows quickly get out of date. We already have these publicly available on
cloudposse/docs
, so we should fetch the latest pattern instead
references
Update Documentation and Comments for Atmos Setup Action @RoseSecurity (#692)
## what- Updates comment to reflect action defaults
- Fixes
atmos-version
input
why
- Fixes input variables to match acceptable action variables
references
v1.88.1
v1.88.0
Update the `Go` YAML lib from `gopkg.in/yaml.v2` to `gopkg.in/yaml.v3`. Support YAML v1.2 (latest version) @aknysh (#690)
## what- Update the
Go
YAML lib fromgopkg.in/yaml.v2
togopkg.in/yaml.v3
- Support YAML v1.2 (latest version)
- Support YAML explicit typing (explicit typing is denoted with a tag using the exclamation point (“!”) symbol)
- Improve code, e.g. add YAML wrappers in one
yaml_utils
file (which importsgopkg.in/yaml.v3
) to control all YAML marshaling and un-marshaling from one place
why
gopkg.in/yaml.v3
The main differences between gopkg.in/yaml.v3
and gopkg.in/yaml.v2
include enhancements in functionality, bug fixes, and improvements in performance. Here's a summary of key distinctions:
1. Better Conformance to YAML 1.2 Specification:
- gopkg.in/yaml.v3 offers improved support for the YAML 1.2 specification. This includes better handling of complex YAML features such as core schema, block styles, and anchors.
- gopkg.in/yaml.v2 is more aligned with YAML 1.1, meaning it might not fully support some of the YAML 1.2 features.
2. Node API Changes:
- gopkg.in/yaml.v3 introduced a new
Node
API, which provides more control and flexibility over parsing and encoding YAML documents. This API is more comprehensive and allows for detailed inspection and manipulation of YAML content. - gopkg.in/yaml.v2 has a simpler node structure and API, which might be easier to use for simple use cases but less powerful for advanced needs.
3. Error Handling:
- gopkg.in/yaml.v3 offers improved error messages and better context for where an error occurs during parsing. This makes it easier to debug and correct YAML syntax errors.
- gopkg.in/yaml.v2 has less detailed error reporting, which can make debugging more challenging.
4. Support for Line and Column Numbers:
- gopkg.in/yaml.v3 includes support for tracking line and column numbers of nodes, which can be useful when dealing with large or complex YAML files.
- gopkg.in/yaml.v2 does not provide this level of detail in terms of tracking where nodes are located within the YAML document.
5. Performance:
- gopkg.in/yaml.v3 has various performance improvements, particularly in the encoding and decoding process. However, these improvements might not be significant in all scenarios.
- gopkg.in/yaml.v2 might be slightly faster in certain cases, particularly when dealing with very simple YAML documents, due to its simpler feature set.
6. Deprecation of Legacy Functions:
- gopkg.in/yaml.v3 deprecates some older functions that were available in v2, encouraging developers to use more modern and efficient alternatives.
- gopkg.in/yaml.v2 retains these older functions, which may be preferred for backward compatibility in some projects.
7. Anchors and Aliases:
- gopkg.in/yaml.v3 has better handling of YAML anchors and aliases, making it more robust in scenarios where these features are heavily used.
- gopkg.in/yaml.v2 supports anchors and aliases but with less robustness and flexibility.
8. API Changes and Compatibility:
- gopkg.in/yaml.v3 introduces some API changes that are not backward-compatible with v2. This means that upgrading from v2 to v3 might require some code changes.
- gopkg.in/yaml.v2 has been widely used and is stable, so it may be preferable for projects where stability and long-term support are critical.
YAML v1.2
YAML v1.1 and YAML v1.2 differ in several key aspects, particularly in terms of specification, syntax, and data type handling. Here's a breakdown of the most significant differences:
1. Specification and Goals:
- YAML 1.1 was designed with some flexibility in its interpretation of certain constructs, aiming to be a human-readable data serialization format that could also be easily understood by machines.
- YAML 1.2 was aligned more closely with the JSON specification, aiming for better interoperability with JSON and standardization. YAML 1.2 is effectively a superset of JSON.
2. Boolean Values:
- YAML 1.1 has a wide range of boolean literals, including
y
,n
,yes
,no
,on
,off
,true
, andfalse
. This flexibility could sometimes lead to unexpected interpretations. - YAML 1.2 standardizes boolean values to
true
andfalse
, aligning with JSON. This reduces ambiguity and ensures consistency.
3. Integers with Leading Zeros:
- YAML 1.1 interprets integers with leading zeros as octal (base-8) numbers. For example,
012
would be interpreted as10
in decimal. - YAML 1.2 no longer interprets numbers with leading zeros as octal. Instead, they are treated as standard decimal numbers, which aligns with JSON. This change helps avoid confusion.
4. Null Values:
- YAML 1.1 allows a variety of null values, including
null
,~
, and empty values (e.g., an empty string). - YAML 1.2 standardizes the null value to
null
(or an empty value), aligning with JSON's null representation.
5. Tag Handling:
- YAML 1.1 uses an unquoted
!!
syntax for tags (e.g.,!!str
for a string). The tag system is more complex and includes non-standard tags that can be confusing. - YAML 1.2 simplifies tag handling and uses a more JSON-compatible syntax, with less emphasis on non-standard tags. Tags are optional and less intrusive in most use cases.
6. Floating-Point Numbers:
- YAML 1.1 supports special floating-point values like
.inf
,-.inf
, and.nan
with a dot notation. - YAML 1.2 aligns with JSON and supports
Infinity
,-Infinity
, andNaN
, which are the standard representations in JSON.
7. Direct JSON Compatibility:
- YAML 1.2 is designed to be a strict superset of JSON, meaning any valid JSON document is also a valid YAML 1.2 document. This was not the case in YAML 1.1, where certain JSON documents could be interpreted differently.
8. Indentation and Line Breaks:
- YAML 1.2 introduced more consistent handling of line breaks and indentation. While YAML 1.1 was flexible, it sometimes led to ambiguities in how line breaks and whitespace were interpreted.
- YAML 1.2 has clearer rules, reducing the potential for misinterpretation of line breaks and indentation.
9. Miscellaneous Syntax Changes:
- YAML 1.2 introduced some syntax changes for better clarity and alignment with JSON. For instance, YAML 1.2 removed support for single-quoted multiline strings, which were present in YAML 1.1.
10. Core Schema vs. JSON Schema:
- YAML 1.2 introduced the concept of schemas, particularly the Core schema, which aims to be YAML's native schema, and the JSON schema, which strictly follows JSON's data types and structures.
- YAML 1.1 did not have this formal schema distinction, leading to more flexible but sometimes less predictable data handling.
Summary:
- YAML 1.2 is more standardized, consistent, and aligned with JSON, making it more predictable and easier to interoperate with JSON-based systems.
- YAML 1.1 offers more flexibility and a wider range of literal values, but this flexibility can sometimes lead to ambiguities and unexpected behavior.
references
v1.87.1
Support `atmos terraform apply --from-plan` with additional flags @duncanaf (#684)
what
- Change argument generation for
atmos terraform apply
to make sure the plan-file arg is placed after any flags specified by the user
why
- Terraform is very picky about the order of flags and args, and requires all args (e.g. plan-file) to come after any flags (e.g.
--parallelism=1
), or it crashes. atmos terraform apply
accepts aplan-file
arg, or generates one when--from-plan
is used. When this happens, it currently puts the plan-file arg first, before any additional flags specified by the user.- This breaks when additional flags are specified, e.g.
atmos terraform apply --from-plan -- -parallelism=1
. In this example, atmos tries to callterraform apply <planfile> --paralellism=1
and terraform crashes withError: Too many command line arguments
v1.87.0
Update/improve Atmos UX @aknysh (#679)
what & why
- Improve error messages in the cases when
atmos.yaml
CLI config file is not found, and if's it found, but points to an Atmos stacks directory that does not exist
-
When executing
atmos
command to show the terminal UI, do not evaluate theGo
templates in Atmos stack manifests to make the command faster since the TUI just shows the names of the components and stacks and does not need the components' configurations -
Fix/restore the TUI borders for the commands
atmos
andatmos workflow
around the selected columns. TheBorderStyle
functionality was changed in the latest releases of the charmbracelet/lipgloss library, preventing the borders around the selected column from showing
atmos
atmos workflow
v1.86.2
Improve logging for the template function `atmos.Component`. Generate backend config and provider override files in `atmos.Component` function @aknysh (#674)
what
- Improve logging for the template function
atmos.Component
- Generate backend config and provider override files in
atmos.Component
function - Update docs
why
-
Add more debugging information and fix issues with the initial implementation of the
atmos.Component
function when the backend config filebackend.tf.json
(if enabled inatmos.yaml
) and provider overrides fileproviders_override.tf.json
(if configured in theproviders
section) were not generated, which prevented the functionatmos.Component
from returning the outputs of the component when executing in GitHub actions -
When the environment variable
ATMOS_LOGS_LEVEL
is set toTrace
, the template functionatmos.Component
will log the execution flow and the results of template evaluation - useful for debuggingATMOS_LOGS_LEVEL=Trace atmos describe component <component> -s <stack> ATMOS_LOGS_LEVEL=Trace atmos terraform plan <component> -s <stack> ATMOS_LOGS_LEVEL=Trace atmos terraform apply <component> -s <stack>
v1.86.1
Improve logging for the template function `atmos.Component` @aknysh (#672)
## what- Improve logging for the template function
atmos.Component
- Update
Golang
to the latest version1.23
why
-
When the environment variable
ATMOS_LOGS_LEVEL
is set toTrace
, the template functionsatmos.Component
andatmos.GomplateDatasource
will log the execution flow and the results of template evaluation - useful for debuggingATMOS_LOGS_LEVEL=Trace atmos terraform plan <component> -s <stack>
This PR adds more debugging information and shows the results of the atmos.Component
execution, and shows if the result was found in the cache:
Found component 'template-functions-test' in the stack 'tenant1-ue2-prod' in the stack manifest 'orgs/cp/tenant1/prod/us-east-2'
ProcessTmplWithDatasources(): template 'all-atmos-sections' - evaluation 1
Converting the variable 'test_list' with the value
[
"list_item_1",
"list_item_2",
"list_item_3"
]
from JSON to 'Go' data type
Converted the variable 'test_list' with the value
[
"list_item_1",
"list_item_2",
"list_item_3"
]
from JSON to 'Go' data type
Result: [list_item_1 list_item_2 list_item_3]
Converting the variable 'test_map' with the value
{
"a": 1,
"b": 2,
"c": 3
}
from JSON to 'Go' data type
Converted the variable 'test_map' with the value
{
"a": 1,
"b": 2,
"c": 3
}
from JSON to 'Go' data type
Result: map[a:1 b:2 c:3]
Converting the variable 'test_label_id' with the value
"cp-ue2-prod-test"
from JSON to 'Go' data type
Converted the variable 'test_label_id' with the value
"cp-ue2-prod-test"
from JSON to 'Go' data type
Result: cp-ue2-prod-test
Executed template function 'atmos.Component(template-functions-test, tenant1-ue2-prod)'
'outputs' section:
test_label_id: cp-ue2-prod-test
test_list:
- list_item_1
- list_item_2
- list_item_3
test_map:
a: 1
b: 2
c: 3
Executing template function 'atmos.Component(template-functions-test, tenant1-ue2-prod)'
Found the result of the template function 'atmos.Component(template-functions-test, tenant1-ue2-prod)' in the cache
'outputs' section:
test_label_id: cp-ue2-prod-test
test_list:
- list_item_1
- list_item_2
- list_item_3
test_map:
a: 1
b: 2
c: 3
add install instructions for atmos on windows/scoop @dennisroche (#649)
## whatadd option/documentation for installing atmos
using scoop.sh on windows.
scoop install atmos
scoop
manifests will check GitHub releases and automatically update. no additional maintenance required for anyone 🥳.
why
needed an easy way for my team to install atmos