type
status
date
slug
summary
tags
category
icon
password
书籍
 

实施多个play

 
这个 Playbook 通过两个 play 分别管理 web 和数据库服务器,确保 httpdmariadb 服务正常运行。

如何在 Ansible Playbook 中灵活设置远程用户

当我们使用 Ansible 来自动化管理服务器时,有时候需要以不同的用户身份去执行任务,尤其是在复杂的环境中,这就需要灵活设置 Ansible 使用的远程用户。本文将带你了解如何在 Playbook 中指定不同的远程用户,避免使用默认用户,轻松应对多种场景。

1. 默认用户行为

当你运行 ansible-playbook 命令时,Ansible 会默认尝试使用你当前的本地用户去连接远程主机。如果你用的是一个普通用户,而某些任务需要用 root 权限来执行,这就会遇到问题。那么如何解决呢?这就引出了 remote_userbecome 的概念。

2. 指定远程用户的几种方式

方法一:在 Playbook 中直接指定
你可以在 Playbook 的每个 play 中通过 remote_user 指定 Ansible 连接远程主机时使用的用户。这样写很简单:
方法二:修改 ansible.cfg 配置文件
如果你想为整个项目指定一个默认的远程用户,可以在 ansible.cfg 文件中设置:
这样每次运行 Playbook 时都会自动使用这个用户,适合那些需要使用统一用户的场景。
方法三:命令行指定用户
你也可以直接在运行 ansible-playbook 命令时,通过 -u 参数来指定用户:
这种方式非常灵活,适合临时需要切换用户的时候。

3. 切换到 root 用户执行任务

有时候,即使你通过非 root 用户连接到服务器,任务执行时还是需要 root 权限,这时候可以使用 Ansible 的 become 特性。只需要在 Playbook 中添加 become: true,Ansible 就会在执行任务时自动切换到 root

4. 用户查找顺序

Ansible 查找远程用户的顺序如下:
  1. Playbook 中的 ansible_userremote_user
  1. ansible.cfg 文件中的 remote_user
  1. 当前运行命令的本地用户

5. 示例:实际运行

假设你已经写好了 Playbook,可以通过以下命令执行:

总结

通过本文,你应该掌握了如何在 Ansible Playbook 中灵活地指定不同的远程用户,并理解了如何通过 become 切换到 root 执行任务。这为我们处理不同权限的任务提供了极大的灵活性,无论是修改配置文件,还是在命令行上临时指定,都能让我们更轻松地应对多变的环境。

Ansible 模块指南:管理任务的强大工具

Ansible 附带了大量内置模块,这些模块为管理员提供了管理常见任务的便利。以下是一些常用的模块分类及其功能概述,帮助你快速找到适合的模块。

文件管理模块

  • ansible.builtin.copy: 将本地文件复制到受管主机,方便文件分发和更新。
  • ansible.builtin.file: 设置文件的权限和其他属性(如所有者、权限模式等)。
  • ansible.builtin.lineinfile: 确保文件中的某一行内容符合预期,常用于配置文件的修改。
  • ansible.posix.synchronize: 使用 rsync 同步文件或目录,适用于高效的数据传输。

软件管理模块

  • ansible.builtin.package: 使用操作系统自带的软件包管理器来安装或升级软件包。
  • ansible.builtin.dnf: 针对 DNF 软件包管理器(如 Fedora 系统)进行管理。
  • ansible.builtin.apt: 适用于基于 APT 的系统(如 Ubuntu)进行软件包管理。
  • ansible.builtin.pip: 管理 Python 软件包,支持通过 PyPI 安装。

系统管理模块

  • ansible.posix.firewalld: 管理 firewalld,用于控制防火墙端口和服务的访问权限。
  • ansible.builtin.reboot: 重新启动计算机,适用于更新系统后自动重启的场景。
  • ansible.builtin.service: 启动、停止或重启系统服务,广泛用于应用程序管理。
  • ansible.builtin.user: 添加、删除和管理系统用户帐户,确保用户权限合规。

网络工具模块

  • ansible.builtin.get_url: 通过 HTTP/HTTPS 下载文件,便于从远程源获取资源。
  • ansible.builtin.uri: 与 Web 服务进行交互,适用于构建 RESTful API 请求等任务。

