Ansible TypeError: must be string or buffer, not list

Ansible TypeError: must be string or buffer, not list

以下任务失败,必须是字符串或缓冲区,而不是列表,当我在 shell 上使用相同的循环并且输出打印字符串时,所以不确定哪里出错了。我也用过 loop,它也给出相同的输出

- name: Provide Ambari cluster user role to users in file {{ cluster_user_group_file }}
  uri:
      url: "http://{{ ansible_fqdn }}:8080/api/v1/clusters/{{ cluster_name }}/privileges"
      method: POST
      force_basic_auth: yes
      user: "{{ ambari_admin_user }}"
      password: "{{ ambari_admin_password }}"
      headers: '{"X-Requested-By":"ambari"}'
      body: "[{\"PrivilegeInfo\":{\"permission_name\":\"CLUSTER.USER\",\"principal_name\":\"{{ item }}\",\"principal_type\":\"GROUP\"}}]"
      status_code: 200,201,202,409
      timeout: 60
      return_content: no
  with_items: "{{ lookup('file', '{{ cluster_user_group_file }}').split(',') }}"

这可以通过添加 to_json 和设置 body_format: raw

来解决
- name: Provide Ambari cluster user role to users in file {{ cluster_user_group_file }}
  uri:
      url: "http://{{ ansible_fqdn }}:8080/api/v1/clusters/{{ cluster_name }}/privileges"
      method: POST
      force_basic_auth: yes
      user: "{{ ambari_admin_user }}"
      password: "{{ ambari_admin_password }}"
      headers: '{"X-Requested-By":"ambari"}'
      body: "[{\"PrivilegeInfo\":{\"permission_name\":\"CLUSTER.USER\",\"principal_name\":\"{{ item }}\",\"principal_type\":\"GROUP\"}}]|to_json"
      body_format: raw
      status_code: 200,201,202,409
      timeout: 60
      return_content: no
  with_items: "{{ lookup('file', '{{ cluster_user_group_file }}').split(',') }}"