【问题标题】:How to get the current file name in ansible?如何在ansible中获取当前文件名?
【发布时间】:2020-01-30 07:44:13
【问题描述】:

我有一个 ansible 脚本。它使用包含模块调用其他脚本。

我需要在变量中获取当前文件名。

例如:

 - include: Run-Config889.yml

在 Run-Config889.yml 中,我需要在一个变量中获取文件名 Run-Config889.yml。

是否有任何内置变量来查找当前文件名?如果有,那是什么?

【问题讨论】:

  • Idk 关于一个简单明了的方法。我想您可以改用角色,因为它们确实为您提供了一个名为“role_name”的特殊变量。如果您不想使用角色,可以使用的解决方法是在变量中定义 .yml 的名称。将名称保存在本地主机的文件中,然后执行“包含”。因此,您包含的剧本,然后可以从本地主机中的文件中读取名称。这对你有意义吗?
  • @SebastiánGreco 目前我正在使用变量来存储文件名并使用它。但是在某些地方我仍然需要文件名。

标签: ansible ansible-inventory ansible-facts


【解决方案1】:

您可以使用以下命令获取当前 playbook 文件名:

---
- hosts: 127.0.0.1
  connection: local
  gather_facts: no

  vars:
    playbook_absoluteName: "{{ (lookup('file', '/proc/self/cmdline') | regex_replace('\u0000',' ')).split() | select('match','^.*[.]ya?ml$') | list | first }}"
    playbook_baseName: "{{ playbook_absoluteName | basename }}"

  tasks:
  - debug:
      var: item
    loop:
      - "{{ playbook_absoluteName }}"
      - "{{ playbook_baseName }}"
...

这是受到 this blog article 的启发,并进行了细微/化妆品改进。

【讨论】:

    【解决方案2】:

    不知道任何内置变量,但我能想到 2 个选项。

    选项 1

    您可以像这样将变量传递给包含的文件:

    main.yml

    ---
    
    - include: Run-Config889.yml file_name_variable="Run-Config889.yml"
    

    选项 2

    在 play 使用的任何 vars 文件中设置变量。 play 中所有定义的变量都被后续的 include 语句继承。

    sample-vars.yml

    ---
    
    file_name_variable: "Run-Config889.yml"
    

    使用变量。

    Run-Config889.yml

    ---
    
    - name: Display variable
      debug:
        msg: File name {{ file_name_variable }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-16
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 2014-03-15
      相关资源
      最近更新 更多