Skip to main content

Viper is a handy tool for easily running infrastructure management tasks and commands.

Project description

Viper Infrastructure Commander

PyPI version PyPI pyversions Build Status codecov Code style: black Documentation Status

Viper is a handy tool for easily running infrastructure management tasks and commands.

Installation

pip install -U viper-infra-commander

Viper CLI Examples

Initialize current workspace (creates a viperdb.sqlite3 file)

viper init

# or remove or overwrite existing data with "-f" / "--force"

viper init -f

Load hosts from file

viper hosts:from-file tests/data/hosts.csv --indent 4

# or with a custom loader

viper hosts:from-file tests/data/hosts.json --loader viper.demo.loaders.json --indent 4

Load hosts from a Python function

viper hosts viper.demo.hosts.group1 --indent 4

Count the number of hosts

viper hosts viper.demo.hosts.group1 | viper hosts:count

Sort the hosts by custom logic

viper hosts viper.demo.hosts.group1 | viper hosts:sort --key viper.demo.sort.by_ip -i 4

Pipe the hosts to a custom handler that formats the hosts to CSV

viper hosts viper.demo.hosts.group1 | viper hosts:pipe viper.demo.handlers.hosts_to_csv

Let's save the hosts

viper hosts viper.demo.hosts.group1 > /tmp/hosts.json

Filter hosts

cat /tmp/hosts.json | viper hosts:filter viper.demo.filters.ip_is 8.8.8.8 --indent 4

Assign tasks to the given hosts

cat /tmp/hosts.json | viper hosts:task viper.demo.tasks.ping --indent 4

Run the assigned tasks

cat /tmp/hosts.json | viper hosts:task viper.demo.tasks.ping | viper runners:run --indent 4

# or use a shortcut

cat /tmp/hosts.json | viper hosts:run-task viper.demo.tasks.ping --indent 4

Run tasks in parallel using multiple workers

cat /tmp/hosts.json | viper hosts:run-task viper.demo.tasks.ping --max-workers 50 --indent 4

Get the past results from DB

viper results

Or get the past results by hosts

cat /tmp/hosts.json | viper hosts:results --indent 4 --debug

Or get the past results by task

viper task viper.demo.tasks.ping | viper results:by-task -i 4

# or

viper task viper.demo.tasks.ping | viper task:results -i 4

Let's save the result

viper task viper.demo.tasks.ping | viper task:results > /tmp/results.json

Now filter the results by their status

# success
cat /tmp/results.json | viper results:filter viper.demo.filters.result_ok -i 4

# failed
cat /tmp/results.json | viper results:filter viper.demo.filters.result_errored -i 4

Pipe the results to a custom handler

# print the status to terminal
cat /tmp/results.json | viper results:pipe viper.demo.handlers.print_status

# export the results to a csv file
cat /tmp/results.json | viper results:pipe viper.demo.handlers.export_csv /tmp/results.csv

Let's do that again in one go

viper hosts viper.demo.hosts.group1 | viper hosts:run-task viper.demo.tasks.ping | viper results:pipe viper.demo.handlers.export_csv /tmp/results.csv

Viper CLI Reference

usage: viper [-h] [--version] [--debug]
             {init,task:from-func,task,task:results,hosts:from-file,hosts:from-func,hosts,hosts:filter,hosts:count,hosts:sort,hosts:pipe,hosts:task,hosts:run-task,hosts:results,runners:filter,runners:count,runners:sort,runners:pipe,runners:run,runners:hosts,results:from-history,results,results:filter,results:count,results:sort,results:pipe,results:hosts,results:by-task}
             ...

Viper CLI v0.9.0

