Почему Ansible Объединить фильтр не удается при использовании многострочного? - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть k8s PV C yaml, в котором есть несколько pv c. Ниже приведен образец с парой PV C. (Мой оригинальный файл pv c содержит 10 PV C)

---
# BEGIN ANSIBLE MANAGED BLOCK
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    csi.myorg.com/description: This is my custom description for CSI
    csi.myorg.com/limitIops: '-1'
    csi.myorg.com/performancePolicy: default
  labels:
    ansible: csitest-2020-02-19-22-46-1582181166
    pvcRef: csi-pvc-ansibles-1
  name: myorg-pvc-2020-02-19-22-46-1582181166
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: myorg-storageclass-2020-02-19-22-46-1582181161
# END ANSIBLE MANAGED BLOCK
---
# BEGIN ANSIBLE MANAGED BLOCK
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    csi.myorg.com/description: This is my custom description for CSI
    csi.myorg.com/limitIops: '-1'
    csi.myorg.com/performancePolicy: default
  labels:
    ansible: csitest-2020-02-19-22-46-1582181168
    pvcRef: csi-pvc-ansibles-2
  name: myorg-pvc-2020-02-19-22-46-1582181168
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: myorg-storageclass-2020-02-19-22-46-1582181161
# END ANSIBLE MANAGED BLOCK
---

Я должен добавить тип файловой системы в соответствии со значением, которое я передаю. Ниже приведен мой код для этого.

- name: Read PVC config file {{ pvc_configfile }}
  shell: cat {{ pvc_configfile }}
  register: pvcconfig
  delegate_to: localhost

- name: Create PVC object from YAML {{ pvc_configfile }}
  set_fact:
      pvcConfigYaml: "{{ pvcconfig.stdout | from_yaml_all | list }}"
  delegate_to: localhost

- name: Printing PVC object
  debug: var=pvcConfigYaml

- set_fact:
    fstype: "ext3"

- name: Update file system in PVC yaml dictionary
  set_fact:
    PvcYaml: "{{ PvcYaml|default([]) + [  item | combine({ 'metadata': {'annotations' : { 'csi.myorg.com/fstype' : fstype }}},recursive=True )] }}"
  with_items: "{{pvcConfigYaml}}"

Поскольку последний шаг сложен для чтения, я изменил многострочность, как показано ниже:

- name: Update file system in PVC yaml dictionary
  set_fact:
    PvcYaml: >-
      "{{ PvcYaml|default([]) + [  item | combine({ 'metadata': {'annotations' : { 'csi.myorg.com/fstype' : fstype }}},recursive=True )] }}"
  with_items: "{{pvcConfigYaml}}"

Но он не работает, как показано ниже.

СБОЙ! => {"msg": "Произошла непредвиденная ошибка шаблонного типа (\" {{PvcYaml | default ([]) + [item | Объединить ({'metadata': {'annotations': {'csi.myorg.com/ fstype ': fstype}}}, recursive = True)]}} \ "): приведение к Unicode: нужна строка или буфер, список найден"}

Как сделать это читаемым? Есть ли другой чистый способ добавить элемент { 'csi.myorg.com/fstype' : fstype } к более чистому способу yaml?

...