2014-09-23 23 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」子句。

相關問題