在使用_项目和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 ~ 以上是剧本
错误:

错误!字段“loop”应为字符串类型,但传入的数据结构为

错误出现在“/home/m6080995/temproot/fileexis.yaml”中:第7行第9列,但可能是 根据确切的语法问题,在文件中的其他位置

令人不快的一行似乎是:

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

请检查问题的格式。