介绍
在本实验中,你将学习 Ansible 配置文件以及如何自定义 Ansible 的行为。Ansible 使用配置文件来定义控制其操作的各种设置。你将探索默认配置,创建自定义配置文件,并了解不同配置选项如何影响 Ansible 的行为。通过本实验,你将获得在不同场景下配置 Ansible 的实践经验,这对于根据你的特定需求和环境定制 Ansible 至关重要。
在本实验中,你将学习 Ansible 配置文件以及如何自定义 Ansible 的行为。Ansible 使用配置文件来定义控制其操作的各种设置。你将探索默认配置,创建自定义配置文件,并了解不同配置选项如何影响 Ansible 的行为。通过本实验,你将获得在不同场景下配置 Ansible 的实践经验,这对于根据你的特定需求和环境定制 Ansible 至关重要。
让我们从检查 Ansible 的默认配置开始。Ansible 会在多个位置查找配置文件,每个位置的优先级不同。
首先,检查是否存在系统级的 Ansible 配置文件:
cat /etc/ansible/ansible.cfg
如果文件不存在,你可能会看到一条错误信息,这在许多环境中是正常的。
接下来,查看 Ansible 的默认配置值。可以通过运行以下命令实现:
ansible-config dump
此命令将显示所有当前的 Ansible 配置设置。由于列表较长,我们分解一些重要的设置:
DEFAULT_HOST_LIST
:默认的 inventory 文件路径。DEFAULT_REMOTE_USER
:Ansible 用于连接远程主机的默认 SSH 用户。DEFAULT_BECOME_METHOD
:Ansible 用于权限提升(如 sudo)的默认方法。如果你还不理解所有这些设置,请不要担心。随着你更多地使用 Ansible,你会逐渐熟悉与你需求最相关的设置。
按 Q
键退出输出。
现在,让我们创建一个简单的 inventory 文件,用于后续步骤:
echo "localhost ansible_connection=local" > /home/labex/project/inventory
这将创建一个仅定义了 localhost 的最小 inventory 文件。
现在我们已经了解了默认配置,接下来让我们创建一个自定义的 Ansible 配置文件。这将允许我们覆盖默认设置,并根据需求调整 Ansible 的行为。
在 /home/labex/project
目录下创建一个名为 ansible.cfg
的新文件:
nano /home/labex/project/ansible.cfg
将以下内容添加到文件中:
[defaults]
inventory = /home/labex/project/inventory
remote_user = labex
host_key_checking = False
stdout_callback = yaml
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False
让我们分解这些设置:
inventory
:指定 inventory 文件的路径。remote_user
:设置用于连接的默认 SSH 用户。host_key_checking
:禁用 SSH 主机密钥检查,这在测试环境中非常有用(但在生产环境中应启用以确保安全)。stdout_callback
:将输出格式更改为 YAML,以提高可读性。become
:默认启用权限提升。become_method
:将 sudo 设置为权限提升的方法。become_user
:指定在提升权限时要切换到的用户。become_ask_pass
:禁用 sudo 密码提示。保存并退出编辑器。在 nano 中,你可以按 Ctrl+X
,然后按 Y
确认,再按 Enter
保存。
现在,让我们验证 Ansible 是否正在使用我们的新配置文件。运行以下命令:
ansible-config dump --only-changed
DEFAULT_BECOME(/home/labex/project/ansible.cfg) = True
DEFAULT_BECOME_ASK_PASS(/home/labex/project/ansible.cfg) = False
DEFAULT_BECOME_METHOD(/home/labex/project/ansible.cfg) = sudo
DEFAULT_BECOME_USER(/home/labex/project/ansible.cfg) = root
DEFAULT_HOST_LIST(/home/labex/project/ansible.cfg) = ['/home/labex/project/inventory']
DEFAULT_REMOTE_USER(/home/labex/project/ansible.cfg) = labex
DEFAULT_STDOUT_CALLBACK(/home/labex/project/ansible.cfg) = yaml
HOST_KEY_CHECKING(/home/labex/project/ansible.cfg) = False
此命令将仅显示与默认配置不同的设置。你应该会看到我们在自定义 ansible.cfg
文件中所做的更改。
现在我们已经设置了自定义配置,接下来让我们创建一个简单的 playbook 来测试它。这将帮助我们理解配置更改如何影响 Ansible 的行为。
在 /home/labex/project
目录下创建一个名为 test_config.yml
的新文件:
nano /home/labex/project/test_config.yml
将内容更新如下:
---
- name: Test Custom Configuration
hosts: all
tasks:
- name: Display remote user
debug:
msg: "Connected as user: {{ ansible_user }}"
- name: Display privilege escalation info
debug:
msg: "Privilege escalation is {{ 'enabled' if ansible_become | default(false) else 'disabled' }}"
- name: Show Ansible configuration
debug:
msg: "Inventory file: {{ lookup('config', 'DEFAULT_HOST_LIST') }}"
- name: Check if become is enabled in ansible.cfg
command: grep "become = True" /home/labex/project/ansible.cfg
register: become_check
changed_when: false
failed_when: false
- name: Display become setting from ansible.cfg
debug:
msg: "Become is {{ 'enabled' if become_check.rc == 0 else 'disabled' }} in ansible.cfg"
此更新后的 playbook 进行了以下更改:
ansible_become
添加了默认值,以防止未定义变量错误。ansible.cfg
文件中的 become
设置,从而更准确地反映你的配置。现在,让我们运行更新后的 playbook:
ansible-playbook /home/labex/project/test_config.yml
这应该会正常运行,并为你提供有关 Ansible 配置的信息。
此外,让我们通过更新 ansible.cfg
文件来解决弃用警告:
nano /home/labex/project/ansible.cfg
在 [defaults]
部分下添加以下行:
interpreter_python = /usr/bin/python3
你的 ansible.cfg
文件现在应如下所示:
[defaults]
inventory = /home/labex/project/inventory
remote_user = labex
host_key_checking = False
stdout_callback = yaml
interpreter_python = /usr/bin/python3
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False
保存并退出编辑器。
现在,当你再次运行 playbook 时:
ansible-playbook /home/labex/project/test_config.yml
你应该会看到没有弃用警告的输出,并且它会正确显示你的配置设置。
在本实验中,你学习了 Ansible 配置文件以及如何自定义 Ansible 的行为。以下是关键要点:
Ansible 使用配置文件来控制其行为。可以使用 ansible-config dump
命令查看默认配置。
你可以创建自定义配置文件来覆盖默认设置。这些文件通常命名为 ansible.cfg
,可以放置在不同的位置,具有不同的优先级。
重要的配置设置包括:
inventory
:指定 inventory 文件的路径。remote_user
:设置用于连接的默认 SSH 用户。host_key_checking
:控制 SSH 主机密钥检查。become
及相关设置:控制权限提升。ansible-config dump --only-changed
命令可用于仅查看与默认配置不同的设置。
你可以通过创建和运行显示配置信息的 playbook 来测试配置更改。
--config
选项允许你在运行 Ansible 命令时指定特定的配置文件,这在测试或需要为不同场景使用不同配置时非常有用。
理解并能够自定义 Ansible 的配置对于将 Ansible 适应你的特定环境和需求至关重要。随着你继续使用 Ansible,你可能会发现需要调整这些设置以优化自动化工作流。
通过为不同场景创建不同的配置文件来进行练习。例如,你可以创建一个用于测试环境的配置,其中安全设置较为宽松,另一个用于生产环境的配置,其中安全设置更为严格。
请记住,虽然某些设置(如禁用 host_key_checking
)在测试中可能很方便,但在安全性至关重要的生产环境中应谨慎考虑。始终将 Ansible 配置作为整体系统安全策略的一部分进行审查。
在未来的实验中,你将学习如何在更复杂的场景中利用这些配置设置,将它们与角色、动态 inventory 和其他高级 Ansible 功能集成。