使用原始模块

时间:2016-10-04 09:43:56

标签: bash ansible ansible-ad-hoc

我似乎无法在这里找到这个查询的答案,而且似乎无法通过Google搜索找到任何内容。

我正在尝试使用ansible在远程盒子上运行adhoc命令,并且我继续得到#34;在参数字符串中找到了重复的参数"失败,当我使用原始模块而不是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以外的任何内容。

1 个答案:

答案 0 :(得分: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作品。