ノート:

Oracle Linux Automation Engineによるプレイブックの記述

イントロダクション

Oracle Linux Automation ManagerのコンポーネントであるOracle Linux Automation Engineは、ソフトウェアのデプロイ、システムの構成、およびアップグレードや更新などのタスクの調整をプレイブックの形式で行うための自動化ツールです。最初はansibleパッケージを使用しており、Oracle Linux Automation Engineはオープンソースのansible-coreソフトウェア・パッケージに由来するようになりました。

次のチュートリアルでは、Oracle Linux Automation Engineを使用したプレイブックの記述について説明します。

目的

このチュートリアルでは、次の方法を学習します。

前提条件

Oracle Linuxのデプロイ

ノート:独自のテナンシで実行している場合は、linux-virt-labs GitHubプロジェクトREADME.mdを読み、演習環境をデプロイする前に前提条件を完了してください。

  1. Lunaデスクトップでターミナルを開きます。

  2. linux-virt-labs GitHubプロジェクトをクローニングします。

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. 作業ディレクトリに移動します。

    cd linux-virt-labs/olam
    
  4. 必要なコレクションをインストールします。

    ansible-galaxy collection install -r requirements.yml
    
  5. Oracle Linuxインスタンス構成を更新します。

    cat << EOF | tee instances.yml > /dev/null
    compute_instances:
      1:
        instance_name: "ol-control-node"
        type: "control"
      2:
        instance_name: "ol-host"
        type: "remote"
    EOF
    
  6. 演習環境をデプロイします。

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e "@instances.yml"
    

    無料の演習環境では、追加変数local_python_interpreterが必要です。この変数は、localhostで実行されている再生用にansible_python_interpreterを設定します。この変数は、python3.6モジュールの下にあるOracle Cloud Infrastructure SDK for PythonのRPMパッケージが環境によってインストールされるため必要です。

    デフォルトのデプロイメント・シェイプでは、AMD CPUおよびOracle Linux 8が使用されます。Intel CPUまたはOracle Linux 9を使用するには、デプロイメント・コマンドに-e instance_shape="VM.Standard3.Flex"または-e os_version="9"を追加します。

    重要:プレイブックが正常に実行されるまで待機し、一時停止タスクに到達します。プレイブックのこの段階で、Oracle Linuxのインストールが完了し、インスタンスの準備ができました。前の再生に注意してください。これは、デプロイするノードのパブリックIPアドレスとプライベートIPアドレス、および演習の実行中に必要なその他のデプロイメント情報を出力します。

Oracle Linux Automation Engine制御ノードの設定

制御ノードは、Oracle Linux Automation Engineプレイブックを実行するためのシステムです。再生ブックを実行するには、Oracle Linux Automation Engineパッケージをインストールする必要があります。

  1. 制御ノードのIPアドレスと同じ変数を設定します。

    export CONTROL="<ip_address_of_ol-control-node>"
    
  2. 端末を開き、SSH鍵ペアを制御ノードにコピーします。

    scp -rp ~/.ssh/id_rsa* oracle@$CONTROL:~/.ssh/
    
  3. SSH秘密キーに対する権限を設定します。

    ssh oracle@$CONTROL "chmod 600 ~/.ssh/id_rsa"
    
  4. SSHを介してol-control-nodeシステムに接続します。

    ssh oracle@$CONTROL
    
  5. Oracle Linux Automation Engineパッケージおよび依存関係をインストールします。

    sudo dnf install -y ansible-core
    

    ansible-coreパッケージは、Oracle Linuxのol8_appstreamリポジトリで使用できます。

  6. パッケージのインストールをテストします。

    ansible --version
    

    出力には、コマンドのバージョン、構成の詳細、および Pythonバージョンの依存関係が表示されます。

    ノート:出力にERROR: Ansibleでは、ロケール・エンコーディングをUTF-8、検出なしにする必要があります。これは、ansibleのロケール設定が正しくないことを示します。次の2つの環境変数を設定して問題を修正します。

    export LC_ALL="en_US.UTF-8"
    export LC_CTYPE="en_US.UTF-8"
    

インベントリの作成

インベントリ・ファイルには、インフラストラクチャに属するホスト、またはOracle Linux Automation Engineを使用して管理するホストの詳細が含まれます。これらの詳細は、アドホック・コマンドまたはプレイブックの実行時にこれらのホストに接続する方法を示しています。

