使用Python控制vm、容器和其他机器,利用实时快照
fingertip的Python项目详细描述
fingertip
本课程/图书馆旨在:
- 使用实时虚拟机快照在几秒钟内启动虚拟机和容器
- 通过编写小而简洁的函数从Python统一控制机器 改造他们
- 合成并透明地缓存这些函数的结果
- 构建利用实时虚拟机快照和检查点的酷应用程序
- 控制非本地vm的其他类型的计算机
一直努力被故意低估 尽可能少地施加限制。 如果你看着它,认为它没有用最懒的方式做任何事, 就这样。在
目前正处于阿尔法阶段。在
挑逗者
从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用法和编写您自己的步骤的示例:
^{pr2}$放入fingertip/plugins/demo.py
,
现在可以在管道中使用:
$ fingertip demo
$ fingertip os.fedora + demo me
$ fingertip os.alpine + demo --alias=myself + ssh
安装
参考INSTALL.md。在
外壳使用
如果安装了fingertip,请将其作为fingertip
调用。在
如果您正在从签出中运行,请改用python3 <path to checkout>
或者化名。在
如果您使用的是容器化版本,请调用fingertip-containerized
(希望是最好的)。在
所以
$ fingertip os.fedora + ssh
你应该看到Fedora安装启动, 然后关机,重新启动,最后, 通过SSH提供对机器的交互式控制。在
再次调用同一个命令,它几乎什么也不做,就像
下载和安装已经缓存
在~/.cache/fingertip
中。
享受几秒钟内带来的新鲜干净的虚拟机。
感觉他们已经在你的指尖。
从控制台或Python控制它们。在
Python用法
让我们看看操纵机器的样子
(fingertip/plugins/self_test/greeting.py
):
defmake_greeting(m,greeting='Hello!'):# take a machinewithm:# start if neededm.console.sendline(f"echo '{greeting}' > .greeting")# type a commandm.console.expect_exact(m.prompt)# wait for promptreturnm# cache result@fingertip.transient# don't lock/savedefmain(m,greeting='Hello!'):# take a machinem=m.apply(make_greeting,greeting=greeting)# use cached stepwithm:# start if neededassertm('cat .greeting').out.strip()==greeting# execute command# do not save
插件是常规的Python函数,没有什么特别的。
你只需传递它们fingertip.build('fedora')
就可以了。
即使是这件事
只是.apply()
的优化提示。在
下面是这样一个函数内部可能发生的情况:
- 机器接受第一个参数 (你不知道它是否已经旋转起来了)。在
- 它会检查它,如果它想应用更多的功能,
(如果可能,通过
.apply
应用的额外步骤将被缓存/重用)。在 - 如果应用任何自定义步骤或更改,
必须首先使用
with
块(with m as m
)启动机器。 所有对机器的修改都必须在那个街区内进行, 或者冒着被默默地解开的危险!在 - 如果结果应该缓存并用于下一步,则返回计算机。
不返回一个可以而且通常会撤消您所做的所有更改。
如果不想保存结果,就不要返回m;
另外,用
@fingertip.transient
修饰函数 因此fingertip可以应用性能优化并避免锁定。 还有更多内容,请参见docs/on_transiency.md
了解详细信息。在
链中的第一个函数(或fingertip.build
中使用的函数)
不会把机器作为第一个参数。
要编写通用函数,只需使用:
deffunc(m=None):m=morfingertip.build('fedora')...
免责声明
由于我的缓存和开发的早期阶段,
经常清空你的~/.cache/fingertip/machines
,至少在每次更新之后。在
$ fingertip cleanup machines all
有时候整个~/.cache/fingertip
都得走了。在
$ fingertip cleanup everything
- 项目
标签: