2017-06-16 20 views
1

私は自動展開に使用しています。ローカルファクト( `ansible_local`)が存在しない場合に使用する

私が必要とする特定のソフトウェアパッケージのインストールには、長い非標準で退屈な操作が必要です。私は必要な場合にのみ、対応するタスクを実行したいと思います。私が使用したいのですが、この時点で

[general] 
installed=yes 

は ​​

mypackage.factファイルはこれです:

私の計画は、地元の事実を作成するために、このようなインストールの最後のステップを有することで構成されてい条件付きのようなローカルな事実なので、私は退屈な手順を2回実行することを避けることができます:

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

ansible_localが定義されていないので、これは明らかに失敗します。私はdefaultフィルタが存在することを知っていますが、ansible_localmypackagegeneralおよびinstalledのそれぞれに対してマルチレベルのデフォルトを行うのは気になりません。

これを実現するエレガントな方法はありますか?

+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 
関連する問題