A tool for simulating destructive behavior of production infrastructure
WIP mode. Yet works for a few months in our company (doesn't mean it's stable).
Paws looks for config at ${PAWS_HOME}/paws.yml
path by default, but path to config can be specified after run command.
By default PAWS_HOME=~/.kittypaws
.
Using cargo:
cargo run -- run config.yml
Using distributive:
paws run config.yml
Plugins are stored at ${PAWS_HOME}/plugins/
, which is ~/.kittypaws/plugins/
by default.
Install subatiq/kittypaws-deathloop
plugin from github using master
branch and save it by the name of deathloop
:
paws install subatiq/kittypaws-deathloop master deathloop
Install subatiq/kittypaws-deathloop
plugin from github using master
branch and save it by the default name of kittypaws-deathloop
:
paws install subatiq/kittypaws-deathloop master
paws uninstall plugin-name
Use plugin name by which it was saved.
paws list
Plugins are stored in ~/.kittypaws/plugins/
each in a folder named after plugin.
Inside the folder there should be main.py
with the run
function:
def run(config: Dict[str, str]) -> None:
pass
Inside the folder there should be run.sh
:
config_field1=${config_field1:-default_value}
echo config_field1
Kittypaws will load it if plugin name is in the config and run with specified frequency.
Drops connection to a certain IP address. Works with Ubuntu-based docker containers
https://github.com/subatiq/kittypaws-dropper
Simply restarts target container
https://github.com/subatiq/kittypaws-deathloop
Breaks time sync on the host
https://github.com/subatiq/kittypaws-timeburglar
plugins:
- name: plugin01
options:
config01: yes
config02: 42
...
- name: plugin01:
options:
config03: yes
config02: 44
...
You can specify if the test run should stop after some time. To configure it, add
duration: <Duration in ISO 8601 format>
to the root of the config.
Example:
duration: P1D
plugins:
- name: example
...
Plugins can start executing their tasks immediately, or after some time. You can configure them to wait for their interval first or wait for a specific delay and then continue to work normally.
Config example:
- name: <plugin_name>:
...
startup: hot
Intervals configuration is described below.
Config example:
- name: <plugin_name>:
...
startup: cold # works by default
frequency:
max: PT1M
min: PT30S
Here first plugin run will be executed after random interval.
Config example:
- name: <plugin_name>:
...
startup: PT5S
With this config plugin will start after waiting 5 seconds, then it will only wait for random intervals between runs.
Time durations in config comply with ISO 8601. Plugins can run in different intervals or once. To let kitty know how often you want them to run add this to plugin config:
Config example:
- name: <plugin_name>:
...
frequency:
min: PT30S
max: PT1M
Config example:
- name: <plugin_name>:
...
frequency: PT1M
Used as default
Config example:
- name: <plugin_name>:
...
frequency: once # or do not put it in config at all, it's default
Go get these bugs, Tiger!