在ansible中注册变量并在when中使用自定义筛选器

2024-09-30 12:13:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我只想在特定的目录不存在时提取文件。我写了下面的代码来实现这一点。在

- name: check if program already exists.
  shell: ls /tomcats|grep akash
  register: programexists
- name: extract archive
  command: chdir=/tomcats/ /bin/tar xvf  program.tar.gz
  when: programexists.stdout == {{ program }}

但是当“akash”目录不作为程序出口.stdout在这种情况下会是空的。在

我想知道我是否可以在filter_plugins中创建一个自定义过滤器来检查目录是否存在,并在playbook中使用相同的过滤器

自定义筛选器的代码

^{pr2}$

并使用过滤器,如

- name: extract archive
  command: chdir=/tomcats/ /bin/tar xvf  program.tar.gz
  when: {{ 'akash'|directory_exists }}

我可能对ansible期望过高,但如果有人能帮助我…我会非常感激的。在


Tags: 代码name目录过滤器binexistsextracttar
3条回答

一个定制的过滤器将是多余的。有一个ignore_errors参数。在

- name: check if program already exists.
  shell: ls /tomcats|grep akash
  register: programexists
  ignore_errors: True
  always_run: True
  changed_when: False

- name: extract archive
  command: chdir=/tomcats/ /bin/tar xvf  program.tar.gz
  when: programexists.stdout == {{ program }}

使用programexists.rc == 0作为条件可能更好,在这种情况下,命令可以简单地变成ls /tomcats/akash。在

它应该更简单。command模块有一个creates参数,它只是一个过滤器,只有在给creates的路径不存在时才会执行命令。因此,如果您的命令将创建/tomcats/akash,那么应该可以:

- name: extract archive
  command: chdir=/tomcats/ /bin/tar xvf  program.tar.gz
  creates: /tomcats/akash

如果您想实现最初的目标,有一个“unarchive”模块(http://docs.ansible.com/ansible/unarchive_module.html)。你可以这样使用它:

- name: unarchive if it does not exist
  unarchive: >
     src=program.tar.gz
     dest=/tomcats/
     creates=/tomcats/

最后一个参数将检查目录是否存在,如果存在,则跳过该命令。在

相关问题 更多 >

    热门问题