Ansible - 如何循环注册

时间:2017-10-20 14:40:11

标签: ansible

我使用模块stat检查远程服务器中是否存在某些文件并将其结果注册到变量中。即配置文件我正在寻找:conf_dev.conf,conf_pred.conf,conf_pro.conf。

稍后我使用复制模块仅使用基于存储的属性的条件传输丢失的文件     variable.results。{{(ITEM)索引}}。stat.exists。 如果文件存在,则返回TRUE,否则返回FALSE。

为了正确运行由于寄存器变量是一个数组,因此有一个索引存储每个文件的结果我要求所以我不知道如何转换索引中的项目(0,1, 2,3)

有谁知道如何获取项目的索引?我试过这个(看看最后一行):

- name: Checking if common configuration files exists
  stat:
    path: "{{HOME_COMUN_CONFIG}}/{{item}}"
  with_items: "{{LIST_COMMON_CONFIGURATION_ARTIFACTS}}"
  register: store_results

- name: debug existe_app_comun
  debug:
    var: store_results

- name: Deploying missing files
  copy:
    src: "{{DIRTEMP_COMUN_CONFIG}}/{{item}}"
    dest: "{{HOME_COMUN_CONFIG}}/{{item}}"
  with_items: "{{LIST_COMMON_CONFIGURATION_ARTIFACTS}}"
  when: existe_app_comun.results.{{index(item)}}.stat.exists is defined

1 个答案:

答案 0 :(得分:0)

如果要循环注册变量,为什么要循环遍历LIST_COMMON_CONFIGURATION_ARTIFACTS

- name: Deploying missing files
  copy:
    src: "{{DIRTEMP_COMUN_CONFIG}}/{{ item.item }}"
    dest: "{{HOME_COMUN_CONFIG}}/{{ item.item }}"
  with_items: "{{ existe_app_comun.results }}"
  when: item.stat.exists

此处item是结果的元素,item.item是原始循环的元素。

P.S。如果目标文件夹中的文件未被修改且应与DIRTEMP_COMUN_CONFIG中的文件相同,则您不能使用stat + copy,而只需使用copy - 因为它&#39 ; s是幂等的,不会两次复制同一个文件。