positional arguments:
  {init,task:from-func,task,task:results,hosts:from-file,hosts:from-func,hosts,hosts:filter,hosts:count,hosts:sort,hosts:pipe,hosts:task,hosts:run-task,hosts:results,runners:filter,runners:count,runners:sort,runners:pipe,runners:run,runners:hosts,results:from-history,results,results:filter,results:count,results:sort,results:pipe,results:hosts,results:by-task}
    init                initialize the current workspace
    task:from-func      [task:from-func FUNC > Task] get the task from a
                        Python function location
    task                alias of 'task:from-func'
    task:results        [Task > task:results > Results] get the past results
                        of given task
    hosts:from-file     [hosts:from-file FILE > Hosts] get a group of hosts
                        from a file
    hosts:from-func     [hosts:from-func FUNC > Hosts] get a group of hosts
                        from a Python function location
    hosts               alias of 'hosts:from-func'
    hosts:filter        [Hosts > hosts:filter FILTER *AGS > Hosts] filter
                        hosts by a given function
    hosts:count         [Hosts > hosts:count > int] count the number of hosts
    hosts:sort          [Hosts > hosts:sort > Hosts] sort the hosts
    hosts:pipe          [Hosts > hosts:pipe HANDLER *ARGS > ?] pipe the hosts
                        to the given handler
    hosts:task          [Hosts > hosts:task TASK > Runners] assign a task to
                        each host
    hosts:run-task      [Hosts > hosts:run-task TASK *ARGS > Results] assign a
                        task to each host and run
    hosts:results       [Hosts > hosts:results > Results] get the past results
                        of the hosts
    runners:filter      [Runners > runners:filter FILTER *ARGS > Runners]
                        filter runners by a given function
    runners:count       [Runners > runners:count > int] count the number of
                        runners
    runners:sort        [Runners > runners:sort > Runners] sort the runners
    runners:pipe        [Runners > runners:pipe HANDLER *ARGS > ?] pipe the
                        runners to the given handler
    runners:run         [Runners > runners:run *ARGS > Results] run the
                        assigned tasks
    runners:hosts       [Runners > runners:hosts > Hosts] get the hosts from
                        the runners
    results:from-history
                        [results:from-history > Results] get the past results
                        from database
    results             alias of 'results:from-history'
    results:filter      [Results > results:filter FILTER *ARGS > Results]
                        filter results by a given handler
    results:count       [Results > results:count > int] count the number of
                        results
    results:sort        [Results > results:sort > Results] sort the results
    results:pipe        [Results > results:pipe HANDLER *ARGS > ?] pipe the
                        results to the given handler
    results:hosts       [Results > results:hosts > Hosts] get the hosts from
                        the results
    results:by-task     [Task > results:by-task > Results] get the past
                        results of given task

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  --debug               show traceback information when an exception is raised

Contributing to Viper

See the contribution guidelines.


NOTE: This file is generated by running "make readme"

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

viper-infra-commander-0.10.1.tar.gz (18.9 kB view details)

Uploaded Source

Built Distribution

viper_infra_commander-0.10.1-py3-none-any.whl (21.7 kB view details)

Uploaded Python 3

File details

Details for the file viper-infra-commander-0.10.1.tar.gz.

File metadata

  • Download URL: viper-infra-commander-0.10.1.tar.gz
  • Upload date:
  • Size: 18.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.1 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.8.0

File hashes

Hashes for viper-infra-commander-0.10.1.tar.gz
Algorithm Hash digest
SHA256 0c74d6490e618e27d05b25966b57504f2f19f5bcb7e4a07a870616eacf3e1881
MD5 07d11b32a78ad26e2a93336358fead24
BLAKE2b-256 ec3b1316c98a8aa750ca7081539d81597a4890a2e63fb7249f2c0117d5c76053

See more details on using hashes here.

File details

Details for the file viper_infra_commander-0.10.1-py3-none-any.whl.

File metadata

  • Download URL: viper_infra_commander-0.10.1-py3-none-any.whl
  • Upload date:
  • Size: 21.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.1 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.8.0

File hashes

Hashes for viper_infra_commander-0.10.1-py3-none-any.whl
Algorithm Hash digest
SHA256 35dd3ef19974ecae016a1323cd0d278167dc583dea39c597ea4d9274cf5f26a6
MD5 8b08914e48cf0d36c16b7922a7bc4796
BLAKE2b-256 c0e87afa0ffe2342b9b479cb00e4bff7533caa4de0116cddbed768e6a5c608b9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page