Package: sky-chaostoolkit-toxiproxy-2
Chaos Toolkit tokiproxy driverThis module provides actions to configure toxiproxy proxies and toxies.WARNING: This module exposes actions that have rather strong impacts on your
cluster. While Chaos Engineering is all about disrupting and weaknesses,
it is important to take the time to fully appreciate what those actions
do and how they do it.InstallTo be used from your experiment, this package must be installed in the Python
environment wherechaostoolkitalready lives.$ pip install sky-chaostoolkit-toxiproxyUsageConfigurationIn your experiment configuration section you can set the toxiproxy server
address if different from localhost:"configuration":{"toxiproxy_host":"<defaults to localhost...>","toxiproxy_port":1234}If more than one toxiproxy server needs to be addressed, you can set the list
using the "toxiproxy" configuration key:"configuration":{"toxiproxy":[{"host":"<defaults to localhost>","port":"<defaults to 8474>"},]Exported actionsAdding a toxicadd_toxic(
    server: Dict = {'host': 'localhost', 'port': 8474}, 
    random_server: bool = False, 
    proxy_name: str = None, 
    toxic_name: str = None, 
    type: str = None, 
    stream: str = 'downstream', 
    toxicity: float = 1.0, 
    attributes: str = None 
  )Add a toxic to a proxyThe server can be specifically passed as parameter. Alternatively,
if the "toxiproxy" configuration section is present, a random
server is picked setting the "random_server" parameter to True.The name of the proxy to add the toxic to can be specified,
otherwise a random proxy for the server is picked upCreating a new proxycreate_proxy(
    proxy_name, 
    upstream, 
    listen, 
    enabled: bool = True, 
    server: Dict = {'host': 'localhost', 'port': 8474}Deleting all proxies attached to a serverdelete_all_proxies(
    server: Dict = {'host': 'localhost', 'port': 8474}
  )Deleting all toxic attached to a proxydelete_all_toxics(
    server: Dict = {'host': 'localhost', 'port': 8474}, 
    proxy_name: str = None
  )Deleting a proxydelete_proxy(
    proxy_name: str, 
    server: Dict = {'host': 'localhost', 'port': 8474}
  )Deleting a toxicdelete_toxic(
    server: Dict = {'host': 'localhost', 'port': 8474}, 
    proxy_name: str = None, 
    stream: str = 'downstream', 
    type: str = None
  )Disabling a proxydisable_proxy(
    server: Dict = {'host': 'localhost', 'port': 8474}, 
    proxy_name: str = None
  )Enabling a proxyenable_proxy(
    server: Dict = {'host': 'localhost', 'port': 8474}, 
    proxy_name: str = None
  )Populating a serverpopulate(
    proxies, 
    server: Dict = {'host': 'localhost', 'port': 8474}
  )Resetting all serversreset_all()Enable all proxies and remove all active toxics for all serversResetting a serverreset_server(
    server: Dict = {'host': 'localhost', 'port': 8474}
  )Enable all proxies and remove all active toxicsSample experiment{"version":"1.0.0","title":"What happens if a latency is introduced on a proxy for cassandra","description":"We introduce a 400 ms latency on a single cassandra node","tags":["proxy"],"steady-state-hypothesis":{"title":"Proxy is found","probes":[{"type":"probe","name":"proxy-is-found","tolerance":"c1","provider":{"type":"python","module":"chaostp.proxy.probes","func":"get_proxy","arguments":{"name":"c1"}}}]},"method":[{"type":"action","name":"delete_all_toxics","provider":{"type":"python","module":"chaostp.proxy.actions","func":"delete_all_toxics","arguments":{"proxy_name":"localhost","name":"c1"}}},{"type":"action","name":"add-a-latency-toxic","provider":{"type":"python","module":"chaostp.proxy.actions","func":"add_toxic","arguments":{"proxy_name":"c1","toxic_name":"t1","type":"latency","stream":"upstream","toxicity":0.5,"attributes":{"latency":100}}},"pauses":{"before":10,"after":40}},{"type":"action","name":"add-a-bandwidth-degradation-toxic","provider":{"type":"python","module":"chaostp.proxy.actions","func":"add_toxic","arguments":{"proxy_name":"c1","toxic_name":"bandwidth_degradation_toxic","type":"bandwidth","stream":"upstream","toxicity":0.5,"attributes":{"rate":400}}},"pauses":{"before":10,"after":40}},{"type":"action","name":"delete_all_toxics","provider":{"type":"python","module":"chaostp.proxy.actions","func":"delete_all_toxics","arguments":{"name":"c1"}}}],"rollbacks":[]}Please explore the code to see existing probes and actions.DiscoveryYou may use the Chaos Toolkit to discover the capabilities of this extension:$ chaos discover sky-chaostoolkit-toxiproxy  --no-installConfigurationThe module expects a toxiproxy-server running and listening on the default port 8474,
there is currently no way to configure another server address.ContributeIf you wish to contribute more functions to this package, you are more than
welcome to do so. Please fork this project, make your changes following the
usualPEP 8code style, add appropriate tests and submit a PR for
review.The Chaos Toolkit projects require all contributors must sign aDeveloper Certificate of Originon each commit they would like to merge
into the master branch of the repository. Please, make sure you can abide by
the rules of the DCO before submitting a PR.