这些模块几乎涵盖了日常运维工作中的所有场景,从文件管理到网络工具,再到系统和软件包管理。通过使用这些模块,Ansible 帮助管理员高效、自动化地完成大量任务。如果你想要了解更多模块或使用细节,可以查阅 Ansible 文档,获得更全面的支持。

如何使用 Ansible Navigator 查看模块文档

Ansible Navigator 是一个强大的工具,帮助管理员查看和管理模块文档,轻松了解可用模块的功能与用法。

查看模块列表

要查看当前 Ansible 环境中可用的模块列表,可以运行以下命令:
这个命令会显示模块的名称以及其功能的简要说明。例如:
运行该命令后,你将看到一个模块列表,其中包含简短的功能描述。注意,ansible-navigator doc -l 命令会显示模块的短名称,而不是完全限定的集合名称(FQCN)。

查看详细模块文档

如果你想查看某个特定模块的详细文档,可以使用以下命令:
例如,要查看 dnf 模块的详细说明,你可以运行:
这个命令会提供该模块的使用说明、参数列表、示例等详细信息。如果你指定了 -m stdout 选项,文档会以格式化文本显示;否则,可以在交互模式下查看 YAML 格式的文档。

交互模式

Ansible Navigator 还支持交互模式,你可以通过浏览模块集合的方式快速查看模块文档:
在交互模式下,用户可以更加直观地浏览可用的模块和集合,并获取模块的使用说明。

总结

通过使用 ansible-navigator doc 命令,管理员可以快速查看 Ansible 模块的文档,了解每个模块的功能与用法。无论是通过命令行快速查看,还是在交互模式下浏览,Ansible Navigator 提供了灵活的方式来帮助你掌握模块使用的详细信息。

如何在受管主机上运行任意命令——使用 Ansible 的 command 模块

在使用 Ansible 管理远程主机时,可能会遇到某些没有专门模块自动化的任务。在这种情况下,你可以使用 ansible.builtin.command 模块来在受管主机上执行任意命令。

基本使用

ansible.builtin.command 模块用于在受管主机上运行简单的命令。下面是一个基本的例子,运行 /opt/bin/makedb.sh 脚本:
该任务会在受管主机上运行 makedb.sh 脚本,并报告任务的状态。即使命令没有真正改变任何内容,Ansible 也会默认认为运行的任务已“更改”受管主机的某些内容。

使用 createsremoves 参数控制任务的执行

