ノート:
- このチュートリアルは、Oracle提供の無料ラボ環境で入手できます。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときに、これらの値をクラウド環境に固有の値に置き換えます。
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 Automation Engineのインストール
- インベントリ・ファイルの作成
- アドホック・コマンドの実行
- プレイブックの記述と実行
前提条件
-
次の構成を持つ2つ以上のOracle Linuxシステム:
sudo権限を持つroot以外のユーザー- root以外のユーザーのsshキーペア
- パスワードなしのSSHログインを使用して、あるホストから別のホストにSSHを実行する機能
Oracle Linuxのデプロイ
ノート:独自のテナンシで実行している場合は、linux-virt-labs GitHubプロジェクトREADME.mdを読み、演習環境をデプロイする前に前提条件を完了してください。
-
Lunaデスクトップでターミナルを開きます。
-
linux-virt-labsGitHubプロジェクトをクローニングします。git clone https://github.com/oracle-devrel/linux-virt-labs.git -
作業ディレクトリに移動します。
cd linux-virt-labs/olam -
必要なコレクションをインストールします。
ansible-galaxy collection install -r requirements.yml -
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" olam_type: none EOF -
インベントリファイルを作成します。
cat << EOF | tee hosts > /dev/null localhost ansible_connection=local ansible_connection=local ansible_python_interpreter=/usr/bin/python3.6 EOF -
演習環境をデプロイします。
ansible-playbook create_instance.yml -i hosts -e "@instances.yml"無料のラボ環境では、Oracle Cloud Infrastructure SDK for Python用のRPMパッケージをインストールするため、localhostに追加変数
ansible_python_interpreterが必要です。このパッケージをインストールする場所は、使用しているOracle Linuxのバージョンに基づくシステムのデフォルトのPythonモジュールの下にあります。インベントリ変数を使用すると、localhost以外のホストで実行されている再生に影響を与えません。デフォルトのデプロイメント・シェイプでは、AMD CPUが使用されます。コマンドラインで新しいシェイプ変数定義を渡すことで、インスタンスのシェイプを変更できます。
たとえば:
-e instance_shape="VM.Standard3.Flex"同様に、Oracle Linuxイメージのデフォルト・バージョンでは、default_vars.ymlファイルに定義されている変数
os_versionが使用されます。この値は、コマンドラインでOracle Linuxメジャー・バージョンを渡すことによって変更できます。たとえば:
-e os_version="9"重要:プレイブックが正常に実行されるまで待機し、一時停止タスクに到達します。プレイブックのこの段階では、Oracle Linuxのインストールが完了し、インスタンスの準備ができました。前回の再生は、デプロイするノードのパブリックIPアドレスとプライベートIPアドレスを出力します。
Oracle Linux Automation Engine制御ノードの設定
制御ノードは、Oracle Linux Automation Engineプレイブックを実行するためのシステムです。再生ブックを実行するには、Oracle Linux Automation Engineパッケージをインストールする必要があります。
-
制御ノードのIPアドレスと同じ変数を設定します。
export CONTROL="<ip_address_of_ol-control-node>" -
端末を開き、SSH鍵ペアを制御ノードにコピーします。
scp -rp ~/.ssh/id_rsa* oracle@$CONTROL:~/.ssh/ -
SSH秘密キーに対する権限を設定します。
ssh oracle@$CONTROL "chmod 600 ~/.ssh/id_rsa" -
SSHを介してol-control-nodeシステムに接続します。
ssh oracle@$CONTROL -
Oracle Linux Automation Engineパッケージおよび依存関係をインストールします。
sudo dnf install -y ansible-coreansible-coreパッケージは、Oracle LinuxのAppStreamリポジトリにあります。 -
パッケージのインストールをテストします。
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アドレスは、デプロイメント・スクリプトの出力の一部として表示されます。
インベントリ・ファイルの作成
Oracle Linux Automation Engineは、デフォルトのインベントリを/etc/ansible/hostsに配置します。また、プロジェクト・レベルのインベントリ・ファイルも使用できます。プロジェクト・レベルのインベントリを使用する場合は、アドホック・コマンドまたはプレイブックを実行するときに、-iオプションを使用してインベントリ・ファイルへのパスを指定する必要があります。
Oracle Linux Automation Engine制御ノードのターミナルから:
-
プロジェクト・ディレクトリの作成
mkdir ~/ol-automation -
新しいディレクトリに移動し、任意のテキスト・エディタを使用して新しいインベントリ・ファイルを開きます。ここでは、
viを使用します。cd ~/ol-automationvi inventory -
iを入力して、vi挿入モードに入ります。 -
指定されたol-hostシステムのパブリックIPアドレスを追加します。ファイルにはIPアドレスのみを含める必要があります。
次に例を示します:
130.61.100.96 -
保存してファイルを閉じます。
viを使用する場合は、ESC、:wq!およびENTERを入力できます。 -
インベントリ・ファイルを検証します。
ansible-inventory -i inventory --list出力に在庫情報が表示されます。
出力例:
{ "_meta": { "hostvars": {} }, "all": { "children": [ "ungrouped" ] }, "ungrouped": { "hosts": [ "130.61.100.96" ] } }参照
allはインベントリ・ファイル内のすべてのホストを指し、ungroupedセクションはリストされたグループの一部ではないホストを対象としています。 -
インベントリを編集し、
developmentというグループ内にホストを配置します。vi inventory -
iを入力して、vi挿入モードに入ります。 -
グループ名を大カッコで囲み、その下にIPアドレスを続けて追加します。
次に例を示します:
[development] 130.61.100.96 -
保存してファイルを閉じます。
viを使用する場合は、ESC、:wq!およびENTERを入力できます。 -
検証ステップを再度実行し、出力にグループが含まれていることを確認します。
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制御ノードのターミナルから:
-
pingモジュールを実行します。ansible all -i inventory -m pingallオプションは、-iオプションで指定されたインベントリ・ファイルにリストされているすべてのホストに対して実行するようにコマンドに指示します。このコマンドは、個々のホスト名またはグループも受け入れます。-mオプションは、実行するモジュールを指定します。 -
プロンプトで
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に割り当てます。 -
リモート・ユーザーをインベントリ・ファイルに追加します。
vi inventory -
iを入力して、vi挿入モードに入ります。 -
例に示すように、2つの変数を追加します。
次に例を示します:
[development] ol-host ansible_host=130.61.100.96 ansible_user=opc無料のラボ環境では、
opcというユーザーを含むリモート管理をテストするための事前構成済システムが提供されます。opcは、Oracle Cloud Infrastructure (OCI)のOracle Linuxインスタンスで作成されるデフォルト・ユーザーです。ホスト名にはol-hostというサンプル名を使用できます。 -
保存してファイルを閉じます。
viを使用する場合は、ESC、:wq!およびENTERと入力して実行できます。 -
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制御ノードのターミナルから:
-
新しいプレイブックファイルを作成します。
vi hello.yml -
iを入力して、vi挿入モードに入ります。 -
次のテキストをプレイブックファイルに追加します。
次に例を示します:
--- - hosts: all tasks: - name: Print message debug: msg: Hello from Oracle Linuxプレイブックは常に
---で始まり、管理するホストを指定するhosts行が続く必要があります。all値は、インベントリにリストされているすべてのホストに対してプレイブックを実行することを示します。または、各ターゲットをコロンまたはカンマで区切ってリストすることで、ホストまたはグループの特定のリストに対してのみタスクを実行するようにプレイブックに指示できます。次に、タスクはデバッグ・モジュールを使用してメッセージを出力します。name行を指定すると、Oracle Linux Automation Engineはプレイブックの実行時に端末に出力を表示します。 -
保存してファイルを閉じます。
viを使用する場合は、ESC、:wq!およびENTERと入力して実行できます。 -
インベントリに対して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は、ファクトと呼ばれるデフォルトのタスク収集情報を実行します。このタスクは、リモートホストに関する情報を取り込みます。このプレイブックは、あとで条件によってタスクの動作をカスタマイズするために使用できます。 -
次のアドホックコマンドを実行して、ホストの factsのリストを出力します。
ansible ol-host -i inventory -m setup
次のステップ
このメッセージおよびfacts出力は、Oracle Linux Automation Engineを使用して最初のプレイブックを正常に実行したことを確認します。
関連リンク
- Oracle Linux Automation Managerドキュメント
- Oracle Linux Automation Managerトレーニング
- Oracle Linuxトレーニング・ステーション
その他の学習リソース
docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Write a Playbook with Oracle Linux Automation Engine
F52967-05
Copyright ©2021, Oracle and/or its affiliates.