使用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

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

推荐PyPI第三方库


热门话题
java是从此类字符串中提取数据的最佳方法   filenotfoundexception Java FileOutputStream Windows/Linux   java在SQLite数据库Android SDK中搜索特定字符串   java使用键值访问jsp中Map<Long,Map<String,Object>>的内容   java奇怪的HTMLeditor工具包问题   在java中使用数组只计算字母   每个应用程序都可以有自己独立的Java SDK吗   java如何将jasper报告生成的PDF文件保存在一个项目文件夹中   java BigDecimal包装器:静态字段为零   解码Base64图像时出现java IllegalArgumentException(非法的Base64字符)   将int转换为字节在Java和Actionscript中产生不同的结果   java什么使不可变对象在没有安全发布技术的情况下发布?   java将字节数据写入目录   一个计算器中有多个操作的java问题   面向对象Java重写是如何工作的   带hibernate的java ClassCastException   指向最后一个对象的java对象列表   java单元测试spring项目中的Get请求