Skip to content

feat: add atmos ansible component support#2042

Merged
aknysh merged 33 commits intomainfrom
add-ansible-component-support
Feb 17, 2026
Merged

feat: add atmos ansible component support#2042
aknysh merged 33 commits intomainfrom
add-ansible-component-support

Conversation

@RoseSecurity
Copy link
Contributor

@RoseSecurity RoseSecurity commented Jan 29, 2026

what

  • Add Ansible as a first-class component type in Atmos, alongside Terraform, Helmfile, and Packer
  • Implement atmos ansible playbook command to execute Ansible playbooks with stack-based configuration
  • Implement atmos ansible version command to display Ansible version information
  • Add stack processor support for Ansible components with full inheritance, vars, env, settings, and auth sections
  • Support automatic variable file generation passed to Ansible via --extra-vars @<varfile>
  • Enable pass-through of native Ansible flags via -- separator
  • Add command aliases: an for ansible, pb for playbook
  • Include comprehensive documentation in Docusaurus

why

  • Ansible is widely used for configuration management and application deployment, complementing Terraform's infrastructure provisioning
  • Users can now manage Ansible playbooks with the same stack-based configuration patterns they use for Terraform
  • Enables consistent variable management across infrastructure (Terraform) and configuration (Ansible) layers
  • Supports the same powerful features as other component types: inheritance, environment variables, settings, JIT provisioning, and validation
  • Reduces context-switching by providing a unified CLI for infrastructure orchestration

usage

Configuration

Add to atmos.yaml:

components:
  ansible:
    base_path: "components/ansible"
    command: "ansible-playbook"      # optional
    auto_generate_files: false       # optional

Stack Manifest

Define Ansible components in stack manifests:

components:
  ansible:
    webserver:
      vars:
        app_name: myapp
        app_port: 8080
        app_version: "1.0.0"
      env:
        ANSIBLE_HOST_KEY_CHECKING: "false"
      settings:
        ansible:
          playbook: site.yml
          inventory: inventory/production

Commands

# Show Ansible version
atmos ansible version

# Run playbook with settings from stack manifest
atmos ansible playbook webserver --stack prod

# Specify playbook explicitly (overrides stack settings)
atmos ansible playbook webserver -s prod --playbook deploy.yml

# Specify both playbook and inventory
atmos ansible playbook webserver -s prod -p site.yml -i hosts.ini

# Dry run (shows commands without executing)
atmos ansible playbook webserver -s prod --dry-run

# Pass native Ansible flags via -- separator
atmos ansible playbook webserver -s prod -- --check
atmos ansible playbook webserver -s prod -- --verbose --limit "web01,web02"
atmos ansible playbook webserver -s prod -- --tags "deploy,config"

# Use aliases for brevity
atmos an pb webserver -s prod

# Path-based component resolution
cd components/ansible/webserver
atmos ansible playbook . -s prod

Environment Variables

ATMOS_ANSIBLE_PLAYBOOK=site.yml      # Default playbook
ATMOS_ANSIBLE_INVENTORY=hosts.ini    # Default inventory

references

Summary by CodeRabbit

  • New Features

    • Native Ansible support: new ansible command with playbook/version subcommands, --playbook/-p and --inventory/-i flags, passthrough of native Ansible options, shell completions, provider-backed execution, JIT component provisioning, automatic varfile generation/cleanup, and env/stack-aware execution.
  • Documentation

    • New CLI docs, usage pages, examples, blog post, and roadmap entry for Ansible workflows.
  • Tests

    • Extensive unit and integration tests covering CLI, flags, completions, provider, executor, and stack processing.
  • Chores

    • Added Ansible config keys/paths, help aliases/snapshots, and user-facing Ansible errors.

Introduce first-class Ansible component support in Atmos. This includes
new CLI commands (`atmos ansible`, `ansible playbook`, `ansible version`),
schema and config updates, error handling, and stack processing logic.
Adds Ansible to component path resolution, stack merging, and listing.
Refactored Ansible CLI support into a dedicated cmd/ansible package,
splitting playbook and version commands into their own files. Added
comprehensive flag handling, shell completion, and extensive tests for
flags, command structure, and integration. Removed legacy ansible
command files and updated root command registration.
- Implemented Ansible component support in Atmos, including path-based
  component resolution and variable file generation.
