问题标签 [ansible-runner]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何以编程方式和同时驱动 Ansible?
我想使用 Ansible 在多个远程节点上同时执行一个简单的作业。实际的工作涉及 grepping 一些日志文件,然后在我的本地主机上对结果进行后处理(远程节点上没有可用的软件)。
命令行 ansible 工具似乎不太适合这个用例,因为它们将 ansible 生成的格式与远程执行命令的输出混合在一起。Python API 似乎应该能够做到这一点,因为它公开了未修改的输出(除了一些在此处不相关的潜在 unicode 修改)。
我想出的 Python 程序的简化版本如下所示:
在这里,sleep 10
代表实际的日志 grepping 命令——这个想法只是模拟一个不会立即完成的命令。
但是,在运行此程序时,我观察到所花费的时间似乎与我的清单中的主机数量成正比。以下是分别针对 2、5 和 9 台主机的清单的计时结果:
其他一些随机观察:
ansible all --forks=10 -i five-hosts.inventory -m command -a "sleep 10"
表现出相同的行为ansible all -c local --forks=10 -i five-hosts.inventory -m command -a "sleep 10"
似乎是同时执行的事情(但只适用于本地连接,当然)ansible all -c paramiko --forks=10 -i five-hosts.inventory -m command -a "sleep 10"
似乎同时执行的事情
也许这表明问题出在 ssh 传输上,与通过 Python API 而非命令行使用 ansible 无关。
无论我的清单中的主机数量如何,这有什么问题会阻止默认传输仅花费大约 10 秒?
python - 使用 Python API 运行 ansible-playbook
如何在 python 脚本中运行剧本?在 python 中使用 ansible 模块相当于以下内容:
我在http://docs.ansible.com/developing_api.html查看他们的文档,但他们的例子非常有限。
python - 如何在仍然使用本地文件作为我的游戏的同时以编程方式运行 ansible 游戏?
设置/约束
我想运行一个位于 /tmp/run_tests.yml 的 ansible 游戏,并且我想在 python 脚本中执行运行,而不是命令行(这些是对我正在处理的问题的一般限制)。我已经尝试了几种不同的方法,这些方法都感觉像是对 Runner 类进行逆向工程的猜测工作,但都没有成功。我希望找出这是否可能以及代码的外观。
如果我想运行一个命令,我可以简单地使用 Ansible API 的运行器:
works.py(一个简单的使用 Runner 和一个模块的例子)
doesnotwork.py (尝试使用 runner 来玩)
产生的错误
从源头来看,该错误表明缺少 shebang,并且由于我是 ansible 的新手,因此我推测传递 yml 文件不是 module_name 的合适文件。为了运行我的 python 游戏,runner 命令必须是什么样子?
python - 无法制作 dir /$HOME/.ansible/cp: [Errno 13] Permission denied: '/$HOME
我有一个 python 脚本,它使用ansible包来 ping 一些远程服务器。手动执行时(python devmanager.py)它工作正常,但是当脚本由主管管理时,它会引发以下错误:
ansible 命令非常简单:
源系统和目标系统中的相同用户。我检查了 $HOME 文件夹的权限,没有发现任何奇怪的东西。
知道发生了什么吗?它不知道翻译 $HOME 变量吗?
python - ansible runner 跑到很长
当我使用 ansible 的 python API 在远程机器(数千)上运行脚本时,代码是:
然后,我用
这需要太长时间。我想将数据结构标准输出插入 MySQL。我想要的是,如果一旦机器返回数据,只需将数据插入 MySQL,然后下一个,直到所有机器都返回。
这是一个好主意,还是有更好的方法?
python - 如何使用 Ansible 1.x API 列出主机
Ansible-playbook 有一个--list-hosts
cli 开关,它只输出受 playbook 中每个 play 影响的主机。我正在寻找一种通过 python API 访问相同信息的方法。
我现在用来测试的(非常)基本脚本是
我只是不知道要添加什么以ansible.runner.Runner()
使其输出受影响的主机并退出。
python - 在 ansible_runner python 库中,是否可以使用 runner 从剧本中检索注册变量?
我开始使用 ansible_runner python 库,我真的很喜欢它。
唯一的事情是我需要检索一个注册的变量。我就是找不到方法。
现在,在我创建了基础设施之后,我想检索在我的 create.yml 中注册的 IP
有可能吗?我查看了runner.events
,但我没有找到它。
谢谢
python - 如何以编程方式从 ansible runner 读取事件
我使用ansible runner从 django 应用程序触发 ansible-playbook,它运行良好。请参阅以下代码。
我正在尝试做的是在他的项目上发生部署时向用户提供实时更新(在该剧本中运行的每个 ansible 任务的标准输出)。
截至目前,我可以在控制台中立即看到标准输出。但我无法弄清楚如何从 ansible runner 交互式/即时读取标准输出。
我可以等待任务完成,最后读取最终的标准输出并将其显示给用户,我认为这不是更好的用户体验。我想提供用户正在发生的游戏的实时更新。类似于您在 travis-ci 构建中看到的。到目前为止,我无法从 ansible-runner 的文档中找出任何东西。
我尝试检查r.events
如下的输出
所以基本上这r[1]
是一个生成器对象,但是当循环运行时,它只从起点打印几行,我认为这是因为任务尚未完成,所以生成器也没有填充。
您有哪些建议或链接可以为我指明正确的方向?随时要求任何澄清。非常感谢您的帮助:)
ansible - 将嵌套字典作为 extra_vars 传递给 ansible-playbooks
我想将一个巨大的嵌套字典作为 anextra_vars
传递给 Ansible playbook
。我想在我的剧本中使用该字典中的值。
我想传递这个字典,因为extra_var
我想使用它的值。我无法使用jinja
模板访问字典中的单独值。
示例:如果我想在 an 中使用标记的值,ansible-playbook
我该如何访问它?
我正在使用python3.5
并且ansible 2.8.
正在使用ansible-runner
模块来运行剧本。
python - 使用 Ansible 启用 Apache 站点
我正在从 python 脚本运行剧本。我正在关注此代码
以下命令完美运行。
但是当我尝试通过从 python 脚本执行剧本来做同样的事情时。它说该网站不存在。以下是剧本。
它给出了以下错误。
致命:[token_server]:失败!=> {“ansible_facts”:{“discovered_interpreter_python”:“/usr/bin/python”},“已更改”:true,“cmd”:“a2ensite token_server”,“delta”:“0:00:00.054682”,“ end”:“2019-12-11 01:03:10.546478”,“msg”:“非零返回码”,“rc”:1,“start”:“2019-12-11 01:03:10.491796” ,“stderr”:“错误:站点 token_server 不存在!”,“stderr_lines”:[“错误:站点 token_server 不存在!”],“stdout”:“”,“stdout_lines”:[]}
更新 我尝试运行这个剧本。该剧本显示“/etc/apache2/sites-available”目录的内容。
它显示了我本地的 /etc/apache2/sites-available 目录的内容。这意味着该命令实际上是在我的本地而不是远程服务器上执行的。
这是我的“主机清单文件”。