License
MIT License
This project provides Sensu Go Assets containing portable Ruby
runtimes (for various platforms), based on the excellent ruby-install project
by postmodern. In practice, this Ruby runtime asset should allow
Ruby-based scripts (e.g. Sensu Community plugins) to be
packaged as separate assets containing Ruby scripts and any corresponding gem
dependencies. In this way, a single shared Ruby runtime may be delivered to
systems running the new Sensu Go Agent via the new Sensu's new Asset framework
(i.e. avoiding solutions that would require a Ruby runtime to be redundantly
packaged with every ruby-based plugin).
This same project may be used to build Sensu Assets for Ruby-based plugins via
bundler
or other similar tools. We'll share more information on
building Ruby-based assets with third-party gem depdencies using Bundler soon;
in the interim, please review the instructions below for more information on
how to get started with this project.
Please note the following instructions:
Use a Docker container to install ruby-install
, build a Ruby, and generate
a local_build Sensu Go Asset.
$ docker build --build-arg "RUBY_VERSION=2.4.4" -t sensu-ruby-runtime:2.4.4-alpine -f Dockerfile.alpine .
$ docker build --build-arg "RUBY_VERSION=2.4.4" -t sensu-ruby-runtime:2.4.4-debian -f Dockerfile.debian .
Extract your new sensu-ruby asset, and get the SHA-512 hash for your
Sensu asset!
$ mkdir assets
$ docker run -v "$PWD/assets:/assets" sensu-ruby-runtime:2.4.4-debian cp /assets/sensu-ruby-runtime_2.4.4_debian_linux_amd64.tar.gz /assets/
$ shasum -a 512 assets/sensu-ruby-runtime_2.4.4_debian_linux_amd64.tar.gz
Put that asset somewhere that your Sensu agent can fetch it. Perhaps add it to the Bonsai asset index!
Create an asset resource in Sensu Go.
First, create a configuration file called sensu-ruby-runtime-2.4.4-debian.json
with
the following contents:
{
"type": "Asset",
"api_version": "core/v2",
"metadata": {
"name": "sensu-ruby-runtime-2.4.4-debian",
"namespace": "default",
"labels": {},
"annotations": {}
},
"spec": {
"url": "http://your-asset-server-here/assets/sensu-ruby-runtime-2.4.4-debian.tar.gz",
"sha512": "4f926bf4328fbad2b9cac873d117f771914f4b837c9c85584c38ccf55a3ef3c2e8d154812246e5dda4a87450576b2c58ad9ab40c9e2edc31b288d066b195b21b",
"filters": [
"entity.system.os == 'linux'",
"entity.system.arch == 'amd64'",
"entity.system.platform == 'debian'"
]
}
}
Then create the asset via:
$ sensuctl create -f sensu-ruby-runtime-2.4.4-debian.json
Create a second asset containing a Ruby script.
To run a simple test using the Ruby runtime asset, create another asset
called helloworld-v0.1.tar.gz
with a simple ruby script at
bin/helloworld.rb
; e.g.:
#!/usr/bin/env ruby
require "date"
puts "Hello world! The time is now #{Time.now()}"
NOTE: this is a simple "hello world" example, but it shows that we have
support for basic stlib gems!
Compress this file into a g-zipped tarball and register this asset with
Sensu, and then you're all ready to run some tests!
Create a check resource in Sensu 2.0.
First, create a configuration file called helloworld.json
with
the following contents:
{
"type": "CheckConfig",
"api_version": "core/v2",
"metadata": {
"name": "helloworld",
"namespace": "default",
"labels": {},
"annotations": {}
},
"spec": {
"command": "helloworld.rb",
"runtime_assets": ["sensu-ruby-runtime-2.4.4-debian", "helloworld-v0.1"],
"publish": true,
"interval": 10,
"subscriptions": ["docker"]
}
}
Then create the asset via:
$ sensuctl create -f helloworld.json
At this point, the sensu-backend
should begin publishing your check
request. Any sensu-agent
member of the "docker" subscription should
receive the request, fetch the Ruby runtime and helloworld assets,
unpack them, and successfully execute the helloworld.rb
command by
resolving the Ruby shebang (#!/usr/bin/env ruby
) to the Ruby runtime
on the Sensu agent $PATH
.:wq
Please describe the reason for reporting this asset. Our moderators will be notified and will disable the asset if it is found to be inappropriate.
×