注意:

使用 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

注:如果在您自己的租户中运行,请阅读 linux-virt-labs GitHub 项目 README.md ,并在部署实验室环境之前完成先决条件。

  1. 在 Luna 桌面上打开一个终端。

  2. 克隆 linux-virt-labs GitHub 项目。

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. 转到工作目录。

    cd linux-virt-labs/olam
    
  4. 安装所需的集合。

    ansible-galaxy collection install -r requirements.yml
    
  5. 更新 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
    
  6. 部署实验室环境。

    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 软件包。

  1. 将变量设置为等于控制节点的 IP 地址。

    export CONTROL="<ip_address_of_ol-control-node>"
    
  2. 打开终端并将 SSH 密钥对复制到控制节点。

    scp -rp ~/.ssh/id_rsa* oracle@$CONTROL:~/.ssh/
    
  3. 设置对 SSH 私有密钥的权限。

    ssh oracle@$CONTROL "chmod 600 ~/.ssh/id_rsa"
    
  4. 通过 SSH 连接到 ol-control-node 系统。

    ssh oracle@$CONTROL
    
  5. 安装 Oracle Linux Automation Engine 软件包和依赖项。

    sudo dnf install -y ansible-core
    

    ansible-core 软件包位于 Oracle Linux 的 ol8_appstream 系统信息库中。

  6. 测试软件包安装。

    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 控制节点上的终端:

  1. 创建项目目录

    mkdir ~/ol-automation
    
  2. 移至新目录并使用您选择的文本编辑器打开新的清单文件。在这里,我们将使用 vi

    cd ~/ol-automation
    
    vi inventory
    
  3. 通过键入 i 进入 vi 插入模式。

  4. 添加提供的 ol-host 系统的公共 IP 地址。文件应仅包含 IP 地址。

    示例:

    130.61.100.96
    
  5. 保存并关闭该文件。如果使用 vi,则可以键入 ESC:wq!ENTER

  6. 验证清单文件。

    ansible-inventory -i inventory --list
    

    输出显示库存信息。

    输出示例:

    {
        "_meta": {
            "hostvars": {}
        },
        "all": {
            "children": [
                "ungrouped"
            ]
        },
        "ungrouped": {
            "hosts": [
                "130.61.100.96"
            ]
        }
    }
    

    引用 all 引用清单文件中的每个主机,ungrouped 部分适用于不属于所列组的任何主机。

  7. 编辑清单并将主机置于名为 development 的组中。

    vi inventory
    
  8. 通过键入 i 进入 vi 插入模式。

  9. 使用以下 IP 地址在括号内添加组名,如示例中所示。

    示例:

    [development]
    130.61.100.96
    
  10. 保存并关闭该文件。如果使用 vi,则可以键入 ESC:wq!ENTER

  11. 再次运行验证步骤以查看添加到输出的组。

    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 控制节点上的终端:

  1. 运行 ping 模块。

    ansible all -i inventory -m ping
    

    all 选项指示该命令针对 -i 选项指定的清单文件中列出的所有主机运行。该命令还接受单个主机名或组。

    -m 选项指定要运行的模块。

  2. 通过在提示符下键入 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

  3. 将远程用户添加到清单文件中。

    vi inventory
    
  4. 通过键入 i 进入 vi 插入模式。

  5. 添加两个变量,如示例中所示。

    示例:

    [development]
    ol-host ansible_host=130.61.100.96 ansible_user=opc
    

    免费实验室环境提供了一个用于测试远程管理的预配置系统,其中包含名为 opc 的用户。opc 是基于 Oracle Cloud Infrastructure (OCI) 中的 Oracle Linux 实例创建的默认用户。可以对主机名使用样例名称 ol-host

  6. 保存并关闭该文件。如果使用 vi,则可以通过键入 ESC:wq!ENTER 来执行此操作。

  7. 使用主机名而不是 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 控制节点上的终端:

  1. 创建新的剧本文件。

    vi hello.yml
    
  2. 通过键入 i 进入 vi 插入模式。

  3. 将以下文本添加到播放簿文件。

    示例:

    ---
    - hosts: all
      tasks:
        - name: Print message
          debug:
            msg: Hello from Oracle Linux
    

    剧本应始终以 --- 开头,后跟指定要管理的主机的 hosts 行。all 值表示剧本将对清单中列出的每个主机执行操作。或者,您可以指示剧本仅针对特定的主机或组列表运行任务,方法是列出每个以冒号或逗号分隔的目标。然后,该任务使用调试模块来打印消息。

    name 行使 Oracle Linux Automation Engine 在运行手册时在终端中显示输出。

  4. 保存并关闭该文件。如果使用 vi,则可以通过键入 ESC:wq!ENTER 来执行此操作。

  5. 对库存运行 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 的默认任务收集信息。此任务会提取有关远程主机的信息,这些主机稍后可能会用于通过条件定制任务行为。

  6. 运行以下即席命令可输出主机的完整 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 帮助中心