Skip to main content

59 posts tagged with "Enhancement"

Improvements to existing features

View All Tags

Reshape a version before writing it into a JSON file

· 2 min read
Erik Osterman
Founder @ Cloud Posse

Git tags on GitHub almost always carry a v prefix — v1.228.0 — because that's the convention both git tag and GitHub releases nudge toward. Package manifests, on the other hand, almost never want that prefix: package.json, plugin manifests, and marketplace listings all expect bare semver. Whenever a version comes from GitHub and needs to land in one of those files, something has to strip the v first.

Automatically Create the Configured Namespace for Helm Releases

· 3 min read
Andriy Knysh
Principal Architect @ Cloud Posse

Atmos lets you configure the Kubernetes namespace where a Helm release should be installed. This prevents charts that do not specify a namespace from being installed into default.

That namespace may not exist. Native Helm creates it for you automatically, so a release deploys in a single operation instead of requiring a separate command, component, or workflow to create the namespace first.

Sometimes, though, the deployment should not be creating namespaces at all.

Toolchain Installs Are Reproducible by Default Now

· 3 min read
Erik Osterman
Founder @ Cloud Posse

Atmos's toolchain has had a lockfile for a while. The lockfile records the exact resolved artifact and checksum for each platform. A package manager's lockfile pins a dependency tree the same way. But the lockfile was opt-in. The setting was not documented anywhere a user could find it. Almost nobody turned it on. Almost nobody's installs were actually reproducible. The installs only looked reproducible, because the version string matched.

Component retry now covers Helmfile, Packer, and Ansible too

· 2 min read
Erik Osterman
Founder @ Cloud Posse

Terraform components already recover from a transient error automatically — a 502, a dropped registry connection, an S3 backend timeout. Helmfile, Packer, and Ansible components in that same pipeline did not. The exact same class of failure that Terraform shrugged off would still fail your Helmfile sync or Ansible playbook outright, because a retry: block on either was silently inert. Now all four component types share the same retry engine.

Set one retry policy for a whole stack

· 3 min read
Erik Osterman
Founder @ Cloud Posse

Component retry already recovers a single component from a transient error: a 502, a dropped registry connection, a flaky provider lookup. The hard part was sharing that same policy across every component in a stack. You'd copy the same retry: block onto each component, wire up a shared abstract base component just to hold it, or set up a mixin. Now you can define the policy once at the stack level, and every component in that stack inherits it automatically.

Remote Imports: Automatic GitHub Auth, Failure Warnings, and Caching

· 4 min read
Erik Osterman
Founder @ Cloud Posse

Centralizing shared configuration in one private Git repository, and reusing it across projects, is not a new idea. Mergify and Dependabot both support extending a project's configuration from a shared repository. Doing the same for a general-purpose tool usually means a git submodule or subtree, and both are cumbersome. Atmos supports this natively: a project's atmos.yaml or stack manifest adds a remote import, a git:: URL that points at the centralized repository, with no submodule or subtree involved.

Resolving that import still had rough edges. Git fetch authentication was separate from a developer's GitHub CLI session, so gh auth login alone was not enough for a private import. A broken import failed silently: a tag name with a typo, an unreachable host, or a token without read access all added nothing to the configuration, with no warning. And a git:: import with a subdirectory re-cloned on every single command, even when nothing had changed.

Atmos already reused a developer's GitHub CLI session for other GitHub operations, such as toolchain installs. Atmos now reuses that same session for private git:: imports too. This applies to both stack configuration imports and atmos.yaml configuration imports. Atmos also warns you when an import fails. Atmos also lets you cache imports to avoid unnecessary re-fetching.

Smarter Type Handling for `atmos config set` and `atmos stack set`

· 4 min read
Erik Osterman
Founder @ Cloud Posse

Editing a config value from the command line is supposed to be the easy path. Type atmos stack set vars.replicas 5, expect a 5, move on. Except a value like that used to come back out the other side as the string "5" unless you remembered to pass --type=int — and for atmos stack set specifically, that was true every single time, no matter what was already there. A true became "true". A number stayed a number only if you told the CLI so yourself.

Injecting Terraform Values into Kustomize Without Hand-Editing Overlays

· 3 min read
Erik Osterman
Founder @ Cloud Posse

Kustomize expects the files it consumes to have exact, reserved names. A remote base or component can only be included if the location it points to contains a file with one of a handful of recognized names (kustomization.yaml is the common one) — that's not configurable on Kustomize's side. So when a value only Terraform knows — a security group ID, a Route53 zone ID, an ARN — needs to land inside a Kustomize-managed GitOps repo, teams are usually stuck hand-editing the overlay after every apply, or routing the value through a separate tool just to produce one correctly-named file.

