配置 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
execution‑environment部分配置 ansible‑navigator 命令所用执行环境的设置。image部分定义执行环境要使用的容器镜像名称。- 嵌套在
pull部分下方的policy部分指出,只有本地机器上不存在容器镜像时才要拉取容器镜像。 - 嵌套在
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.