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.
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5dbeb2a6c609bd3ebc80e2c1cc781327d90040e77a9f13004438df2d81afa082 |
|
MD5 | 2f4c689e8140e7920d9763b6ecdb5225 |
|
BLAKE2b-256 | 5e5e02b53ad83abc9160a8e1d3e41b92a107059726267322afdb617a70c9144f |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 258a379fb87d1bbecedb4ed6a26a65bd07ec33ff45fcf315358cd69f78420091 |
|
MD5 | f5aa574df87140c898842e3c01c2e9f0 |
|
BLAKE2b-256 | 04304875e0853ad392654390863b75d5e3c9e3801f7580371bcd966d89c55faa |