Split One Logical Stack Across Focused Manifests

· 3 min read
Erik Osterman
Founder @ Cloud Posse

Large stacks eventually turn into a shared bottleneck. Network, platform, and application owners all need to contribute components, but putting every change in one manifest makes reviews noisy and parent-level configuration easy to accidentally share.

Atmos now lets multiple top-level manifests represent one logical stack while keeping each manifest's components and parent scope independent.

Initialize an Atmos project from a proven starting point

· 3 min read
Erik Osterman
Founder @ Cloud Posse

Initializing a project should establish a useful local starting point, not leave a developer with an empty directory and a list of conventions to reconstruct. Modern development platforms provide an initialization workflow: developers select a known-good example or template, create the project locally, and make the next action obvious. Atmos provides that workflow for infrastructure projects.

The atmos init command initializes an Atmos project from a template chosen for the job at hand: a minimal cloud-agnostic project, an AWS application SDLC project, or a cloud landing zone. Each template creates the configuration, structure, and operational path appropriate to that project rather than asking every team to assemble it from scratch.

Toolchain now installs aws-cli, Node, and other multi-file tools correctly

· 3 min read
Brian Ojeda
Contributor

You pinned aws/aws-cli in your toolchain, ran atmos toolchain install, and saw a green checkmark — then aws --version died with Failed to load Python shared library. Or you pinned nodejs/node and the install never finished at all, warning about "unknown type" and a file it couldn't find. The tools were right there in the registry, aqua installed them fine, but Atmos couldn't.

That's fixed. Multi-file tools now install completely and actually run.

list and describe Commands Degrade Gracefully by Default

· 4 min read
Erik Osterman
Founder @ Cloud Posse

Reading !terraform.state and !terraform.output can fail to resolve for a dozen different reasons — the backend hasn't been applied yet, your credentials aren't configured, you don't have access to the bucket, or the state you're reading just isn't the latest. Any one of those, on any one component, used to abort the entire list/describe command — every other stack you did want to see disappeared behind one unrelated failure.

The list and describe commands now degrade gracefully by default: an unresolved value is shown as (computed) instead of aborting the command, with a one-line summary telling you how many values were affected.

Path-Based Custom Commands

· 2 min read
Erik Osterman
Founder @ Cloud Posse

Atmos custom commands now support path-based names. Instead of writing a deeply nested command tree just to describe a command path, you can put the full command path in name.

The result is easier to read, easier to review, and keeps the same recursive merge behavior that existing custom commands rely on.

Collapsible CI Log Groups for Workflows and Custom Commands

· 3 min read
Erik Osterman
Founder @ Cloud Posse

A workflow fails in CI. You open the run and you're staring at two thousand lines of undifferentiated output — terraform init, plan, and apply from every step mashed into one endless scroll, with no marker for where one step ends and the next begins. Finding the step that actually broke means scrolling and squinting.

Atmos now folds each workflow and custom-command step into its own collapsible, named log group. You see the list of steps up front and expand only the one you care about.

Topic-Specific CLI Help

· 2 min read
Erik Osterman
Founder @ Cloud Posse

Atmos help showed too much at once. A simple command like atmos terraform plan --help explained the command, its examples, its own flags, compatibility flags, and every inherited global flag, which made the options you actually needed harder to find.

Topic-specific help fixes that by making default help focused, while keeping usage examples, command flags, and the full reference one flag away.

Flag-Aware Custom Commands and Dynamic Tables

· 3 min read
Erik Osterman
Founder @ Cloud Posse

Custom command steps can now read their own command-line flags through {{ .Flags.<name> }}, and the table step templates its data, columns, and title per-step. Together they let you build flag-driven runbooks — rich, dynamic output assembled declaratively in atmos.yaml, no shell scripting required.

Atmos auto-detects GitHub Actions debug logging

· 3 min read
Erik Osterman
Founder @ Cloud Posse

GitHub Actions has a built-in "Re-run with debug logging" button: when a workflow fails, you click it and the next run launches with runner and step debug logging turned on. Atmos now auto-detects that signal — when you re-run with debug logging, Atmos switches its own log level to Debug for the run. No need to remember to also set ATMOS_LOGS_LEVEL=Debug in your workflow YAML.

Help Text Now Respects Your Terminal Theme

· 2 min read
Erik Osterman
Founder @ Cloud Posse

Atmos help text now automatically adapts to your configured theme, providing a consistent and visually cohesive experience across all commands. Whether you're using a dark theme like Dracula or a light theme like GitHub, help output will match your terminal's color scheme.