subprocess.run
是 Python 标准库中的一个函数,用于执行外部命令。Ansible Playbook 是 Ansible 的一部分,用于定义一系列任务并在目标主机上执行这些任务。
当你尝试使用 subprocess.run
从 Python 运行 Ansible Playbook 并传递额外的变量时,可能会遇到变量未被正确传递的问题。
subprocess.run
执行的命令是在一个新的子进程中运行的,这意味着环境变量和命令行参数需要正确传递给子进程。Ansible Playbook 通常通过命令行参数或环境变量来接收额外的变量。
你可以使用 subprocess.run
的 env
参数来设置环境变量,或者将变量作为命令行参数传递。以下是两种方法的示例:
import subprocess
# 设置环境变量
env = {
'ANSIBLE_STDOUT_CALLBACK': 'debug',
'ANSIBLE_VAULT_PASSWORD_FILE': '/path/to/vault/password/file'
}
# 运行 Ansible Playbook
result = subprocess.run(['ansible-playbook', 'playbook.yml'], env=env)
print(result.returncode)
import subprocess
# 定义额外的变量
extra_vars = {
'my_var': 'value'
}
# 将变量转换为 JSON 格式
extra_vars_json = json.dumps(extra_vars)
# 运行 Ansible Playbook 并传递额外的变量
result = subprocess.run(['ansible-playbook', 'playbook.yml', '--extra-vars', extra_vars_json])
print(result.returncode)
这种方法适用于需要在 Python 脚本中自动化执行 Ansible Playbook 的场景,例如在 CI/CD 管道中自动部署应用程序。
通过以上方法,你可以确保在使用 subprocess.run
从 Python 运行 Ansible Playbook 时正确传递额外的变量。
领取专属 10元无门槛券
手把手带您无忧上云