基于Python Asyncio的异步配置管理
项目描述
Okonf
基于Python Asyncio的异步配置管理系统。
Okonf管理POSIX兼容系统的状态和配置。您可以使用它来配置您的个人电脑、服务器、路由器等。
Okonf推崇一种 声明式语法,其目标是确保目标主机的给定状态,而不是在其上运行命令。
Okonf强调作为库在您自己的应用程序中 易于使用,并且 易于通过可重用组件扩展。
Okonf还通过异步运行来关注卓越的性能。
灵感来自: pyinfra, Ansible, SaltStack。
状态
Okonf仍处于早期开发阶段,其API可能发生变化。
欢迎提出建议和贡献。
作为库的使用
from okonf.connectors import LocalHost
from okonf.facts.files import FileContent
from okonf.utils import run
host = LocalHost()
run(
FileContent('/tmp/some_file', b'Some Content').apply(host),
)
更高级的使用
import asyncio
from okonf.connectors.ssh import SSHHost
from okonf import Collection
from okonf.facts.files import FileContent
from okonf.facts.git import GitClone
host = SSHHost(host='127.0.0.1', username='myuser')
facts = Collection([
FileContent('/tmp/some_file', b'Some Content'),
GitClone('git@github.com:okeso/Okonf.git', '/opt/Okonf'),
])
asyncio.run(Collection.apply(host))
作为工具的使用
在Python文件(此处命名为infra.py
)中声明您的基础设施,包含名为hosts
和configs
的两个字典。例如,我们希望在系统中安装vim
、tree
和htop
。
from okonf.connectors import LocalHost
from okonf.facts.apt import AptPresent
hosts = {
'laptop': LocalHost(),
}
configs = {
'laptop': Sequence(
AptPresent(pkg) for pkg in
['vim', 'htop', 'tree'']
),
}
如果您通过pip
安装了Okonf,然后您应该能够使用以下方法检查当前状态:
okonf check infra.py laptop
并使用以下方法应用您的配置:
okonf apply infra.py laptop
掌握了基础知识后,您可以将连接器替换为SSHHost
,并查看您想要使用的其他事实。
集合
Okonf提供了两种类型的集合,将任务分组到新的高级任务中:Collection
和Sequence
。
事实的Collection
将并行、异步地应用每个事实。
事实的Sequence
将以顺序方式,在先前的每个事实之后应用每个事实。
在下面的示例中,两个事实帮助提供共同的功能,但它们之间不依赖,可以并行应用。
vim_configured = Collection([
AptPresent('vim'),
FileCopy('~/.vimrc', 'vimrc'),
])
然而,在另一个示例中,每个事实都依赖于前一个事实,因此它们是顺序应用的。
ipython_virtualenv = Sequence([
AptPresent('virtualenv'),
DirectoryPresent('~/.virtualenvs/'),
Virtualenv('~/.virtualenvs/venv-ipython'),
PipInstalled(['itpython'], '~/.virtualenvs/venv-ipython'),
])
创建事实
下面的示例显示了确保文件存在于磁盘上的事实的定义。如果文件存在,则enquire
方法返回,如果文件不存在,则调用enforce
方法,在主机上运行shell命令以创建文件。
from okonf.facts.abstract import Fact
class FilePresent(Fact):
"""Ensure that a file is present"""
def __init__(self, remote_path: str) -> None:
self.remote_path = remote_path
async def enquire(self, host):
command = "ls -d {}".format(self.remote_path)
return await host.check_output(command, check=False) != ''
async def enforce(self, host):
await host.check_output("touch {}".format(self.remote_path))
return True
许可
Okonf采用Apache License 2.0许可。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
Okonf-0.2.2.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 449c8197028069e0fd68ca5dc9e097e5b7e4fe91da54a5ab7f1bd34c705ac778 |
|
MD5 | 3bb1b9ae31f5b4274ba4f09f4ba1734c |
|
BLAKE2b-256 | 044a84baf54b1620d3117da1f1175470d4877405a387b8308b4810c1dde20d1d |
Okonf-0.2.2-py3-none-any.whl的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 58ef2bce611bf3c20f5d488011b9d8ec4f74b4ab63c95d90e8c9e2c1606e8bd0 |
|
MD5 | f13e64979cdca2f53cad1656ec72f6ae |
|
BLAKE2b-256 | 3fecc87021e0061e33e36857ca34d81f6f7eea8202be6e6ff9f16fbe1a783635 |