1

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

我正在尝试使用 ansible 在远程机器上运行临时命令,并且我不断收到“在参数字符串中发现重复参数”失败,当我使用原始模块而不是 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 之后的任何内容。

4

1 回答 1

0

This is a bug. Ansible is parsing the input string for args for some stupid reason. Try this as a work around:

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

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

于 2016-10-10T15:55:21.200 回答