首页 > 解决方案 > 如果文件存在,请不要运行 ansible 命令

问题描述

我正在尝试制作一个仅在文件不存在时才运行命令的剧本。我的挑战是文件名的一部分是随机创建的。我试过类似的东西:

- name: Generate file
  command: <command> "{{ item.name }}"
  chdir: "{{ target_zone_dir }}"
  creates:
    - "{{ target_zone_dir }}/K{{ item.name }}.+[0-9][0-9][0-9]+[0-9][0-9][0-9][0-9][0-9].key"
    - "{{ target_zone_dir }}/K{{ item.name }}.+[0-9][0-9][0-9]+[0-9][0-9][0-9][0-9][0-9].private"
  check_mode: no
  with_items:
    - "{{ target_zone_domains }}"

但是我的文件总是生成的,即使存在其他文件。

标签: ansible

解决方案


CiroRa 所说的大部分是正确的,不同之处在于它不需要像零文件那样黑白分明。

- command: /bin/ls -1
  args:
    chdir: "{{ target_zone_dir }}"
  register: target_files
- when: not target_files.stdout is search("K"+item.name+".+[0-9]*.(key|private)")
  with_items: "{{ target_zone_domains }}"

我敢肯定有更多“ansible-y”的方式来完成第一项任务,但你明白了


推荐阅读