【发布时间】:2015-02-26 22:37:57
【问题描述】:
如果缺少特定的 apt 包,我希望执行一系列任务。
例如:
如果未安装石墨碳,请执行以下操作:
- apt: name=debconf-utils state=present
- shell: echo 'graphite-carbon/postrm_remove_databases boolean false' | debconf-set-selections
- apt: name=debconf-utils state=absent
另一个例子:
如果未安装 statsd,请执行以下操作:
- file: path=/tmp/build state=directory
- shell: cd /tmp/build ; git clone https://github.com/etsy/statsd.git ; cd statsd ; dpkg-buildpackage
- shell: dpkg -i /tmp/build/statsd*.deb
我将如何开始破解这个?
我在想也许我可以做一个-shell: dpkg -l|grep <package name> 并以某种方式捕获返回码。
【问题讨论】:
-
你不应该过多使用
shell模块。你的剧本不是幂等的。而不是运行 debconf 命令,您应该使用其正确的模块,如下所示docs.ansible.com/debconf_module.html -
@mxx 谢谢。非常有用的信息。
-
仅仅切换到使用做同样事情的模块并不能使你的剧本幂等;这两件事是无关的。如果有可用的模块,最好使用模块,但这个理由是错误的。
标签: conditional-statements ansible apt ansible-playbook