在使用_项目和ansible时出现错误,请提供帮助
我正在尝试检查文件是否存在,并对文件进行备份在使用_项目和ansible时出现错误,请提供帮助,ansible,Ansible,我正在尝试检查文件是否存在,并对文件进行备份 tasks: - name: Check the file existence stat: path: "{{item.file}}" register: "{{item.name}}" with_items: - { name: shadow, file: /etc/shadow } - { name: sudoers, file: /etc/sudo
tasks:
- name: Check the file existence
stat:
path: "{{item.file}}"
register: "{{item.name}}"
with_items:
- { name: shadow, file: /etc/shadow }
- { name: sudoers, file: /etc/sudoers }
- name: Backing up the /etc/shadow and /etc/sudoers
shell: cp -p "{{item.file}}" "{{item.file}}".$(date +%Y%m%d)
when: item.when.stat.exists
with_items:
- { file: /etc/shadow, when: "shadow" }
- { file: /etc/sudoers, when: "sudoers" }
错误:
致命:[c369hmx]:失败!=>{
“msg”:“条件检查'item.when.stat.exists'失败。错误为:计算条件时出错(item.when.stat.exists):“ansible.parsing.yaml.objects.AnsibleUnicode对象”没有属性“stat”\n\n错误似乎出现在“/home/m6080995/temproot/fileexis.yaml”:第16行第7列,但可能\n在文件的其他位置,具体取决于语法问题。\n\n有问题的行可能是:\n\n#-name:备份/etc/shadow和/etc/sudoers\n-shell:cp-p\“{{item.file}}\”{{{item.file}}\”$(日期+%Y%m%d)\n^这里我们可能是错的,但是这个可能是缺少引号的问题。当模板表达式括号开始一个值时,总是引用它们。例如:\n\n带\u项:\n-{foo}\n\n应该写为:\n\n带\u项:\n-{foo}”{{foo}}\“\n”
谢谢你抽出时间
现在我修改了剧本,但出现了错误
- 名称:测试统计模块
主持人:全部
用户:root
收集事实:错误
任务:
- 名称:检查文件是否存在
斯达:
路径:“{item}}”
寄存器:结果
循环:
- /等/影子
- /etc/sudoers
- 设定事实: my_stat:“{{dict(result.results | json_查询('[[item.stat.exists]'))}”
- 调试: var:我的_统计
- 名称:备份/etc/shadow和/etc/sudoers
shell:cp-p“{{item}}”{{{item}}”。$(日期+%Y%m%d)
时间:my_stat[项目]| bool
循环:
- /等/影子
- /etc/sudoers ~ 以上是剧本
- 名称:检查文件是否存在
斯达:
路径:“{item}}”
寄存器:结果
循环:
tasks:
- name: Check the file existence
^ here
tasks:
- name: Check the file existence
^ here
在单个变量中注册
result
,并创建一个包含文件状态的字典
- name: Check the file existence
stat:
path: "{{ item }}"
register: result
loop:
- data/shadow
- data/sudoers
- set_fact:
my_stat: "{{ dict(result.results|json_query('[].[item,stat.exists]')) }}"
- debug:
var: my_stat
- copy:
remote_src: true
src: "{{ item }}"
dest: "{{ item ~ '.' ~ lookup('pipe', 'date +%Y%m%d') }}"
when: my_stat[item]|bool
loop:
- data/shadow
- data/sudoers
给予
那么这个条件是微不足道的
- name: Backing up the /etc/shadow and /etc/sudoers
shell: cp -p "{{ item }}" "{{ item }}".$(date +%Y%m%d)
when: my_stat[item]|bool
loop:
- data/shadow
- data/sudoers
给予
使用copy
模块而不是shell
- name: Check the file existence
stat:
path: "{{ item }}"
register: result
loop:
- data/shadow
- data/sudoers
- set_fact:
my_stat: "{{ dict(result.results|json_query('[].[item,stat.exists]')) }}"
- debug:
var: my_stat
- copy:
remote_src: true
src: "{{ item }}"
dest: "{{ item ~ '.' ~ lookup('pipe', 'date +%Y%m%d') }}"
when: my_stat[item]|bool
loop:
- data/shadow
- data/sudoers
给出了相同的结果。仍然出现错误:
错误!字段“loop”应为字符串类型,但传入的数据结构为
错误出现在“/home/m6080995/temproot/fileexis.yaml”中:第7行第9列,但可能是
根据确切的语法问题,在文件中的其他位置
令人不快的一行似乎是:
tasks:
- name: Check the file existence
^ here
tasks:
- name: Check the file existence
^ here
下面是剧本
- 名称:测试统计模块
主持人:全部
用户:root
收集事实:错误
任务:
- 名称:检查文件是否存在
斯达:
路径:“{item}}”
寄存器:结果
循环:
- /等/影子
- /etc/sudoers
- 设定事实: my_stat:“{{dict(result.results | json_查询('[[item.stat.exists]'))}”
- 调试: var:我的_统计
- 名称:备份/etc/shadow和/etc/sudoers
shell:cp-p“{{item}}”{{{item}}”。$(日期+%Y%m%d)
时间:my_stat[项目]| bool
循环:
- /等/影子
- /etc/sudoers
- 名称:检查文件是否存在
斯达:
路径:“{item}}”
寄存器:结果
循环: