Зацикливание json содержимого файла в ansible playbook - PullRequest
0 голосов
/ 03 февраля 2020

Я работаю над книгой, чтобы я мог автоматизировать добавление политик рейнджера для hdfs из файла json. Итак, я пытаюсь получить файл json с политиками RHD-файлов в ansible playbook, вот файл json:

{

"ranger_policies": [

    {
        "hdfs_policie": {
            "policie": {
                "name": "/lili R g_lab_test_pb1",
                "path": "/lili",
                "permissions": {
                    "groups": {
                        "name": "g_lab_test_pb1",
                        "accesses": [
                            "read"
                        ]
                    }
                }
            }
        }
    },

    {
        "hdfs_policie": {
            "policie": {
                "name": "/lala RX g_lab_test_pb1",
                "path": "lala",
                "permissions": {
                    "groups": {
                        "name": "g_lab_test_pb1",
                        "accesses": [
                            "read",
                            "execute"
                        ]
                    }
                }
            }
        }
    }


]

}

И это мой playbook файл:

- name: "ranger policie hdfs"

  vars:
    jsonVar: "{{ lookup('file', 'users.json') | from_json }}"

  ranger_hdfs_policies:
    state: present
    admin_url: "https://{{RANGER_ADMIN_SERVER}}:6182"
    admin_username: "admin"
    admin_password: "{{RANGER_ADMIN_PASSWORD}}"
    validate_certs: no
    service_name: "{{CLUSTER_NAME}}_hadoop"
    policies:
    - name: "{{ list.ranger_policies.hdfs_policie.policie.name }}"
      paths:
      - "{{ list.ranger_policies.hdfs_policie.policie.path }}"
      permissions:
      - groups:
          - "{{ list.ranger_policies.hdfs_policie.policie.permissions.groups.name }}"
        accesses:
          - "{{ list.ranger_policies.hdfs_policie.policie.permissions.groups.accesses }}"
        delegate_admin: true
      - users:
          - "admin"
        accesses:
          - read
          - write
          - execute
        delegate_admin: true

  loop: "{{ jsonVar }}"
  
  loop_control:
    loop_var: list
  tags:
    - ranger_policies

к сожалению, я получаю эту ошибку, и я искал везде без какого-либо успеха:

фатально: [bphi4-ves001]: FAILED! => {"msg": "Неверные данные переданы в 'l oop', требуется список, вместо этого он получил: {'ranger_policies': [{'hdfs_poli cie': {'poli cie ': {' name ':' / lili R g_lab_test_pb1 ',' path ':' / lili ',' permissions ': {' groups ': {' name ':' g_lab_test_pb1 ',' accessances ': [ 'read']}}}}}, {'hdfs_poli cie': {'poli cie': {'name': '/ lala RX g_lab_test_pb1', 'path': 'lala ',' permissions ': {' groups ': {' name ':' g_lab_test_pb1 ',' acases ': [' read ',' execute ']}}}}}]}. Подсказка: если вы передали список / dict только одного элемента, попробуйте добавить wantlist = True к вашему поисковому вызову или используйте q / query вместо lookup. " }

Я также попытался добавить wantlist = True к своему поиску, затем я получил другую ошибку, которая говорит:

fatal: [bphi4-ves001]: FAILED! => {"msg": "Произошло необработанное исключение во время шаблонов '{{lookup (' file ',' users. json ', wantlist = True) | from_ json}}'. Ошибка, исходное сообщение : Произошла непредвиденная ошибка типа шаблона ({{lookup ('file', 'users. json', wantlist = True) | from_ json}}): объект JSON должен быть str, байтами или байтовым массивом, не "список" "}

...