加密 Ansible 存储库中的文件(包括其文件名)

问题描述 投票:0回答:1

我有一个公共 Ansible 存储库,其中包含一些我需要隐藏/加密的模板文件。我不仅需要加密它们的内容,还需要加密它们的文件名。

我一直在尝试

ansible-vault
git-crypt
,但似乎他们都没有任何选项来加密文件名。

我正在考虑在加密存档之前使用模糊名称压缩/存档存档中的文件,但这使工作流程过于复杂。

还有其他解决方案或推荐的方法吗?

ansible ansible-vault git-crypt
1个回答
0
投票

例如,给定文件列表,

  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'
© www.soinside.com 2019 - 2024. All rights reserved.