2014-09-23 28 views

回答

4

Ansible有很多support for package managers,并且很乐意与apt合作。不幸的是,目前还没有一种方法可以检查使用此模块是否安装了软件包。但是,这可以通过注册命令的结果来完成。像这样的东西应该工作:

- name: Check if gtk is installed 
    command: dpkg-query -l gtk 
    register: gtk_check 

- name: Install GTK application 
    apt: name=gtk-program state=present 
    when: gtk_check.stdout.find('no packages found') != -1 
1

我建议在看由该服务上运行Ansible,看看是否有您可以检查特定的事实,报道事实。从Ansible FAQ只需运行此看到所有的事实:

ansible -m setup hostname 

如果没有提供任何有用的东西,则下一个选项是要运行的任务,并将结果保存到您可以测试一个变量。该任务可能会调用命令,检查是否安装了软件包等。

前一段时间,我不得不编写一本可能最终在redhat或debian系统上运行的操作手册,因此我需要检查是否yum已安装,并且基于此确保安装了python-apt或其他一些redhat软件包。以下是我最后做它:

- name: Check if yum exists 
    stat: path=/usr/bin/yum 
    register: yum 

# The python-apt package must be installed before the apt module below 
# can be invoked... 
- name: Check if python-apt is installed 
    shell: dpkg -l python-apt | grep python-apt 
    register: apt_status 
    when: yum.stat.exists == False 

- name: Install python-apt 
    command: apt-get install -y python-apt 
    when: yum.stat.exists == False and apt_status.stdout.find('un') == 0 

# procmail & postfix are needed for the lockfile command & ability to 
# send e-mail 
- name: Install required packages 
    yum: pkg={{ item }} state=present 
    with_items: 
    - procmail 
    - postfix 
    when: yum.stat.exists == True 

的第一个任务只是检查是否在/ usr/bin中/ yum的存在,在一个名为“荫”变量存储结果。第二个任务将检查python-apt是否仅在yum不存在的情况下安装(所以假设缺少yum表示这实际上是一个debian系统)。第三个任务强制python-apt只在不存在的情况下安装(它是一个debian系统)。只有当yum存在时,最后一项任务才会通过yum安装一些软件包。

这有点冗长,但使用上述一种或两种方法应该可以帮助您找出确定GUI是否安装的最佳方法。您可以通过shell或命令模块(运行级别5通常表示X11正在运行)调用/ sbin/runlevel,或者像上面那样调用dpkg来测试是否安装了特定软件包。或者您可以简单地使用stat模块来查看是否存在像/ etc/X11/xinit/xinitrc这样的路径或文件。然后,只需要将任务结果注册到变量并在后续任务中使用适当的“when”子句。