Goss - Quick and Easy server validation
Goss in 45 seconds
Note: For testing containers see the dgoss wrapper. Also, user submitted wrapper scripts for Kubernetes kgoss and Docker Compose dcgoss.
Note: For some Docker/Kubernetes healthcheck, health endpoint, and container ordering examples, see my blog post here.
Introduction
What is Goss?
Goss is a YAML based serverspec alternative tool for validating a server's configuration. It eases the process of writing tests by allowing the user to generate tests from the current system state. Once the test suite is written they can be executed, waited-on, or served as a health endpoint.
Why use Goss?
- Goss is EASY! - Goss in 45 seconds
- Goss is FAST! - small-medium test suites are near instantaneous, see benchmarks
- Goss is SMALL! - <10MB single self-contained binary
Installation
Note: For macOS and Windows, see: platform-feature-parity.
This will install goss and dgoss.
Note: Using curl | sh
is not recommended for production systems, use manual installation below.
# Install latest version to /usr/local/bin
curl -fsSL https://goss.rocks/install | sh
# Install v0.4.8 version to ~/bin
curl -fsSL https://goss.rocks/install | GOSS_VER=v0.4.8 GOSS_DST=~/bin sh
Supported resources
- package - add new package
- file - add new file
- addr - add new remote address:port - ex: google.com:80
- port - add new listening [protocol]:port - ex: 80 or udp:123
- service - add new service
- user - add new user
- group - add new group
- command - add new command
- dns - add new dns
- process - add new process name
- kernel-param - add new kernel-param
- mount - add new mount
- interface - add new network interface
- http - add new network http url with proxy support
- goss - add new goss file, it will be imported from this one
- matching - test for matches in supplied content
Supported output formats
- rspecish - (default) Similar to rspec output
- documentation - Verbose test results
- json - JSON, detailed test result
- tap - TAP style
- junit - JUnit style
- nagios - Nagios/Sensu compatible output /w exit code 2 for failures.
- prometheus - Prometheus compatible output.
- silent - No output. Avoids exposing system information (e.g. when serving tests as a healthcheck endpoint).
Community Contributions
- goss-ansible - Ansible module for Goss.
- degoss - Ansible role for installing, running, and removing Goss in a single go.
- kitchen-goss - A test-kitchen verifier plugin for Goss.
- goss-fpm-files - Might be useful for building goss system packages.
- packer-provisioner-goss - A packer plugin to run Goss as a provision step.
- gossboss - Collect and view aggregated Goss test results from multiple remote Goss servers.
Limitations
goss
works well on Linux, but support on Windows & macOS is alpha. See platform-feature-parity.
The following tests have limitations.
Package:
- rpm
- deb
- Alpine apk
- pacman
Service:
- systemd
- sysV init
- OpenRC init
- Upstart