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

use ansible-vault to encrypt multiple files at once

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

ansible
├── ansible.cfg
├── host_vars
│   ├── host1
│   │   ├── vars
│   │   └── vault
│   └── host2
│       ├── vars
│       └── vault
├── inventory
├── site.yaml
└── vars
    └── ansible_vars.yaml

有没有办法,使用 ansible-vault 来加密两个名为 vault 的文件,还是我必须一个一个地加密?

只是问问,因为还有更多,例如在 group_vars

的未来目录中

我知道这行得通

ansible-vault encrypt host_vars/host1/vault host_vars/host2/vault

就问有没有更优雅/快捷的解决方案

shell expansions给出了很多可能性。

这里有两个对你的情况很有趣:

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

作为一个更实际的例子,如果你在哪里通过 Ansible 处理 SE 并且想加密文件 *.stackexchange.comwhosebug.com 但不是 superuser.com 或任何其他问答有一个特定的域名,假设主机被命名为他们的 DNS 名称,你可以做

ansible-vault host_vars/{whosebug.com,*.stackexchange.com}/vault