1 、封装 ansible playbook api 后,直接脚本调用,可以执行 yaml 任务。
https://i.imgur.com/cgCNruu.png
2 、在 django celery 进行异步任务时候,无法执行 yaml 任务
task 内容
https://i.imgur.com/MBi3goA.png
在 views.py 进行 task 调用
https://i.imgur.com/1lj6OUW.png
执行结果,为空
https://i.imgur.com/7k27yRN.png
现在无法定位到哪里问题,望各位大老指点。
1
defunct9 2020-04-26 16:40:37 +08:00
开 ssh,让我上去看看
话说回来,貌似我都用 awx |
4
defunct9 2020-04-26 20:36:42 +08:00 via iPhone
@fanne AWX 是一个开源的 web 应用,并为 ansible 的任务引擎提供用户接口和 REST API 。它是 ansible Tower 的开源版本。
|
5
honmaple 2020-04-26 21:25:02 +08:00
@fanne ansible 使用的是多进程模式,celery 里执行 ansible 需要设置 PYTHONOPTIMIZE=1,以前有遇到过,不知道是不是一样的问题
|
6
zhoudaiyu 2020-04-26 21:32:30 +08:00
|
10
helloZwq 2020-04-27 08:47:20 +08:00
|
11
zhoudaiyu 2020-04-27 09:46:36 +08:00 via iPhone
@helloZwq 好像是 celery 用的 multiprocess 和 ansible 里的一些东西有啥冲突
|
12
fanne OP |
14
wampyl 2020-04-27 10:34:00 +08:00
问大家一个问题,如果想让 ansible 按照顺序执行任务(根据上一个任务的返回值来判断是否执行下一个任务)的话,是不是可以用 celery chain 啊
|
15
fanne OP @honmaple #5
@zhoudaiyu #6 另外请教大佬们一个问题,ansible 2.8 的 playbook api 关于 extra_vars 我按照 2.7 的方式传递, ```bash def playbookrun(self,playbook_path,extra_vars=None): context.CLIARGS = ImmutableDict(self.options) if extra_vars:self.variable_manager.extra_vars = extra_vars ##<<===在这里传入 pbex = PlaybookExecutor(playbooks=playbook_path, inventory=self.inventory, variable_manager=self.variable_manager, loader=self.loader, passwords=self.passwords) pbex._tqm._stdout_callback = self.pb_results_callback pbex.run() ``` 提示错误,找了一圈,没看到怎么传的 ``` if extra_vars:self.variable_manager.extra_vars = extra_vars AttributeError: can't set attribute ``` |
16
zhoudaiyu 2020-04-27 10:58:40 +08:00
@fanne 我用的 2.6 版本的 ansible
from ansible.inventory.manager import InventoryManager variable_manager = VariableManager(loader=loader, inventory=inventory) variable_manager.extra_vars = self._evars #这里传入其他参数 |
17
fanne OP @zhoudaiyu #16
ansible 2.8 的 self.variable_manager._extra_vars = extra_vars 这样 OK 了 ansible 2.4 2.6 2.7 2.8,每一个版本都在改 api,也是醉了 |
18
fanne OP |