Skip to main content

nagioscli

PyPI version Python versions License: MIT Build Publish codecov Docstring coverage Quality Gate Status Maintainability Rating Reliability Rating Security Rating Bugs Vulnerabilities Code Smells Technical Debt

A CLI tool to manage Nagios Core via HTTP REST API.

Features

  • Query host and service status
  • List all problems (warning, critical, unknown)
  • Force immediate checks
  • Acknowledge problems
  • List hosts and services
  • JSON output support
  • Multiple authentication methods:
    • Basic auth (password, environment variable)
    • Password manager (pass) integration
    • Vouch Proxy (SSO/OAuth) support
    • Nginx API token (for CLI/automation)

Installation

# From PyPI
pip install nachos

# From source
pip install git+https://github.com/lduchosal/nagioscli.git

# Development
git clone https://github.com/lduchosal/nagioscli.git
cd nagioscli
pdm install

Quick Start

Configuration

Create nagioscli.ini in the current directory or ~/.nagioscli.ini:

[nagios]
url = http://nagios.example.com/nagios
username = nagiosadmin

[auth]
method = pass_path
pass_path = nagios/admin

[settings]
timeout = 30

Basic Usage

# List all problems
nagioscli problems

# Query service status
nagioscli status service web01.example.com HTTP

# Query host status
nagioscli status host web01.example.com

# Force service check
nagioscli check web01.example.com HTTP

# Force check of every service in error (warning/critical/unknown),
# optionally filtered by service name, across all hosts
nagioscli check-problems
nagioscli check-problems PKGVULN

# Acknowledge a problem
nagioscli ack web01.example.com HTTP "Working on it"

# List all hosts
nagioscli hosts

# List services for a host
nagioscli services web01.example.com

Commands

Command Description
problems List all services with problems
status service <host> <service> Query service status
status host <host> Query host status
check <host> <service> Force service check
check-host <host> Force host check
check-host-services <host> Force check of every service of a host
check-problems [service] Force check of every service in error, all hosts
ack <host> <service> <comment> Acknowledge service problem
ack-host <host> <comment> Acknowledge host problem
hosts List all monitored hosts
services <host> List services for a host
login Authenticate via Vouch Proxy (SSO)
logout Clear saved authentication token

Output Options

# JSON output
nagioscli problems --json

# Quiet mode (exit codes only)
nagioscli problems --quiet

# Verbose debugging
nagioscli problems -v
nagioscli problems -vv
nagioscli problems -vvv

Configuration Options

Authentication Methods

nagioscli supports multiple authentication methods for different environments.

Basic Auth - Password in config file

[nagios]
url = http://nagios.example.com/nagios
username = admin
password = secret

Basic Auth - Password from pass (password-store)

[nagios]
url = http://nagios.example.com/nagios
username = admin

[auth]
method = pass_path
pass_path = nagios/admin

Basic Auth - Password from environment variable

[nagios]
url = http://nagios.example.com/nagios
username = admin

[auth]
method = env_var
env_var = NAGIOS_PASSWORD

Vouch Proxy (SSO/OAuth)

For Nagios behind Vouch Proxy with SSO authentication:

# Interactive login - opens browser, paste cookie from DevTools
nagioscli login

The token is cached in ~/.nagioscli_token and used automatically.

Alternatively, set the cookie directly in config:

[nagios]
url = https://nagios.example.com/nagios
username = admin

[auth]
method = vouch_cookie
vouch_cookie = H4sIAAAA...

To get the cookie value manually:

  1. Open browser to your Nagios URL
  2. Authenticate via SSO
  3. Open DevTools (F12) → Application → Cookies
  4. Copy the VouchCookie value

To logout and clear the cached token:

nagioscli logout

Nginx API Token

For Nagios behind nginx with Vouch Proxy, you can use a static API token for CLI/automation access without requiring interactive browser authentication.

This method requires nginx to be configured to accept X-API-Key header and map it to a Nagios user.

[nagios]
url = https://nagios.example.com/nagios
username = claude

[auth]
method = nginx_token
nginx_token = your-secret-token-here

[settings]
timeout = 30
verify_ssl = false

nginx configuration:

Add to your nginx http block:

map $http_x_api_key $api_user {
    default "";
    "your-secret-token-here" "claude";
}

map $http_x_api_key $api_key_valid {
    default 0;
    "your-secret-token-here" 1;
}

Update your CGI location to check for API key:

location @cgi_api {
    try_files $uri =404;
    include fastcgi_params;
    fastcgi_pass unix:/var/run/fcgiwrap/nagios.socket;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param REMOTE_USER $api_user;
}

location ~ \.cgi$ {
    if ($api_key_valid) {
        error_page 418 = @cgi_api;
        return 418;
    }

    # Vouch authentication fallback
    auth_request /vouch/validate;
    # ...
}

This allows:

  • Browser users: Authenticate via Vouch/ADFS SSO
  • CLI/automation: Authenticate via static API token

Exit Codes

Code Meaning
0 Success
1 General error
2 Configuration error
3 Authentication error
4 API error
5 Not found

Development

# Clone and setup
git clone https://github.com/lduchosal/nagioscli.git
cd nagioscli
pdm install -G dev

# Run tests
pdm test

# Lint and format
pdm lint
pdm format

# Type check
pdm typecheck

# Build
pdm build

Architecture

nagioscli/
├── cli/                    # Click CLI interface
│   ├── commands/           # Individual commands
│   ├── decorators.py       # Common CLI options
│   └── handlers.py         # Error handlers
├── core/                   # Core business logic
│   ├── auth.py             # Authentication
│   ├── client.py           # Nagios HTTP client
│   ├── config.py           # Configuration
│   ├── encoding.py         # Tolerant response decoding
│   ├── exceptions.py       # Custom exceptions
│   └── models.py           # Data models
└── services/               # Business services

License

MIT License - see LICENSE for details.

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run tests and linting
  5. Submit a pull request

Metadata

Release files for nachos 0.1.27

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nachos 0.1.27
File Size Uploaded Provenance Actions
nachos-0.1.27.tar.gz 39.6 kB Without provenance Details for nachos-0.1.27.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for nachos 0.1.27
File Interpreter ABI Platform Actions
nachos-0.1.27-py3-none-any.whl Python 3 none any Details for nachos-0.1.27-py3-none-any.whl

Total release size: 66.4 kB

Release files / nachos-0.1.27.tar.gz

Download URL nachos-0.1.27.tar.gz
Size 39.6 kB
Tags Source
SHA-256 checksum
How to use checksums
10f0982ebf0b68698b9b0d1d8e7c7f393341c40e45ecf8e0321bf0b63a0a04dd
BLAKE2b-256 checksum
How to use checksums
e3f30578361219a1e17961ae9bdc3398d9bde3c32989db46f74e333ad443c334
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via pdm/2.29.1 CPython/3.12.3 Darwin/25.6.0

Release files / nachos-0.1.27-py3-none-any.whl

Download URL nachos-0.1.27-py3-none-any.whl
Size 26.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
750f7006390c88b78da748b29249890a28c819fb602f8ae152136b4dd36f699e
BLAKE2b-256 checksum
How to use checksums
82cf1ebd10236288da73e03475a484aa45d74d1cadb54c812a841298f441b371
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via pdm/2.29.1 CPython/3.12.3 Darwin/25.6.0

Security for nachos 0.1.27

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page