RHEL 上の Ansible プレイブックとホストのトラブルシューティング

AnsibleBeginner
オンラインで実践に進む

はじめに

このラボでは、Red Hat Enterprise Linux 上で Ansible を使用する際に遭遇する一般的な問題のトラブルシューティング方法を学びます。初期環境設定から、一般的なプレイブックのエラー、管理対象ホストの接続問題まで、さまざまな問題の特定と解決に関する実践的な経験を積むことができます。演習では、YAML の構文修正、Jinja2 テンプレートの誤りの修正、リモート システムでの問題診断を行います。

まず、RHEL 環境を準備し、効果的なロギングのために Ansible を設定します。次に、ハンズオンのトラブルシューティング シナリオに進み、Ansible のチェックモードを使用してサービス関連の問題を診断し、ファイアウォール設定を修正してホストの到達不能性を解決します。このラボの終わりまでに、堅牢な Ansible 自動化ワークフローを維持するための包括的なスキルセットを習得しているでしょう。

RHEL 環境の準備と Ansible ロギングの設定

このステップでは、Red Hat Enterprise Linux 環境を Ansible 自動化のために準備します。これには、必要なソフトウェアのインストール、専用プロジェクト ディレクトリの作成、Ansible の動作を制御しロギングを有効にするための基本的な設定ファイルのセットアップが含まれます。適切なセットアップは、効果的な自動化とトラブルシューティングの最初のステップです。

  1. Ansible のインストール

    まず、Ansible をインストールする必要があります。コアとなる自動化エンジンは ansible-core パッケージによって提供されます。sudo を使用して dnf パッケージマネージャーでインストールします。-y フラグは、確認プロンプトに自動的に「yes」と応答します。

    sudo dnf install -y ansible-core

    パッケージとその依存関係がインストールされていることを示す出力が表示されるはずです。

    Last metadata expiration check: ...
    Dependencies resolved.
    ================================================================================
     Package             Architecture   Version                Repository      Size
    ================================================================================
    Installing:
     ansible-core        x86_64         <version>              <repo>          2.8 M
    ...
    Transaction Summary
    ================================================================================
    Install  XX Packages
    
    Total download size: XX M
    Installed size: XX M
    ...
    Complete!
  2. プロジェクト ディレクトリの作成

    Ansible プロジェクトを専用ディレクトリに整理することは、ベストプラクティスです。これにより、プレイブック、インベントリ、設定ファイルがきちんと分離されます。ホーム プロジェクト フォルダ内に ansible_troubleshooting という名前のディレクトリを作成し、そこに移動しましょう。

    mkdir -p ~/project/ansible_troubleshooting
    cd ~/project/ansible_troubleshooting

    これ以降、このラボのすべてのコマンドは ~/project/ansible_troubleshooting ディレクトリ内で実行されます。

  3. Ansible インベントリ ファイルの作成

    インベントリは、Ansible が管理するホスト(またはノード)をリストするファイルです。単一の LabEx VM で作業しているため、Ansible がローカルマシン自体を管理するように設定します。

    inventory という名前のファイルを作成し、localhost を追加します。ansible_connection=local の部分は、Ansible に SSH を使用せずにコントロール ノード(お使いの VM)で直接コマンドを実行するように指示します。

    echo "localhost ansible_connection=local" > inventory

    cat コマンドを使用してファイルの内容を確認できます。

    cat inventory

    期待される出力:

    localhost ansible_connection=local
  4. Ansible ロギングの設定

    ansible.cfg ファイルを使用すると、特定のプロジェクトの Ansible の動作をカスタマイズできます。プロジェクト ディレクトリに配置すると、その設定はシステム全体のデフォルトを上書きします。ここでは、このファイルを作成して、インベントリの場所を指定し、ロギングを有効にします。ロギングは、すべてのプレイブック実行に関する詳細情報を記録するため、トラブルシューティングに不可欠です。

    nano エディターを使用して ansible.cfg ファイルを作成します。

    nano ansible.cfg

    次に、以下の内容を nano エディタにコピーして貼り付けます。この設定は、Ansible に現在のディレクトリの inventory ファイルを使用するように指示し、すべてのログ出力を ansible.log という名前のファイルに書き込むように指示します。

    [defaults]
    inventory = /home/labex/project/ansible_troubleshooting/inventory
    log_path = /home/labex/project/ansible_troubleshooting/ansible.log

    nano でファイルを保存するには、Ctrl+X を押し、確認のために Y を押し、最後にファイルを書き込むために Enter を押します。

    これで環境の準備が整いました。Ansible がインストールされ、ローカルインベントリとロギングが有効になったプロジェクト ディレクトリが設定され、次のステップに進む準備ができました。

プレイブックの YAML 構文とインデント エラーの修正

このステップでは、Ansible プレイブックで最も一般的な 2 つのエラー タイプ、YAML 構文エラーとインデントの誤りを診断および修正する方法を学びます。プレイブックの記述に使用される言語である YAML は、その構造に関して非常に厳格です。1 つのスペースのずれや、引用符で囲まれていない特殊文字でさえ、プレイブックの実行を妨げる可能性があります。実行前にプレイブックを検証するための不可欠なツールである ansible-playbook --syntax-check コマンドを使用します。

  1. 意図的にエラーを含むプレイブックの作成

    まず、プロジェクト ディレクトリ (~/project/ansible_troubleshooting) に webserver.yml という名前の新しいプレイブック ファイルを作成します。このファイルには、修正する意図的なエラーが含まれています。

    nano を使用してファイルを作成します。

    nano webserver.yml

    以下の内容をエディタにコピーして貼り付けます。ここでは 2 つの意図的なエラーに注意してください。コロンを含む引用符で囲まれていない文字列と、2 番目のタスクのインデントが正しくありません。

    ---
    - name: Configure Web Server
      hosts: localhost
      vars:
        ## ERROR 1: Unquoted colon in string
        package_comment: This is a package: httpd
      tasks:
        - name: Install httpd package
          ansible.builtin.dnf:
            name: httpd
            state: present
    
        ## ERROR 2: Incorrect indentation
          - name: Create a test index page
            ansible.builtin.copy:
              content: "<h1>Welcome to Ansible</h1>"
              dest: /var/www/html/index.html

    nano でファイルを保存して終了するには、Ctrl+XYEnter の順に押します。

  2. YAML 構文エラー(引用符で囲まれていないコロン)の特定と修正

    次に、作成したばかりのプレイブックで構文チェックを実行します。このコマンドはファイルを解析し、タスクを実際に実行せずに構文の問題を報告します。

    ansible-playbook --syntax-check webserver.yml

    期待される出力(エラー): package_comment の値にコロン (:) が含まれていますが、引用符で囲まれていないため、エラーが表示されます。YAML はコロンをキーと値の区切り文字として解釈するため、構文エラーが発生します。

    ERROR! We were unable to read either as JSON nor YAML, these are the errors we found:
    - Syntax Error while loading YAML.
      did not find expected ':'
    
    The error appears to be in '/home/labex/project/ansible_troubleshooting/webserver.yml': line 6, column 41, but may be elsewhere in the file depending on the exact syntax problem.
    
    The offending line appears to be:
    
      vars:
        package_comment: This is a package: httpd
                                            ^ here

    解決策: これを修正するには、文字列を二重引用符で囲む必要があります。再度 nano でファイルを開きます。

    nano webserver.yml

    コロンを含む文字列に引用符を追加するように、vars の下の行を変更します。

    ## ... (rest of the file)
    vars:
      ## FIX: Add quotes around the string with a colon
      package_comment: "This is a package: httpd"
    ## ... (rest of the file)

    エディタを保存して終了します。

  3. YAML インデント エラーの特定と修正

    最初のエラーを修正したら、再度構文チェックを実行します。

    ansible-playbook --syntax-check webserver.yml

    期待される出力(エラー): 今回は、Ansible がプレイブックの構造に関連する別のエラーを報告します。

    ERROR! A malformed block was encountered.
    
    The error appears to be in '/home/labex/project/ansible_troubleshooting/webserver.yml': line 13, column 11, but may be elsewhere in the file depending on the exact syntax problem.
    
    The offending line appears to be:
    
    
          ## ERROR 2: Incorrect indentation
          - name: Create a test index page
            ^ here

    このエラーは、YAML がインデントを使用して構造を定義するため発生します。リスト内のすべての項目(この場合は - で始まるタスク)は、同じレベルのインデントを持つ必要があります。2 番目のタスク Create a test index page は、インデントが深すぎます。

    解決策: もう一度ファイルを開いてインデントを修正します。

    nano webserver.yml

    最初のタスクのハイフン (-) が最初のタスクのハイフンと完全に揃うように、2 番目のタスクの前にある余分なスペースを削除します。

    ## ... (rest of the file)
    tasks:
      - name: Install httpd package
        ansible.builtin.dnf:
          name: httpd
          state: present
    
      ## FIX: Correct the indentation to align with the previous task
      - name: Create a test index page
        ansible.builtin.copy:
          content: "<h1>Welcome to Ansible</h1>"
          dest: /var/www/html/index.html

    エディタを保存して終了します。

  4. 修正されたプレイブックの検証

    最後に、もう一度構文チェックを実行します。

    ansible-playbook --syntax-check webserver.yml

    今回は、コマンドはエラーなしで完了し、プレイブックの名前が表示されて、構文が正しくなったことが確認されます。

    期待される出力(成功):

    playbook: webserver.yml

Jinja2 引用符とテンプレートパスのエラー解決

このステップでは、Ansible の強力なテンプレート エンジンである Jinja2 に関連するエラーに取り組みます。Jinja2 式が引用符で囲まれることが多い理由と、プレイブックが指定されたテンプレート ファイルを見つけられない場合の問題をデバッグする方法を学びます。これらは、プレイブックが構文チェックを既にパスした後に発生する一般的な実行時エラーです。

  1. Jinja2 テンプレート ファイルの作成

    まず、テンプレート ファイルが必要です。静的ファイルとは異なり、テンプレートには Ansible がプレイブック実行中に実際の値に置き換える変数を含めることができます。簡単な HTML テンプレートを作成します。

    nano を使用して、プロジェクト ディレクトリ (~/project/ansible_troubleshooting) に index.html.j2 という名前のファイルを作成します。.j2 拡張子は Jinja2 テンプレートの一般的な規約です。

    nano index.html.j2

    以下の HTML コンテンツをエディタにコピーして貼り付けます。{{ welcome_message }} プレースホルダーに注意してください。これは Jinja2 変数です。

    <h1>{{ welcome_message }}</h1>
    <p>This page was deployed by Ansible.</p>

    nano でファイルを保存して終了します (Ctrl+XYEnter)。

  2. プレイブックを修正してテンプレートを使用し、エラーを導入する

    次に、webserver.yml プレイブックを修正して ansible.builtin.template モジュールを使用します。また、2 つの新しいエラーを導入します。引用符で囲まれていない Jinja2 変数と、正しくないテンプレート パスです。

    nanowebserver.yml を開きます。

    nano webserver.yml

    ファイルの内容全体を以下に置き換えます。become: true ディレクティブは、Ansible に管理者権限(sudo を使用)でタスクを実行するように指示します。これは、ソフトウェアをインストールしたり、/var/www/html のようなシステム ディレクトリにファイルを書き込んだりするために必要です。

    ---
    - name: Configure Web Server
      hosts: localhost
      become: true
      vars:
        package_name: httpd
        welcome_message: "Welcome to Ansible with Jinja2"
      tasks:
        - name: Install httpd package
          ansible.builtin.dnf:
            ## ERROR 1: Unquoted Jinja2 variable
            name: { { package_name } }
            state: present
    
        - name: Create a test index page from template
          ansible.builtin.template:
            ## ERROR 2: Incorrect template source path
            src: index.j2
            dest: /var/www/html/index.html

    エディタを保存して終了します。

  3. Jinja2 引用符エラーの特定と修正

    これは Jinja2 の問題ですが、YAML の構文エラーとして現れる可能性があります。Ansible がそれをどのように解釈するかを確認するために、構文チェッカーを実行します。

    ansible-playbook --syntax-check webserver.yml

    期待される出力(エラー): YAML の値が {{ で始まると特別な構成として扱われ、文字列として解釈するには引用符で囲む必要があるため、構文エラーが発生します。

    ERROR! A malformed block was encountered.
    
    The error appears to be in '/home/labex/project/ansible_troubleshooting/webserver.yml': line 11, column 19, but may be elsewhere in the file depending on the exact syntax problem.
    
    The offending line appears to be:
    
              ## ERROR 1: Unquoted Jinja2 variable
              name: {{ package_name }}
                      ^ here

    解決策: webserver.yml を開き、Jinja2 変数を二重引用符で囲みます。

    nano webserver.yml

    Install httpd package タスクを修正します。

    ## ... (rest of the file)
    tasks:
      - name: Install httpd package
        ansible.builtin.dnf:
          ## FIX: Quote the Jinja2 expression
          name: "{{ package_name }}"
          state: present
    ## ... (rest of the file)

    保存して終了します。これで構文チェックはパスするはずです。

  4. テンプレート パス エラーの特定と修正

    構文が正しくなったので、プレイブックを実行してみます。

    ansible-playbook webserver.yml

    期待される出力(エラー): プレイブックは失敗しますが、今回は構文エラーではなく実行時エラーです。エラー メッセージには、ソース ファイル index.j2 が見つからないことが明確に示されています。

    TASK [Create a test index page from template] **********************************
    fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not find or access '/home/labex/project/ansible_troubleshooting/index.j2' on the Ansible Controller."}

    これは、プレイブックの src パラメータが index.j2 を指していますが、作成したファイルの名前が index.html.j2 であるために発生します。

    解決策: もう一度 webserver.yml を開き、ファイル名を修正します。

    nano webserver.yml

    Create a test index page from template タスクの src パラメータを修正します。

    ## ... (rest of the file)
    - name: Create a test index page from template
      ansible.builtin.template:
        ## FIX: Correct template source filename
        src: index.html.j2
        dest: /var/www/html/index.html
    ## ... (rest of the file)

    エディタを保存して終了します。

  5. プレイブックの正常な実行

    再度プレイブックを実行します。これで、すべてのタスクが正常に完了するはずです。

    ansible-playbook webserver.yml

    期待される出力(成功):

    PLAY [Configure Web Server] ****************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [Install httpd package] ***************************************************
    changed: [localhost]
    
    TASK [Create a test index page from template] **********************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

チェックモードを使用して管理ホストのサービスエラーをトラブルシューティングする

このステップでは、Ansible の最も強力なトラブルシューティング機能の 1 つであるチェックモードの使用方法を学びます。チェックモード(--check フラグでアクティブ化)を使用すると、プレイブックを実行して、実際にシステム上の何も変更せずに、どのような変更が行われるかを確認できます。これは、プレイブックを安全にテストし、実際の障害を引き起こす前に、不正確なサービス名などの問題を診断するのに非常に役立ちます。

  1. サービスを管理するプレイブックの作成

    次に、httpd Web サーバーサービスが実行されていることを確認するように設計された新しいプレイブック service.yml を作成します。ただし、一般的なエラーをシミュレートするために、意図的に間違ったサービス名を使用します。

    nano を使用して、~/project/ansible_troubleshooting ディレクトリに service.yml ファイルを作成します。

    nano service.yml

    以下をコピーして貼り付けます。サービス名は apache2 に設定されていますが、これは他の Linux ディストリビューションでは Apache Web サーバーの一般的な名前ですが、RHEL では正しくありません。

    ---
    - name: Manage Web Server Service
      hosts: localhost
      become: true
      tasks:
        - name: Ensure web server service is started
          ansible.builtin.service:
            ## ERROR: Incorrect service name for RHEL
            name: apache2
            state: started
            enabled: true

    nano でファイルを保存して終了します (Ctrl+XYEnter)。

  2. チェックモードを使用してサービス エラーを特定する

    プレイブックを通常どおり実行する代わりに、チェックモードで実行します。これにより、Ansible は変更を加えることはできませんが、システムの状態を確認し、実際に行うであろうことを報告できます。

    ansible-playbook --check service.yml

    期待される出力(エラー): プレイブックは失敗します。エラー メッセージには、apache2 という名前のサービスが見つからなかったことが明確に示されます。これにより、プレイブックの name パラメータが間違っていることがすぐにわかります。

    TASK [Ensure web server service is started] ************************************
    fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not find the requested service 'apache2': host"}
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
  3. 正しいサービス名の検索

    プレイブックを修正するには、RHEL 上の httpd パッケージの正しいサービス名を見つける必要があります。これを行う確実な方法は、パッケージによってインストールされたファイルを一覧表示し、通常は /usr/lib/systemd/system/ に存在するサービスユニット ファイルを探すことです。

    rpm コマンドを使用して httpd パッケージをクエリします。

    rpm -ql httpd | grep systemd

    期待される出力: このコマンドは、サービス ファイルを含む systemd 関連ファイルを一覧表示します。

    /usr/lib/systemd/system/httpd.service
    /usr/lib/systemd/system/httpd@.service
    ...

    出力 httpd.service は、正しいサービス名が httpd であることを示しています。

  4. プレイブックの修正とチェックモードでの再実行

    正しいサービス名がわかったので、service.yml ファイルを編集します。

    nano service.yml

    サービス nameapache2 から httpd に変更します。

    ## ... (rest of the file)
    - name: Ensure web server service is started
      ansible.builtin.service:
        ## FIX: Correct service name for RHEL
        name: httpd
        state: started
        enabled: true

    エディタを保存して終了します。次に、プレイブックをチェックモードで再度実行します。

    ansible-playbook --check service.yml

    期待される出力(チェックモードでの成功): 今回は、プレイブックが changed ステータスを報告するはずです。チェックモードでは、changed は「実際の実行であれば変更が行われた」ことを意味します。これは、プレイブックのロジックが正しくなり、Ansible が httpd サービスを開始する必要があることを特定したことを示しています。

    TASK [Ensure web server service is started] ************************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

    注意: この特定のコンテナベースの実験環境では、完全な systemd 初期化システムは実行されていません。チェックモードは正しく機能しますが、ansible.builtin.service モジュールの通常の実行では引き続き問題が発生する可能性があります。ここで重要な教訓は、チェックモードを使用して、プレイブックのロジックをシステムの構成に対して検証することです。

ファイアウォール設定とホスト到達不能の問題を修正する

この最後のステップでは、ファイアウォールなどの不正確なシステム設定による障害と、Ansible インベントリ ファイルのエラーによる接続の問題という、2 つの重要な実行時エラーに対処します。これらをマスターすることで、自動化における最も一般的な障害のいくつかを解決できるようになります。

パート 1: ファイアウォール設定の修正

サーバー設定における一般的なタスクは、ファイアウォールでポートを開くことです。プレイブックは、ターゲット システムに存在しないファイアウォール サービスを参照すると失敗する可能性があります。

  1. firewalld のインストールと準備

    まず、RHEL でファイアウォール管理サービスを提供する firewalld パッケージがインストールされていることを確認します。

    sudo dnf install -y firewalld

    firewalld サービスを開始します。

    sudo systemctl start firewalld

    この演習で使用する firewalld モジュールが含まれている ansible.posix コレクションもインストールする必要があります。

    ansible-galaxy collection install ansible.posix

    注意: Ansible のバージョン互換性に関する警告が表示される場合がありますが、この演習ではコレクションは正しく機能します。

  2. ファイアウォール エラーを含むプレイブックの作成

    firewall.yml という新しいプレイブックを作成し、http サービスを有効にしようとします。ただし、意図的に間違ったサービス名 web を使用してエラーを発生させます。

    nano firewall.yml

    以下をエディタにコピーして貼り付けます。

    ---
    - name: Configure System Firewall
      hosts: localhost
      become: true
      tasks:
        - name: Allow web traffic through firewall
          ansible.posix.firewalld:
            ## ERROR: 'web' is not a standard firewalld service
            service: web
            permanent: true
            state: enabled

    nano で保存して終了します (Ctrl+XYEnter)。

  3. プレイブックを実行して障害を診断する

    プレイブックを実行します。firewalldweb という名前のサービスを認識しないため、失敗します。

    ansible-playbook firewall.yml

    期待される出力(エラー): エラー メッセージには、web がサポートされているサービスではないことが明確に示されており、問題に直接誘導されます。

    TASK [Allow web traffic through firewall] **************************************
    fatal: [localhost]: FAILED! => {"changed": false, "msg": "web is not a supported service. This is what I have."}
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
  4. 正しいファイアウォール サービス名の検索

    有効な定義済みサービス名のリストを見つけるには、firewall-cmd コマンドライン ツールを使用できます。

    firewall-cmd --get-services

    期待される出力: 利用可能なサービスの長いリストが表示されます。リストを確認して、Web トラフィックの正しいサービスである http を見つけます。

    RH-Satellite-6 ... ftp http https imaps ipp ipp-client ...
  5. プレイブックの修正と正常な実行

    firewall.yml を編集し、間違ったサービス名 web を正しい http に置き換えます。

    nano firewall.yml

    修正されたタスクは次のようになります。

    ## ... (rest of the file)
    - name: Allow web traffic through firewall
      ansible.posix.firewalld:
        ## FIX: Use the correct firewalld service name
        service: http
        permanent: true
        state: enabled

    保存して終了します。次に、プレイブックを再度実行します。正常に完了するはずです。

    ansible-playbook firewall.yml

パート 2: ホスト到達不能エラーのトラブルシューティング

「到達不能」エラーは、Ansible がインベントリにリストされているホストに接続できないことを意味します。これは、多くの場合、ホスト名に単純なタイプミスがあることが原因です。

  1. 到達不能なホストのシミュレーション

    意図的に inventory ファイルにタイプミスを導入し、ローカル接続設定を削除します。これにより、Ansible はスペルミスのあるホスト名への実際のネットワーク接続を試行するようになります。

    nano inventory

    localhostlocalhossst に変更し、ansible_connection=local を削除します。

    ## ERROR: Intentional typo in hostname, no local connection
    localhossst

    エディタを保存して終了します。

  2. インベントリ ホストを使用するようにプレイブックを修正する

    まず、ハードコーディングされた localhost の代わりにインベントリ ホストを使用するように webserver.yml プレイブックを修正する必要があります。プレイブックが hosts: localhost を使用すると、Ansible はそれを特別なケースとして扱い、インベントリ ファイルを完全にバイパスします。

    nano webserver.yml

    hosts 行を localhost から all に変更します。

    ---
    - name: Configure Web Server
      hosts: all ## Changed from 'localhost' to use inventory hosts
      become: true
      ## ... rest of the playbook remains the same

    エディタを保存して終了します。

  3. プレイブックを実行してエラーを発生させる

    次に、修正されたプレイブックを実行してみます。インベントリにタイプミス localhossst が含まれているため、失敗します。

    ansible-playbook webserver.yml

    期待される出力(エラー): Ansible は失敗し、ホストが UNREACHABLE であると報告します。エラー メッセージは、ホスト名を解決できなかったことを示しています。

    PLAY [Configure Web Server] ****************************************************
    
    TASK [Gathering Facts] **********************************************************
    fatal: [localhossst]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname localhossst: Name or service not known", "unreachable": true}
    
    PLAY RECAP *********************************************************************
    localhossst                : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
  4. インベントリ ファイルの修正

    UNREACHABLE ステータスは、ホスト名とネットワーク接続を確認する合図です。この場合、修正は inventory ファイルのタイプミスを修正することです。

    nano inventory

    localhossstlocalhost に戻します。

    ## FIX: Corrected hostname
    localhost ansible_connection=local

    保存して終了します。ansible-playbook webserver.yml を再度実行すると、今度は成功します。

  5. オプション:元のプレイブックの復元

    今後の演習のためにプレイブックを hosts: localhost を使用するように戻したい場合は、次のように変更できます。

    nano webserver.yml

    hosts 行を localhost に戻します。

    ---
    - name: Configure Web Server
      hosts: localhost ## Restored to original
      become: true
      ## ... rest of the playbook

    保存して終了します。このステップは、ハードコーディングされた localhost(インベントリをバイパスする)を使用することと、インベントリで定義されたホストを使用することの違いを示しています。

まとめ

この実験では、ansible-core をインストールしてロギングを設定することにより、Red Hat Enterprise Linux 環境を Ansible 用に準備し、その後、さまざまな一般的な問題のトラブルシューティングに進みました。プレイブック内のエラーを診断および解決する方法を学びました。たとえば、YAML の構文、インデント、Jinja2 の引用符、および無効なテンプレート パスを修正しました。これらのスキルは、有効で信頼性の高い自動化コードを作成するための基本です。

さらに、管理対象ホスト環境に関連する問題にも取り組みました。Ansible のチェック モードを利用して、実際の変更を行わずにターゲット ノードでの潜在的なサービス障害を安全に特定するためのドライ ランを実行しました。この実験は、ファイアウォール設定を修正してホストの到達不能性を解決することにより、接続の問題に対処して終了しました。これにより、制御ノードから管理対象ホストまでのデバッグに対する包括的なアプローチが提供されました。