Last built 5 months ago using go version go1.7.3 linux/amd64 and 166 seconds of time
Note: For an even faster way of doing this, see: autoadd
Goss is a YAML based serverspec-like 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.
# Install latest version to /usr/local/bin curl -fsSL https://goss.rocks/install | sh # Install v0.2.4 version to ~/bin curl -fsSL https://goss.rocks/install | GOSS_VER=v0.2.4 GOSS_DST=~/bin sh
# See https://github.com/aelsabbahy/goss/releases for release versions curl -L https://github.com/aelsabbahy/goss/releases/download/_VERSION_/goss-linux-amd64 -o /usr/local/bin/goss chmod +rx /usr/local/bin/goss
Documentation is available here: https://github.com/aelsabbahy/goss/blob/master/docs/manual.md
Let’s write a simple sshd test using autoadd.
# Running it as root will allow it to also detect ports $ sudo goss autoadd sshd
$ cat goss.yaml port: tcp:22: listening: true ip: - 0.0.0.0 tcp6:22: listening: true ip: - '::' service: sshd: enabled: true running: true user: sshd: exists: true uid: 74 gid: 74 groups: - sshd home: /var/empty/sshd shell: /sbin/nologin group: sshd: exists: true gid: 74 process: sshd: running: true
Now that we have a test suite, we can:
goss validate ............... Total Duration: 0.021s # <- yeah, it's that fast.. Count: 15, Failed: 0
goss validate --retry-timeout 30s --sleep 1s
goss serve & curl localhost:8080/healthz # JSON endpoint goss serve --format json & curl localhost:8080/healthz
user: sshd: title: UID must be between 50-100, GID doesn't matter. home is flexible meta: desc: Ensure sshd is enabled and running since it's needed for system management sev: 5 exists: true uid: # Validate that UID is between 50 and 100 and: gt: 50 lt: 100 home: # Home can be any of the following or: - /var/empty/sshd - /var/run/sshd package: kernel: installed: true versions: # Must have 3 kernels and none of them can be 4.4.0 and: - have-len: 3 - not: contain-element: 4.4.0
Currently goss only runs on Linux.
The following tests have limitations.
Package: * rpm * deb * Alpine apk * pacman
Service: * systemd * sysV init * OpenRC init * Upstart