使用 ansible-vault 一次加密多个文件

pka*_*mol 5 security encryption ansible ansible-vault

我使用以下结构将我的内容host_vars分为明文和加密

\n
ansible\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ansible.cfg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 host_vars\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 host1\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 vars\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vault\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 host2\n\xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 vars\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vault\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 inventory\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 site.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vars\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ansible_vars.yaml\n
Run Code Online (Sandbox Code Playgroud)\n

有没有一种方法,ansible-vault可以用来加密两个指定的文件vault,还是我必须一一加密它们?

\n

只是问一下,因为还会有更多内容,例如在未来的目录group_vars中等。

\n

我知道这有效

\n
ansible-vault encrypt host_vars/host1/vault host_vars/host2/vault\n
Run Code Online (Sandbox Code Playgroud)\n

只是询问是否有更优雅/快速的解决方案

\n

β.ε*_*.βε 3

shell 扩展提供了很多可能性。

以下是您的案例中可能会感兴趣的两个内容:

  • 星号*扩展,用作通配符。这意味着它host_vars/*/vault会匹配两者host_vars/host1/vault,但host_vars/host2/vault将来也会匹配任何其他。
  • 请注意,如果将来您有一个更复杂的文件夹层次结构,host_vars/*/vault则只会匹配一个文件夹级别(例如,它不会匹配host_vars/level1/host1/vault),但可以使用双星号(实际上名为globstar)来实现多个文件夹级别:host_vars/**/vault, 将匹配 host_vars/host1/vault以及host_vars/level1/host1/vault
  • 另一方面,大括号扩展提供了更细粒度的可能性集,例如,如果我在发行版(如 、 和 )之后有主机名,RedHat[1..5]可以Ubuntu[1..5]通过Debian[1..5]仅定位 Debian 和 RedHat 发行版host_vars/{Ubuntu*,RedHat*}/vault
    或者仅使用 来定位其中的前三个host_vars/{Ubuntu{1..3},RedHat{1..3}}/vault,或者通过host_vars/*{1..3}/vault

作为一个更实际的例子,如果您通过 Ansible 处理 SE,并且想要加密文件,*.stackexchange.comstackoverflow.com不加密superuser.com或任何其他具有特定域名的问答,假设主机被命名为其 DNS 名称,您可以这样做

ansible-vault host_vars/{stackoverflow.com,*.stackexchange.com}/vault
Run Code Online (Sandbox Code Playgroud)