如何将自定义参数传递到配置文件(用于生成客户端资产)?

问题描述 投票:0回答:1

项目通常会在运行自动化之前生成一些客户端工件。 因此,在我们的例子中,我们希望生成一些构建文件,然后通过 Pyinfra 自动化将它们推送到远程服务器。

为了实现这一目标,我们使用:

  • 配置脚本 — 该文件专门针对本地计算机执行,并且仅执行一次,并且文档指出它是生成客户端工件的好地方;
  • 自动化脚本 — 为清单中的每个主机执行的通用 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
字段(似乎库存未初始化)。

python pyinfra
1个回答
0
投票

是否可以以某种方式访问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
© www.soinside.com 2019 - 2024. All rights reserved.