Shell support

Kibitzr accepts shell scripts in 3 places:

  • Fetch

  • Transform

  • Notify

Execute code from notifier with transformation result passed via stdin.

Here is a simplistic example of kibitzr.yml file, that uses all three:

checks:
  - name: Shell example
    script: |
      for i in seq 1 3
      do
          echo "Number $i"
      done
    transform:
      - shell: grep 2
    notify:
      - shell: tac

Let’s break it down.

Shell Fetcher

If script’s value is a string, it will be used as shell script. Alternatively script can hold a dictionary of one item. Item’s key can be shell (or python for Python fetcher). If script’s only key is shell, then it’s value will be executed as a Shell script. Under Linux, executor is bash, under Windows - cmd.exe. Script is an arbitrary shell code. It’s output will be passed to transforms. If exit code is not zero, check will be aborted. Shell scripts don’t have access to credentials, but inherit Kibitzr environment.

Shell Transform and Notifier

Transform and notifier are similar to fetcher. Except that they receive content via stdin, and notifier’s stdout is ignored.

Example

Returning to the example, execution will go as follows:

[DEBUG] kibitzr.conf: Loading settings from /home/deminp/kibitzr/tmp/kibitzr.yml
[INFO] kibitzr.fetcher.loader: Fetching 'Shell' using script
[DEBUG] kibitzr.bash: Saving code to '/tmp/tmpTTPSxA.bat'
[DEBUG] kibitzr.bash: Launching script '/tmp/tmpTTPSxA.bat'
[DEBUG] kibitzr.bash: Command exit code: 0
[DEBUG] kibitzr.bash: Command stdout: Number 1
Number 2
Number 3

[DEBUG] kibitzr.bash: Command stderr:
[DEBUG] kibitzr.bash: Saving code to '/tmp/tmpV4Grg8.bat'
[DEBUG] kibitzr.bash: Launching script '/tmp/tmpV4Grg8.bat'
[DEBUG] kibitzr.bash: Command exit code: 0
[DEBUG] kibitzr.bash: Command stdout: Number 2
[DEBUG] kibitzr.bash: Command stderr:
[DEBUG] kibitzr.notifier.factory: Sending report: u'Number 2'
[DEBUG] kibitzr.bash: Saving code to '/tmp/tmpm6sRVx.bat'
[DEBUG] kibitzr.bash: Launching script '/tmp/tmpm6sRVx.bat'
[DEBUG] kibitzr.bash: Command exit code: 0
[DEBUG] kibitzr.bash: Command stdout: 2 rebmuN
[DEBUG] kibitzr.bash: Command stderr:

Fetcher script produced output:

Number 1
Number 2
Number 3

Shell transform filtered lines that contain 2:

Number 2

Notifier echoed reversed line:

2 rebmuN

Notifier’s stdout is ignored, so we don’t see it along Kibitzr output.

And here is what happens when shell script produces error:

$ cat kibitzr.yml
checks:
  - name: Shell
    script: ls /non-existing
    notify:
      - shell: rev

$ kibitzr -l debug once
[DEBUG] kibitzr.conf: Loading settings from /home/deminp/kibitzr/tmp/kibitzr.yml
[INFO] kibitzr.fetcher.loader: Fetching 'Shell' using script
[DEBUG] kibitzr.bash: Saving code to '/tmp/tmpyNakOP.bat'
[DEBUG] kibitzr.bash: Launching script '/tmp/tmpyNakOP.bat'
[ERROR] kibitzr.bash: Command exit code: 2
[ERROR] kibitzr.bash: Command stdout:
[ERROR] kibitzr.bash: Command stderr: ls: cannot access '/non-existing': No such file or directory
[DEBUG] kibitzr.transformer.factory: Notifying on error
[DEBUG] kibitzr.notifier.factory: Sending report: u"ls: cannot access '/non-existing': No such file or directory"
[DEBUG] kibitzr.bash: Saving code to '/tmp/tmpqdZwKI.bat'
[DEBUG] kibitzr.bash: Launching script '/tmp/tmpqdZwKI.bat'
[DEBUG] kibitzr.bash: Command exit code: 0
[DEBUG] kibitzr.bash: Command stdout: yrotcerid ro elif hcus oN :'gnitsixe-non/' ssecca tonnac :sl
[DEBUG] kibitzr.bash: Command stderr: