首页 > 解决方案 > 在 ansible 中使用 CURL 模型运行 API 命令

问题描述

我正在尝试为我的 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

标签: curlansiblebackupelk

解决方案


...但它正在产生错误

如果没有确切的错误,很难推断可能是什么问题。同时,我不太了解您传递凭据的方式。您不使用相关模块参数是否有特定原因?你试过这样吗?

- 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

请注意,我完全删除了标题,因为body_format: json会自动设置Content-type: application/json(我们不应该需要另外两个)。

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


推荐阅读