如何使用glob模式将文件串联为单个值?

Naf*_*Kay 3 jinja2 ansible ansible-template

我有一个相当简单的剧本,可authorized_keys在Ansible中为给定的用户创建条目:

 - name: chat user authorized keys
   authorized_key:
     user: chat
     key: |
       {% for filename in lookup('fileglob', 'public_keys/*.pub') %}
       # {{ filename }}
       {{ lookup('file', filename ) }}
       {% endfor %}
     exclusive: true
Run Code Online (Sandbox Code Playgroud)

我在该目录中大约有六个公钥文件。我正在尝试使用换行符分隔的所有键来格式化单个文件内容。

这是Ansible docs建议的

独家

是否从authorized_keys文件中删除所有其他未指定的密钥。可以通过换行符将多个键指定在单个键字符串值中。此选项不是循环感知的,因此,如果使用with_,则它将在循环的每次迭代中独占,如果要在文件中包含多个键,则需要key如上所述将它们全部传递给一个批处理。

如何在这里使用fileglob将所有匹配的文件连接public_keys/*.pub到单个密钥中,以便我可以保持排他性并在必要时适当地删除密钥?

tec*_*raf 5

这将串联多个文件,并用换行符分隔其内容:

{% for filename in lookup('fileglob', 'public_keys/*.pub', wantlist=true) -%}
{{ lookup('file', filename) }}

{% endfor %}
Run Code Online (Sandbox Code Playgroud)

使用默认的Ansible / Jinja2设置,无论*.pub文件是否以尾行结尾,输出都将仅由一个换行符分隔。

-%} 在第一个表达式中,防止在每行的开头添加空格字符。