LoginSignup
0
0

More than 3 years have passed since last update.

Tips: Ansibleでwhen:にlookup('pipe','ssh ..')を使用して、事前タスクでの情報収拾を省略

Posted at

問題:

Ansibleでターゲットノード上の状況により処理の実行可否を決める際、一般には別タスクでの事前情報収拾が必要

例えば以下の様に情報収集タスクと実行タスクの2タスク必要。

tasks
-
  name: ターゲットノードで/tmp/abc.txtに"ABC"という文字列が含まれるならば
  shell: grep "ABC" /tmp/abc.txt
  register: r

-
  name: 何らかの処理を行う
  when: r.rc == 0
  shell: rm /tmp/abc.txt

ソリューション:

when:にlookup('pipe','ssh ..')を使用して情報を入手させる対応が可能

例えば以下の様に書ける。

tasks

-
  name: ターゲットノードで/tmp/abc.txtに"ABC"という文字列が含まれるならば何らかの処理を行う
  when: >-
    lookup('pipe','
    ssh
    -l '+ansible_env.SUDO_USER+'
    -p '+ansible_ssh_port|string+'
    -i '+ansible_ssh_private_key_file+'
    -o StrictHostKeyChecking=no '+
    ansible_ssh_host+'
    grep -q "ABC" /tmp/abc.txt;
    echo $?
    ') == '0'
  shell: rm /tmp/abc.txt

書けないことは無いが、、、可読性は悪いですね。。。。
sudoなどは必要に応じて追加。
この例ではstdoutを使っているのでgrepの-qオプションなどを省くと問題が生じる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0