ansible-playbook(変数2)と単純な構文チェックコマンド

この記事にはモジュールが含まれています
  • エラー
  • タグ
  • ハンドラー
  • いつ
  • 登録
  • デバッグ
  • 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         //运行

おすすめ

転載: blog.csdn.net/weixin_45942735/article/details/104298786