注意:
- 此教程位于 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
,因为它为 Oracle Cloud Infrastructure SDK for Python 安装 RPM 软件包。根据您的 Oracle Linux 版本,此软件包的安装位置位于系统的默认 Python 模块下面。使用清单变量可避免影响在本地主机以外的主机上运行的播放。默认部署配置使用 AMD CPU。您可以通过在命令行上传递新的配置变量定义来更改实例的配置。
例如:
-e instance_shape="VM.Standard3.Flex"
同样,Oracle Linux 映像的缺省版本使用在 `default_vars.yml file' 中定义的变量
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。
注:如果输出显示 ERROR:Ansible 要求语言环境编码为 UTF-8;Detected None ,则表示
ansible
的语言环境设置不正确。通过设置以下两个环境变量来修复问题:export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
安装适用于 Python 的 Oracle Cloud Infrastructure SDK
OCI 动态清单插件需要在控制节点上提供适用于 Python 配置的 OCI SDK。我们可以使用 Oracle Linux RPM 或 PIP(适用于 Python 的软件包安装程序)安装 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 系统。-
从桌面环境中打开新终端。
-
将所有 SDK 配置文件复制到 ol-control-node 系统。
scp ~/.oci/* oracle@<ip_address_of_instance>:~/.oci/.
exit
如果您在免费实验室环境之外遵循本教程,请参见 OCI 文档的 SDK and CLI Configuration File 和 Required Keys and OCIDs 部分中提供的说明,以生成 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 Collection 包含一组模块,可自动执行云基础设施预配和配置、编排复杂的运营流程以及部署和更新软件资产。
-
创建项目目录。
mkdir ~/myproject
-
创建需求文件。
cat << EOF | tee ~/myproject/requirements.yml > /dev/null --- collections: - name: oracle.oci EOF
-
安装 OCI Ansible Collection。
ansible-galaxy collection install -r ~/myproject/requirements.yml
如果已安装了以前的版本,请通过运行带有
--force
选项的命令来获取最新版本。ansible-galaxy collection install --force oracle.oci
使用 OCI 动态库存
Oracle 在 OCI Ansible Collection 中包含其动态清单插件。
-
通过创建 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 地址时,获取专用 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 访问。
-
创建一个对主机进行 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 上执行例行管理任务。
相关链接
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Use an OCI Dynamic Inventory with Oracle Linux Automation Engine
F55854-03
Copyright ©2022, Oracle and/or its affiliates.