为了避免重复执行不必要的命令,command 模块提供了两个重要的选项:createsremoves
  • creates: 该选项指定一个文件路径,如果该文件已存在,Ansible 就不会运行该命令。可以用它来防止重复操作。例如,只有当数据库文件不存在时才初始化数据库:
    • removes: 这个选项的作用相反,它指定一个文件路径,如果该文件存在,Ansible 将运行命令并移除该文件。
    使用这些选项可以提高任务的幂等性,避免不必要的重复操作。

    commandshell 的区别

    ansible.builtin.commandansible.builtin.shell 模块的功能类似,但它们有一些重要区别:
    • command: 只运行基础命令,不解析 shell 特性(例如变量、管道)。
    • shell: 可以执行完整的 shell 命令,并支持更多复杂的 shell 语法。
    如果你需要运行涉及管道或重定向的命令,应该使用 ansible.builtin.shell,但一般建议尽量使用 command 以确保更好的安全性。例如,下面是使用 shell 执行命令的例子:

    总结

    ansible.builtin.command 模块是运行任意命令的一个简单、有效的工具。通过结合使用 createsremoves,可以确保任务的幂等性,避免不必要的操作。而在需要使用 shell 特性时,可以选择 ansible.builtin.shell 模块。总的来说,command 是一个非常有用的模块,可以在没有合适自动化模块的情况下灵活地执行任务。

    选择模块的最佳实践

    1. 优先使用 ansible.builtin.command 模块:更安全,更简单,适用于不依赖 shell 特性的命令。
    1. 仅在必要时使用 ansible.builtin.shell:如果任务需要 shell 特性,如变量、管道或重定向,才选择 shell 模块。
    1. 特殊场景下使用 ansible.builtin.raw:当目标主机不支持 Python 或需要直接运行命令时,使用 raw 模块。

    提高 Playbook 的可读性

    在 YAML 文件中,注释对于提高可读性至关重要。你可以使用 # 来添加注释,帮助团队成员理解 Playbook 的逻辑。
    示例:

    总结

    在编写 Ansible Playbook 时,选择正确的模块对于任务的安全性和幂等性至关重要。优先使用 command 模块执行简单命令,在需要 shell 特性时才使用 shell 模块。raw 模块则适用于特殊场景。通过结合这些模块,确保 Playbook 的执行过程高效、安全且可维护。

    理解YAML语法与Ansible Playbook

    YAML(Yet Another Markup Language)是一种易于阅读和编写的数据序列化格式,广泛应用于配置文件和数据交换中。在本篇博客中,我们将探讨YAML的基本语法以及如何在Ansible Playbook中使用它。

    YAML基本语法

    1. 注释
      1. 注释在YAML中通过井号(#)引入。井号右侧的内容会被视为注释。为了提高可读性,确保在井号前留一个空格。例如:
    1. 字符串
      1. 在YAML中,字符串通常不需要引号,即使它们包含空格。字符串可以用单引号或双引号括起来:
    1. 多行字符串
      1. YAML提供两种方式来编写多行字符串:
        • 保留换行符的方式:使用竖线(|)字符表示,字符串中的换行符将被保留。
          • 转换换行符的方式:使用大于号(>)字符表示,换行符将被转换为空格,同时行内的引导空白将被去除。这种方法常用于将长字符串分行以提高可读性。
        4.键值对集合
        YAML 中的键值对可以通过缩进块的形式编写:
        也可以使用内联块格式,但可读性较差,通常不建议使用。内联格式如下:
        不过,内联格式在角色中较常用,特别是在 Playbook 中定义角色及传递变量时。

        YAML 列表

        YAML 列表通常使用普通单破折号(-)表示:
        列表也可以用方括号括起来,但同样存在可读性问题,不推荐使用:

        YAML在Ansible Playbook中的应用

        Ansible Playbook是用YAML编写的,用于自动化配置和管理任务。通过合理利用YAML语法,我们可以创建清晰易读的Playbook,从而提高维护效率。
        以下是一个简单的Ansible Playbook示例:

        总结

        YAML的易读性和灵活性使其成为配置管理和自动化工具(如Ansible)的理想选择。掌握YAML的基本语法将帮助您更有效地编写和管理Playbook,提高工作效率。
         

        练习:

        实施多个Play
        lab start playbook-multi
        相关文章
        RHCE 9版本考试资料
        Lazy loaded image
        40.总复习-4 实验手册:galaxy角色配置与部署
        Lazy loaded image
        39.总复习-3 实验手册:配置 RHEL 系统角色和用户管理
        Lazy loaded image
        38.总复习-2 实验手册:Ansible Web 服务器配置和测试
        Lazy loaded image
        37.总复习-1 实验手册:配置和运行Ansible脚本
        Lazy loaded image
        36:总复习
        Lazy loaded image
        06:实施Playbook-5 开放实验04:实施Playbook-3 编写和运行
        Loading...
        みなみ
        みなみ
        一个普通的干饭人🍚
        最新发布
        TOKYO自習島
        2025-5-19
        保証協会-25問
        2025-5-15
        営業保証金-21問
        2025-5-6
        平成26年秋期 午後問1
        2025-5-6
        令和5年秋期 午後問1
        2025-5-3
        令和2年秋期 午後問1
        2025-5-2
        公告

        🎉 欢迎访问我的博客 🎉

        🙏 感谢您的支持 🙏

        📅 本站自 2024年9月1日 建立,致力于分享在 IT・MBA・不动产中介 等领域的学习与实践,并推动 学习会 的自主开展。
        📖 博客语言使用比例
        🇯🇵 日语 90% 🇨🇳 中文 8% 🇬🇧 英语 2%

        📚 主要内容

        💻 IT・系统与开发

        • 系统管理:Red Hat 等
        • 容器与编排:Kubernetes、OpenShift
        • 云计算:AWS、IBM Cloud
        • AI 入门:人工智能基础与实践
        • 技术笔记与考证经验

        🏠 不动产 × 宅建士

        • 宅建士考试笔记

        🎓 MBA 学习笔记

        • 管理学、经济学、财务分析等

        🔍 快速查找内容(标签分类)

        由于网站目前没有专门的设计,可能会导致查找信息不便。为了更快找到你感兴趣的内容,推荐使用以下标签功能 进行搜索!
        📌 定期更新,欢迎常来看看!
        📬 有任何建议或想法,也欢迎留言交流!