Python remote control library for programmatically control remote machines
Project description
python-rc
Python remote control library for programmatically control remote machines of mutliple cloud providers. Currently support gcloud, azure and digitalocean.
Usage
python-rc consists of python-rc lib and python-rc cli.
python-rc cli
rc <group name> command ...: execute command non interactively in group of machines
rc <group name>/name_pattern1,... command ...: execute command non interactively in group of machines, but only subset that match pattern
rc <group name> @file: execute content of local file in group of machines
rc tmux <group name>: launch a tmux that ssh to every instance in group of machines, input to one machine will be replicate to the group
rc edit <group name>: create or edit machines in group
rc cat <group name>: show machines in group
rc ls: show defined groups
rc rm <group name>: delete group definition (does not delete machines)
rc rsync: parallel rsync
rc ssh-config: generate ~/.ssh/config that can be used with ssh machine_name, scp, rsync, mosh, etc.
In python-rc tmux, you can use C-b a
to toggle input to all machines and input into single machine.
python-rc lib
Import one of provider module: gcloud, digitalocean and azure to get or create a machine. Use machine methods to execute shell commands, execute background task, edit file, etc on the machine. Example:
from rc import gcloud
m = gcloud.get('instance1')
# run a single line command
p = m.run('ls')
print(p.stdout)
# run a multiline command
m.bash('''
cd workspace/proj
make -j 4
''')
# run a muliline commands as root
m.sudo('''
apt update
apt install -y jq
''')
# edit a file, as user `ubuntu`:
m.edit('~/a.txt', '''
file line1
file line2
''', user='ubuntu')
# run a server process in background
m.run_bg('''
cd workspace/someserver
npm i
npm run
''')
# run a python snippet on a server
p = m.python('''
import json
j = json.load(open('foo.json'))
print(j['key'])
''')
# Useful utility example:
# parallel run tasks on each machine
from rc import pmap
def task(machine, script_path):
machine.bootup()
machine.upload(f'~/local/path/{script_path}', f'~/remote/path/script_path}')
machine.run(f'bash remote/path/{script_path}')
pmap(lambda i: task(machines[i], tasks[i]), range(n))
Documentation
TODO. See rc/test/
for example usages for now
Test
To run gcloud part test, gcloud
cli needs to be installed and logged in.
pipenv sync -d
pipenv run pytest -s
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 python-rc-0.4.1.tar.gz
.
File metadata
- Download URL: python-rc-0.4.1.tar.gz
- Upload date:
- Size: 18.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f8953b37f76299bd00a46fcf8d2c427e0443486ec21db8817930fb9ab13cb16d |
|
MD5 | bc66019950700c8b4d5c42a08ce7dd5f |
|
BLAKE2b-256 | 3298a2de74efbab8a1b176077b04d46e84ece3f06b34d7395de58dfec3a2ef75 |
File details
Details for the file python_rc-0.4.1-py3-none-any.whl
.
File metadata
- Download URL: python_rc-0.4.1-py3-none-any.whl
- Upload date:
- Size: 25.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f6a47ba139edb4d508b9455c2db1aa96337f7ebde40269243f2816f1fe2fb6bf |
|
MD5 | b74bfebdf945aaabfdc67cff2503fcba |
|
BLAKE2b-256 | 26a0107b421a3f58091cca2f63211b1e86fb94c037dba7d7510cd596ffa2e7e5 |