Ansible 配置

AnsibleAnsibleBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习 Ansible 配置文件以及如何自定义 Ansible 的行为。Ansible 使用配置文件来定义控制其操作的各种设置。你将探索默认配置,创建自定义配置文件,并了解不同配置选项如何影响 Ansible 的行为。通过本实验,你将获得在不同场景下配置 Ansible 的实践经验,这对于根据你的特定需求和环境定制 Ansible 至关重要。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ansible(("`Ansible`")) -.-> ansible/AnsibleSetupandConfigurationGroup(["`Ansible Setup and Configuration`"]) ansible(("`Ansible`")) -.-> ansible/ModuleOperationsGroup(["`Module Operations`"]) ansible(("`Ansible`")) -.-> ansible/InventoryManagementGroup(["`Inventory Management`"]) ansible(("`Ansible`")) -.-> ansible/PlaybookEssentialsGroup(["`Playbook Essentials`"]) linux(("`Linux`")) -.-> linux/VersionControlandTextEditorsGroup(["`Version Control and Text Editors`"]) ansible/AnsibleSetupandConfigurationGroup -.-> ansible/install("`Ansible Setup`") ansible/ModuleOperationsGroup -.-> ansible/debug("`Test Output`") ansible/InventoryManagementGroup -.-> ansible/groups_inventory("`Define Inventory Groups`") ansible/PlaybookEssentialsGroup -.-> ansible/playbook("`Execute Playbook`") linux/VersionControlandTextEditorsGroup -.-> linux/vim("`Text Editing`") linux/VersionControlandTextEditorsGroup -.-> linux/nano("`Simple Text Editing`") subgraph Lab Skills ansible/install -.-> lab-390437{{"`Ansible 配置`"}} ansible/debug -.-> lab-390437{{"`Ansible 配置`"}} ansible/groups_inventory -.-> lab-390437{{"`Ansible 配置`"}} ansible/playbook -.-> lab-390437{{"`Ansible 配置`"}} linux/vim -.-> lab-390437{{"`Ansible 配置`"}} linux/nano -.-> lab-390437{{"`Ansible 配置`"}} end

理解 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 配置文件。这将允许我们覆盖默认设置,并根据需求调整 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 进行了以下更改:

  1. 我们为 ansible_become 添加了默认值,以防止未定义变量错误。
  2. 我们添加了两个新任务,直接检查 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 的行为。以下是关键要点:

  1. Ansible 使用配置文件来控制其行为。可以使用 ansible-config dump 命令查看默认配置。

  2. 你可以创建自定义配置文件来覆盖默认设置。这些文件通常命名为 ansible.cfg,可以放置在不同的位置,具有不同的优先级。

  3. 重要的配置设置包括:

    • inventory:指定 inventory 文件的路径。
    • remote_user:设置用于连接的默认 SSH 用户。
    • host_key_checking:控制 SSH 主机密钥检查。
    • become 及相关设置:控制权限提升。
  4. ansible-config dump --only-changed 命令可用于仅查看与默认配置不同的设置。

  5. 你可以通过创建和运行显示配置信息的 playbook 来测试配置更改。

  6. --config 选项允许你在运行 Ansible 命令时指定特定的配置文件,这在测试或需要为不同场景使用不同配置时非常有用。

理解并能够自定义 Ansible 的配置对于将 Ansible 适应你的特定环境和需求至关重要。随着你继续使用 Ansible,你可能会发现需要调整这些设置以优化自动化工作流。

通过为不同场景创建不同的配置文件来进行练习。例如,你可以创建一个用于测试环境的配置,其中安全设置较为宽松,另一个用于生产环境的配置,其中安全设置更为严格。

请记住,虽然某些设置(如禁用 host_key_checking)在测试中可能很方便,但在安全性至关重要的生产环境中应谨慎考虑。始终将 Ansible 配置作为整体系统安全策略的一部分进行审查。

在未来的实验中,你将学习如何在更复杂的场景中利用这些配置设置,将它们与角色、动态 inventory 和其他高级 Ansible 功能集成。

您可能感兴趣的其他 Ansible 教程