IPアドレスまたはホスト名情報の収集

Oracle Linux Automation Engineのインベントリを作成するには、管理するシステムのIPアドレスまたは解決可能なホスト名を決定する必要があります。ステップは、システムのタイプとデプロイ先によって異なります。

提供されている無料のラボ環境では、ol-hostシステムのIPアドレスが必要です。このIPアドレスは、「Luna Lab」の「Resources」タブを使用して検索します。

インベントリ・ファイルの作成

Oracle Linux Automation Engineは、デフォルトのインベントリを/etc/ansible/hostsに配置します。また、プロジェクト・レベルのインベントリ・ファイルも使用できます。プロジェクト・レベルのインベントリを使用する場合は、アドホック・コマンドまたはプレイブックを実行するときに、-iオプションを使用してインベントリ・ファイルへのパスを指定する必要があります。

Oracle Linux Automation Engine制御ノードのターミナルから:

  1. プロジェクト・ディレクトリの作成

    mkdir ~/ol-automation
    
  2. 新しいディレクトリに移動し、選択したテキスト・エディタを使用して新しいインベントリ・ファイルを開きます。ここでは、viを使用します。

    cd ~/ol-automation
    
    vi inventory
    
  3. iを入力して、vi挿入モードに入ります。

  4. 指定されたol-hostシステムのパブリックIPアドレスを追加します。ファイルにはIPアドレスのみを含める必要があります。

    次に例を示します:

    130.61.100.96
    
  5. 保存してファイルを閉じます。viを使用する場合は、ESC:wq!およびENTERを入力できます。

  6. インベントリ・ファイルを検証します。

    ansible-inventory -i inventory --list
    

    出力に在庫情報が表示されます。

    出力例:

    {
        "_meta": {
            "hostvars": {}
        },
        "all": {
            "children": [
                "ungrouped"
            ]
        },
        "ungrouped": {
            "hosts": [
                "130.61.100.96"
            ]
        }
    }
    

    参照allはインベントリ・ファイル内のすべてのホストを指し、ungroupedセクションはリストされたグループの一部ではないホストを対象としています。

  7. インベントリを編集し、developmentというグループ内にホストを配置します。

    vi inventory
    
  8. iを入力して、vi挿入モードに入ります。

  9. 例に示すように、次のIPアドレスを使用して、カッコ内のグループ名を追加します。

    次に例を示します:

    [development]
    130.61.100.96
    
  10. 保存してファイルを閉じます。viを使用する場合は、ESC:wq!およびENTERを入力できます。

  11. 検証ステップを再度実行して、出力に追加されたグループを確認します。

    ansible-inventory -i inventory --list
    

    出力には、更新された情報がグループとともに表示されます。

    出力例:

    {
        "_meta": {
            "hostvars": {}
        },
        "all": {
            "children": [
                "development",
                "ungrouped"
            ]
        },
        "development": {
            "hosts": [
                "130.61.100.96"
            ]
        }
    }
    

アドホック・コマンドの実行

Oracle Linux Automation Engineには、プレイブックの作成を必要としない複数の1回の実行モジュールがあります。最も基本的なモジュールはpingモジュールで、インベントリで提供される詳細に基づいてSSH接続を試行します。

Oracle Linux Automation Engine制御ノードのターミナルから:

  1. pingモジュールを実行します。

    ansible all -i inventory -m ping
    

    allオプションは、-iオプションで指定されたインベントリ・ファイルにリストされているすべてのホストに対して実行するようにコマンドに指示します。このコマンドは、個々のホスト名またはグループも受け入れます。

    -mオプションは、実行するモジュールを指定します。

  2. プロンプトでyesと入力して、ECDSAキー・フィンガープリントを受け入れます。

    環境によっては、pingが次の出力で失敗することがあります。

    出力例:

    130.61.100.96 | UNREACHABLE! => {
        "changed": false,
        "msg": "Failed to connect to the host via ssh: Warning: Permanently added '130.61.100.96' (ECDSA) to the list of known hosts.\r\noracle@130.61.100.96: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).",
        "unreachable": true
    }
    

    この失敗は、管理しようとしているホストにローカル・ユーザー・アカウントoracleが存在しないために発生します。変数ansible_userを使用して、インベントリに有効なリモート・ユーザーを追加して、これを修正します。インベントリ・ファイルで、ホストにホスト名参照を指定し、IPアドレスを変数ansible_hostに割り当てます。

  3. リモート・ユーザーをインベントリ・ファイルに追加します。

    vi inventory
    
  4. iを入力して、vi挿入モードに入ります。

  5. 例に示すように、2つの変数を追加します。

    次に例を示します:

    [development]
    ol-host ansible_host=130.61.100.96 ansible_user=opc
    

    無料のラボ環境では、opcというユーザーを含むリモート管理をテストするための事前構成済システムが提供されます。opcは、Oracle Cloud Infrastructure (OCI)のOracle Linuxインスタンスで作成されるデフォルト・ユーザーです。ホスト名にはol-hostというサンプル名を使用できます。

  6. 保存してファイルを閉じます。viを使用する場合は、ESC:wq!およびENTERと入力して実行できます。

  7. allではなくホスト名を使用して、pingモジュールを再実行します。

    ansible ol-host -i inventory -m ping
    

    コマンドは正常に実行され、結果は次のようになります。

    出力例:

    ol-host | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "ping": "pong"
    }
    

