Ansible-variables
Ansible-変数
プレイブックの変数は、プログラミング言語で変数を使用するのと*非常に似ています*。 値を使用して変数に割り当て、プレイブックの任意の場所で使用するのに役立ちます。 変数の値に条件を付けて、それに応じてプレイブックで使用できます。
例
- hosts : <your hosts>
vars:
tomcat_port : 8080
上記の例では、変数名 tomcat_port を定義し、その変数に値8080を割り当て、必要な場所でプレイブックで使用できます。
共有された例から参照を取得します。 次のコードは、ロールの1つ(install-tomcat)からのものです-
block:
- name: Install Tomcat artifacts
action: >
yum name = "demo-tomcat-1" state = present
register: Output
always:
- debug:
msg:
- "Install Tomcat artifacts task ended with message: {{Output}}"
- "Installed Tomcat artifacts - {{Output.changed}}"
ここで、出力は使用される変数です。
上記のコードで使用されているすべてのキーワードを見てみましょう-
- block -特定のブロックを実行するためのAnsible構文。
- name -ブロックの関連名-これはロギングで使用され、すべてのブロックが正常に実行されたことをデバッグするのに役立ちます。
- アクション-アクションタグの隣のコードは実行されるタスクです。 ここでも、アクションはyamlで使用されるAnsibleキーワードです。
- register -アクションの出力はregisterキーワードを使用して登録され、Outputはアクション出力を保持する変数名です。
- always -再びAnsibleキーワード、それは以下が常に実行されることを示します。
- msg -メッセージを表示します。
変数の使用法-\ {\ {出力}}
これにより、変数Outputの値が読み取られます。 また、「msg」タブで使用されるため、出力変数の値が出力されます。
さらに、変数のサブプロパティも使用できます。 出力が変更されたかどうかを\ {\ {Output.changed}}でチェックし、それに応じて使用する場合と同様です。
プレイブックでの例外処理
Ansibleの例外処理は、プログラミング言語の例外処理に似ています。 プレイブックでの例外処理の例を以下に示します。
tasks:
- name: Name of the task to be executed
block:
- debug: msg = 'Just a debug message , relevant for logging'
- command: <the command to execute>
rescue:
- debug: msg = 'There was an exception.. '
- command: <Rescue mechanism for the above exception occurred)
always:
- debug: msg = "this will execute in all scenarios. Always will get logged"
例外処理の構文は次のとおりです。
- rescue および always は、例外処理に固有のキーワードです。
- ブロックは、コードが書き込まれる場所です(Unixマシンで実行されるもの)。
- ブロック機能内に書き込まれたコマンドが失敗すると、実行はレスキューブロックに到達し、実行されます。 ブロック機能下のコマンドにエラーがない場合、レスキューは実行されません。
- *常に*はすべての場合に実行されます。
- したがって、同じことをjavaと比較すると、try、catch、およびfinallyブロックに似ています。
- ここで、 Block は、実行するコードを記述する try block に似ており、 rescue は catch block に似ており、 always は finally に似ています。
ループ
以下は、Ansibleでのループの使用法を示す例です。
タスクは、すべてのwarファイルのセットを1つのディレクトリーからtomcat webappsフォルダーにコピーすることです。
以下の例で使用されるコマンドのほとんどは、以前にすでに説明されています。 ここでは、ループの使用に集中します。
最初は「shell」コマンドでls *.warを実行しました。 そのため、ディレクトリ内のすべてのwarファイルがリストされます。
そのコマンドの出力は、outputという変数で取得されます。
ループするには、「with_items」構文が使用されています。
with_items: "\ {\ {output.stdout_lines}}"→ output.stdout_linesは行ごとの出力を提供し、Ansibleのwith_itemsコマンドで出力をループします。
with_itemsコマンドでstdout_linesを使用した方法を理解できるようにするために、サンプル出力を添付します。
---
#Tsting
- hosts: tomcat-node
tasks:
- name: Install Apache
shell: "ls* .war"
register: output
args:
chdir:/opt/ansible/tomcat/demo/webapps
- file:
src: '/opt/ansible/tomcat/demo/webapps/{{ item }}'
dest: '/users/demo/vivek/{{ item }}'
state: link
with_items: "{{output.stdout_lines}}"
ブロック
プレイブック全体がブロックに分割されています。 実行するステップの最小部分はブロックで記述されます。 特定の命令をブロックで記述すると、機能を分離し、必要に応じて例外処理で処理できます。
ブロックの例は、上記の変数の使用法、例外処理、およびループで説明されています。
条件付き
条件に基づいて特定のステップを実行する必要がある場合、条件が使用されます。
---
#Tsting
- hosts: all
vars:
test1: "Hello Vivek"
tasks:
- name: Testing Ansible variable
debug:
msg: "Equals"
when: test1 == "Hello Vivek"
この場合、when条件で述べたようにtest1変数が等しいため、Equalsが出力されます。 when は、すべてのプログラミング言語と同様に、論理ORおよび論理AND条件で使用できます。
test1変数の値をHello Vivekから変更して、Hello Worldと言って出力を確認するだけです。