当前位置: 首页 > 面试题库 >

Ansible:如何通知python脚本有关任务的结果?

颛孙嘉玉
2023-03-14
问题内容

我有一个简单的剧本,用于从共享中获取文件并将文件复制到远程Windows客户端:

- name: Test chocolatey module
  hosts: win_clones
  vars_files:
  - /fullpath/hosts_vars
  tasks:
    - name: Fetching and copying the file on the client ...
      win_get_url:
        url: 'ftp://172.20.0.5/choco-repo/{{ item }}'
        dest: 'C:\Test\{{ item }}'
      with_items: "{{ clients[machine].to_install }}"

我使用子进程从python脚本运行此剧本:

for i in clients:
    machine = "machine="
    limit = "--limit="
    an2 = subprocess.Popen(["ansible-playbook", "fetch.yml","-e", machine+i, limit+i], cwd='/home/diego/work/gitl_repo/ansible-software-deployment')
    an2.wait()

当任务由于某种原因而失败时,我可以在终端中看到:

TASK [Fetching and copying the file on the client ...] *************************
failed: [cl1] (item=banana) => {"failed": true, "item": "banana", "msg": "Error downloading ftp://172.20.0.5/.....

是否可以将此信息传递给我的python脚本?换句话说,我如何告诉python某个任务的结果,即它是否失败或是否通过。谢谢


问题答案:

您可以stdout_callback = json通过配置文件或env变量进行设置ANSIBLE_STDOUT_CALLBACK
ansible-playbook将打印出具有执行结果的巨大json文件到stdout。



 类似资料:
  • 本文向大家介绍Python中的 ansible 动态Inventory 脚本,包括了Python中的 ansible 动态Inventory 脚本的使用技巧和注意事项,需要的朋友参考一下 1.Ansible Inventory  介绍; Ansible Inventory 是包含静态 Inventory 和动态 Inventory 两部分的,静态 Inventory 指的是在文件中指定的主机和组,

  • YML ansible的脚本语言,yaml格式。请参考YAML语法结构章节 别人的Playbook 能够学会快速用别人的成果,高效地分享自己的成果,才是好码农,才是能早下班的好码农。在你动手从头开始写一个Playbook之前,不如先参考一下别人的成果吧。 官方例子 Ansible官方提供了一些比较常用的、经过测试的Playbook例子: https://github.com/ansible/ans

  • 不能站在巨人的肩膀上的编程语言不是好语言,支持重用机制会节省调研重复的工作上浪费大量的时间,当然也会提高可维护性。 Playbook的支持两种重用机制,一种是简单的直接重新利用静态的Playbook脚本,例外一种是类似于编程语言中函数的机制。 include语句 - 重用静态的Playbook脚本,使用起来简单、直接。 role语言 - Playbook的“函数机制”,使用方法稍复杂、功能强大。是

  • 任务通知是8.2.0版本新增加的功能。每个任务都有一个32bit的"通知值"(notification value)。RTOS的任务通知是一个事件,可以直接发送到一个任务,并且将该任务从阻塞态恢复。是否更新接收任务的任务通知值是可选的。 任务通知可以通过以下几种方式更新接收任务的通知值: 直接设置而不用覆写接收任务的通知值 覆写接收任务的通知值 设置接收任务通知值的一个或多个bit位 增加接收任务

  • 这是我第一次安排python脚本。我的目标是安排我的python脚本每10分钟运行一次。 缅因派 我在windows任务计划程序中创建了一个任务,但我的脚本没有运行(我知道脚本正在运行,因为我可以手动运行它)。我试图解决这个问题已经有好几个小时了,但一点运气都没有。 首先选择python路径,然后选择项目的文件路径并选择。我想跑步。例如,我选择每10分钟触发一次。 完成上述步骤后,什么都不会发生。

  • 在本节,我们主要介绍几种最常用的变量,在后面的章节中,我们会单独介绍一些复杂情景下变量的使用和覆盖原则。 在Playbook中常用的几种变量包含一下几种情况: 在Playbook中用户自定义的变量 用户无需自定义,Ansible会在执行Playbook之前去全程主机上搜集的关于远程节点系统信息的变量 在文件模版中,可以使用里面可以直接使用上述两种变量 把task的运行结果作为一个变量来使用,这个变