2016-07-18 7 views
1

を実行しなかった場合、私のようなものが含まれtasks.ymlあります中止前のタスクのいずれも

- name: something on Debian wheezy 
    when: ansible_distribution == 'Debian' and ansible_distribution_version == '7' 

- name: something on Debian jessie 
    when: ansible_distribution == 'Debian' and ansible_distribution_version == '8' 

- name: something on Ubuntu 
    when: ansible_distribution == 'Ubuntu' 

私はこれらのタスクのどれもが実行されなかった場合は脚本を中止したタスク(または何か)を追加したいが。

多分、「何か」がパッケージをインストールしているかもしれません。そして、後に続くいくつかのタスクは、その新しくインストールされたパッケージを構成することです。私がRedHatシステム上でプレイブックを実行すると、そのパッケージはインストールされず、それを設定するタスクを実行する前に中止したいと思います。

私はのような何かを行うことができると思います:

- fail: msg="abort!" 
    when: not (ansible_distribution == 'Debian' and ansible_distribution_version == '7') and not (ansible_distribution == 'Debian' and ansible_distribution_version == '8') and not ansible_distribution == 'Ubuntu' 

を...しかし、それは迷惑なんです。もっと良い解決策はありますか?

+0

これは優れたプレーブックデザインですか?私は、OSがサポートされていない場合、プレイブックの実行の始めに失敗することを好むでしょう、または、不必要なタスクをスキップするだけで問題がなければ。 –

+0

それは初期に失敗するほうが良いかもしれませんが、それは2つの非常に離れた場所でサポートされているOSをチェックすることを意味します。私はむしろそこで失敗し、これが特定のOSがサポートされていない理由であることを知ってから、そのOSに '何か 'をインストールするコードを追加して、それを1日と呼びます。 – Gohu

答えて

1
--- 
- name: test 
    hosts: localhost 

    tasks: 
    - name: Install pkg 
    debug: msg="Installed pkg" 
    when: "{{ ansible_distribution == 'Debian' }}" 
    register: debian_pkg 

    - name: Install pkg 
    debug: msg="Installed pkg" 
    when: "{{ ansible_distribution == 'Ubuntu' }}" 
    register: ubuntu_pkg 

    - fail: msg="Unsupported OS" 
    when: "debian_pkg|skipped and ubuntu_pkg|skipped" 
+0

この例の 'pkg_installed'はすべてのタスクに登録されています - Debianタスクが完了してUbuntuタスクがスキップされた場合、失敗タスクを引き起こします。 –

+0

@ ConstantinSuvorov私はそれを実現しました。すでにスニペットを修正しました。 –

+1

うん、良い。しかし、私はなぜ登録された変数が異なっていて、同じものではないのか考えている人に私のコメントを残します:) –

0

私はついに、よりシンプルで、より「ビジネス的に」正確な方法をとった。 somethingをインストールしたいのですが、somethingがインストールされると思います。実際、すべてが自動化されていない私のインフラストラクチャでは(私はどこにでもいない)、somethingをインストールできないことがありますが、まだインストールされている(帯域外にインストールされている)ことを確認します。

OSに応じてsomethingをインストールした後、インストールしたかどうかを確認するタスクを追加しました。このようなもの:

- include: install_something.yml # contains the install tasks for each OS 
    when: can_become_root 

- name: Check that something is installed 
    command: something --version 
関連する問題