【问题标题】:How to run Ansible with_fileglob in alpabetical order?如何按字母顺序运行 Ansible with_fileglob?
【发布时间】:2019-12-03 17:04:17
【问题描述】:

我正在尝试构建一个系统,该系统将按字母顺序包含目录中的任务。假设我在一个目录中有以下文件:

01-task.yml
02-task.yml
..
10-task.yml

我希望 ansible 按顺序(01、02、03 等)包含这些任务。在测试 fileglob 是否正常时,我运行了以下命令:

- hosts: localhost
  tasks:
  - debug:
      msg: "File {{ item }}"
    with_fileglob: "<ansible directory>/testing/files/*"

并以随机顺序获取输出:

File <ansible directory>/testing/files/03-task.yml
File <ansible directory>/testing/files/05-task.yml
File <ansible directory>/testing/files/08-task.yml
File <ansible directory>/testing/files/09-task.yml
File <ansible directory>/testing/files/02-task.yml
File <ansible directory>/testing/files/10-task.yml
File <ansible directory>/testing/files/07-task.yml
File <ansible directory>/testing/files/01-task.yml
File <ansible directory>/testing/files/06-task.yml
File <ansible directory>/testing/files/04-task.yml

我正在努力想出如何对文件通配符进行排序。我希望避免循环中的 set_fact 任务来创建数组、另一个要排序的任务和另一个包含文件的任务。有没有我想念的更有效的方法?

编辑:感谢 Zeitounator,我有一个最终的工作代码:

- hosts: localhost
  tasks:
  - name: Test Import
    include_tasks: "{{ item }}"
    loop: "{{ query('fileglob', \"<ansible directory>/testing/files/*\")|sort }}"

每个任务文件都很简单:

- debug: msg="This Is File [1-10]"

哪个输出顺序正确!

【问题讨论】:

    标签: ansible yaml jinja2 file-globs


    【解决方案1】:

    您可以使用新的loop 语法并直接调用查找插件来实现您的要求,然后对结果进行排序:

    - hosts: localhost
      tasks:
      - debug:
          msg: "File {{ item }}"
        loop: "{{ query('fileglob', '<ansible directory>/testing/files/*') | sort }}"
    

    参考资料:

    【讨论】:

    • 完美!谢谢!
    猜你喜欢
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多