尝试将Bash脚本复制到ansible中 - 不确定如何最好地处理Slaves的替代方案

时间:2017-12-13 20:30:43

标签: bash ansible

我看到有一个功能请求,但他们没有注意到他们是如何解决它的。简而言之,我们下载一个groovy存档,解压缩它,并为存档中不是groovy可执行文件的每个文件创建从属,并且不以.bat结尾。然后我们为groovy做了更新替代。

GROOVY_ALT_SLAVES=""
for f in $(ls /opt/groovy-${GROOVY_VERSION}/bin | fgrep -v .bat | grep -v '^groovy$'); do
    GROOVY_ALT_SLAVES=" ${GROOVY_ALT_SLAVES}  --slave /usr/bin/${f} ${f} /opt/groovy-${GROOVY_VERSION}/bin/${f}"
done

update-alternatives --install /usr/bin/groovy groovy /opt/groovy-${GROOVY_VERSION}/bin/groovy 2000 ${GROOVY_ALT_SLAVES}
update-alternatives --set groovy /opt/groovy-${GROOVY_VERSION}/bin/groovy

我无法真正地围绕最好的方式来解决这个问题,这不仅仅是运行shell模块。一旦我自己决定使用shell模块,我就会读到像

这样的东西
 - shell: GROOVY_ALT_SLAVES=" ${GROOVY_ALT_SLAVES}  --slave /usr/bin/{{ item }} {{ item }} /opt/groovy-{{ groovy_version }}/bin/{{ item }}"
   with_items: ['file1', 'file2']

不会工作,因为每个shell运行都是一个单独的连接,所以我没有真正构建一个长字符串然后附加到update-alternatives命令。还有一个事实我必须手动指定项目列表,因为我不能使用glob,因为我需要匹配与某组表达式不匹配的文件。

我确定我错过了一些明显的东西,但我没有在这个方面取得任何进展,任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

将你的字符串放在一个剧本中,只执行一次shell。

这样的事情:

@Override
protected void onResume() {
    super.onResume();
    TextView tv = textViews.get(yourId);
    tv.setText("Your Text");
}

我没有对此进行测试,您可能必须使用转义- shell: update-alternatives --install /usr/bin/groovy groovy /opt/groovy-{{ groovy_version }}/bin/groovy 2000 {{ alt_slaves }} vars: alt_slaves: "{{ myfiles | map('regex_replace','(.*)','--slave /usr/bin/\1 \1 /opt/groovy-'+groovy_version+'/bin/\1') | list | join(' ') }} 才能使其正常运行。