在 运行 一个 API 命令中使用 CURL 模型

Using of CURL model in ansible to run a API command

我正在尝试为我的 ELK 索引设置一个自动备份。要手动执行此操作,我使用以下 curl 命令。

curl -u username:$password -X  PUT \
"http://IP address:9200/_snapshot/TEST_backup./backup_name" \
-H 'Content-Type: application/json' \
-d'{ "indices": "index name", "ignore_unavailable": true, "include_global_state": false }'

能否请您告诉我 ansible curl 结构将如何像我的想法一样平移,它应该如下所示,但它会产生错误。

- name: Run cURL commands
  hosts: localhost
  tasks:
    - name: First task
      uri:
        url: http://IP ADDRESS:9200/_snapshot/TEST_backup/backupname
        headers:
          Content-Type: "application/json"
          X-Application-Username: "username"
          X-Application-Password: "password"
        method: PUT
        body:
          indices: "index names"
          ignore_unavailable: "true"
          include_global_state: "false"

        body_format: json
        validate_certs: no

...but it is generating error

没有确切的错误,很难推断可能是什么问题。同时,我不太了解您传递凭据的方式。您不使用 relevant module parameters 有什么具体原因吗?你试过这样吗?

- name: Run cURL commands
  hosts: localhost
  tasks:
    - name: First task
      uri:
        url: http://IP ADDRESS:9200/_snapshot/TEST_backup/backupname
        method: PUT
        url_username: "username"
        url_password: "password"
        body:
          indices: "index names"
          ignore_unavailable: "true"
          include_global_state: "false"
        body_format: json
        validate_certs: no

请注意,我完全放弃了 headers,因为 body_format: json 会自动设置 Content-type: application/json(我们不应该需要其他两个)。

如果您在另一端的服务在第一次连接基本身份验证时没有正确返回 401 错误,您可以尝试添加 force_basic_auth: true 并查看它是否做得更好(参见文档 link 了解更多详情)。