Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Quick and Easy server testing/validation

License

NotificationsYou must be signed in to change notification settings

marcinpraczko/goss

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build StatusGithub All ReleasesDocumentation Status**Blog

Goss in 45 seconds

asciicast

Note: For testing containers see thedgoss wrapper.Also, user submitted wrapper scripts for Kuberneteskgossand Docker Composedcgoss.

Note: For some Docker/Kubernetes healthcheck, health endpoint, andcontainer ordering examples, see my blog posthere.

Introduction

What is Goss?

Goss is a YAML basedserverspec 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, seebenchmarks
  • Goss is SMALL! - <10MB single self-contained binary

Installation

Note: For macOS and Windows, see:platform-feature-parity.

This will install goss anddgoss.

Note: Usingcurl | sh is not recommended for production systems, use manual installation below.

# Install latest version to /usr/local/bincurl -fsSL https://goss.rocks/install| sh# Install v0.4.8 version to ~/bincurl -fsSL https://goss.rocks/install| GOSS_VER=v0.4.8 GOSS_DST=~/bin sh

Manual installation

Latest

curl -L https://github.com/goss-org/goss/releases/latest/download/goss-linux-amd64 -o /usr/local/bin/gosschmod +rx /usr/local/bin/gosscurl -L https://github.com/goss-org/goss/releases/latest/download/dgoss -o /usr/local/bin/dgoss# Alternatively, using the latest master# curl -L https://raw.githubusercontent.com/goss-org/goss/master/extras/dgoss/dgoss -o /usr/local/bin/dgosschmod +rx /usr/local/bin/dgoss

Specific Version

# See https://github.com/goss-org/goss/releases for release versionsVERSION=v0.4.8curl -L"https://github.com/goss-org/goss/releases/download/${VERSION}/goss-linux-amd64" -o /usr/local/bin/gosschmod +rx /usr/local/bin/goss# (optional) dgoss docker wrapper (use 'master' for latest version)VERSION=v0.4.8curl -L"https://github.com/goss-org/goss/releases/download/${VERSION}/dgoss" -o /usr/local/bin/dgosschmod +rx /usr/local/bin/dgoss

Build it yourself

make build

Full Documentation

Full Documentation

Using the container image

Using the Goss container image

Quick start

Writing a simple sshd test

An initial set of tests can be derived from the system state by using theaddorautoadd commands.

Let's write a simple sshd test using autoadd.

# Running it as root will allow it to also detect ports$ sudo goss autoadd sshd

Generatedgoss.yaml:

port:tcp:22:listening:trueip:    -0.0.0.0tcp6:22:listening:trueip:    -'::'service:sshd:enabled:truerunning:trueuser:sshd:exists:trueuid:74gid:74groups:    -sshdhome:/var/empty/sshdshell:/sbin/nologingroup:sshd:exists:truegid:74process:sshd:running:true

Now that we have a test suite, we can:

  • Run it once
$goss validate...............Total Duration: 0.021s # <- yeah, it's that fast..Count: 15, Failed: 0
  • Edit it to usetemplates, and run with a vars file
goss --vars vars.yaml validate
  • keep running it until the system enters a valid state or we timeout
goss validate --retry-timeout 30s --sleep 1s
  • serve the tests as a health endpoint
$goss serve&$curl localhost:8080/healthz#JSON endpoint$goss serve --format json&$curl localhost:8080/healthz#rspecish response via content negotiation$goss serve --format json&$curl -H"Accept: application/vnd.goss-rspecish" localhost:8080/healthz

Manually editing Goss files

Goss files can be manually edited to improve readability and expressiveness of tests.

AJson draft 7 schema availableathttps://goss.rocks/schema.yaml makes it easier to edit simple goss.yaml files in IDEs,providing usual coding assistance such as inline documentation, completion and static analysis.See #793 for screenshots.

For example, to configure the Json schema in JetBrains intellij IDEA,followdocumented instructions,with arguments such as:

  • schema url=https://goss.rocks/schema.yaml
  • schema version=Json schema version 7
  • file path pattern=*/goss.yaml

In addition, Goss files can also be further manually edited (without yet full json support) to use:

Some examples:

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/sshdpackage:  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  # Loaded from --vars YAML/JSON file  {{.Vars.package}}:    installed: true{{if eq .Env.OS "centos"}}  # This test is only when $OS environment variable is set to "centos"  libselinux:    installed: true{{end}}

Goss.yaml files with templates can still be validated through the Json schema after being renderedusing thegoss render command. See example below

$cd docs$goss --vars ./vars.yaml render> rendered_goss.yaml#proceed with json schema validation of rendered_goss.yamlin your favorite IDE#orin one of the Json schema validator listedin https://json-schema.org/implementations.html#The following example isfor a Linux AMD64 host$curl -LO https://github.com/neilpa/yajsv/releases/download/v1.4.1/yajsv.linux.amd64$chmod a+x yajsv.linux.amd64$sudo mv yajsv.linux.amd64 /usr/sbin/yajsv$yajsv -s goss-json-schema.yaml rendered_goss.yamlrendered_goss.yaml: fail: process.chrome: skip is requiredrendered_goss.yaml: fail: service.sshd: skip is required1 of 1 failed validationrendered_goss.yaml: fail: process.chrome: skip is requiredrendered_goss.yaml: fail: service.sshd: skip is required

Full list of available Json schema validators can be found inhttps://json-schema.org/implementations.html#validator-command%20line

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. Seeplatform-feature-parity.

The following tests have limitations.

Package:

  • rpm
  • deb
  • Alpine apk
  • pacman

Service:

  • systemd
  • sysV init
  • OpenRC init
  • Upstart

About

Quick and Easy server testing/validation

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go87.3%
  • Shell11.2%
  • Makefile1.3%
  • Other0.2%

[8]ページ先頭

©2009-2025 Movatter.jp