Files
kevinveenbirkenbachandClaude Opus 5 c55f508e05 feat(readme): draw mandatory and disabled service relations
The cosmos generator linked a consumer to its provider only through an
'<role>' in group_names reference or an explicit provides: name. A hard
dependency has neither -- pinning the provider on unconditionally is
exactly what removes the Jinja reference the generator was reading -- so
web-svc-asset's bond to web-svc-file vanished from the diagram the moment
it became binding. Match a service key against the provider's own primary
key from the registry, in both directions.

Services the role turns off drew a solid 1:1 edge, claiming a mandatory
relationship for something that carries nothing at deploy time. They now
render as a red 0..0 edge; edge merging gained a real precedence so a
provider consumed through two keys stays live when only one is off.

Named colour, not hex: a '#' opens an entity code in the mermaid lexer and
turns the whole diagram into a parse error on GitHub.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-17 18:02:31 +02:00
..
…

SSH Service (Client)

Description

This role installs the SSH client packages required to enable secure remote access and key-based authentication on Linux systems. It ensures that the appropriate SSH client is installed depending on the target distribution and that the installation is executed only once.

The role provides the foundation for SSH-based workflows and is designed to be used as a dependency by other roles that require SSH functionality.

Overview

Optimized for portability and idempotency, this role performs the following tasks:

  • Installs the SSH client using the system package manager
  • Automatically selects the correct package name for the target Linux distribution
  • Ensures the installation runs only once using a shared run-once mechanism
  • Serves as a reusable system-level SSH dependency for other roles

Cosmos

The diagram places SSH Service (Client) in the Infinito.Nexus cosmos: the components it deploys (capabilities), the central services it consumes (dependencies), and its outward reach (federation and bridged external networks).

flowchart LR
    subgraph role [sys-svc-ssh 💻]
        svc_svc_ssh["svc-ssh"]
    end

Solid 1:1 edges are fixed relationships; dashed 0..1 edges are conditional (enabled only in matching deployments); red 0..0 edges are turned off in this role. Node markers show the role's deploy modes (💻 host, 🐳 compose, 🐝 swarm); ❌ marks a service that is explicitly turned off, and ⚙️ an Ansible role dependency declared in meta/main.yml.

Purpose

The primary purpose of this role is to guarantee that an SSH client is available on the system before executing any SSH-related operations, such as key generation, remote access, or automated provisioning.

It is intentionally lightweight and does not configure the SSH server or modify SSH configuration files.

Supported Distributions

The role installs the correct SSH client package for the following platforms:

  • Debian / Ubuntu → openssh-client
  • Arch Linux → openssh
  • Fedora / Red Hat / CentOS → openssh-clients
  • Alpine Linux → openssh-client

Features

  • Distribution-aware package selection
  • Idempotent execution using a run-once flag
  • Minimal scope (client-only, no server configuration)
  • Reusable dependency role for higher-level SSH workflows
  • Best practices compliant with modern SSH usage

Credits

Implemented by Kevin Veen-Birkenbach. Part of the Infinito.Nexus Project and maintained by Kevin Veen-Birkenbach. Licensed under the Infinito.Nexus Community License (Non-Commercial).