项目通常会在运行自动化之前生成一些客户端工件。 因此,在我们的例子中,我们希望生成一些构建文件,然后通过 Pyinfra 自动化将它们推送到远程服务器。
为了实现这一目标,我们使用:
问题是我们希望根据 CLI 中提供的参数生成构建工件:
pyinfra --data build-version=v1.0 --config prepare.py inventory.py deploy.py
我没有找到任何如何在
build-version
脚本中访问 prepare.py
的示例。
是否可以以某种方式访问 build-version
配置脚本中的 prepare.py
?
我尝试过
from pyinfra import host
,但主机对象缺少data
字段(似乎库存未初始化)。
是否可以以某种方式访问prepare.py配置脚本中的构建版本?
是的。要从 CLI 获取参数,必须在
prepare.py
脚本(或可能存在 data/group_data
的任何地方)中声明该参数,并以 host.data.argument_name
的形式访问。请参阅下面的示例:
from pyinfra import host
from pyinfra.api import deploy
# the argument you want
build_version: str = ""
# more arguments with defaults
DEFAULTS = {"foo": None, "bar": ""}
@deploy("Foobar", data_defaults=DEFAULTS)
def samplex():
print(
f"\r\n\t{'='*9} RECEIVED ARGUMENTS FROM TERMINAL -> {host.data.build_version} {'='*9}\n")
print(
f"\r\n\t{'='*9} RECEIVED EXTRAS FROM TERMINAL ->{host.data.foo} :: {host.data.bar} {'='*9}\n")
从 CLI 中,您可以将该函数调用为:
pyinfra inventory.py testbed.samplex --data build_version=v1.0 --data foo=baz --data bar=barfoo -y