Skip to main content

Python remote control library for programmatically control remote machines

Project description

python-rc

PyPI version

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python-rc-0.4.1.tar.gz (18.1 kB view details)

Uploaded Source

Built Distribution

python_rc-0.4.1-py3-none-any.whl (25.6 kB view details)

Uploaded Python 3

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

Hashes for python-rc-0.4.1.tar.gz
Algorithm Hash digest
SHA256 f8953b37f76299bd00a46fcf8d2c427e0443486ec21db8817930fb9ab13cb16d
MD5 bc66019950700c8b4d5c42a08ce7dd5f
BLAKE2b-256 3298a2de74efbab8a1b176077b04d46e84ece3f06b34d7395de58dfec3a2ef75

See more details on using hashes here.

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

Hashes for python_rc-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f6a47ba139edb4d508b9455c2db1aa96337f7ebde40269243f2816f1fe2fb6bf
MD5 b74bfebdf945aaabfdc67cff2503fcba
BLAKE2b-256 26a0107b421a3f58091cca2f63211b1e86fb94c037dba7d7510cd596ffa2e7e5

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