注意:
- 此教程位于 Oracle 提供的免费实验室环境中。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
使用 Oracle Linux Automation Engine 编写手册
简介
Oracle Linux Automation Engine 是 Oracle Linux Automation Manager 的一个组件,它是一个自动化工具,用于以手册的形式部署软件、配置系统和编排任务(例如升级和更新)。最初使用 ansible
软件包时,Oracle Linux Automation Engine 现在源自开源 ansible-core
软件包。
以下教程介绍如何使用 Oracle Linux Automation Engine 编写手册。
目标
在本教程中,您将学习如何:
- 安装 Oracle Linux Automation Engine
- 创建清单文件
- 运行即席命令
- 编写并运行手册
先决条件
-
具有以下配置的至少两个 Oracle Linux 系统:
- 具有
sudo
权限的非 root 用户 - 非 root 用户的 ssh 密钥对
- 使用无密码 SSH 登录从一台主机到另一台主机的 SSH 功能
- 具有
部署 Oracle Linux
注:如果在您自己的租户中运行,请阅读 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
。此变量是必需的,因为环境为 Python 的 Oracle Cloud Infrastructure SDK 安装 RPM 程序包,该程序包位于 python3.6 模块下。默认部署配置使用 AMD CPU 和 Oracle Linux 8。要使用 Intel CPU 或 Oracle Linux 9,请将
-e instance_shape="VM.Standard3.Flex"
或-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
软件包位于 Oracle Linux 的ol8_appstream
系统信息库中。 -
测试软件包安装。
ansible --version
输出将显示命令版本、配置详细信息和 Python 版本依赖性。
注:如果输出显示 ERROR:Ansible 要求语言环境编码为 UTF-8;Detected None ,则表示
ansible
的语言环境设置不正确。通过设置以下两个环境变量来修复问题: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 地址,可使用 Luna Lab “资源”选项卡找到该 IP 地址。
创建库存文件
Oracle Linux Automation Engine 将默认库存放在 /etc/ansible/hosts
中。它还允许项目级清单文件。使用项目级清单时,在运行即席命令或手册时,需要使用 -i
选项提供清单文件的路径。
从 Oracle Linux Automation Engine 控制节点上的终端:
-
创建项目目录
mkdir ~/ol-automation
-
移至新目录并使用您选择的文本编辑器打开新的清单文件。在这里,我们将使用
vi
。cd ~/ol-automation
vi 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 有多个运行一次的模块,不需要编写剧本。其中最基本的是 ping
模块,它尝试根据清单中提供的详细信息建立 SSH 连接。
从 Oracle Linux Automation Engine 控制节点上的终端:
-
运行
ping
模块。ansible all -i inventory -m ping
all
选项指示该命令针对-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
插入模式。 -
添加两个变量,如示例中所示。
示例:
[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
,因此剧本将运行一次。在运行手册中列出的任务之前,Oracle Linux Automation Engine 将运行名为 facts 的默认任务收集信息。此任务会提取有关远程主机的信息,这些主机稍后可能会用于通过条件定制任务行为。 -
运行以下即席命令可输出主机的完整 facts 列表。
ansible ol-host -i inventory -m setup
后续步骤
此消息和事实输出确认您使用 Oracle Linux Automation Engine 成功运行了第一个手册。
相关链接
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Write a Playbook with Oracle Linux Automation Engine
F52970-04
Copyright ©2021, Oracle and/or its affiliates.