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.6.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 > Results] 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.6.0.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

viper_infra_commander-0.6.0-py3-none-any.whl (16.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: viper-infra-commander-0.6.0.tar.gz
  • Upload date:
  • Size: 15.3 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.6.0.tar.gz
Algorithm Hash digest
SHA256 93a4b1e41808ff973098cc509c48b3dbc60f476f9cc154d629313f76fc0b2f3b
MD5 18bd9d0655ebd2f1f4fea3d617e896d2
BLAKE2b-256 fed8a27e623ea3c20a1e38ebe704bd45665f721530a41d5ed48ac00838b5e851

See more details on using hashes here.

File details

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

File metadata

  • Download URL: viper_infra_commander-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 16.8 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.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 857b8e54eca26a8cf070df851ef980a5b9fe24134560a733a0c9860d1b362761
MD5 32dd4898a0b1cb511f92a92f012d2ba4
BLAKE2b-256 4bda342628f282a72b22801b7abda02198b1fac1cd2bfbd00fa00e11ebf1bc11

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