如何将文件与glob模式连接为单个值?

时间:2017-01-25 03:23:56

标签: ansible jinja2 ansible-template

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

 - 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

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

这是what is suggested by the Ansible docs

  

独家

     

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

如何使用fileglob将匹配public_keys/*.pub的所有文件连接到一个密钥中,以便在必要时保持排他性并正确删除密钥?

1 个答案:

答案 0 :(得分:4)

这将连接多个文件,用换行符分隔它们的内容:

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

{% endfor %}

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

第一个表达式中的

-%}可防止在每行的开头添加空格字符。