Ansible: Use of Diff command using Ansible

你说的曾经没有我的故事 提交于 2021-02-07 14:23:18

问题


I am trying to one simple task which is find out the difference between the two files and store it in notepad. I am not able to do it with command as well as shell. Please suggest where i am going wrong-

---
- hosts: myserver
  tasks:
   - name: get the difference
     command: diff hosts.new hosts.mod
     register: diff
   - debug: var=diff.cmd

Error -

fatal: [zlp12037]: FAILED! => {"changed": true, "cmd": ["diff", "hosts.new", "hosts.mod"], "delta": "0:00:00.003102", "end": "2017-03-29 10:17:34.448063", "failed": true, "rc": 1, "start": "2017-03-29 10:17:34.444961", "stderr": "", "stdout":

回答1:


I'm not quite sure what your input play looks like with your formatting. But the following should be a solution:

- 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 }}"

Some explanation:

  • If something fails with the diff command, the return code is > 1. We evaluate this by the "failed_when".
  • To get the output of the command, we print the ".stdout" element.
  • To make sure we're in the folder where the files are, we use "chdir".



回答2:


I would move the hosts.new or hosts.mod to the ansible control machine.

Run the copy module with the src as hosts.new and the dest as hosts.mod with --check and --diff. I find this method most useful to spot differences in files across a large enterprise.

Run:

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

Output:

--- 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
}


来源:https://stackoverflow.com/questions/43096404/ansible-use-of-diff-command-using-ansible

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!