我是ansible的新手,无论我做了什么尝试,我都无法通过python脚本调用一个简单的剧本。在
代码示例:
import subprocess
def sample(host, user):
cmd = ["ansible-playbook",
"-i {},".format(host),
"-e ansible_user={}".format(user),
"sample.yml",
"-v"]
subprocess.run(cmd)
def main():
sample("hostname,", "user")
if __name__ == '__main__':
main()
标准输出示例:
^{pr2}$脚本一直保持这样直到我终止它。在
当我从命令行$ ansible-playbook sample.yml -i "hostname," -e "user=user"
执行ansible play book时,我得到了预期的STDOUT:
PLAY [all] **********************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************
ok: [hostname]
TASK [debug] ********************************************************************************************************************************************************************************************************************************
ok: [hostname] => {
"msg": "I'm on hostname"
}
PLAY RECAP **********************************************************************************************************************************************************************************************************************************
hostname : ok=2 changed=0 unreachable=0 failed=0
我的目标是用一个主机覆盖组这就是我使用语法-i "hostname,"
的原因。在
样品样品.yml文件:
---
- hosts: all
remote_user: '{{ ansible_user }}'
any_errors_fatal: true
tasks:
- debug:
msg: "I'm on {{ ansible_host }}"
我错在哪里了?在
缺少传递命令行参数。见sys.argv。剩下的代码没问题。在
注释
1)为了测试剧本,额外的参数应该是
^{pr2}$ansible_user
2)对于
sample("hostname,", "user")
,剧本始终以"hostname"
作为"user"
运行3)可以用
-l
代替-i
,避免昏迷4)看看Ansible Runner。在
因此,唯一能使其同时适用于WSL和LinuxOS的是:
您可以简单地将其执行为:
^{pr2}$更新:如果您想同时与Python2和Python3兼容,则需要将代码最小化:
然后您可以简单地用以下方法进行测试:
对于Python3来说:
相关问题 更多 >
编程相关推荐