この記事にはモジュールが含まれています
- エラー
- タグ
- ハンドラー
- いつ
- 登録
- デバッグ
- with_items
- インクルードとロール
++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++
モジュールエラー
- Ansible-playbookのエラー処理
-デフォルトの判断は$?です。値が0でない場合は、実行を停止しますが、
場合によっては、エラーを無視して実行を続行する必要があります。
たとえば、キャッシュディレクトリを作成してから、apacheを再起動します。
---
- hosts: web1
tasks:
- shell: mkdir /tmp/cache
- name: reload httpd
service:
name: httpd
state: restarted
- エラー処理方法
--ignore_errors:エラーを処理する方法-True
はエラーを無視して実行を
続行することを意味します
-Falseはエラーが発生したときに実行を停止することを意味します-デフォルト
False-処理方法:
- name: run some command
shell: /usr/bin/somecommand
ignore_error: True
モジュールタグ
- タグ:指定されたタスクの呼び出しタグを定義します
- 使用形式:
–名前:NAME
–モジュール:引数–
タグ:TAG_ID - プレイブックの呼び出し方法
--tTAGS、-tags = TAGS - httpd構成のymlを変更します
tasks: - copy: src: httpd.conf dest: /etc/httpd/conf/httpd.conf - template: src: index.html dest: /var/www/html/index.html owner: apache group: apache mode: 0644
- タグを設定する
- name: modify index.html copy: src: index.html dest: /var/www/html/index.html owner: apache group: apache mode: 0644 tags: update_index
- 呼び出しフラグ
ansible-playbookconf.yml -t update_index
モジュールハンドラー
- 対象のリソースが変更されたときに実行されるアクション
- 通知アクションを使用すると、各プレイの終了時にトリガーされ、複数の変更が発生するたびに指定された操作を実行することを回避し、代わりにすべての変更が発生した後に指定された操作を1回だけ実行します。
- notifyにリストされている操作はハンドラーと呼ばれます。つまり、notifyはハンドラーで定義された操作を呼び出します。
- Apacheが以前にインストールされ、httpd構成ファイルが変更され、サービスを有効にするために構成ファイルが再ロードされました。
- ハンドラーを使用して
handlers:
- name: reload httpd
service:
name: httpd
state: restarted
- 前の例と組み合わせて、ハンドラーを使用します
tasks:
- name: modify httpd.conf
copy:
src: httpd.conf
dest: /etc/httpd/conf/httpd.conf
tags: update_conf
notify: reload httpd
handlers:
- name: reload httpd
service:
name: httpd
state: restarted
!!!予防:
–
notifyは、ハンドラーセクションの名前で定義された文字列を呼び出します。これは、一貫している必要があります。そうでない場合、トリガー効果は達成されません。複数のタスクが同じ通知をトリガーする場合、同じサービスは1回だけトリガーされ
ます。通知は複数の条件をトリガーできます実稼働環境では、多くの場合、構成ファイルが変更され、いくつかのサービスを再起動する必要があるシナリオが含まれます。ハンドラーは
、ここでの使用に非常に適しています。varsと組み合わせると、非常に一般的なサービス管理スクリプトを記述できます。
エラー/タグ/ハンドラーモジュールの演習
- Apacheソフトウェア構成ファイルをインストールします
- サービスを有効にするために構成ファイルをリロードします
- ハンドラーを使用して
ステップ1:エラー
プレイブックは上から下の順に実行されます。エラーが報告された場合、次のコマンドは実行されません。それを解決したい場合は、ignoring_errors:Trueを使用できます(これを使用すると、エラーメッセージが表示されます。エラーを無視する場合は、次のコマンドを実行し続けます)
[root@manger ansible]# vim error.yml
---
- hosts: web
remote_user: root
tasks:
- shell: mkdir /tmp/cache
- name: ReStart service httpd
service:
name: httpd
state: restarted
- name: run some command
shell: /usr/bin/somecommand
ignore_errors: True
[root@ansible ansible]# ansible-playbook error.yml
ステップ2:タグは指定されたタスクの呼び出し識別子を定義します
[root@manger ansible]# vim adhttp.yml
---
- hosts: cache
remote_user: root
tasks:
- copy:
src: /root/httpd.conf
dest: /etc/httpd/conf/httpd.conf
owner: apache
group: apache
mode: 0644
tags: syncconf
[root@manger ansible]# ansible-playbook tags.yml -t syncconf
[root@manger ansible]# vim handers.yml
---
- hosts: cache
remote_user: root
tasks:
- copy:
src: /root/httpd.conf
dest: /etc/httpd/conf/httpd.conf
owner: apache
group: apache
mode: 0644
tags: syncconf
notify:
- restart httpd
handlers:
- name: restart httpd
service:
name: httpd
state: restarted
[root@manger ansible]# ansible-playbook handers.yml
モジュールの場合
- 一部の訴訟では、特定の条件を満たす後に操作をトリガーするか、特定の条件下で特定の動作を終了する必要があります。この訴訟では、条件付きの判断が必要です。この問題を解決するには、いつが最善の選択です。リモートファクトのシステム変数は、いつ、どの条件の条件として使用されます。セットアップモジュールを介して表示できます
-場合の例:
tashs:
- name: somecommand
command: somecommand
when: expr
- 使用例
---
- name: Install VIM
hosts: all
tasks:
- name: Install VIM via yum
yum: name=vim-enhanced state=installed
when: ansible_os_family == "RedHat"
- name: Install VIM via apt
apt: name=vim state=installed
when: ansible_os_family == "Debian"
モジュールレジスタ
- register-
後続の操作を処理するために前のコマンドの実行結果を判断するなど、より複雑な例が必要になる場合があります。このとき、前のコマンドの戻りステータスを保存して後で呼び出すためのregisterモジュールが必要です。- command: test command register: result - command: run command when: result
- 高度な変数登録
-コマンド実行結果の戻り値を
判断します-システム負荷が一定値を超えた場合、特殊処理に適しています
---
- hosts: web
remote_user: root
tasks:
- shell: uptime | awk '{
printf("%.2f",$(NF-2))}'
register: result
- service:
name: httpd
state: stopped
when: result.stdout | float >0.7
デバッグ
モジュールのデバッグ
- デバッグモジュールは、実行時に詳細情報を出力して、トラブルシューティングに役立てることができます。
---
- hosts: web
remote_user: root
tasks:
- shell: uptime | awk '{
printf("%.2f",$(NF-2))}'
register: result
- service:
name: httpd
state: stopped
when: result.stdout| float >0.7
- debug: var=result
with_items
- with_itemsは、リストまたは辞書を
反復し、{ (item)}を介して各反復の値を取得するために使用できるプレイブックの標準ループです。
たとえば、複数のユーザーを作成します。
---
- hosts: web1
remote_user: root
tasks:
- name: add users
user: group=wheel password={
{
'123456' |password_hash('sha512')}} name={
{
item}}
with_items:["a1","a2","a3","a4"]
- with_itemsadvanced-
ユーザーごとに異なるグループを定義する
---
- hosts: web2
remote_user:root
tasks:
- name: add users
user:group={
{
item.group}} password={
{
'123456 '| password_hash('sha512')}} name={
{
item.name}}
with_items:
- {
name: 'a1',group: 'root'}
- {
name: 'a2',group: 'root'}
- {
name: 'a3',group: 'wheel'}
- {
name: 'a4',group: 'wheel'}
モジュールのインクルードと役割
- プレイブックを書くとき、プロジェクトがどんどん大きくなるにつれて、プレイブックはますます複雑になり、変更も非常に面倒です。このとき、プレイ、タスク、ハンドラーを他のファイルに入れることができます。 includeコマンドを使用して含めることをお勧めします。
tasks:
- include: tasks/setup.yaml
- include: tasks/user.yml user=a1 # users.yml 中可以通过{
{ user }} 来使用这个变量
handlers:
- include: handler/handlers.yml
-
ロールは、プロジェクトのファイルとディレクトリを導入できるincludeの拡張バージョンのようなものです。
-
一般的に必要なディレクトリレベルは
次のとおりです– vars:変数レイヤー–
タスク:タスクレイヤー–
ハンドラー:トリガー条件–
ファイル:ファイル
–テンプレート:テンプレート
–デフォルト:デフォルト、最低の優先度 -
演劇に「x」という役割が含まれている場合、
---
- hosts: host_group
roles:
- x
– x / tasks / main.yml
– x / vars / main.yml
– x / handlers / main.yml
– x /...…/main.yml–
このプレイに自動的に追加されます
トラブルシューティング方法(デバッグ)
- 文法をチェックする
]# ansible-playbook --syntax-check playbook.yaml
- テスト走行
]#ansible-playbook -C playbook.yaml
-影響を受けるホストを表示します--list-hosts--
作業タスクを表示します--list-tasks--
実行されるタグを表示します--list-tags
演習:システム負荷が高すぎるApacheサービスを停止します
- ステップ1:システム負荷が高すぎるApacheサービスを停止します
1)システム負荷が0.7を超える場合は、httpdをオフにします。
[root@manager ansible]# vim when.yml
---
- hosts: cache
remote_user: root
tasks:
- shell: uptime | awk '{
printf("%.2f\n",$(NF-2))}'
register: result
- service:
name: httpd
state: stopped
when: result.stdout|float > 0.7
[root@manager ansible]# ansible-playbook when.yml
- ステップ2:with_items標準ループ
1)with_itemは複数のユーザーを作成します
[root@manager ansible]# vim adduser.yml
---
- hosts: web2
remote_user: root
tasks:
- name: add users
user: group=wheel password={
{
'123456' | password_hash('sha512')}} name={
{
item}}
with_items: ["a1", "a2", "a3", "a4"]
[root@manager ansible]# ansible-playbook adduser.yml
2)ユーザーごとに異なるグループを定義する
[root@manager ansible]# vim adduser1.yml
---
- hosts: web2
remote_user: root
tasks:
- name: add users
user: group={
{
item.group}} password={
{
'123456' | password_hash('sha512')}} name={
{
item.name}}
with_items:
- {
name: 'a1', group: 'root'}
- {
name: 'a2', group: 'root'}
- {
name: 'a3', group: 'wheel'}
- {
name: 'a4', group: 'wheel'}
[root@manager ansible]# ansible-playbook adduser1.yml
3)インクルードと役割
プレイブックを書くとき、プロジェクトがどんどん大きくなるにつれて、プレイブックはますます複雑になります。プレイ、タスク、またはハンドラーを他のファイルに配置できます。これ
を含めることをお勧めします。ロールは、プロジェクトのファイルとディレクトリを導入できるincludeの拡張バージョンのようなものです。
通常、必要なディレクトリレベルは
varsです。可変レイヤー
タスク:タスクレベル
ハンドラー:トリガー条件
ファイル:ファイル
テンプレート:テンプレート
デフォルト:デフォルト、最低優先度
...
tasks:
- include: tasks/setup.yml
- include: tasks/users.yml user=plj
//users.yml 中可以通过{
{
user }}来使用这些变量
handlers:
- include: handlers/handlers.yml
ステップ3:デバッグ検出
[root@manager ansible]# ansible-playbook --syntax-check http.yml //检测语法
root@manager ansible]# ansible-playbook http.yml --list-tasks
//显示要执行的工作
[root@manager ansible]# vim debug.yml
---
- hosts: cache
remote_user: root
tasks:
- shell: uptime |awk '{
printf("%f\n",$(NF-2))}'
register: result
- service:
name: httpd
state: stopped
when: result.stdout|float > 0.7
- name: Show debug info
debug: var=result
[root@manager ansible]# ansible-playbook debug.yml //运行