Skip to main content

AsyncIO-powered python DSL for running commands locally, on docker, or over ssh.

Project description

🔧 Pitcrew

AsyncIO-powered python DSL for running commands locally, on docker, or over ssh.

CircleCI

What does Pitcrew do?

Pitcrew can run commands $ crew sh date
...or over ssh $ crew sh -p providers.ssh -P '{"hosts": ["192.168.0.1"]}' date
on hundreds of hosts! $ crew sh -p providers.ssh -P '{"hosts": ["192.168.0.1-100"]}' date
Crew can also run tasks $ crew run install.homebrew
Tasks are either other shell commands, or other tasks, for example, this provisions Cloudfront, SSL and S3 and builds and deploys docs to pitcrew.io $ crew run examples.deploy_pitcrew
You can list available tasks $ crew list
...edit an existing task $ crew edit examples.deploy_pitcrew # opens in $EDITOR
or create a new task! $ crew new some.new.task

Installation

From binary

To install pitcrew in your home directory, run the following:

curl -fsSL "https://github.com/joshbuddy/pitcrew/releases/latest/download/crew-$(uname)" > crew
chmod u+x crew
./crew run crew.install --dest="$HOME/crew"

From PyPi

To install from the Python Package Index, run the following:

pip install pitcrew
crew run crew.install --dest="$HOME/crew"

From source

git clone https://github.com/joshbuddy/pitcrew
cd pitcrew
python3.6 -m venv env
source env/bin/activate
pip install -e .

Concepts

A command or set of commands is called a task. A context runs tasks either locally, on docker or over ssh. A provider generates contexts.

Tasks

Tasks are either composed from other tasks or invoking a command on a shell.

An example of a task might be reading a file. fs.read(path) reads a file as bytes and returns it:

pitcrew/tasks/fs/read.py

import base64
from pitcrew import task


@task.arg("path", desc="The file to read", type=str)
@task.returns("The bytes of the file")
class FsRead(task.BaseTask):
    """Read value of path into bytes"""

    async def run(self) -> bytes:
        code, out, err = await self.sh_with_code(f"cat {self.params.esc_path}")
        assert code == 0, "exitcode was not zero"
        return out

Other tasks might include writing a file, installing xcode or cloning a git repository. All the currently available tasks are listed at docs/tasks.md. The api available in a task is available at docs/api.md#crewtask.

Contexts

An example of a context might be over ssh, or even locally. Learn more about contexts at docs/api.md#crewcontext.

Providers

A provider is a task with a specific return type. The return type is an async iterator which returns contexts.

Usage

For detailed usage, see docs/cli.md for more details.

Run a command

Pitcrew allows running a command using bin/crew sh -- [shell command].

For example crew sh ls / will list the "/" directory locally.

You can run this across three hosts via ssh using crew sh -p providers.ssh -P '{"hosts": ["192.168.0.1", "192.168.0.2", "192.168.0.3"]}' ls /.

Run a task

Pitcrew allows running a task using crew run [task name] <task args>. This will normally target your local machine unless you use the -p flag to select a different provider.

See available tasks

To see all the available tasks run crew list. This will show all available tasks which are stored in crew/tasks.

Make a new task

To see all the available tasks run crew new [task_name]. This will create a template of a new task.

Run tests

To run an ad-hoc command use . For tasks use crew run [task-name] <args>.

Get CLI help

To see the whole list of commands available from the command-line, run crew help.

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

pitcrew-0.0.3.tar.gz (18.3 kB view details)

Uploaded Source

Built Distribution

pitcrew-0.0.3-py2.py3-none-any.whl (26.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file pitcrew-0.0.3.tar.gz.

File metadata

  • Download URL: pitcrew-0.0.3.tar.gz
  • Upload date:
  • Size: 18.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for pitcrew-0.0.3.tar.gz
Algorithm Hash digest
SHA256 5dbeb2a6c609bd3ebc80e2c1cc781327d90040e77a9f13004438df2d81afa082
MD5 2f4c689e8140e7920d9763b6ecdb5225
BLAKE2b-256 5e5e02b53ad83abc9160a8e1d3e41b92a107059726267322afdb617a70c9144f

See more details on using hashes here.

File details

Details for the file pitcrew-0.0.3-py2.py3-none-any.whl.

File metadata

  • Download URL: pitcrew-0.0.3-py2.py3-none-any.whl
  • Upload date:
  • Size: 26.9 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for pitcrew-0.0.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 258a379fb87d1bbecedb4ed6a26a65bd07ec33ff45fcf315358cd69f78420091
MD5 f5aa574df87140c898842e3c01c2e9f0
BLAKE2b-256 04304875e0853ad392654390863b75d5e3c9e3801f7580371bcd966d89c55faa

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