Ansible URI 模块和 ServiceNow 附件 API

问题描述 投票:0回答:1

我已使用带有 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 attachment servicenow-rest-api
1个回答
0
投票

作为临时修复,我直接在 Ansible 任务中使用

curl
命令,该任务在附加到 ServiceNow 事件记录时不会对任何文件进行编码。

我相信 Ansible

uri
模块的行为,当与
body_format: form-multipart
一起使用时,它将使用 base64 (字符集 = UTF-8)自动编码,目前,似乎没有办法绕过这种正文格式的编码。

body_format
, "正文的序列化格式。当设置为 json、form-multipart 或 form-urlencoded 时,如果需要,将对正文参数进行编码..."

所以

curl
是目前唯一的选择。

© www.soinside.com 2019 - 2024. All rights reserved.