我已使用带有 URI 模块的 Ansible 将 PDF 或 CSV 文件附加到现有事件,并且附加后没有任何问题。
但是当我尝试下载相同的附件时,CSV 是乱码或加密的,或者 PDF 说无法加载。请查看下面的代码和错误。
上传 CSV 或 PDF 文件的 Ansible 代码
- name: "Attach output CSV file to incident"
ansible.builtin.uri:
url: "{{ SN_HOST }}api/now/attachment/upload"
user: "{{ SN_USERNAME }}"
password: "{{ SN_PASSWORD }}"
method: POST
return_content: true
validate_certs: false
force_basic_auth: no
status_code: 201
body_format: form-multipart
headers:
Accept: 'application/json'
Content-Type: 'multipart/form-data'
body:
table_name:
content: incident
table_sys_id:
content: 'c6957640470388444c736d4315'
uploadFile:
filename: "../../win_playbooks/reports/User_Manual.pdf"
register: attach_file
尝试打开附加的 PDF 文件时出错
尝试打开下载的附加 CSV 文件时出错
当我手动使用 ServiceNow REST API 浏览器或 ServiceNow UI 上传和下载附加的 PDF 或 CSV 文件时,它工作得很好。我想问题是,当我尝试从上述 Ansible 代码上传 PDF 或 CSV 时,它不起作用。
作为临时修复,我直接在 Ansible 任务中使用
curl
命令,该任务在附加到 ServiceNow 事件记录时不会对任何文件进行编码。
我相信 Ansible
uri
模块的行为,当与 body_format: form-multipart
一起使用时,它将使用 base64 (字符集 = UTF-8)自动编码,目前,似乎没有办法绕过这种正文格式的编码。
, "正文的序列化格式。当设置为 json、form-multipart 或 form-urlencoded 时,如果需要,将对正文参数进行编码..."body_format
所以
curl
是目前唯一的选择。