使用 Ansible 剧本

欢迎来到 Ansible 剧本指南。剧本是用 YAML 格式编写的自动化蓝图,Ansible 使用它来部署和配置清单中的节点。本指南将向您介绍剧本,然后介绍任务和剧本当中的不同用例,例如:

  • 以提升的权限或以其他用户身份执行任务。
  • 使用循环重复列表中项目的任务。
  • 委派剧本以在不同的机器上执行任务。
  • 运行条件任务并使用剧本测试评估条件。
  • 使用块对任务集进行分组。

您还可以学习如何通过使用集合、创建可重用的文件和角色、包含和导入剧本以及使用标签运行剧本的选定部分来更有效地使用 Ansible 剧本。

使用 Playbook

Playbook 记录并执行 Ansible 的配置、部署和编排功能。它们可以描述您希望远程系统强制执行的策略,或者通用 IT 流程中的一系列步骤。

如果 Ansible 模块是您工作坊中的工具,那么 Playbook 就是您的操作手册,而您的主机清单则是您的原材料。

在基本层面上,Playbook 可用于管理远程机器的配置和部署。在更高级别上,它们可以按顺序执行涉及滚动更新的多层部署,并且可以将操作委托给其他主机,在此过程中与监控服务器和负载均衡器进行交互。

Playbook 被设计为人类可读的,并且是用基本的文本语言开发的。组织 Playbook 及其包含的文件有多种方法,我们将提供一些关于此的建议,以及如何充分利用 Ansible。

  • 模板 (Jinja2)
    • Jinja2 示例
  • 使用过滤器操作数据
    • 处理未定义的变量
    • 为 true/false/null 定义不同的值(三元运算符)
    • 管理数据类型
    • 格式化数据:YAML 和 JSON
    • 组合和选择数据
    • 随机化数据
    • 管理列表变量
    • 从集合或列表选择(集合论)
    • 计算数字(数学)
    • 管理网络交互
    • 哈希和加密字符串和密码
    • 操作文本
    • 操作字符串
    • 管理 UUID
    • 处理日期和时间
    • 获取 Kubernetes 资源名称
  • 测试
    • 测试语法
    • 测试字符串
    • Vault
    • 测试真值
    • 比较版本
    • 集合论测试
    • 测试列表是否包含值
    • 测试列表值是否为 True
    • 测试路径
    • 测试大小格式
    • 测试任务结果
    • 类型测试
  • 查找
    • 查找函数
    • 查询/q 函数
  • 模板中的 Python3
    • 字典视图
    • dict.iteritems()
  • now 函数:获取当前时间
  • undef 函数:为未定义变量添加提示
  • 循环
    • 比较循环
    • 使用循环
    • 确保 loop 的列表输入:使用 query 而不是 lookup
    • 向循环添加控件
    • 嵌套循环
    • 从 with_X 迁移到 loop
  • 控制任务的运行位置:委托和本地操作
    • 不能委托的任务
    • 委托任务
    • 委托上下文中的模板
    • 委托和并行执行
    • 委托事实
    • 本地 Playbook
  • 条件
    • 使用 when 的基本条件
    • 调试条件
    • 常用事实
    • 使用块对任务进行分组
    • 使用块处理错误
  • 处理程序:在更改时运行操作
    • 处理程序示例
    • 通知处理程序
    • 通知和循环
    • 命名处理程序
    • 控制处理程序的运行时间
    • 定义任务何时更改
    • 将变量与处理程序一起使用
    • 角色中的处理程序
    • 处理程序中的 include 和 import
    • 作为处理程序的元任务
    • 限制
  • Playbook 中的错误处理
    • 忽略失败的命令
    • 忽略无法访问的主机错误
    • 重置无法访问的主机
    • 处理程序和失败
    • 定义失败
    • 定义“已更改”
    • 确保 command 和 shell 的成功
    • 中止所有主机上的 Play
    • 控制块中的错误
  • 设置远程环境
    • 在任务中设置远程环境
  • 使用特定于语言的版本管理器
  • 重用 Ansible 工件
    • 创建可重用的文件和角色
    • 重用 Playbook
    • 何时将 Playbook 转换为角色
    • 重用文件和角色
    • 将任务重用为处理程序
  • 角色
    • 角色目录结构
    • 存储和查找角色
    • 使用角色
    • 角色参数验证
    • 在一个 Play 中多次运行角色
    • 使用角色依赖项
    • 将模块和插件嵌入角色中
    • 共享角色:Ansible Galaxy
  • 模块默认值
    • 模块默认组
  • 交互式输入:提示
    • 哈希 vars_prompt 提供的值
    • 允许 vars_prompt 值中的特殊字符
  • 使用变量
    • 创建有效的变量名
    • 简单变量
    • 何时引用变量(YAML 陷阱)
    • 布尔变量
    • 列表变量
    • 字典变量
    • 组合变量
    • 注册变量
    • 引用嵌套变量
    • 使用 Jinja2 过滤器转换变量
    • 在何处设置变量
    • 变量优先级:我应该把变量放在哪里?
    • 使用高级变量语法
  • 发现变量:事实和魔法变量
    • Ansible 事实
    • 关于 Ansible 的信息:魔法变量
  • Playbook 示例:持续交付和滚动升级
    • 什么是持续交付?
    • 站点部署
    • 可重用内容:角色
    • 配置:组变量
    • 滚动升级
    • 管理其他负载均衡器
    • 端到端的持续交付