在Ansible中基于扩展名运行不同的脚本

时间:2019-06-04 05:39:18

标签: ansible

我有一个有趣的剧本来运行不同的脚本。我需要基于扩展名更改可执行文件。这是我的剧本:

 - name: run nodejs script
   command: node "{{item}}" arg1
   loop: "{{ lookup('fileglob', '{{path}}/{{deploy_version}}/*.js', wantlist=True) }}"

 - name: running python script
   command: python "{{item}}" arg1
   loop: "{{ lookup('fileglob', '{{path}}/{{deploy_version}}/*.py, wantlist=True) }}"

由于有运行脚本的命令,因此我需要使用“ if,else,statement”。但是我找不到基于扩展名按字母顺序运行脚本的方法。我该如何实现?

1 个答案:

答案 0 :(得分:1)

splitext过滤器将从文件名中提取扩展名,然后可将其用于在dict中查找命令,该文件将文件扩展名映射到命令,然后将其应用于所有您希望的glob,如果我正确理解的话,无论它匹配哪个fileglob,您都希望按字母顺序运行。

- name: run the scripts
  command: '{{ cmd_by_ext[ item|splitext|last ] }} {{ item }} arg1'
  loop: '{{ (js_files + py_files) | sort }}'
  vars:
    script_dir: '{{ path + "/" + deploy_version }}'
    js_files: '{{ lookup("fileglob", script_dir+"*/.js", wantlist=True) }}'
    py_files: '{{ lookup("fileglob", script_dir+"*/.py", wantlist=True) }}'
    cmd_by_ext:
      '.js': 'node'
      '.py': 'python'