- Added helper for extracting the generate section from component config.
- Provided comprehensive documentation for Ansible commands, usage,
  flags, and stack configuration in the website docs.
- Included tests for generate section extraction logic.
@RoseSecurity RoseSecurity requested a review from a team as a code owner January 29, 2026 21:06
@github-actions github-actions bot added the size/xl Extra large size PR label Jan 29, 2026
@mergify
Copy link

mergify bot commented Jan 29, 2026

Warning

This PR exceeds the recommended limit of 1,000 lines.

Large PRs are difficult to review and may be rejected due to their size.

Please verify that this PR does not address multiple issues.
Consider refactoring it into smaller, more focused PRs to facilitate a smoother review process.

@RoseSecurity RoseSecurity added the minor New features that do not break anything label Jan 29, 2026
@github-actions
Copy link

Warning

Release Documentation Required

This PR is labeled minor or major and requires documentation updates:

  • Changelog entry
  • Roadmap update - Update website/src/data/roadmap.js with the new milestone

Alternatively: If this change doesn't require release documentation, remove the minor or major label.

@RoseSecurity RoseSecurity added enhancement New feature or request feature New functionality wip Work in Progress: Not ready for final review or merge experimental Feature is experimental and still being refined labels Jan 29, 2026
@github-actions
Copy link

github-actions bot commented Jan 29, 2026

Dependency Review

✅ No vulnerabilities or license issues found.

Scanned Files

None

@github-actions
Copy link

Warning

Release Documentation Required

This PR is labeled minor or major and requires documentation updates:

  • Changelog entry
  • Roadmap update - Update website/src/data/roadmap.js with the new milestone

Alternatively: If this change doesn't require release documentation, remove the minor or major label.

1 similar comment
@github-actions
Copy link

Warning

Release Documentation Required

This PR is labeled minor or major and requires documentation updates:

  • Changelog entry
  • Roadmap update - Update website/src/data/roadmap.js with the new milestone

Alternatively: If this change doesn't require release documentation, remove the minor or major label.

@mergify mergify bot removed the wip Work in Progress: Not ready for final review or merge label Jan 29, 2026
@github-actions
Copy link

Warning

Release Documentation Required

This PR is labeled minor or major and requires documentation updates:

  • Changelog entry
  • Roadmap update - Update website/src/data/roadmap.js with the new milestone

Alternatively: If this change doesn't require release documentation, remove the minor or major label.

@github-actions
Copy link

Warning

Release Documentation Required

This PR is labeled minor or major and requires documentation updates:

  • Changelog entry
  • Roadmap update - Update website/src/data/roadmap.js with the new milestone

Alternatively: If this change doesn't require release documentation, remove the minor or major label.

@github-actions
Copy link

Warning

Release Documentation Required

This PR is labeled minor or major and requires documentation updates:

  • Changelog entry - Add a blog post in website/blog/YYYY-MM-DD-feature-name.mdx
  • Roadmap update - Update website/src/data/roadmap.js with the new milestone

Alternatively: If this change doesn't require release documentation, remove the minor or major label.

@github-actions
Copy link

Warning

Release Documentation Required

This PR is labeled minor or major and requires documentation updates:

  • Changelog entry - Add a blog post in website/blog/YYYY-MM-DD-feature-name.mdx
  • Roadmap update - Update website/src/data/roadmap.js with the new milestone

Alternatively: If this change doesn't require release documentation, remove the minor or major label.

Introduce Ansible as a first-class component type in Atmos, enabling
unified orchestration of infrastructure provisioning and configuration
management from the same stack manifests. Update documentation and
roadmap to reflect new Ansible commands, stack integration, and
workflow enhancements.
@github-actions
Copy link

Warning

Release Documentation Required

This PR is labeled minor or major and requires documentation updates:

  • Changelog entry
  • Roadmap update - Update website/src/data/roadmap.js with the new milestone

