CT-Ops
Host Groups
How to organise CT-Ops hosts into groups and use group-level operations.
Use Hosts -> Groups to organise hosts into named collections. Groups are useful for environments, teams, locations, applications, maintenance scopes, and any other operational boundary you want to target repeatedly.
Host groups are instance-scoped. Operators can view groups when they have access to the current CT-Ops instance. Creating, editing, deleting, adding members, and removing members require write access to that instance. Group task launch controls are shown only to instance administrators and super administrators.
The Host Groups area does not include charts. It is table- and dialog-driven: the list page is for maintaining reusable group definitions, and each group detail page is for managing membership, running group tasks, and reviewing task history.
Create and manage groups
Open Hosts -> Groups at /hosts/groups to see every host group in the
current instance. Use this page when you need to create a rollout target, define
an ownership boundary, find a group before running an operation, or remove a
group that no longer represents real infrastructure.
When no groups exist, the page shows an empty state with New Group. Once at least one group exists, the table is sorted by group name.
| Column or control | What it means |
|---|---|
| Name | The group name. Select the name to open the group detail page. |
| Description | Optional operator notes about the group. A dash means no description was saved. |
| Hosts | Current membership count. The count is based on rows in host_group_members, so it changes when hosts are added to or removed from the group. |
| Created | Date and time the group was created, formatted with the instance display settings. |
| Pencil button | Opens Edit Group for the selected row. |
| Trash button | Opens a delete confirmation for the selected row. |
Group form fields
Create Group and Edit Group use the same fields.
| Field | Default | Validation | What it does |
|---|---|---|---|
| Name | Blank for new groups; existing name when editing | Required. The browser form limits it to 100 characters; the server accepts required names up to 255 characters. | Operator-facing group label used in tables, task targets, reports, schedules, and CT-Automation inventory selection. Use names that remain meaningful when shown outside the group page, such as Production Web or London Database. |
| Description | Blank for new groups; existing description when editing | Optional. The browser form limits it to 500 characters; the server accepts up to 1,000 characters. | Explains what belongs in the group and when to use it. Descriptions are useful for maintenance scopes, environment boundaries, or escalation ownership. Blank descriptions are stored as no description. |
| Button | What it does |
|---|---|
| New Group | Opens Create Group. |
| Create Group | Saves a new group and refreshes the table. It is disabled while the request is running. |
| Save Changes | Updates the selected group’s name and description, refreshes the table, and closes the dialog on success. |
| Cancel | Closes the current create, edit, or delete dialog without saving changes. |
| Delete | Deletes the group after confirmation. This removes the group and all of its host memberships. It does not delete the hosts themselves. |
Use separate groups for repeatable operator actions rather than one-off labels. Examples include patch waves, application stacks, physical locations, platform ownership, and high-risk service restart targets. A host can belong to multiple groups, so keep groups focused instead of encoding every dimension into one name.
Deleting a group is appropriate when the operational boundary has gone away, not when one host leaves the boundary. Remove hosts from the group detail page when the group remains useful.
Manage group members
Open a group from the Name column to reach /hosts/groups/[id]. The header
shows Back to groups, the group name, and the saved description. The page
uses the group name as the workspace tab title.
The first table lists current members. Use it to confirm what a group will target before running a script, patch wave, service action, Ansible ping, report filter, or scheduled job.
| Column or control | What it means |
|---|---|
| Hostname | Shows the host display name when one is set, with the real hostname underneath. Select it to open the host detail page. |
| OS | Operating system and version reported for the host. A dash means the host has not supplied OS information. |
| Status | Current host status badge: Online, Offline, Pending, or Unknown. This is host state, not task-run state. |
| Last Seen | Last agent check-in time, formatted with the instance display settings. Never means the host has no recorded check-in. |
| Trash button | Opens a confirmation dialog to remove that host from this group. The host record remains in CT-Ops. |
When the group has no members, the page shows No hosts in this group and an Add Hosts button. Empty groups are valid, but group tasks cannot start until the group has at least one member.
Add hosts dialog
Select Add Hosts to open a searchable list of hosts that are not already in the group.
| Control | What it does |
|---|---|
| Search hosts… | Filters the add list by hostname, display name, or OS. The search is client-side against the loaded host list. |
| Host result | Shows the display name, or hostname when no display name exists. If a display name is shown, the hostname appears beneath it. |
| Add | Adds that host to the group. The button shows a spinner while the request is running. |
The dialog hides hosts that are already members. If every host is already in the group, it shows All hosts are already in this group. If a search has no matches, it shows No hosts match your search.
The server rejects duplicate membership with Host is already in this group. Membership changes are scoped to the current instance.
Remove host dialog
Select the row trash button to open Remove “[host]”?. Remove deletes only the membership row between the host and group. Use this when the host no longer belongs in the rollout, ownership, or maintenance scope. Use host deletion only when the host itself should be removed from inventory.
Run group tasks
Group task buttons appear in the group header for instance administrators and super administrators. They are intended for controlled operations where the same action should be applied to every current member of the group. CT-Ops creates a task run, records one task-run host row per target or skipped host, and then opens the task detail page when a run starts successfully.
All group task dialogs include Cancel to close without launching. Most include Max parallel hosts:
| Option | Behavior |
|---|---|
| 1 (sequential) | Default. Runs one host at a time. Use for risky changes, first-time scripts, production patches, or service restarts. |
| 2, 5, 10 | Runs up to that many hosts concurrently. Use when the action is understood and the estate can tolerate parallel work. |
| Unlimited | Stores 0 as max_parallel, meaning no concurrency cap. Use only for low-risk checks or large fleets where downstream capacity is known. |
The backend accepts max-parallel values from 0 through 100 for Ansible ping. The group page exposes only the preset values above.
Ansible Ping
Ansible Ping is available only when the legacy Ansible provider is enabled and healthy in Automation Integration Settings. It checks SSH connectivity to Linux hosts using the Ansible ping module.
| Field or control | Default | Validation | What it does |
|---|---|---|---|
| Credential profile | None selected | Required. The list contains saved Ansible SSH credential profiles for the instance. | Selects the SSH username and private key profile Ansible will use. If no profiles exist, the dialog tells you to create one in Settings -> Integrations -> Automation. |
| SSH port | 22 | Whole number from 1 through 65,535. | Port used when building the Ansible inventory for each target host. Non-default ports are stored in the task config. |
| Max parallel hosts | 1 (sequential) | Preset value; server accepts 0 through 100. | Controls concurrency for the Ansible ping task run. |
| Run Ping | Disabled until a credential is selected and at least one Linux host is targetable. | Requires Ansible automation to be enabled and healthy. | Creates the task run and immediately performs the Ansible API ping workflow. |
Non-Linux group members are skipped. The dialog warns how many non-Linux hosts will be skipped and disables Run Ping when the group has no Linux hosts. Ansible output is redacted before being stored if the API request fails.
Run Script
Run Script executes a custom script against group members and streams output through the task run. Use it for short diagnostics or controlled remediation where the script is safe to run on every member.
| Field or control | Default | Validation | What it does |
|---|---|---|---|
| Interpreter | sh | One of sh, bash, or python3. | Selects how the agent should execute the script. |
| Script | Blank | Required to launch. Server limit is 65,536 characters for each supported interpreter. | Script body sent to each target host. The placeholder updates to match the selected interpreter. |
| Max parallel hosts | 1 (sequential) | Preset value. | Controls how many hosts can run the script at the same time. |
| Run Script | Disabled until the script contains non-whitespace content. | Requires administrator task-launch permission. | Creates a custom script task run and opens the task detail page. |
The group custom-script task uses all group members as targets. Unlike patch, service, and Ansible ping tasks, the group page does not pre-filter the run to Linux hosts, so write portable scripts or create OS-specific groups before launching.
Service Action
Service Action runs a systemctl operation on Linux hosts in the group. Use
it for coordinated status checks, restarts, starts, or stops of a known service.
| Field or control | Default | Validation | What it does |
|---|---|---|---|
| Service name | Blank | Required to launch. | Name passed to the service task, for example nginx, postgresql, or ssh. |
| Action | restart | One of start, stop, restart, or status. | Chooses the systemctl action. status is read-oriented; the other actions change service state. |
| Max parallel hosts | 1 (sequential) | Preset value. | Controls concurrency for the service task run. |
| Run Action | Disabled while running, when the service name is blank, or when there are no Linux hosts in the group. | Requires administrator task-launch permission. | Creates a service task run and opens the task detail page. |
Non-Linux hosts are recorded as skipped with a reason. The dialog warns how many non-Linux hosts will be skipped and notes when no Linux hosts are available.
Patch Group
Patch Group starts an operating-system patch task for Linux hosts in the group. Use it for manual patch waves where the current group membership is the approved target set.
| Field or control | Default | Validation | What it does |
|---|---|---|---|
| All updates | Selected by default | One of the two patch modes. | Runs a full system upgrade. |
| Security updates only | Not selected by default | One of the two patch modes. | Applies only packages the platform identifies as security-flagged. |
| Max parallel hosts | 1 (sequential) | Preset value. | Controls concurrency for the patch task run. |
| Start Patch Run | Enabled unless the launch request is already running. | Requires administrator task-launch permission and at least one group member. | Creates a patch task run and opens the task detail page. |
Non-Linux hosts are recorded as skipped with a reason. The dialog warns how many non-Linux hosts will be skipped.
Task launch behavior
Group task launches fail when the group has no members. Patch, service, and Ansible ping tasks target Linux hosts and record non-Linux members as skipped. If a task has no real targets and no skip rows, CT-Ops reports No hosts found in group.
After a successful launch, CT-Ops opens /tasks/[taskRunId]. Use the task
detail page for live output, cancellation, per-host details, and final results.
The group page’s task history then becomes the audit trail for what was launched
against the group.
Review task history
Group detail pages include Task History for the 50 most recent task runs
whose target type is group and target ID is the current group. The table
refreshes every 5 seconds while any listed run is active and every 30 seconds
otherwise.
Use task history to prove what ran against the group, inspect failures, find reboot requirements, and clean up obsolete run records.
| Column or control | What it means |
|---|---|
| Header checkbox | Selects or clears every listed run. |
| Row checkbox | Selects or clears one run for bulk deletion. |
| Task | Human-readable task type: Patch, Script, Service, Ansible ping, or the raw task type for unsupported values. |
| Details | Task-specific summary. Patch runs show All updates or Security only and a reboot badge when any host reported reboot_required. Script runs show the interpreter. Service runs show action and service name plus active/inactive counts for completed hosts. Ansible ping shows SSH connectivity check. |
| Status | Run status badge. Known statuses include Pending, Running, Completed, and Failed. |
| Hosts | Per-host result counts across the run: succeeded, failed, running, pending, and skipped. Skipped rows commonly represent non-Linux members for Linux-only tasks. |
| Started | Start time when available; otherwise the run creation time. |
| View live | Opens the task detail page for a run that is still active. |
| View | Opens the task detail page for a completed or failed run. |
Delete task history
Selecting one or more rows opens a toolbar that shows the selected count and a Delete [count] button. Deleting selected runs removes the task-run records, their per-host task-run rows, and related software scan rows for the current instance. Use it only when the records are no longer useful for audit, troubleshooting, or change review.
Use groups from host detail
You can also manage group membership from a host detail page under Management -> Groups. That view is useful when you are already investigating one host and need to add it to a rollout, maintenance, or ownership group.
The host detail view shows groups for that single host and lets you add the host
to groups it is not already in or remove it from existing memberships. The same
membership backend is used from both places, so changes made on a host detail
page immediately affect group task targeting, report filters, schedules, and
the Hosts count on /hosts/groups.
Use the host detail path for one-host corrections. Use the group detail path when you are preparing or reviewing a multi-host action.