首页 文章

Ansible:使用Ansible使用Diff命令

提问于
浏览
3

我正在尝试一个简单的任务,找出两个文件之间的差异,并将其存储在记事本中 . 我不能用命令和shell来做 . 请说明我错在哪里 -


  • hosts:myserver任务:

  • name:获取差异命令:diff hosts.new hosts.mod register:diff

  • debug:var = diff.cmd

错误 - 致命:[zlp12037]:失败! => {“已更改”:true,“cmd”:[“diff”,“hosts.new”,“hosts.mod”],“delta”:“0:00:00.003102”,“end”:“2017- 03-29 10:17:34.448063“,”失败“:真实,”rc“:1,”开始“:”2017-03-29 10:17:34.444961“,”stderr“:”“,”stdout“:

2 回答

  • 5

    我不太确定你的输入游戏的格式是什么样的 . 但以下应该是一个解决方案:

    - name: "Get difference from two files"
      command: diff filea fileb
      args:
        chdir: "/home/user/"
      failed_when: "diff.rc > 1"
      register: diff
    - name: debug output
      debug: msg="{{ diff.stdout }}"
    

    一些解释:

    • 如果diff命令失败,则返回码> 1.我们通过"failed_when"对此进行评估 .

    • 要获取命令的输出,我们打印".stdout"元素 .

    • 为了确保我们在文件所在的文件夹中,我们使用"chdir" .

  • 1

    我会将hosts.new或hosts.mod移动到ansible控制机器 .

    使用src作为hosts.new运行复制模块,使用--check和--diff运行dest作为hosts.mod . 我发现这种方法对于发现大型企业中文件的差异非常有用 .

    跑:

    ansible all -m copy -a "src=hosts.new dest=/tmp/hosts.mod" --check --diff -i hosts
    

    输出:

    --- before: /tmp/hosts.mod
    +++ after: /home/ansible/hosts.new
    @@ -1,5 +1,5 @@
     host1
    +host2
     host3
     host4
    -host6
    -host99
    +host5
    
    test10 | SUCCESS => {
        "changed": true, 
        "failed": false
    }
    

相关问题