2017-06-16 126 views
1

我使用ansible進行自動部署。在不存在的情況下使用本地事實(`ansible_local`)

我需要的某個軟件包的安裝是一個漫長的,非標準的和無聊的操作。我只想在必要時運行相應的任務,也就是說,如果它之前沒有執行過。

我的計劃包括在具有這樣安裝的最後一步,創建一個本地的事實:

​​

mypackage.fact文件是這樣的:

[general] 
installed=yes 

在這一點上,我想使用例如有條件的地方事實,所以我可以避免兩次運行無聊過程:

- include: install_boring 
    when: not(ansible_local.mypackage.general.installed | bool) 

顯然這是因爲ansible_local未定義。我知道default過濾器存在,但對ansible_local,mypackage,generalinstalled中的每一個都執行多級缺省設置感覺很不舒服。

有沒有一種優雅的方式來實現這一目標?

+0

沒有,沒有。 – techraf

回答

0

嗯,這可能是一個骯髒的黑客,但檢查文件是否存在,似乎做的工作

- name: Check custom mypackage facts exists 
    command: grep -q installed /etc/ansible/facts.d/mypackage.fact 
    ignore_errors: yes 
    register: mypackage_fact_exists 

- name: Prepare MyPackage 
    when: (mypackage_fact_exists | failed) or not(ansible_local.mypackage.general.installed | bool) 
    block: 

    ...LOTS OF STUFF HERE... 

    - name: Flag installed 
     block: 
     - file: 
      path: /etc/ansible/facts.d/ 
      state: directory 
     - copy: 
      src: mypackage.fact 
      dest: /etc/ansible/facts.d/mypackage.fact 
相關問題