プレイブックを書く

プレイブックは、適切なYAML構文で記述された一連の命令で、単一のホストまたはホスト・グループに対して実行されます。これらのファイルのデフォルトの拡張子は、.ymlまたは.yamlです。

最初のプレイブックは、作成されたインベントリ・ファイルからallホストをターゲットとします。このサンプル・プレイブックは、デバッグ・メッセージを出力する単一のタスクで構成されます。

Oracle Linux Automation Engine制御ノードのターミナルから:

  1. 新しいプレイブックファイルを作成します。

    vi hello.yml
    
  2. iを入力して、vi挿入モードに入ります。

  3. 次のテキストをプレイブックファイルに追加します。

    次に例を示します:

    ---
    - hosts: all
      tasks:
        - name: Print message
          debug:
            msg: Hello from Oracle Linux
    

    プレイブックは、常に---で始まり、次に管理するホストを指定するhosts行が続く必要があります。all値は、インベントリにリストされているすべてのホストでプレイブックが動作することを示します。または、各ターゲットをコロンまたはカンマで区切ってリストすることによって、ホストまたはグループの特定のリストに対してのみタスクを実行するようにプレイブックに指示することもできます。次に、タスクはデバッグ・モジュールを使用してメッセージを出力します。

    name行を指定すると、Oracle Linux Automation Engineはプレイブックの実行時に端末に出力を表示します。

  4. 保存してファイルを閉じます。viを使用する場合は、ESC:wq!およびENTERと入力して実行できます。

  5. インベントリに対してhello.ymlプレイブックを実行します。

    ansible-playbook -i inventory hello.yml
    

    インベントリ・ファイルで変数ansible_userを使用するかわりに、オプション-u usernameを使用してコマンドラインでリモート・ユーザー名を渡すことができます。

    ansible-playbook -i inventory hello.yml -u opc
    

    すべてが機能すると、コマンドは正常に完了し、デバッグ・メッセージが出力されます。

    出力例:

    
    PLAY [all] *********************************************************************
    
    TASK [Gathering Facts] *********************************************************
    [WARNING]: Platform linux on host ol-host is using the discovered Python
    interpreter at /usr/bin/python, but future installation of another Python
    interpreter could change this. See https://docs.ansible.com/ansible/2.9/referen
    ce_appendices/interpreter_discovery.html for more information.
    ok: [ol-host]
    
    TASK [Print message] ***********************************************************
    ok: [ol-host] => {
        "msg": "Hello from Oracle Linux"
    }
    
    PLAY RECAP *********************************************************************
    ol-host                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    

    インベントリでは単一のホストol-hostのみが定義されるため、プレイブックは1回実行されます。プレイブックにリストされているタスクを実行する前に、Oracle Linux Automation Engineは、ファクトと呼ばれるデフォルトのタスク収集情報を実行します。このタスクは、リモートホストに関する情報を取り込みます。このプレイブックは、あとで条件によってタスクの動作をカスタマイズするために使用できます。

  6. 次の非定型コマンドを実行して、ホストのfactsの完全なリストを出力します。

    ansible ol-host -i inventory -m setup
    

次のステップ

このメッセージおよびfacts出力は、Oracle Linux Automation Engineを使用して最初のプレイブックを正常に実行したことを確認します。

その他の学習リソース

docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。