В настоящее время я пытаюсь определить кучу файлов, а затем записать различия между файлами, которые были изменены. Я начал со ссылки на этот пост: Сравните два файла с Ansible и пропустите последнюю часть задачи следующим образом:
- name: Get cksum of the first file
stat:
path: "baselinedFiles/{{ inventory_hostname }}/file"
checksum_algorithm: sha1
get_checksum: yes
register: myfristfile
delegate_to: localhost
- name: Current SHA1 p1
set_fact:
mf1sha1: "{{ myfristfile.stat.checksum }}"
delegate_to: localhost
- name: Get cksum of second file
stat:
path: "tmpFiles/{{ inventory_hostname }}/file"
checksum_algorithm: sha1
get_checksum: yes
register: mysecondfile
delegate_to: localhost
- name: Current SHA1 p2
set_fact:
mf2sha1: "{{ mysecondfile.stat.checksum }}"
delegate_to: localhost
Приведенное выше просто получает SHA1, поэтому мы можем легко сравнить их в будущем, когда я записываю diff в файлы (я хочу записать diff только в случае, если файлы разные). Это работает как задумано.
Далее я проследил разницу в двух файлах, используя ANSIBLE модуль , где я использую check_mode
и diff
, чтобы показать различия между проверяемыми файлами.
- name: "Show diff if the hashes are different"
copy:
src: "baselinedFiles/{{ inventory_hostname }}/file"
dest: "tmpFiles/{{ inventory_hostname }}/file"
check_mode: yes
diff: yes
register: diffOutput
delegate_to: localhost
Это работает и дает вывод примерно так:
TASK [diffNlog : Show diff if the hashes are different] *******************************************************************************************************************
ok: [a -> localhost]
ok: [b -> localhost]
ok: [c -> localhost]
ok: [d -> localhost]
--- before: tmpFiles/e/file
+++ after: /home/me/someDir/baselinedFiles/e/file
@@ -78,5 +78,4 @@
#
# End of: blah
#
-#######################
-#THIS IS A CHANGE THAT MIGHT HAVE BEEN MADE
+#######################
\ No newline at end of file
changed: [e -> localhost]
ok: [f -> localhost]
Это хорошо, так как показывает, что произошли изменения и что это было, что я и хочу. К сожалению, проблемы возникают на следующем шаге, где я буквально просто пытаюсь получить вышеприведенный вывод, который я вставил, и поместить его в файл, чтобы его можно было легко просмотреть. Я пытаюсь сделать это так:
- local_action: shell echo "{{ diffOutput }}" > logs/mytestlog
when: mf1sha1 != mf2sha1
delegate_to: localhost
become: true
become_user: me
Здесь я сталкиваюсь с проблемами логики. Он завершается нормально, но выбрасывает ENTIRETY файлов 1 и 2 в файл журнала, а затем показывает изменения. Это слишком много ненужного вывода, который я не хочу. Затем я попробовал это решение: Ansible выход оболочки Playbook , где я использую отладку, но, к сожалению, я продолжаю получать эту ошибку:
"The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'stdout_lines'
так как кажется, что переменная, которую я сохранил из вывода diff
, не имеет атрибута stdout_lines
. Как я уже говорил ранее, я хотел бы просто записать вывод, который ANSIBLE отображает на вашей консоли, пока он запускает вашу книгу воспроизведения, но я застрял здесь.
Любая помощь очень ценится.
Спасибо