2017-03-27 3 views
0

私はのように見えるansibleインベントリファイル持って選ぶ:ansibleグループ内の唯一の1ノード

[database] 
172.29.225.95 is_master=true 
172.29.225.93 is_master=false 
172.29.225.94 is_master=false 

を私はONLY 172.29.225.95ですが、単純にAnsibleで道があるマスターノード上で私の脚本を実行したいですプレイブックを実行したいノードを1つ選択しますか?

私が試した汚れたハックがあります。単に在庫ファイルに新しいエントリを追加し、そのグループのみを使用するだけです。

[database-master] 
172.29.225.95 

、その後

- name: Perform Health Checks. 
    hosts: database-master 
    tasks: 
    - name: Check Postgres cluster status. 
     shell: /usr/efm-2.0/bin/efm cluster-status efm 
     register: output 

しかし、私は、これはただの周りの仕事ではなく固溶体であると感じています。したがって、[database]グループでのみ作業していますが、私はAnotherにちょうど172.29.225.95でプレイブックを実行できますか?

+0

としてansible-脚本実行可能ファイルの--limitオプションを使用する可能性があるとします。特にあなたが明示的にホストを 'database-master'と指定しているので、O_O –

+0

あなたの在庫をリファクタリングできるなら、[この回答](http://stackoverflow.com/a/42387143/2795592)を見てください。 –

+0

"*私はPlaybookを*の上だけで走らせることができますか?" - プレイブックはプレイリストを含むYAMLファイルであり、どのターゲットでもプレイブックを実行しません。 – techraf

答えて

0

あなたは可能性があり、単純に次のインベントリを使用してhostvars(今それはあなたの要件を満たす場合、またはこれを行うことは良いアイデアであっても必ず、ansibleする新しいものではないこと)

上の条件付きループ:

[tests] 
localhost is_master=true 
test is_master=false 

とシンプル脚本:

--- 
- hosts: localhost 
    remote_user: some_user 

    tasks: 
    - name: test 
     debug: 
     msg: "Host is {{item}}" 
     with_items: "{{groups['tests']}}" 
     when: ("{{hostvars[item]['is_master']}}"=="true") 

タスクの出力(-vvv付き):

TASK [test] ******************************************************************** 
task path: /home/sa-1t40-app-i/AnsibleTest/test.yml:12 
ok: [localhost] => (item=localhost) => { 
    "invocation": { 
     "module_args": { 
      "msg": "Host is localhost" 
     }, 
     "module_name": "debug" 
    }, 
    "item": "localhost", 
    "msg": "Host is localhost" 
} 
skipping: [localhost] => (item=test) => { 
    "changed": false, 
    "item": "test", 
    "skip_reason": "Conditional check failed", 
    "skipped": true 
} 
関連する問題