筷子是一个编排库:它允许您通过ssh管理和配置远程主机。

chopsticks的Python项目详细描述


Join the chat at https://gitter.im/chopsticks-chat/Lobby

筷子是一个编排库:它允许您管理和配置 通过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被回显到控制台,前缀是主机名 确定它是从哪个隧道发出的。因此,这可以用来喂养 将信息调试回业务流程主机。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java希望直接扫描要上传到网页的文档   java JavaFX使对象可见,但不使用(忽略)点击   java LibGdx奇怪的纹理行为   java JavaFx ComboBox在第一次单击时未获得正确的值   api WebDav服务器库最好使用Java   java在Android中维护应用程序状态   java保存在Android中拖放RecyclerView后所做的更改我已经阅读了所有内容   无法读取项目中所需库tomcatembedwebsocket的java存档,或者该存档不是有效的ZIP文件   c#类在系统中有哪些关联?如何在UML中最好地表示它们?   java如何使用bazaar访问两台计算机上的同一文件夹   Java易失性与缓存一致性   java如何解决http11。校长:例外?   java liferaymavenplugin从maven Liferay 6.2.5(6.2 ga6)部署war   安卓的jar for java在哪里。木卫一。文件   java邻接矩阵中BFS的顺序是什么?   虚拟机如何从java启动linux虚拟机?   向DefaultListModel添加元素时java JList未更新   java JMSListener批注无法与REST服务一起使用   java DirectoryStream返回路径的顺序是什么?文件名,上次修改,文件大小?   java DropWizard Hibernate doc想说什么?