Ansible Tower 服务器声称它发送了一个错误的请求

问题描述

我编写了一个剧本来使用自定义凭据创建凭据,下面是 ansible 剧本

---
- name: Trigger an Atower API
  hosts: localhost
  connection: local
  tasks:
    - name: Create a valid SCM credential from a private_key file
      command: tower-cli credential create --organization "Default" --name "DevOps User" --credential-type "csa-test2" --inputs "{'user':'devops','stg01_ssh_key':\"$( sed -z 's/\n/\\n/g' test.pem )\" }"
      no_log: false

我收到与报价相关的错误

name","DevOps User","--credential-type","csa-test2","--inputs","{'user':'devops','stg01_ssh_key':\"$( sed -z 's/\\n/\\n/g' test.pem )\" }"],"delta": "0:00:01.319114","end": "2021-01-07 16:00:22.763388","msg": "non-zero return code","rc": 40,"start": "2021-01-07 16:00:21.444274","stderr": "Error: The Tower server claims it was sent a bad request.\n\nPOST http://x.x.x.x:13080/api/v2/credentials/\nParams: None\nData: {\"inputs\": {\"stg01_ssh_key\": \"$( sed -z 's/\\n/\\n/g' test.pem )\",\"user\": \"devops\"},\"credential_type\": 36,\"organization\": 1,\"name\": \"DevOps User\"}\n\nResponse: {\"inputs\":{\"stg01_ssh_key\":[\"Invalid certificate or key: $( sed -z 's/\\n/\\n/g' test.pem )...\"]}}","stderr_lines": ["Error: The Tower server claims it was sent a bad request.","","POST http://x.x.x.x:13080/api/v2/credentials/","Params: None","Data: {\"inputs\": {\"stg01_ssh_key\": \"$( sed -z 's/\\n/\\n/g' test.pem )\",\"name\": \"DevOps User\"}","Response: {\"inputs\":{\"stg01_ssh_key\":[\"Invalid certificate or key: $( sed -z 's/\\n/\\n/g' test.pem )...\"]}}"],"stdout": "","stdout_lines": []}

此外,当我手动尝试“tower-cli create”命令时,它工作正常。任何人都可以帮助我。我不知道这里出了什么问题。

解决方法

尝试使用 shell 而不是命令,文档说

命令不会通过 shell 处理,因此 $HOSTNAME 之类的变量以及 "*","<",">","|",";""&" 之类的操作将不起作用。如果您需要这些功能,请使用 ansible.builtin.shell 模块。

来源:Ansible Documentation

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...