Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ailisp/python-rc
a python remote control library
https://github.com/ailisp/python-rc
Last synced: about 2 months ago
JSON representation
a python remote control library
- Host: GitHub
- URL: https://github.com/ailisp/python-rc
- Owner: ailisp
- License: bsd-3-clause
- Created: 2019-11-08T06:14:15.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2021-06-02T00:45:22.000Z (over 3 years ago)
- Last Synced: 2024-10-13T21:49:04.285Z (4 months ago)
- Language: Python
- Size: 161 KB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# python-rc
[![PyPI version](https://badge.fury.io/py/python-rc.svg)](https://pypi.org/project/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 command ...: execute command non interactively in group of machines
rc /name_pattern1,... command ...: execute command non interactively in group of machines, but only subset that match pattern
rc @file: execute content of local file in group of machines
rc tmux : launch a tmux that ssh to every instance in group of machines, input to one machine will be replicate to the group
rc edit : create or edit machines in group
rc cat : show machines in group
rc ls: show defined groups
rc rm : 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
```