我有一个公共 Ansible 存储库,其中包含一些我需要隐藏/加密的模板文件。我不仅需要加密它们的内容,还需要加密它们的文件名。
我一直在尝试
ansible-vault
和git-crypt
,但似乎他们都没有任何选项来加密文件名。
我正在考虑在加密存档之前使用模糊名称压缩/存档存档中的文件,但这使工作流程过于复杂。
还有其他解决方案或推荐的方法吗?
例如,给定文件列表,
files: [foo, bar, baz]
创建混淆文件
- file:
state: touch
path: "files/{{ lookup('community.general.random_string', special=false) }}"
loop: "{{ files }}"
register: out
并声明 files_map 字典
files_map: "{{ dict(out.results | json_query('[].[item, dest]')) }}"
例如给出
files_map:
bar: files/roUAiHbU
baz: files/jSArEgll
foo: files/1V3M1wf7
创建内容。例如,用于测试
- copy:
dest: "{{ item.value }}"
content: |
# file {{ item.key }}
loop: "{{ files_map | dict2items }}"
并将变量 files_map 放入 group_vars/all/files_map
- copy:
dest: group_vars/all/files_map
content: |
files_map:
{{ files_map | to_nice_yaml(indent=2) | indent(2) }}
加密文件/*和group_vars/all/files_map
用于测试的完整剧本示例
shell> cat create.yml
- name: Create encrypted files
hosts: localhost
vars:
files: [foo, bar, baz]
files_map: "{{ dict(out.results | json_query('[].[item, dest]')) }}"
tasks:
- file:
state: touch
path: "files/{{ lookup('community.general.random_string', special=false) }}"
loop: "{{ files }}"
register: out
- debug:
var: files_map
- copy:
dest: "{{ item.value }}"
content: |
# file {{ item.key }}
loop: "{{ files_map | dict2items }}"
- copy:
dest: group_vars/all/files_map
content: |
files_map:
{{ files_map | to_nice_yaml(indent=2) | indent(2) }}
使用字典files_map访问文件。比如这部剧
- name: Use encrypted files
hosts: localhost
vars:
files: [foo, bar, baz]
tasks:
- debug:
msg: "{{ lookup('file', files_map[item]) }}"
loop: "{{ files }}"
给出了删节版
ok: [localhost] => (item=foo) =>
msg: '# file foo'
ok: [localhost] => (item=bar) =>
msg: '# file bar'
ok: [localhost] => (item=baz) =>
msg: '# file baz'