Nectere Atlas
Atlas is a web UI for Ansible. It holds hosts, credentials and inventories, gives you an SSH terminal in the browser, and runs ad-hoc commands and file pushes across an inventory. Playbooks go through the Ansible station. Every job is logged with its output and who started it.
Nectere Array › Menu › Deploy › Nectere Atlas01The app
Click a sidebar item to open that panel. The switch changes who is signed in.
Projects, Playbooks, Variables and Collections belong to the Ansible station. It's still in progress and has a separate guide. Under Array sign-on, Array manages accounts, so Users and Sign Out are hidden.
02How the pieces fit
Hosts and credentials are set up once and joined in inventories. Most jobs start by picking an inventory.
webservers or nfs_servers. Hosts can be in several.The usual order
- Hosts: add machines, several at a time if needed.
- Credentials: add the login they accept.
- Inventories: pick hosts and a credential, add groups if needed.
- Command Station: pick the inventory, press Ping Test, then run the job.
- Runs: full output of past jobs.
For a single machine, skip the inventory. Press Connect on the host and pick a credential.
03Getting Atlas
Atlas is deployed from Array's menu, Menu › Deploy › Nectere Atlas. When the tile shows Running, press Open. Updates, restarts and the activity log are on the back of the tile. The sign-in mode chosen at deploy decides how people get in.
04Sign-in and setup
With Application sign-in, the first visit to a new tile opens the setup screen and that person becomes the first admin. Everyone after that uses Sign In.
| Rule | Value |
|---|---|
| Sign-in lasts | 8 hours, then back to Sign In |
| Setup password | At least 4 characters, entered twice |
| First account | Always an admin |
| Wrong username or password | Invalid credentials, no hint which was wrong |
Array sign-on
No setup screen or Sign In page; the tile opens straight to Overview. The Users panel shows User accounts are managed in Nectere Array. If the Array session expires, reopen the tile from Array.
05Sidebar and notifications
Same items for every role.
Notifications
Messages stack above Sign Out: green for success, rose for errors, blue for info. Errors stay 8 seconds, the rest fade after 5.
Footer
Server clock and Atlas version.
06Overview
The landing page after sign-in. Counts plus recent activity.
- 1Tiles. Counts, each linked to its panel. Running turns orange during a job; Failed turns rose if history holds a failure.
- 2Recent Runs. Eight newest runs with status, kind, label, inventory, user, age and duration. Click one for its log.
- 3Engine. Ansible and Python versions, variable set count, uptime since the last restart.
- 4Quick Start. Four steps from empty to a finished run, each linked to its panel.
| Dot | Means |
|---|---|
| amber, pulsing | Still running |
| green | Completed |
| rose | Failed or cancelled |
07Hosts
The display name is what Atlas and Ansible call the host everywhere, so keep it short with no spaces: web01, not Web Server 1. The address is a hostname or IP. Connect opens a terminal.
| Column | Shows |
|---|---|
| Host | Display name, a vars tag if the host has variables, and the address when there's no description |
| Address | Hostname or IP and SSH port (ssh · 22 by default) |
| Description | Your note, or a dash |
| Actions | Connect, edit, delete. Delete confirms with Delete host "web02"? |
Adding hosts
+ Add Hosts takes one line per machine. + adds a line and × removes one. A blank port means 22, and blank lines are skipped.
New Hosts
×| Message | When |
|---|---|
| Added 3 hosts | Every line saved |
| Every host needs a display name | A line has an address but no name |
| Host "jump01" needs a hostname / IP | A line has a name but no address |
| Host "db01" has a bad port | The port isn't a number |
| Added 2, failed 1 — … | Partial save. Each failure's reason follows. |
| Add at least one host | Save Hosts with every line empty |
Editing a host
The pencil also exposes Host variables (YAML), which follow the host into every inventory. Use them for things always true of the machine, like a Python path.
Edit Host
×| Message | When |
|---|---|
| Host updated | Saved |
| Host name is required | Display Name is empty |
| Hostname / IP is required | The address is empty |
| Port must be a number | The port has letters in it |
| Host deleted | Delete confirmed |
08SSH terminal
Connect on a host opens an interactive SSH session in a new browser window, logged in with the credential you pick.
Connect to Host
Only login credentials are listed. Vault passwords can't open a session.
The terminal window
- One window, one session. Closing it or typing
exitends the session. - Ten terminals at most per tile.
No available SSH session slots. Close an existing session first.means close one and retry. - New host keys are accepted without a prompt and noted in a single line.
- The terminal is a pop-up. If nothing appears after
Connected! Opening terminal..., allow pop-ups for the Array address. - Terminals always use port 22 and ignore a custom SSH port. Command Station jobs honour it.
09Credentials
Secrets aren't shown after saving. Leave them blank when editing to keep them.
Type also shows whether the secret is stored. no key! or no password! means edit the credential and fill it in. In use counts the inventories that depend on it, so check it before deleting.
The credential form
| Message | When |
|---|---|
| Credential 'db-maint' created | Saved a new one |
| Credential name is required | Name is empty |
| Username is required | No username on a password or key credential |
| Password is required | A new password credential with no password |
| Private key is required | A new key credential with no key pasted in |
| A credential named 'ops-key' already exists | Names must be unique |
Type is locked after saving. To move a login from password to key, create a new credential and point the inventory at it.
10Inventories
Jobs target inventories. One per application or site plus a catch-all usually works.
The form has three tabs.
Basics
Every host logs in with the inventory's credential. The host list is for ungrouped hosts; hosts ticked on the Groups tab are added anyway. If sudo wants a password, tick Include ansible_become_pass. Become Password defaults to the credential's.
Groups
+ Add Group, name it (letters, digits, underscores), tick its hosts. Group variables are YAML and apply only to that group.
Variables
Inventory variables apply to every host. Per-host variables has a box per selected host and only applies inside this inventory, unlike host variables set on the Hosts panel.
| Message | When |
|---|---|
| Inventory 'nfs-lab' created | Saved a new one |
| Inventory name is required | Name is empty |
| Select a credential | No credential chosen |
| Select at least one host (Basics or Groups tab) | No hosts anywhere |
| Group name "nfs servers" must be letters, digits, underscore | Space or dash in a group name. The form jumps to the Groups tab. |
| Group "nfs_clients" has no hosts | An empty group |
YAML and Graph
YAML shows the inventory as Ansible receives it, passwords masked. Graph has Ansible parse it and draws the group tree with each host's resolved variables. A YAML mistake anywhere shows up here: the title ends in (rc 1) and the body has Ansible's error.
Inventory YAML — nfs-lab
×all:
vars:
ansible_python_interpreter: auto_silent
ansible_user: 'ubuntu'
ansible_ssh_private_key_file: '<key file for ops-key>'
ansible_become_pass: '********'
nfs_domain: corp.lab
hosts:
nfs01:
ansible_host: 'nfs01.corp.lab'
nfs_threads: 32
nfs02:
ansible_host: 'nfs02.corp.lab'
children:
nfs_servers:
vars:
nfs_export_root: /srv/nfs
hosts:
nfs01:
nfs_clients:
hosts:
nfs02:
ansible-inventory --graph — nfs-lab
×@all:
|--@ungrouped:
|--@nfs_servers:
| |--nfs01
| | |--{ansible_become_pass = ********}
| | |--{ansible_host = nfs01.corp.lab}
| | |--{ansible_user = ubuntu}
| | |--{nfs_domain = corp.lab}
| | |--{nfs_export_root = /srv/nfs}
| | |--{nfs_threads = 32}
|--@nfs_clients:
| |--nfs02
| | |--{ansible_become_pass = ********}
| | |--{ansible_host = nfs02.corp.lab}
| | |--{ansible_user = ubuntu}
| | |--{nfs_domain = corp.lab}
11Command Station
Runs a job against every host in an inventory. Ad-Hoc, Send Files, Ping Test, Gather Facts and the output pane are covered here. Project Playbook and Saved Playbook are in the station guide.
Ad-Hoc
Runs one command on every host the pattern matches. Pick a Module, keep Host pattern at all or narrow it, enter the command and press Run.
| Module | Use it for |
|---|---|
| command | Plain commands like uptime or df -h. No pipes, redirects or &&. |
| shell | Pipes, redirects, globbing, chained commands |
| raw | Hosts without Python, like appliances or minimal installs |
| setup (gather facts) | Fact collection. Takes no arguments, so the Command box is disabled. |
Host patterns: all, a host, a group, wildcards like web*, or combinations like group1:&group2.
Send Files
Drop files on the drop area or click browse; × removes one. Set Remote Destination Path (a folder such as /etc) and File Mode (default 0644). Send copies every file to every host. Tick become (sudo) if the folder needs root.
Shared options
| Option | Does |
|---|---|
| Inventory | Required. Hosts and login for the job, listed with host counts. |
| Verbosity | normal to -vvvv. Raise it to debug connection failures. |
| become (sudo) | Run as root on the hosts |
| Variable sets | Under Variables, vault, tags & limits. Ctrl/cmd-click for several. Managed in the Ansible station. |
| Extra vars | YAML or JSON, applied after variable sets |
| Limit | Host pattern that narrows the run, e.g. nfs01*,!nfs02 |
Ping Test and Gather Facts work from any tab. Ping logs in to each host rather than using ICMP, so it tests the credential too.
Output
While a job runs the buttons are disabled, the pill shows running and output streams in with colour. Untick auto-scroll to read while lines arrive. Cancel stops the job; Open in Runs opens its record. Leaving the panel or closing the browser doesn't stop it.
| Colour | Lines |
|---|---|
| green | SUCCESS, ok: [host] |
| amber | CHANGED, changed: [host] |
| rose | FAILED, UNREACHABLE!, fatal:, ERROR! |
| blue | skipping: [host] |
| violet | [WARNING] and [DEPRECATION WARNING] |
Recent Runs under the output includes everyone's jobs on the tile.
12Runs
Every job with its full output, kept across restarts.
| Status | Means |
|---|---|
| running | Still going. Only running jobs can be cancelled. |
| completed | Return code 0 on every host |
| failed | Non-zero return code, usually a failed or unreachable host |
| cancelled | Someone pressed Cancel |
Run detail
Download saves the log as atlas-run-<id>.log.
| Action | Where | Does |
|---|---|---|
| Cancel | List and detail, while running | Confirms with Cancel this run?, then replies Cancel requested |
| Re-run | List and detail, once finished | Same job, same options, opened as a new run. Not for file pushes, since the files aren't kept. |
| Delete (bin) | List, once finished | Confirms with Delete this run and its log? |
| Refresh | List | Reloads the list |
| Kind | Comes from |
|---|---|
| adhoc | Ad-Hoc and Gather Facts |
| ping | Ping Test |
| sendfiles | Send Files |
| playbook, galaxy, sync | The Ansible station. See its guide. |
Atlas keeps the 200 newest runs and prunes older finished ones. A job caught by an Atlas restart is marked failed with interrupted by server restart. Re-run it.
13Users and roles
Standard users can't manage users or back up and restore. Anyone who can sign in can use every stored credential, so hand out accounts accordingly.
Edit User
×| Can | Admin | User |
|---|---|---|
| Hosts, credentials, inventories | Yes | Yes |
| Terminals and Command Station | Yes | Yes |
| Runs, including cancel and delete | Yes | Yes |
| Ansible station | Yes | Yes |
| Manage users | Yes | No, the list shows No additional users |
| Export and import | Yes | No, export replies Export failed |
- + Add User asks for username, password and role. Role defaults to User.
- Usernames can't be changed. A blank password keeps the current one.
- Delete confirms with
Delete user "tnguyen"? This will revoke their sessions.and signs the user out everywhere. You can't delete yourself.
14Backup and restore
- Export configuration downloads one zip of hosts, credentials, inventories, projects and run history. Admins only.
- Passwords, keys and vault secrets are in the zip in readable form. Store it like a password file.
- Import configuration asks
This OVERWRITES all current configuration with the uploaded backup. Continue?There's no merge. - The restored setup applies after a restart: State › Restart on the tile in Array.
- Backups restore onto other Atlas tiles too, so they work for cloning a setup.
15Things to know
- The inventory decides the login. Hosts that need different logins go in different inventories.
- Deleting a host is quiet. No in-use warning. It drops out of every inventory it was in.
- Deleting a credential can break an inventory. The inventory shows
missingunder Credential and its jobs try to log in without one. Pick another credential. - Host variables follow the host; per-host variables stay in the inventory. Permanent facts go on Hosts, context-specific ones in the inventory.
- Jobs carry on without you. Check Runs for the result.
- Terminals end with their window. Anything still in the foreground goes with it.
- Everyone shares one tile. Recent Runs, the Runs list and the ten terminal slots are shared.
- Backups contain secrets. Anyone with the zip can read every stored password and key.
16Troubleshooting
| You see | Do this |
|---|---|
Select an inventory | Pick one at the bottom of the form. Ping Test and Gather Facts need it too. |
Enter a command | Fill in the Command box, or switch the module to setup. |
UNREACHABLE! in the output | No answer, or the login was refused. Check address and port on Hosts, then Connect with the same credential to see the error directly. |
Permission denied or Missing sudo password | Tick become (sudo), and in the inventory tick Include ansible_become_pass. |
Graph title ends in (rc 1) | A YAML box has an error. The Graph body says which host, group or inventory variables to fix. |
No available SSH session slots… | Ten terminals are open. Close one. |
| Connect says it's opening the terminal, then nothing | Pop-up blocked. Allow pop-ups for the Array address and retry. |
A run failed with interrupted by server restart | Atlas restarted mid-run. Press Re-run. |
Users panel says No additional users | Standard user. Ask an admin. |
Export failed | Admins only. |
| Signed out after 8 hours | Sign-ins expire after 8 hours. Sign in again, or switch the tile to Array sign-on. |