筷子是一个编排库:它允许您通过ssh管理和配置远程主机。
chopsticks的Python项目详细描述
筷子是一个编排库:它允许您管理和配置 通过ssh的远程主机。
当然,这是无代理的,不需要在远程安装任何东西 除了python和ssh代理之外的主机。
它还支持在Docker容器中执行代码。
它也许比平底布或织物更好,但有一些巧妙的运输方式 这意味着它很容易开发:您只需编写python 可以从编排主机调用的函数。不调用bash 命令(例如fabric)或使用受限输入编写自包含脚本 和输出格式(例如ansible)。
还可以将其与python的内置^{tt1}进行比较$ 库,但不是在同一主机上的子进程中调用代码, 代码可能在远程主机上运行。
示例
用筷子,你可以简单地导入功能并把它们交给遥控器 要执行的主机。
首先启动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以外的流进行连接,例如 使用{TT4} $,或用于沙箱的新鲜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
当然,当 通道/组已关闭。
安装
筷子可以直接从回购协议的复制品中使用;或者安装在 管道:
$ pip install chopsticks
API
阅读文档时请参见the full documentation。
Python2/3
筷子同时支持python 2和python 3。
因为筷子的观点是代理和 控制器、代理将尝试使用与 一个用于控制器进程:
- /usr/bin/python2如果控制器进程是(任何)python 2。
- /usr/bin/python3如果控制器进程是(任何)python 3。
工作原理
ssh隧道调用远程主机上的python二进制文件,并为其提供 通过stdin启动脚本。
一旦启动,远程“代理”将通过 隧道的stdin/stdout。此通信(当前)用于两个 目的:
- 在远程代理中调用任意可调用项并传递 返回给控制器的值。
- pep-302导入钩子系统,允许远程代理导入纯python 来自控制器的代码(nb.控制器只能为python模块提供服务 位于文件系统导入钩子中,如zipimport/compressed 目前不支持鸡蛋)。
stderr被回显到控制台,前缀是主机名 确定它是从哪个隧道发出的。因此,这可以用来喂养 将信息调试回业务流程主机。