Alternatively: If this change doesn't require release documentation, remove the minor or major label.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 29, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds first-class Ansible support: new CLI commands (ansible/playbook/version) with flags and completions, an Ansible ComponentProvider and executor (varfile generation, env, deps, command assembly), schema/config/const updates, stack-processing plumbing for Ansible paths, exported file-generation helper, tests, docs, and snapshots.

Changes

Cohort / File(s) Summary
CLI: ansible command
cmd/ansible/ansible.go, cmd/ansible/playbook.go, cmd/ansible/version.go, cmd/ansible/completions.go, cmd/ansible/flags.go, cmd/ansible/ansible_test.go, cmd/ansible/flags_test.go
Adds top-level ansible Cobra command with playbook/version subcommands, persistent Viper-bound flags (--playbook, --inventory), shell completions, shared parser, global flags handler, and unit tests.
Component provider & executor
pkg/component/ansible/ansible.go, pkg/component/ansible/config.go, pkg/component/ansible/executor.go, pkg/component/ansible/ansible_test.go, pkg/component/ansible/executor_test.go
Implements Ansible ComponentProvider (registration, listing, validation), default config, comprehensive executor (JIT path resolution, varfile generation/cleanup, env, deps, command assembly), and extensive tests.
Schema, config & constants
pkg/schema/schema.go, pkg/config/config.go, pkg/config/const.go, errors/errors.go
Adds Ansible schema/config fields (Ansible struct, AnsibleDirAbsolutePath, Args/Config Ansible fields), computes/stores absolute Ansible path, constants, and sentinel errors.
Stack processing plumbing
internal/exec/stack_processor_process_stacks.go, internal/exec/stack_processor_utils.go, internal/exec/utils.go, internal/exec/validate_stacks.go, pkg/stack/stack_processor.go, tests under internal/exec/*, pkg/stack/*
Threads ansibleComponentsBasePath through YAML/stack processing, merges Ansible config into component maps, and processes Ansible components alongside other types; updates tests and call sites.
File generation visibility
internal/exec/generate_adapter_funcs.go, internal/exec/helmfile.go, internal/exec/packer.go, internal/exec/terraform.go
Exports GenerateFilesForComponent (was private) and updates call sites to use the exported function.
CLI registration & listing
cmd/root.go, pkg/list/list_components.go, pkg/list/extract/stacks.go
Adds side-effect imports to register Ansible provider/command and includes ansible in built-in component listings.
Path resolution & Spacelift
pkg/utils/component_path_utils.go, pkg/spacelift/spacelift_stack_processor.go, pkg/spacelift/spacelift_stack_processor_test.go
Adds ansible case to component base-path resolution and threads Ansible base path through Spacelift stack processing APIs and tests.
Docs & website
website/blog/2026-01-29-ansible-component-support.mdx, website/docs/cli/commands/ansible/*, website/src/data/roadmap.js
Adds blog post, CLI docs (usage/playbook/version), examples, and roadmap milestone.
Snapshots & tests
tests/snapshots/*, various test updates
Updates golden snapshots and test call sites to reflect new Ansible outputs, config fields, aliases, and describe output.

Sequence Diagram(s)

sequenceDiagram
    participant User as User/CLI
    participant Cmd as "ansible Cmd" 
    participant Registry as "Component Registry"
    participant Provider as "Ansible Provider"
    participant Executor as "Ansible Executor"
    participant AnsibleBin as "ansible / ansible-playbook"

    User->>Cmd: run "atmos ansible playbook <component> --stack=... --playbook ... -- ..."
    Cmd->>Cmd: initConfigAndStacksInfo()
    Cmd->>Cmd: getAnsibleFlags()
    Cmd->>Registry: lookup provider "ansible"
    alt provider found
        Cmd->>Provider: Execute(ExecutionContext)
        Provider->>Provider: validate component & settings
        Provider->>Provider: maybeAutoGenerateFiles / resolveComponentPath
        Provider->>Provider: prepare env & varfile
        Provider->>Executor: buildCommandArgs & exec
    else provider not found
        Cmd->>Executor: ExecutePlaybook(info, flags) (fallback)
    end
    Executor->>AnsibleBin: run command (env + args + extra-vars `@varfile`)
    AnsibleBin-->>Executor: result/exit
    Executor->>Provider: cleanup varfile
    Provider-->>Cmd: propagate result/error
    Cmd-->>User: exit code / output
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested reviewers

  • osterman
🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 42.75% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: add atmos ansible component support' clearly describes the main change: adding Ansible as a new component type to Atmos, matching the primary objective of the PR.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch add-ansible-component-support

Warning

Review ran into problems

🔥 Problems

Git: Failed to clone repository. Please run the @coderabbitai full review command to re-trigger a full review. If the issue persists, set path_filters to include or exclude specific files.

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 29, 2026

📝 Walkthrough

Walkthrough

Introduces Ansible as a first-class Atmos component with dedicated CLI commands (playbook, version subcommands), full stack processor integration supporting variable inheritance, configuration management, and automatic file generation capabilities.

Changes

Cohort / File(s) Summary
Ansible CLI Command
cmd/ansible/ansible.go, ansible_test.go, playbook.go, version.go
Core command structure with root ansible command, playbook and version subcommands, flag parsing, and execution handlers for Ansible operations.
Ansible Completions & Flags
cmd/ansible/completions.go, flags.go, flags_test.go
Completion helpers for playbook/component arguments, flag registration for playbook (-p) and inventory (-i) flags with environment variable bindings.
Ansible Execution Engine
internal/exec/ansible.go, ansible_test.go
Core Ansible execution logic including config validation, playbook/inventory resolution, variable file generation/cleanup, environment preparation, and shell command delegation.
Stack Processing Integration
internal/exec/stack_processor_process_stacks.go, stack_processor_process_stacks_test.go, stack_processor_utils.go, stack_processor_utils_test.go, utils.go, validate_stacks.go
Integration of Ansible components into the stack processor pipeline, parameter threading for Ansible base paths, and parallel processing alongside Terraform/Helmfile/Packer.
Configuration & Schema
pkg/config/config.go, const.go, pkg/schema/schema.go, pkg/list/list_components.go, pkg/utils/component_path_utils.go
New Ansible schema type with BasePath/Command/AutoGenerateFiles, absolute path resolution, component constant definitions, and component discovery plumbing.
CLI Wrapper & Spacelift
pkg/stack/stack_processor.go, stack_processor_test.go, pkg/spacelift/spacelift_stack_processor.go, spacelift_stack_processor_test.go, cmd/root.go
Parameter forwarding for Ansible paths through wrapper functions, Spacelift stack processor updates, and root command registration via init-time side effect.
Error Definitions
errors/errors.go
New Ansible-specific error sentinels covering missing base path, invalid configuration sections, and missing playbook requirements.
Documentation & Roadmap
website/blog/..., website/docs/cli/commands/ansible/*, website/src/data/roadmap.js
Usage guides for ansible playbook/version commands, configuration examples, feature description, and roadmap tracking.

Sequence Diagram(s)

sequenceDiagram
    participant User as User/CLI
    participant Cmd as Ansible Command
    participant StackProc as Stack Processor
    participant ExecEngine as Execution Engine
    participant FileGen as File Generation
    participant ShellExec as Shell Executor

    User->>Cmd: atmos ansible playbook -s stack -p my-playbook
    Cmd->>Cmd: Parse flags & args
    Cmd->>StackProc: initConfigAndStacksInfo
    StackProc->>StackProc: Load stack config
    StackProc->>StackProc: Resolve component settings
    StackProc-->>Cmd: ConfigAndStacksInfo
    Cmd->>Cmd: getAnsibleFlags
    Cmd->>ExecEngine: ExecuteAnsible
    ExecEngine->>ExecEngine: checkAnsibleConfig
    ExecEngine->>ExecEngine: Validate component exists/enabled
    ExecEngine->>ExecEngine: Resolve playbook (settings vs flags)
    ExecEngine->>FileGen: Generate component varfile
    FileGen->>FileGen: Create vars from component settings
    FileGen-->>ExecEngine: varfile path
    ExecEngine->>ExecEngine: Prepare environment (ATMOS_CLI_CONFIG_PATH, etc.)
    ExecEngine->>ShellExec: ExecuteShellCommand
    ShellExec->>ShellExec: ansible-playbook --extra-vars `@varfile`
    ShellExec-->>ExecEngine: exit code
    ExecEngine->>FileGen: Cleanup varfile
    ExecEngine-->>Cmd: result/error
    Cmd-->>User: output
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Suggested reviewers

  • aknysh
  • osterman
🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 43.28% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: add atmos ansible component support' clearly and directly describes the main change—introducing Ansible as a first-class component type in Atmos.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch add-ansible-component-support

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
internal/exec/utils.go (1)

309-316: Include AnsibleDirAbsolutePath in the FindStacksMap cache key.

Stack processing now depends on this path, but the cache key omits it, so configs that only differ by Ansible base path can collide in a single process.

Proposed fix
 	keyBuilder.WriteString(atmosConfig.PackerDirAbsolutePath)
 	keyBuilder.WriteString(cacheKeyDelimiter)
+	keyBuilder.WriteString(atmosConfig.AnsibleDirAbsolutePath)
+	keyBuilder.WriteString(cacheKeyDelimiter)
 	keyBuilder.WriteString(fmt.Sprintf("%v", ignoreMissingFiles))
 	keyBuilder.WriteString(cacheKeyDelimiter)
internal/exec/stack_processor_process_stacks_test.go (1)

306-313: Use filepath.Join for test paths to keep Windows compatibility.

The new path literal extends the hardcoded forward-slash pattern; prefer filepath.Join for cross-platform paths.

Proposed fix
 import (
+	"path/filepath"
 	"testing"

 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
@@
 		t.Run(tt.name, func(t *testing.T) {
 			_, err := ProcessStackConfig(
 				atmosConfig,
-				"/test/stacks",
-				"/test/terraform",
-				"/test/helmfile",
-				"/test/packer",
-				"/test/ansible",
+				filepath.Join(string(filepath.Separator), "test", "stacks"),
+				filepath.Join(string(filepath.Separator), "test", "terraform"),
+				filepath.Join(string(filepath.Separator), "test", "helmfile"),
+				filepath.Join(string(filepath.Separator), "test", "packer"),
+				filepath.Join(string(filepath.Separator), "test", "ansible"),
 				"test-stack.yaml",
 				tt.config,
 				false,
As per coding guidelines: NEVER use hardcoded forward slashes in paths - ALWAYS use filepath.Join() with separate arguments.
🤖 Fix all issues with AI agents
In `@cmd/ansible/ansible.go`:
- Around line 112-169: The buildConfigAndStacksInfo/initConfigAndStacksInfo flow
currently only reads the stack flag; update buildConfigAndStacksInfo (or call
into it from initConfigAndStacksInfo) to call flags.ParseGlobalFlags(cmd, v) and
copy the parsed values into the returned schema.ConfigAndStacksInfo fields
AtmosBasePath, AtmosConfigFilesFromArg, AtmosConfigDirsFromArg, and
ProfilesFromArg before the struct is used by InitCliConfig in ExecuteAnsible;
ensure you reference and populate these fields on the ConfigAndStacksInfo
instance created in buildConfigAndStacksInfo (and keep stack extraction) so
global flags --base-path, --config, --config-path and --profile are honored.

In `@internal/exec/ansible.go`:
- Around line 292-345: Replace passing the relative varFile to the playbook
command with the absolute varFilePath so the playbook can find the extra-vars
file when the working directory changes; in the ansible runner code where
info.SubCommand == "playbook" (the block that appends "--extra-vars", "@" +
varFile and later sets info.Command to "ansible-playbook"), use varFilePath (the
absolute path created earlier) instead of varFile when appending the
"--extra-vars" argument so ExecuteShellCommand is invoked with the correct
absolute file reference.

In `@pkg/list/list_components.go`:
- Around line 39-42: Add a trailing period to the comment above the ansible
extraction block: change the comment "Extract ansible components" to end with a
period so it reads "Extract ansible components." This affects the comment
immediately preceding the ansibleComponents type-assertion and append using
lo.Keys in the block that references componentsMap, ansibleComponents, and
allComponents.

In `@pkg/schema/schema.go`:
- Around line 477-484: Add a proper Go doc comment immediately above the
exported type Ansible that briefly describes what the struct represents and its
purpose (e.g., configuration for Ansible integration including BasePath,
Command, and AutoGenerateFiles behavior), following Go conventions: start the
comment with "Ansible" and keep it a single or couple of sentences so linters
accept it; place it directly above the type Ansible declaration to document the
exported type.

In `@website/blog/2026-01-29-ansible-component-support.mdx`:
- Around line 16-20: Change the phrase "Full stack processor support" to the
hyphenated compound adjective "Full‑stack processor support" in the blog bullets
(the line that currently reads "Full stack processor support including
inheritance, vars, env, settings, and auth sections") so the compound modifier
before "processor" is correctly hyphenated for readability.

In `@website/docs/cli/commands/ansible/ansible-version.mdx`:
- Around line 8-28: Add the missing Screengrab and Arguments/Flags sections to
this new CLI doc: update website/docs/cli/commands/ansible/ansible-version.mdx
to include a Screengrab (e.g., a short paragraph and an image/embed beneath the
Intro explaining expected output of `atmos ansible version`) and an
Arguments/Flags section using a <dl> list that documents any flags/options for
the `ansible version` command (even if none, include a note like "This command
accepts no flags" in a <dl>), keeping the existing Intro and Usage text and
preserving the `ansible version` command reference so reviewers can locate the
change.
🧹 Nitpick comments (3)
cmd/ansible/playbook.go (1)

30-39: Consider adding performance tracking.

Per coding guidelines, public functions should include defer perf.Track(...)(). Since this delegates to ExecuteAnsible, it may be intentionally omitted, but worth considering for consistency.

💡 Optional: Add perf tracking
 func runPlaybook(cmd *cobra.Command, args []string) error {
+	defer perf.Track(nil, "ansible.runPlaybook")()
+
 	// Initialize config and stacks info.
 	info := initConfigAndStacksInfo(cmd, "playbook", args)

You'd need to add the perf import:

"github.com/cloudposse/atmos/pkg/perf"
website/docs/cli/commands/ansible/usage.mdx (1)

1-17: Consider adding a Screengrab component.

The documentation structure is solid. Per coding guidelines for CLI command docs, a Screengrab component showing the help output would complete the standard template. Not blocking, but worth adding for consistency.

internal/exec/ansible_test.go (1)

198-236: Table-driven test looks good, but note the slash-in-filename case.

Line 217-218 tests a component name with / (database/postgres), producing a filename with an embedded slash. This tests current behavior accurately, but filenames with / may cause issues on some filesystems. If Component shouldn't contain path separators, consider adding validation in the implementation.

@mergify
Copy link

mergify bot commented Feb 10, 2026

💥 This pull request now has conflicts. Could you fix it @RoseSecurity? 🙏

@mergify mergify bot added the conflict This PR has conflicts label Feb 10, 2026
@RoseSecurity
Copy link
Contributor Author

@osterman Just resolved the merge conflicts

@RoseSecurity
Copy link
Contributor Author

@osterman Anything else needed for this?

@mergify
Copy link

mergify bot commented Feb 17, 2026

💥 This pull request now has conflicts. Could you fix it @RoseSecurity? 🙏

@mergify mergify bot added the conflict This PR has conflicts label Feb 17, 2026
@mergify mergify bot removed the conflict This PR has conflicts label Feb 17, 2026
Copy link
Member

@aknysh aknysh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks @RoseSecurity

@aknysh aknysh merged commit 6e88571 into main Feb 17, 2026
63 checks passed
@aknysh aknysh deleted the add-ansible-component-support branch February 17, 2026 03:01
@github-actions
Copy link

These changes were released in v1.206.3-rc.1.

@github-actions
Copy link

These changes were released in v1.207.0.

@github-actions
Copy link

These changes were released in v1.208.0-rc.0.

@github-actions
Copy link

These changes were released in v1.208.0-test.15.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request experimental Feature is experimental and still being refined feature New functionality minor New features that do not break anything size/xl Extra large size PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants