首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果缺少Apt包,则可以执行任务

如果缺少Apt包,则可以执行任务
EN

Stack Overflow用户
提问于 2015-02-27 06:37:57
回答 4查看 17.1K关注 0票数 12

如果一个特定的apt包丢失,我希望做一系列的任务。

例如:

如果未安装石墨-碳,请执行以下操作:

代码语言:javascript
复制
- 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,请执行以下操作:

代码语言:javascript
复制
- 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>,以某种方式捕获返回代码。

EN

回答 4

Stack Overflow用户

发布于 2015-02-27 09:31:33

看起来我的解决方案起作用了。

这是一个我是如何工作的例子:

代码语言:javascript
复制
- shell: dpkg-query -W 'statsd'
  ignore_errors: True
  register: is_statd

- name: create build dir
  file: path=/tmp/build state=directory
  when: is_statd|failed

- name: install dev packages for statd build
  apt:  name={{ item }} 
  with_items: 
    - git 
    - devscripts 
    - debhelper
  when: is_statd|failed

- shell: cd /tmp/build ; git clone https://github.com/etsy/statsd.git ; cd statsd ; dpkg-buildpackage 
  when: is_statd|failed

....

下面是另一个示例:

代码语言:javascript
复制
 - name: test if create_superuser.sh exists
  stat: path=/tmp/create_superuser.sh 
  ignore_errors: True
  register: f

- name: create graphite superuser
  command: /tmp/create_superuser.sh
  when: f.stat.exists == True

...and再来一次

代码语言:javascript
复制
- stat: path=/tmp/build
  ignore_errors: True
  register: build_dir

- name: destroy build dir
  shell: rm -fvR /tmp/build 
  when: build_dir.stat.isdir is defined and build_dir.stat.isdir
票数 9
EN

Stack Overflow用户

发布于 2018-09-28 04:17:13

您可以使用package_facts模块(需要Ansible 2.5):

代码语言:javascript
复制
- name: Gather package facts
  package_facts:
    manager: apt

- name: Install debconf-utils if graphite-carbon is absent
  apt:
    name: debconf-utils
    state: present
  when: '"graphite-carbon" not in ansible_facts.packages'

...
票数 9
EN

Stack Overflow用户

发布于 2015-02-27 07:36:41

我认为使用dpkg | grep是正确的,只是在任何情况下返回代码都将是0。但是您可以简单地检查输出。

代码语言:javascript
复制
- shell: dpkg-query -l '<package name>'
  register: dpkg_result

- do_something:
  when: dpkg_result.stdout != ""
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28754155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档