如何将字典包含到 k8s_raw 数据字段中

How to include a dictionary into a k8s_raw data field

我正在编写一个 Ansible-playbook 以将秘密对象列表插入 Kubernetes。 我正在使用 k8s_raw 语法,我想从 group_vars 文件。 我找不到将机密列表导入我的数据字段的正确语法。

playbook.yml

- hosts: localhost
  tasks:
  - name: Create a Secret object
    k8s_raw:
      state: present
      definition:
        apiVersion: v1
        kind: Secret
        data:
          "{{ secrets }}"
          SKRT: "c2trcnIK"
        metadata:
          name: "test"
          namespace: "namespace-test"
        type: Opaqueroot
  vars_files:
    - "varfile.yml"

varfile.yml

secrets:
  TAMAGOTCHI_CODE: "MTIzNAo="
  FRIDGE_PIN: "MTIzNAo="

首先,当您尝试上述操作时,它实际上说了什么?这将有助于获得您尝试的结果。

只是猜测,但请尝试将 var_files 移动到您尝试使用变量的位置之前。另外,确保你的缩进完全正确。

- hosts: localhost
  vars_files:
    - /varfile.yml

  tasks:
  - name: Create a Secret object
    k8s_raw:
      state: present
      definition:
        apiVersion: v1
        kind: Secret
        data:
          "{{ secrets }}"
        metadata:
          name: "test"
          namespace: "namespace-test"
        type: Opaqueroot

Reference

旁注:我会在不尝试执行任务的情况下立即调试它。删除你的主要任务并在尝试使用 vars_files 后,尝试使用 debug 播放直接打印秘密。这将允许您微调语法并继续摆弄它直到正确为止,而不必 运行 并等待接下来的更复杂的播放。 Reference.

To import this list from a group_vars file

本地主机放入一个组。例如一组 test

> cat hosts
test:
  hosts:
    localhost:

varfile.yml放入group_vars/test目录

$ tree group_vars
group_vars/
├── test
    └── varfile.yml

然后运行下面的剧本

$ cat test.yml
- hosts: test
  tasks:
    - debug:
        var: secrets.TAMAGOTCHI_COD

$ ansible-playbook -i hosts test.yml

给出:

PLAY [test] ***********************************
TASK [debug] **********************************
ok: [localhost] => {
    "secrets.TAMAGOTCHI_CODE": "MTIzNAo="
}
PLAY RECAP *************************************
localhost: ok=1    changed=0    unreachable=0    failed=0

问题出在 SKRT:"c2trcnIK" 字段就在 下方“{{秘密}}”行。我删除了它,现在可以使用了!谢谢大家