Chopsticks是一个编排库:它允许您通过SSH管理并配置远程主机。
项目描述
Chopsticks是一个编排库:它允许您通过SSH管理并配置远程主机。
这是一个无代理的库,除了Python和SSH代理之外,不需要在远程主机上安装任何东西。
它还支持在Docker容器中执行代码。
它可能与Ansible或Fabric相提并论,但它有一些聪明的传输魔法,使得开发变得非常容易:您只需编写可以从编排主机调用的Python函数。无需调用bash命令(例如Fabric)或编写具有限制性输入和输出格式的自包含脚本(例如Ansible)。
也可以将其与Python内置的multiprocessing库进行比较,但与在同一主机上的子进程中调用代码不同,代码可以在远程主机上运行。
示例
使用chopsticks,您可以简单地导入函数并将它们传递给远程主机以执行。
首先建立SSH隧道
from chopsticks.tunnel import Tunnel tun = Tunnel('troy.example.com')
然后您可以将一个函数传递给远程主机以调用
import time print('Time on %s:' % tun.host, tun.call(time.time))
您可以使用当前代码库中的任何纯Python函数,这意味着您可以为远程主机创建自己的编排函数库(以及调用远程主机的函数)。
Tunnel提供了在单个主机上执行的支持;还有一个Group可以在多个主机上并行执行可调用函数
from chopsticks.group import Group group = Group([ 'web1.example.com', 'web2.example.com', 'web3.example.com', ]) for host, addr in group.call(ip).successful(): print('%s ip:' % host, addr)
隧道子类允许使用SSH之外的流进行连接,例如使用sudo,或连接到沙盒中的新鲜Docker容器
from chopsticks.tunnel import Docker from chopsticks.group import Group from chopsticks.facts import python_version group = Group([ Docker('worker-1', image='python:3.4'), Docker('worker-2', image='python:3.5'), Docker('worker-3', image='python:3.6'), ]) for host, python_version in group.call(python_version).items(): print('%s Python version:' % host, python_version)
隧道和组可以懒加载地连接(或者您可以通过调用connect()来主动连接它们)。它们也可以作为上下文管理器使用
# Explictly connect and disconnect group.connect() group.call(time.time) group.close() # Reconnect and disconnect as context manager with group: group.call(time.time) # Implicit reconnect group.call(time.time) # Disconnect when destroyed del group
当然,当关闭隧道/组时,任何远程状态(导入、全局变量等)都会丢失。
安装
可以从仓库的克隆版本直接使用Chopsticks;或者使用pip进行安装
$ pip install chopsticks
API
有关完整的文档,请参阅Read The Docs上的文档。
Python 2/3
Chopsticks支持Python 2和Python 3。
因为Chopsticks认为代理与控制器运行在相同的代码库中,所以代理将尝试使用与控制器进程相似的Python解释器
如果控制器进程是(任何)Python 2,则使用/usr/bin/python2。
如果控制器进程是(任何)Python 3,则使用/usr/bin/python3。
工作原理
SSH隧道在远程主机上调用python二进制文件,并通过stdin传递一个引导脚本。
引导完成后,远程的“代理”将通过隧道的stdin/stdout设置双向通信。这种通信(目前)用于两个目的
一个RPC系统,用于在远程代理中调用任意可调用项,并将返回的值传递回控制器。
一个PEP-302导入钩子系统,允许远程代理从控制器导入纯Python代码(注意:控制器只能提供位于文件系统中的Python模块 - 目前不支持如zipimport/compressed eggs之类的导入钩子)。
stderr将被回显到控制台,前面带有主机名以标识它来自哪个隧道。因此,可以使用它将调试信息反馈到编排主机。
许可
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
chopsticks-1.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b85856e7757884a3e866d8925d8c8949aa1fe8b9849fe9bfc1a50a5ff7c4e817 |
|
MD5 | 8559fa6f0069fc5e3b39706d987797c2 |
|
BLAKE2b-256 | 9f81d6c21092db5e57a5114cce9c88955558bad1d8b42b5f0f815a9b7a9eba60 |
chopsticks-1.0-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9c84876c76e79c006651018f90be7c318e8e9531280bee9571a87bd11725a13f |
|
MD5 | faebeeb99a6129d29e4f5efb4898bc8a |
|
BLAKE2b-256 | 9533566b001375f673ca245d1e57f1fbf77a4ad1ea8bc38601f18888f8aeff80 |