Ansible adhoc 命令在使用原始模块时返回重复参数发现错误

Ansible adhoc command returning a duplicate parameter found error when using raw module

我似乎无法在这里找到此查询的答案,并且似乎无法通过谷歌搜索找到任何内容。

我正在尝试 运行 使用 ansible 在远程机器上执行临时命令,但我一直遇到 "a duplicate paramter was found in the argument string" 失败,当我使用原始模块而不是 shell 时会发生这种情况模块。

准确的错误信息如下:

hostname1 | FAILED => a duplicate parameter was found in the argument string (variable)
hostname2 | FAILED => a duplicate parameter was found in the argument string (variable)

举例来说,这是一个不起作用的命令,它似乎反对将同一个变量设置两次,尽管这是有效的 bash:

ansible group -i hosts-file -m raw -k -s -a "variable=1 ; echo $variable; variable=2; echo $variable"

我问的原因是因为我正在尝试 运行 一个带有 case 语句的命令在没有安装 python 的远程盒子上设置一个变量,我不允许配置他们以任何方式。

举例:

ansible group -i hosts-file -m raw -k -s -a "
for file in $(find . -name \"test*\") 
do
 case $file in
  test1) variable=test1 ;;
  test2) variable=test2 ;;
  test3) variable=test3 ;;
 esac
 echo $variable
done
"

这里的语法可能不是很准确,但希望你能理解,它无法处理多次设置同一个变量。我知道在上面的代码中,我可以通过将 echo 放入 case 语句来解决这个问题,但实际上我的代码比 echo 复杂得多,所以我通过将操作复制到案例陈述。

有谁知道如何解决这个问题?非常感谢任何帮助,谢谢。

编辑:我使用的是 ansible 1.7 版,根据下面的回答,这个问题不会影响 2.0 以外的任何内容。

这是一个错误。 Ansible is parsing the input string 对于 args 出于某些愚蠢的原因。试试这个作为解决方法:

ansible hosts -i hosts -m raw -a '/bin/bash -c "variable=1; echo $variable; variable=2; echo $variable;"' -vvv

此错误也仅存在于 <=1.9 中。 2.0 有效。