Atlas Ansible Station
The Ansible station runs playbooks in Atlas. Import a repository as a zip or from git, or write a single playbook in the browser, and launch it against an Atlas inventory. Variable sets, vault passwords and Galaxy collections live here too.
01What's in the station
The station adds Projects, Playbooks, Variables and Collections to the sidebar, plus the Project Playbook and Saved Playbook tabs in Command Station. Core items in the mock link back to the main guide.
| Piece | Use it for |
|---|---|
| Project | A full Ansible tree: playbooks, roles, group_vars, templates, requirements.yml, ansible.cfg |
| Saved playbook | One self-contained playbook written in the browser |
| Variable set | Named bundle of extra vars for any launch |
| Vault credential | Password for ansible-vault encrypted files |
| Collection | Galaxy collection available to every project and playbook on the tile |
Hosts always come from an Atlas inventory. Inventory files in a project are ignored.
02Projects
Click a row to open it. Launch opens Command Station with the project selected; Sync pulls from git.
| Badge | Means |
|---|---|
| 5 playbooks | Files offered in the Playbook list at launch |
| 3 roles | Folders under roles/ |
| group_vars ansible.cfg | Present and used |
| requirements.yml | Needs collections or roles. Open the project and press Install requirements. |
| vault | Has vault-encrypted files. Pick a vault credential at launch. |
New Project
+ New Project has three sources.
- Upload zip unpacks the archive, dropping a single wrapper folder if there is one (macOS and GitHub downloads have one). 50 MB limit.
- Clone from git takes an https address, optional branch and optional access token for private repos. Saving starts the clone as a run and opens its log.
- Empty creates a blank project for the file editor.
What goes in the zip
In the app, the ? next to the Projects title or the What goes in the zip? link opens this.
Building a project zip
×Example layout
my-project.zip ├── site.yml # entry playbook, shows up in Launch ├── playbooks/ │ ├── deploy.yml # more playbooks, also picked up │ └── rollback.yml ├── ansible.cfg # roles_path, callbacks, become… honoured ├── requirements.yml # collections + roles, "Install requirements" ├── inventory/ │ └── hosts.yml # ignored, hosts come from an Atlas inventory ├── group_vars/ │ ├── all/main.yml │ └── all/vault.yml # ansible-vault encrypted is fine ├── host_vars/ │ └── nfs01.acme.lab.yml ├── roles/ │ └── nfs_server/ │ ├── tasks/main.yml │ ├── handlers/main.yml │ ├── templates/nfs.conf.j2 │ ├── files/ │ └── defaults/main.yml ├── files/ # anything copy: / script: refers to │ └── import-data.sh ├── templates/ │ └── motd.j2 └── README.md
What Atlas does with it
- Unzips into its own folder. A single wrapper folder at the root (what macOS and GitHub produce) is flattened away.
- Playbooks are any
.ymlup to three folders deep whose top level is a list with ahosts:orimport_playbook:key. Files underroles/,group_vars/,tasks/and friends are never treated as playbooks. - Roles resolve from
roles/next to the playbook, or whereveransible.cfgsays. - Inventory always comes from Atlas: the hosts, groups and credential you pick in the Command Station. Inventory files in the zip, and any
inventory=line in ansible.cfg, are ignored for the run. - Vault files just need a Vault credential selected at launch.
- requirements.yml installs with one click from the project page. Collections are shared by every project.
Leave out
.git/(use a git project instead),.venv/,__pycache__/, retry files.- Secrets in plain text. Put them in a vault file, a Vault credential, or an Atlas variable set.
- Large binaries. The upload limit is 50 MB.
Quick way to make one
cd my-project zip -r ../my-project.zip . -x '.git/*' '*.retry' '.venv/*'
Files and editor
Playbooks carry a ▶ playbook marker and get a Launch this playbook button in the editor. Save with the button or ctrl/cmd+S; ● unsaved marks pending changes.
| Button | Does |
|---|---|
| Launch | Opens Command Station with this project selected |
| Sync (git pull) | Git projects only. Pulls new commits as a run. |
| Install requirements | Shown when requirements.yml exists. Installs it as a run. |
| Upload zip | Replaces every file after confirming Replace every file in this project with the contents of the zip? |
| Export | Downloads the project as a zip |
| Edit | Name and description; for git projects also address, branch and token |
| Delete | Confirms with Delete project "nfs-lab" and all its files? |
| + file / + dir | Create a path relative to the project root |
Binary files and files over 2 MB won't open. Leaving a file with unsaved changes asks Discard unsaved changes?
Git projects
Created from a shallow clone of the named branch. Sync pulls new commits but won't overwrite conflicting local edits, so editor changes can make a sync fail. A stored token shows as (token stored, leave blank to keep) when editing. Zip projects refresh with Upload zip instead.
03Saved playbooks
For short jobs like patch-and-reboot. Anything with roles, templates or extra files belongs in a project.
Edit Playbook
×--- - name: Patch and reboot hosts: all become: true serial: 1 tasks: - name: Upgrade packages ansible.builtin.apt: upgrade: dist update_cache: true - name: Reboot ansible.builtin.reboot:
- New playbooks start from a template that pings every host, so they launch as-is.
- Names are fixed once saved. To rename, copy under the new name and delete the old one.
- Launch opens Command Station on the Saved Playbook tab with that playbook selected.
04Variable sets
Extra vars you'd otherwise retype each launch: proxy settings, a feature flag, a release version. Lists and nested data need YAML.
Switching to YAML carries key/value pairs across. Key/value values are always strings.
| Message | When |
|---|---|
| Variable table 'proxy' created | Saved a new set |
| Add at least one variable with a key | Key/value form is empty |
| YAML is empty | YAML form is empty |
| A table named 'proxy' already exists | Names must be unique |
Later sources win. Sets apply in the order picked and the launch form's Extra vars applies last.
05Vault credentials
Vault passwords are stored on Credentials as type Ansible Vault password. They show a violet avatar and ansible-vault in the list, and never appear where a login is expected.
Pick one or more under Vault credentials at launch. Projects with several vault IDs need each matching credential.
| Message | When |
|---|---|
| Vault password is required | New vault credential with no password |
| Credential 'nfs-vault' created | Saved |
06Collections
Shared by every project and saved playbook on the tile. Enter a name like community.general, or pin a version with community.general:==8.0.0, and press Install.
Search Galaxy
Search Ansible Galaxy
×Search Galaxy finds collections by name or keyword. Install on a result closes the search and starts the install.
| Message | When |
|---|---|
| Collection installed | The install finished |
| Expected namespace.name (e.g. community.general) | The name is missing its dot |
| Removed community.docker | Remove confirmed |
| No collections installed, or Ansible is not available. | The list is empty |
Installs also land in Runs as kind galaxy.
07Launching a playbook
Project Playbook takes a project and one of its playbooks, preselected when there's an entry playbook or only one. Saved Playbook takes a saved playbook. Ping Test, Gather Facts and output work as in the core Command Station.
Options
| Option | Does |
|---|---|
| Mode | Run, Dry run (--check) to preview changes, Syntax check, List tasks or List hosts. The last three don't touch hosts. |
| show diff | Before and after of each changed file. Useful with a dry run. |
| target all inventory hosts | On by default. See below. |
| Variable sets | Any number, applied in the order picked |
| Vault credentials | Vault passwords the project needs |
| Extra vars | YAML or JSON, applied last |
| Tags / Skip tags | Comma-separated, e.g. setup,deploy |
| Limit | Host pattern that narrows the run, e.g. web01 |
| Extra CLI args | Any other ansible-playbook flags, e.g. --step --start-at-task 'Base packages'. Quoting works as in a shell. |
Play targets and groups
A play with hosts: app_servers only runs if the inventory has an app_servers group, and borrowed projects often name groups yours lacks. With target all inventory hosts ticked, each missing group is filled with every host in the inventory. The log's first line says so:
atlas: play targets 'app_servers' are not groups in inventory 'web-tier', pointing them at all 2 of its hosts
Existing groups are untouched, as are all, localhost, wildcards and exclusions. Untick it when plays for different groups (web, db) should each hit only their own hosts.
08Reading a playbook run
Project runs get a Project button that opens the project's files.
Colours in the log
| Colour | Lines |
|---|---|
| orange, bold | PLAY [...] and PLAY RECAP |
| blue, bold | TASK [...] and RUNNING HANDLER [...] |
| green | ok: [host], and recap host names with nothing changed or failed |
| amber | changed: [host], and recap names with changes |
| rose | fatal:, failed:, ERROR!, and recap names with failures or unreachable hosts |
| blue | skipping: [host] |
| violet | [WARNING], [DEPRECATION WARNING] |
Run kinds from the station
| Kind | Label looks like | Re-run |
|---|---|---|
| playbook | nfs-lab / site.yml for a project, playbook: patch-reboot for a saved one | Yes, same options |
| galaxy | install community.general or requirements: nfs-lab | No. Install again from Collections or the project. |
| sync | sync web-stack | No. Press Sync on the project. |
Re-run uses the project's current files, so edits made since the first run are picked up.
09Things to know
- Hosts come from Atlas, always. Group variables go in the project's
group_vars/or on the Atlas inventory's groups. - The project's ansible.cfg applies.
roles_path,interpreter_python,becomedefaults and the rest are honoured. Any inventory line is not. - Collections are shared. Installs and removals affect every project and saved playbook on the tile.
- Start with a dry run. Use
Dry run (--check)with show diff the first time a playbook meets a set of hosts. - Watch the first log line.
atlas: play targetsmeans a play is about to hit more hosts than its author intended. - Secrets belong in vault or variable sets. Plain-text passwords in a project end up in exports and backups.
- Saved playbooks run on their own. No access to project files, templates or roles.