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.ymlUsing distributive:
paws run config.ymlPlugins 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 deathloopInstall subatiq/kittypaws-deathloop plugin from github using master branch and save it by the default name of kittypaws-deathloop:
paws install subatiq/kittypaws-deathloop masterpaws uninstall plugin-nameUse plugin name by which it was saved.
paws listPlugins 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:
passInside the folder there should be run.sh:
config_field1=${config_field1:-default_value}
echo config_field1Kittypaws 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
Remotely turn off and on power on Shelly Plug (Tested on S model only) to simulate a power outage https://github.com/invian/kittypaws-shelly-plug
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: hotIntervals configuration is described below.
Config example:
- name: <plugin_name>:
...
startup: cold # works by default
frequency:
max: PT1M
min: PT30SHere first plugin run will be executed after random interval.
Config example:
- name: <plugin_name>:
...
startup: PT5SWith 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: PT1MConfig example:
- name: <plugin_name>:
...
frequency: PT1MUsed as default
Config example:
- name: <plugin_name>:
...
frequency: once # or do not put it in config at all, it's defaultGo get these bugs, Tiger!
