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 of the hosts from DB

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:rttp viper.demo.tasks.ping 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:run-task-then-pipe,hosts:rttp,hosts:results,runners:filter,runners:count,runners:sort,runners:pipe,runners:run,runners:hosts,results:filter,results:count,results:sort,results:pipe,results:hosts,results:by-task}
             ...

Viper CLI v0.3.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:run-task-then-pipe,hosts:rttp,hosts:results,runners:filter,runners:count,runners:sort,runners:pipe,runners:run,runners:hosts,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 > Runners] assign a task to
                        each host and run
    hosts:run-task-then-pipe
                        [Hosts > hosts:run-task-then-pipe TASK HANDLER *ARGS >
                        ?] run the task on hosts and pipe the results to a
                        handler
    hosts:rttp          alias of 'hosts:run-task-then-pipe'
    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 > Results] run the assigned
                        tasks
    runners:hosts       [Runners > runners:hosts > Hosts] get the hohsts from
                        the runners
    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.3.0.tar.gz (14.9 kB view details)

Uploaded Source

Built Distribution

viper_infra_commander-0.3.0-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: viper-infra-commander-0.3.0.tar.gz
  • Upload date:
  • Size: 14.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.3.0.tar.gz
Algorithm Hash digest
SHA256 8ee34c04c6f239b04222d10fc14576645fd250f3126c7150f12130ce138a6086
MD5 db0020c9a60666785ffef4d4fa29e273
BLAKE2b-256 86f7769a97dfad46add823653b5e6102e654208e240c1d1f81b79332d142f21b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viper_infra_commander-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 16.2 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.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e64c602b9bc4458c9c7ff332fe78f8621c9c66743bc80617500d48d75a24aba2
MD5 ef7bdbd5b096e8c5f6652885be931245
BLAKE2b-256 1f93be39f8e5c1e7356fa70d6a61ba0240534f8596bee29a08254aca76c8338d

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