我花了半天时间尝试做这个剧本。我使用 stat 模块检查文件的 sha1sum,如果它不等于第二个文件,它应该替换正确的文件。但是在注册一些变量时,输出显示变量未定义我做错了什么?
---
- hosts: all
remote_user: root
tasks:
- name: get sum of file
stat:
path: /home/roundcube/config.php
checksum_algorithm: sha1
get_checksum: yes
register: sum
stat:
path: /home/archive/config.php
checksum_algorithm: sha1
get_checksum: yes
register: sum2
- name: result
ansible.builtin.copy:
src: /home/archive/config.php
dest: /home/roundcube/config.php
when: sum.stat.checksum != sum2.stat.checksum
答案1
您缺少将第二个统计数据定义为任务的连字符。
---
- hosts: all
remote_user: root
tasks:
- name: get sum of file
stat:
path: /home/roundcube/config.php
checksum_algorithm: sha1
get_checksum: yes
register: sum
- stat:
path: /home/archive/config.php
checksum_algorithm: sha1
get_checksum: yes
register: sum2
- name: result
ansible.builtin.copy:
src: /home/archive/config.php
dest: /home/roundcube/config.php
remote_src: yes
when: sum.stat.checksum != sum2.stat.checksum
请注意,复制任务中还缺少remote_src: yes
参数。如果没有它,Ansible 会假定文件位于本地计算机上,而不是远程主机上。