如何在Ansible中执行复杂的shell表达式?

时间:2016-06-09 16:01:46

标签: ruby bash ansible

我正在创建一个Ansible playbook,只有在尚未安装的情况下才需要安装Ruby gem(jekyll)。当在目标主机(Ubuntu 14.04)上的命令行上运行时,这些对我有用:

gem list  | grep "jekyll " > /dev/null  || gem install jekyll
(gem list | grep "jekyll " > /dev/null) || gem install jekyll

也就是说,当已经安装了gem时,它将不会再次安装。但是,当我将这些命令放在Ansible playbook中时,总是会安装gem:

- name: Install Jekyll only if not yet installed
  shell: (gem list | grep "jekyll " > /dev/null) || gem install jekyll

我需要做些什么才能让它发挥作用?是否需要逃避?

2 个答案:

答案 0 :(得分:1)

虽然我赞成使用gem模块,但脚本可以分为两个任务。

在检查拉取gem列表的gem(剥离版本)之前添加一个额外的任务,然后使用条件只在gem不存在时运行。

.sendKeys()

答案 1 :(得分:0)

我认为这是一个环境问题。

尝试使用

bash -lc "gem install ..."