使用Python控制虚拟机、容器和其他机器,利用实时快照
项目描述
指尖
这个程序/库旨在成为
- 使用实时VM快照在几秒钟内启动虚拟机和容器的方式
- 通过编写小型而整洁的函数从Python中以统一的方式控制机器
- 组合并透明地缓存这些函数的结果
- 构建利用实时VM快照和检查点的酷炫应用程序
- 控制非本地虚拟机的其他类型的机器
同时,努力保持故意低功耗并施加尽可能少的限制。如果您觉得它以最懒惰的方式什么都没做,那就是它。
目前处于alpha阶段。
预告
从您的shell执行它的示例
$ fingertip os.fedora + ssh # install Fedora and SSH into it
$ fingertip os.alpine + console # install Alpine, access serial console
$ fingertip os.alpine + ansible package --state=present --name=patch + ssh
$ fingertip backend.podman-criu + os.alpine + console # containers!
$ fingertip os.fedora + script.debug myscript.sh # checkpoint-powered debugger
Python使用和编写您自己的步骤的示例
import fingertip
def main(m=None, alias='itself'):
m = m or fingertip.build('os.fedora')
m = m.apply('ansible', 'lineinfile', path='/etc/hosts',
line=f'127.0.0.1 {alias}')
with m:
assert '1 received' in m(f'ping -c1 {alias}').out
return m
放入 fingertip/plugins/demo.py
,现在可以在管道中使用它
$ fingertip demo
$ fingertip os.fedora + demo me
$ fingertip os.alpine + demo --alias=myself + ssh
安装
参阅 INSTALL.md。
Shell使用
如果您已安装指尖,请作为 fingertip
调用它。
如果您正在从签出中运行,请使用 python3 <path to checkout>
或创建别名。
如果您正在使用容器化版本,请调用 fingertip-containerized
(并抱最好的希望)。
所以,
$ fingertip os.fedora + ssh
您应该观察 Fedora 安装启动,然后关闭,再次启动,最后通过 SSH 获得对该机器的交互式控制。
再次调用相同的命令,它应该几乎不做任何事情,因为下载和安装已经缓存在 ~/.cache/fingertip
中。享受在几秒钟内启动的全新干净的 VM。感觉它们已经在你指尖。可以通过控制台或 Python 来控制它们。
Python 使用方法
让我们看看操作机器的样子可以是什么样子(《fingertip/plugins/self_test/greeting.py》)
def make_greeting(m, greeting='Hello!'): # take a machine
with m: # start if needed
m.console.sendline(f"echo '{greeting}' > .greeting") # type a command
m.console.expect_exact(m.prompt) # wait for prompt
return m # cache result
@fingertip.transient # don't lock/save
def main(m, greeting='Hello!'): # take a machine
m = m.apply(make_greeting, greeting=greeting) # use cached step
with m: # start if needed
assert m('cat .greeting').out.strip() == greeting # execute command
# do not save
插件是常规的 Python 函数,没有复杂的功能。您只需将它们传递给 fingertip.build('fedora')
,它就会工作。即使是这个 @fingertip.transient
也是一个对 .apply()
的优化提示。
以下是在此类函数内部可能发生的情况
- 它接受一个机器作为第一个参数(可能已经启动或未启动,您不知道)。
- 它检查它,并根据需要应用更多函数(通过
.apply
应用额外步骤如果可能的话会缓存/重用)。 - 如果需要应用任何自定义步骤或更改,则必须首先使用
with
块启动机器(with m as m
)。对机器的所有修改都必须在这个块内进行,否则可能会默默取消! - 如果结果应该被缓存并用于下一步,则应返回机器。不返回机器通常会导致取消您所做的所有更改。如果您不打算保存结果,请不要返回 m;另外,用
@fingertip.transient
装饰函数,以便 fingertip 可以应用性能优化并避免锁定。还有更多内容,请参阅docs/on_transiency.md
获取详细信息。
链中的第一个函数(或在 fingertip.build
中使用的函数)不会作为第一个参数接收机器。要编写通用函数,请使用
def func(m=None):
m = m or fingertip.build('fedora')
...
免责声明
由于我确切地缓存了什么以及开发处于早期阶段,请在每次更新后至少清空一次 ~/.cache/fingertip/machines
。
$ fingertip cleanup machines all
有时需要清除整个 ~/.cache/fingertip
。
$ fingertip cleanup everything
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。
源分发
构建分发
fingertip-0.3.7.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0dbc05d48d2dd4c0e7cf1ac5c4af0df536d5897831a24e3e6fb9dd9becb9e934 |
|
MD5 | c3ddd1c57984ba4131223800c966a4d0 |
|
BLAKE2b-256 | 5727c305816c7aca1c720c1f61a6c8143a36932af3d720c2d47d2e012bdd02e8 |
fingertip-0.3.7-py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f4697f44b9cf5fb6b82353035e167b336579d5d9c02e52bc03f507d133260210 |
|
MD5 | c96ab6004a79966442b48318993f9a7b |
|
BLAKE2b-256 | 73541b87f48c14ded972ea1df9e293041d5d2cde5e1576e6616ae283d627eeac |