管理 Ansible 配置文件

配置 Ansible

您可以在每个 Ansible 项目目录中创建和编辑两个文件,用于配置 Ansible 的行为和 ansible‑navigator 命令:

  • ansible.cfg,用于配置多个 Ansible 工具的行为。
  • ansible‑navigator.yml,用于更改 ansible‑navigator 命令的默认选项。

管理 Ansible 设置

您可在 Ansible 项目的目录中创建ansible.cfg文件,以应用适用于多个 Ansible 工具的设置。

Ansible 配置文件由几个部分组成,每一部分含有以键值对形式定义的设置。部分的标题以方括号括起。对于基本操作,请使用以下两部分:

  • [defaults],用于设置 Ansible 操作的默认值
  • [privilege_escalation],用于配置 Ansible 如何在受管主机上执行特权升级

例如,下面是典型的 ansible.cfg 文件:

bash 复制代码
[defaults]
inventory = ./inventory
remote_user = user
ask_pass = false

[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false

确定当前配置设置

ansible‑navigator config 命令会显示当前 Ansible 配置。该命令会显示 Ansible 用于每个参数的实际值,及其检索该值、配置文件或环境变量的来源。

以下输出来自在包含 ansible.cfg 文件的 /home/student/project/ 目录中运行的 ansible‑navigator config 命令:

bash 复制代码
 Name                         Default  Source                          Current
 ...output omitted...
44|Default ask pass            True     default                         False
45|Default ask vault pass      True     default                         False
46|Default become              False    /home/student/project/ansible.cfg True
47|Default become ask pass     False    /home/student/project/ansible.cfg True
 ...output omitted...
50|Default become method       False    /home/student/project/ansible.cfg sudo
51|Default become user         False    /home/student/project/ansible.cfg root
 ...output omitted...

在以上示例中,每一行描述一个 Ansible 配置参数。

  • Default ask pass 和 Default ask vault pass 参数使用默认值,如 Default 列中的 True 值所示。

  • Default become 和 Default become ask pass 参数已在 /home/student/project/ansible.cfg 配置文件中手动配置为 True。Default 列为这两个参数的 False。Source 列提供定义这些参数的配置文件的路径,Current 列显示这两个参数的值为 True。

  • Default become method 参数的当前值为 sudo,Default become user 参数的当前值为 root。

要退出 ansible‑navigator config 命令的交互模式,请按 Esc 或键入 :q。

管理自动化内容导航器的设置

您可以为 ansible‑navigator 创建配置文件(或设置文件),以覆盖其配置设置的默认值。设置文件可以采用 JSON (.json) 或 YAML(.yml 或 .yaml)格式。本项讨论主要采用 YAML 格式。

自动化内容导航器按以下顺序查找设置文件,并使用它找到的第一个文件:

  • 如果设置了 ANSIBLE_NAVIGATOR_CONFIG 环境变量,则使用所指定位置处的配置文件。
  • 当前 Ansible 项目目录中的 ansible‑navigator.yml 文件。
  • ~/.ansible‑navigator.yml 文件(在您的主目录中)。请注意,其文件名开头有一个 "点"。

与 Ansible 配置文件一样,每个项目都可以有自己的自动化内容导航器设置文件。

以下 ansible‑navigator.yml 文件会配置一些常见设置:

bash 复制代码
ansible-navigator:
  execution-environment:
    image: utility.lab.example.com/ee-supported-rhel8:latest
    pull:
      policy: missing
  playbook-artifact:
    enable: false
  1. execution‑environment 部分配置 ansible‑navigator 命令所用执行环境的设置。
  2. image 部分定义执行环境要使用的容器镜像名称。
  3. 嵌套在 pull 部分下方的 policy 部分指出,只有本地机器上不存在容器镜像时才要拉取容器镜像。
  4. 嵌套在 playbook‑artifact 部分下方的 enable 部分可禁用在使用 ansible‑navigator run 命令时生成 playbook 工件。如果运行 playbook 时需要提示输入密码,则必须禁用 playbook 工件。

配置连接

Ansible 需要知道如何与其受管主机通信。更改配置文件的一个最常见原因是为了控制 Ansible 使用什么方法和用户来管理受管主机。下面提供一些所需信息示例:

  • 列出受管主机和主机组的清单的位置
  • 用于与受管主机通信的连接协议(默认为 SSH),以及是否需要非标准网络端口来连接到服务器
  • 要在受管主机上使用的远程用户,可以是 root 用户,也可以是非特权用户
  • 如果远程用户为非特权用户,Ansible 需要知道是否要尝试将特权升级为 root 以及如何升级(例如,通过 sudo)
  • 是否提示输入 SSH 密码或 sudo 密码才能登录或获取特权

清单位置

在 ansible.cfg 文件的 defaults 部分,inventory 参数可以直接指向某一静态清单文件,或者指向包含多个静态清单文件和动态清单脚本的目录。

bash 复制代码
[defaults]
inventory = ./inventory

连接设置

默认情况下,Ansible 使用 SSH 协议连接受管主机。控制 Ansible 如何连接受管主机的最重要参数在 defaults 部分中设置。

如果没有另行配置,Ansible 会尝试连接受管主机时使用的用户名与运行 Ansible 命令的本地用户相同。若要指定不同的远程用户,请将 remote_user 参数设置为该用户名。如果为运行 Ansible 的本地用户配置了 SSH 私钥,使得它们能够在受管主机上进行远程用户的身份验证,则 Ansible 将自动登录。

如果您没有为远程用户配置基于 SSH 密钥的身份验证,可以使用基于密码的身份验证。如果要对 ansible‑navigator 使用基于密码的 SSH 身份验证,您需要配置 ansible‑navigator 以防生成 playbook 工件(记录 playbook 运行信息的日志文件)。

下面提供一个最简单的 ansible‑navigator.yml 文件示例,该文件阻止了 playbook 工件的生成:

bash 复制代码
ansible-navigator:
  playbook-artifact:
    enable: false

利用此配置,除了要运行的 playbook 外,您还可以使用 -m stdout 和 --ask-pass 选项运行 ansible-navigator run,这样 ansible‑navigator 命令便会提示您输入远程用户的 SSH 密码。

如果您设置了基于密码的 SSH 身份验证,则可以配置基于密钥的 SSH 身份验证。

第一步是确保在 ~/.ssh 中为控制节点上的用户配置了 SSH 密钥对。可以运行 ssh‑keygen 命令来生成密钥对。

如果是单一现有受管主机,您可以在受管主机上安装公钥,并使用 ssh‑copy‑id 命令在本地的 ~/.ssh/known_hosts 文件中填充其主机密钥,如下所示:

bash 复制代码
[user@controlnode ~]$ ssh-copy-id root@web1.example.com
The authenticity of host 'web1.example.com (192.168.122.181)' can't be established.
ECDSA key fingerprint is 70:9c:03:cd:de:ba:2f:11:98:fa:a0:b3:7c:40:86:4b.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter
  out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted
  now it is to install the new keys
root@web1.example.com's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@web1.example.com'"
and check to make sure that only the key(s) you wanted were added.
相关推荐
逐米时代1 小时前
远程运维诊断减少到场率
java·服务器·前端
pt10431 小时前
CML网络仿真入门-6(结):Cisco Modeling Labs 示例拓扑
服务器·网络
MicrosoftCloud2 小时前
性能排查 01|free 显示内存用了 90% 就是快满了吗?buff/cache 与 available 一次讲清
linux·运维·内存·free·buff/cache
灯澜忆梦2 小时前
【docker】#1 | Docker 初识
运维·docker·容器
风寄巴山秋2 小时前
OpenBMC:Web 页面功能异常排查
运维·服务器·前端·架构
xiaoye-duck2 小时前
《Linux 网络编程》深入理解 epoll(下):epoll 实战开发与 LT/ET 触发模式深度剖析
linux·网络
小鹿的周先生3 小时前
第18章-MCP
服务器·网络·人工智能
小白的码BUG之路3 小时前
Jenkins -- 连接gitee
运维·gitee·jenkins
峥无3 小时前
Linux线程深度剖析:轻量级进程、虚拟内存分页、进程线程资源对比
linux·运维·mmap