ノート:
- このチュートリアルは、Oracle提供の無料ラボ環境で入手できます。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときに、これらの値をクラウド環境に固有の値に置き換えます。
Oracle Linux Automation EngineによるOCI動的インベントリの使用
イントロダクション
プロビジョニングおよび構成管理用のオープンソース・ソフトウェアであるOracle Linux Automation Engineは、インベントリ・ファイルを使用して、インフラストラクチャ内の管理対象ノードまたはホストに対して機能します。このインベントリ・ファイルには、サーバー、そのIPアドレスおよびその他のオプションの接続情報のリストが含まれます。
インフラストラクチャがほとんど変更されない場合、静的インベントリ・ファイルは適切に機能します。
ただし、クラウドを使用すると、インフラストラクチャは常に変化する可能性があります。そのため、ホストが入ってくるたびにインベントリを動的に更新する方法があると便利です。
目的
このチュートリアルでは、次のことを学習します。
- Oracle Linux Automation Engineの設定
- OCI動的インベントリの作成
- プレイブックでのOCI動的インベントリの使用
前提条件
-
次の構成を持つ2つ以上のOracle Linuxシステム:
- sudoアクセス権を持つroot以外のユーザー
- root以外のユーザーのsshキーペア
- パスワードなしのSSHログインを使用して、あるホストから別のホストにSSHを実行する機能
Oracle Linux Automation Engineのデプロイ
ノート:独自のテナンシで実行している場合は、linux-virt-labs
GitHubプロジェクトREADME.mdを読み、演習環境をデプロイする前に前提条件を完了してください。
-
Lunaデスクトップでターミナルを開きます。
-
linux-virt-labs
GitHubプロジェクトをクローニングします。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" EOF
-
演習環境をデプロイします。
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パッケージをインストールする必要があります。
-
新しいターミナルを開き、SSHを介してol-control-nodeシステムに接続します。
ssh oracle@<ip_address_of_instance>
-
Oracle Linux Automation Engineパッケージおよび依存関係をインストールします。
sudo dnf install -y ansible-core
ansible-coreパッケージは、ol8_appstreamリポジトリで使用できます。
-
パッケージのインストールをテストします。
ansible --version
出力を確認し、Python Oracle Linux Automation Managerのデフォルト・バージョンを探します。これは、Oracle Cloud Infrastructure (OCI) SDK for Pythonをインストールする必要がある環境です。
ノート:出力にERROR: Ansibleでは、ロケール・エンコーディングをUTF-8、検出なしにする必要があります。これは、
ansible
のロケール設定が正しくないことを示します。次の2つの環境変数を設定して問題を修正します。export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
Oracle Cloud Infrastructure SDK for Pythonの設定
OCI動的インベントリ・プラグインには、制御ノード上で動作するOCI SDK for Python構成が必要です。OCI SDKは、Python用のパッケージ・インストーラであるOracle Linux RPMまたはPIPを使用してインストールできます。
-
PIPを使用してOCI SDK for Pythonをインストールします。
-
PIPのパッケージと依存関係をインストールします。
sudo dnf install -y python3.12-pip python3.12-setuptools
-
Pythonパッケージのインストール
/usr/bin/python3.12 -m pip install oci
プロキシを使用している場合は、
--proxy
オプションを追加します。詳細は、コマンドpython3.12 -m pip help install
を実行してヘルプを参照してください。
-
-
バージョンを出力して、OCI SDK for Pythonインストールをテストします。
python3.12 -c "import oci;print(oci.__version__)"
-
OCI SDKのデフォルト構成ディレクトリを作成します。
mkdir -p ~/.oci
-
SDKのデフォルト構成ファイルの作成
無料のラボでは、事前生成されたSDK構成が提供されており、
scp
を使用してol-control-nodeシステムにコピーできます。-
デスクトップ環境から新しい端末を開きます。
-
すべてのSDK構成ファイルをol-control-nodeシステムにコピーします。
scp ~/.oci/* oracle@<ip_address_of_instance>:~/.oci/.
exit
無料の演習環境以外でこのチュートリアルに従う場合は、OCI構成ファイルを生成するために、OCIドキュメントのSDKおよびCLI構成ファイルおよび必要なキーおよびOCIDsの項に記載されている手順を参照してください。
-
-
ol-control-nodeシステムに接続されている端末ウィンドウに切り替えます。
-
SDK構成ファイルの
key_file
の場所を更新します。SDK構成ファイルをデスクトップ環境からコピーする場合は、
key_file
のユーザーのホーム・ディレクトリ部分を変更する必要があります。sed -i 's/luna.user/oracle/g' ~/.oci/config
-
SDKが機能していることを確認するテストPythonスクリプトを作成します。
cat << EOF | tee test.py > /dev/null import oci object_storage_client = oci.object_storage.ObjectStorageClient(oci.config.from_file()) result = object_storage_client.get_namespace() print("Current object storage namespace: {}".format(result.data)) EOF
test.py
スクリプトは、構成されたOCIテナンシおよびコンパートメントのオブジェクト・ストレージ・ネームスペースを表示します。 -
スクリプトの実行
python3.12 test.py
テスト・スクリプトは、構成されたテナンシの一意のネームスペースを正常に出力します。
Oracle Cloud Infrastructure Ansibleコレクションのインストール
OCI Ansibleコレクションには、クラウド・インフラストラクチャのプロビジョニングと構成、複雑な運用プロセスのオーケストレーション、ソフトウェア・アセットのデプロイメントと更新を自動化する一連のモジュールが含まれています。
-
プロジェクト・ディレクトリを作成します。
mkdir ~/myproject
-
要件ファイルを作成します。
cat << EOF | tee ~/myproject/requirements.yml > /dev/null --- collections: - name: oracle.oci EOF
-
OCI Ansibleコレクションをインストールします。
ansible-galaxy collection install -r ~/myproject/requirements.yml
以前のバージョンをインストールした場合は、
--force
オプションを指定してコマンドを実行して最新リリースを取得します。ansible-galaxy collection install --force oracle.oci
OCI動的インベントリの操作
Oracleでは、OCI Ansibleコレクションに動的なインベントリ・プラグインが含まれています。
-
YAML構成ソースを作成してインベントリ・プラグインを構成します。
ソース・ファイル名は、
<filename>.oci.yml
または<filename>.oci.yaml
である必要があります。ここで、<filename>
はユーザー定義の有用な識別子です。cat << EOF | tee ~/myproject/myproject.oci.yml > /dev/null --- plugin: oracle.oci.oci # Optional fields to specify oci connection config: config_file: ~/.oci/config config_profile: DEFAULT EOF
-
インベントリ・グラフを作成してインベントリ・プラグインをテストします。
ansible-inventory -i ~/myproject/myproject.oci.yml --graph
出力には、一連の警告とエラーが表示されます。では、何が間違っていたのか。
プラグインでコンパートメントOCIDを認識する必要があるため、エラーが発生します。コンパートメントOCIDではなくテナンシOCIDを指定し、適切な権限を持っている場合、プラグインはテナンシ全体のインベントリを生成します。
プラグインはSDK構成ファイルからコンパートメントOCID情報を直接読み取れないため、プラグイン構成ソース・ファイルに追加します。
-
SDK構成ファイルからコンパートメントOCIDを取得し、変数comp_ocidに割り当てます。
comp_ocid=$(grep -i compartment ~/.oci/config | sed -e 's/compartment-id=//g')
-
プラグイン・ソース・ファイルにコンパートメント・パラメータを追加します。
cat << EOF | tee -a ~/myproject/myproject.oci.yml > /dev/null compartments: - compartment_ocid: "$comp_ocid" fetch_compute_hosts: true EOF
fetch_compute_hosts
をtrue
に設定すると、インベントリではコンピュート・ホスト上の情報のみが収集され、コンパートメント内にデプロイされている他のインスタンス・タイプは無視されます。 -
テストを再実行
ansible-inventory -i ~/myproject/myproject.oci.yml --graph
この例では、
@
文字で指定されたインベントリ・グループのリストとしてコンパートメント内で使用可能なコンピュート・インスタンスを示し、インスタンスのパブリックIPアドレスを表示します。プライベートIPアドレスが必要な場合はどうすればよいですか。
プライベートIPアドレスの取得は、コントローラ・ノードの物理的な場所またはクラウド・インフラストラクチャ内で構成されたネットワーク・トポロジに基づいて必要です。プライベートIPアドレスを取得するもう1つの理由は、リクエストされたコンピュート・インスタンスにプライベートIPアドレスのみがある場合です。
-
プラグイン構成ソースファイルを更新して、プラグインのホスト名形式パラメータを変更します。
cat << EOF | tee -a ~/myproject/myproject.oci.yml > /dev/null hostname_format_preferences: - "private_ip" - "public_ip" EOF
前述の形式の例では、システムのプライベートIPアドレスがパブリックIPアドレスよりも優先されます。この構成の詳細は、ドキュメントのホスト名書式プリファレンスを参照してください。
-
プラグインを再テストします。
ansible-inventory -i ~/myproject/myproject.oci.yml --graph
出力にプライベートIPアドレスが表示されます。
プレイブックの実行
動的なインベントリの設定と構成により、簡単なプレイブックを実行することができます。制御ノードとリモート間のSSHアクセスを有効にしてください。これは、インスタンスの初期デプロイメント中にパスワードなしのSSHログインを使用して構成しました。
-
ホストをpingするプレイブックを作成します。
cat << EOF | tee ~/myproject/ping.yml > /dev/null --- - hosts: all,!$(hostname -i) tasks: - name: Ansible ping test ansible.builtin.ping: EOF
Oracle Linux Automation Engineでは、
- hosts:
エントリの後にホストまたはグループのカンマ区切りリストが想定され、!
はそれらのエントリを除外する必要があることを示します。all
エントリは、インベントリに表示される各ホストを最上位グループ内の@all
としてpingします。このプレイブックを変更して、名前から@
文字を削除し、その名前を- hosts:
エントリに入力することで、グラフ出力とは異なるグループを使用できます。 -
プレイブックを実行します。
ansible-playbook -u opc -i ~/myproject/myproject.oci.yml ~/myproject/ping.yml
プロンプトが表示されたら、ECDSAキー・フィンガープリントを受け入れます。
-i
オプションは、使用される動的インベントリ・ファイルを設定します。-u
オプションは、接続を試行するときにリモートSSHユーザーを設定します。
次のステップ
okステータスで実行されたプレイブックを完了すると、Oracle Linux Automation EngineがOCI動的インベントリを正常に使用して、コンパートメント内で検出したリモート・インスタンスと通信することが確認されます。引き続き学習し、この機能を使用して、OCIインスタンスのフリートを管理し、Oracle Linuxで日常的な管理タスクを実行します。
関連リンク
- 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を参照してください。
Use an OCI Dynamic Inventory with Oracle Linux Automation Engine
F55856-02
Copyright ©2022, Oracle and/or its affiliates.