附註:
- 此教學課程可在 Oracle 提供的免費實驗室環境中取得。
- 它使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特定的值。
搭配 Oracle Linux Automation Engine 使用 OCI 動態產品目錄
簡介
Oracle Linux Automation Engine 是用於佈建和組態管理的開放原始碼軟體,利用產品目錄檔案,在您的基礎架構內針對受管理的節點或主機進行操作。此產品目錄檔案包含伺服器清單、其 IP 位址以及其他選擇性連線資訊。
如果您的基礎架構強制變更,靜態產品目錄檔案就可以正常運作。
不過,使用雲端時,您的基礎架構可能會持續增加。因此,新增和移除主機時,動態更新您的產品目錄會很有幫助。
目標
在本教學課程中,您將學習到:
- 設定 Oracle Linux Automation Engine
- 建立 OCI 動態產品目錄
- 使用 OCI 動態庫存搭配手冊
必要條件
-
至少為兩個 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" 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"
免費實驗室環境需要額外的 localhost
ansible_python_interpreter
變數,因為它會為 Python 適用的 Oracle Cloud Infrastructure SDK 安裝 RPM 套件。安裝此套裝軟體的位置位於以您 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 位址。
設定 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-core
ansible-core 套裝軟體可於 AppStream 儲存庫中取得。
-
測試套裝軟體安裝。
ansible --version
複查輸出並尋找預設版本的 Python Oracle Linux Automation Manager。這就是必須安裝 Python 適用的 Oracle Cloud Infrastructure (OCI) SDK 的環境。
注意:如果輸出顯示錯誤:Ansible 需要將地區設定編碼設為 UTF-8;偵測到「無」。,代表
ansible
的地區設定設定不正確。設定這兩個環境變數來修正問題:export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
安裝適用於 Python 的 Oracle Cloud Infrastructure SDK
OCI 動態產品目錄 Plugin 需要在控制節點上使用 OCI SDK 進行 Python 組態設定。我們可以使用 Python 套裝程式安裝程式 Oracle Linux RPM 或 PIP 安裝 OCI SDK。
-
使用 PIP 安裝適用於 Python 的 OCI SDK。
-
安裝 PIP 的套裝軟體和相依性。
Oracle Linux 8:
sudo dnf install -y python3.12-pip python3.12-setuptools
Oracle Linux 9:
sudo dnf install -y python3.9-pip python3.9-setuptools
-
安裝 Python 套裝軟體
Oracle Linux 8:
/usr/bin/python3.12 -m pip install oci
Oracle Linux 9:
/usr/bin/python3.9 -m pip install oci
如果您位於代理伺服器後方,請增加
--proxy
選項。執行python3.12 -m pip help install
命令可在說明中取得詳細資訊。
-
-
列印版本以測試適用於 Python 的 OCI SDK 安裝。
Oracle Linux 8:
python3.12 -c "import oci;print(oci.__version__)"
Oracle Linux 9:
python3.9 -c "import oci;print(oci.__version__)"
-
建立 OCI SDK 預設組態目錄。
mkdir -p ~/.oci
-
建立 SDK 預設組態檔
免費實驗室提供預先產生的 SDK 組態,您可以使用
scp
複製到 ol-control-node 系統。-
從桌面環境開啟一個 new 終端機。
-
將所有 SDK 組態檔複製到 ol-control-node 系統。
scp ~/.oci/* oracle@<ip_address_of_instance>:~/.oci/.
exit
如果您在免費實驗室環境之外遵循此教學課程,請參閱 OCI 文件的 SDK 和 CLI 組態檔和必要的金鑰和 OCID 區段中提供的指示,以產生您的 OCI 組態檔。
-
-
切換到連線至 ol-control-node 系統的終端機視窗。
-
更新 SDK 組態檔中
key_file
的位置。從桌面環境複製 SDK 組態檔時,我們必須修改
key_file
的使用者主目錄部分,以確保其符合控制系統的使用者名稱。sed -i 's/luna.user/oracle/g' ~/.oci/config
-
建立測試 Python 命令檔以確認 SDK 運作中。
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 租用戶和區間的物件儲存命名空間。 -
執行命令檔
Oracle Linux 8:
python3.12 test.py
Oracle Linux 9:
python3.9 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 集合中包括其動態產品目錄 Plugin。
-
建立 YAML 組態來源以設定產品目錄 Plugin。
來源檔案名稱必須為
<filename>.oci.yml
或<filename>.oci.yaml
。其中<filename>
是使用者定義的實用 ID。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
-
建立產品目錄圖表以測試產品目錄 Plugin。
ansible-inventory -i ~/myproject/myproject.oci.yml --graph
輸出會顯示一系列的警告與錯誤。什麼東西不對勁?
發生此錯誤的原因是 Plugin 需要知道區間 OCID。如果您提供租用戶 OCID (而非區間 OCID) 且具備正確的權限,Plugin 將會產生整個租用戶的產品目錄。
Plugin 無法直接從 SDK 組態檔讀取區間 OCID 資訊,請將它加到 Plugin 組態來源檔案。
-
從 SDK 組態檔擷取區間 OCID,然後將其指定給 comp_ocid 變數。
comp_ocid=$(grep -i compartment ~/.oci/config | sed -e 's/compartment-id=//g')
-
將區間參數附加至 Plugin 來源檔案。
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 位址的原因是要求的運算執行處理只有專用 IP 位址時。
-
更新 Plugin 組態來源檔案,以變更 Plugin 主機名稱格式參數。
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 存取。
-
建立偵測主機的手冊。
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
。您可以修改此手冊,從名稱移除@
字元並將該名稱輸入- 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 執行例行管理作業。
相關連結
其他學習資源
探索 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
F55848-03
Copyright ©2022, Oracle and/or its affiliates.