简介

Playbook是由一个或多个“play”组成的列表,可以让它们联同起来按事先编排的机制执行;
所谓task无非是调用ansible 的一个module,而在模块参数中可以使用变量;
模块执行是幂等的,这就意味着多次执行是安全的,因为其结果均一致。

核心组件

  • Hosts:执行的远程主机列表
  • Tasks:任务,由模块定义的操作的列表;
  • Varniables:内置变量或自定义变量在playbook中调用
  • Templates:模板,即使用了模板语法的文本文件;
  • Handlers:和nogity结合使用,为条件触发操作,满足条件方才执行,否则不执行;
  • Roles:角色;

    YAML格式

    playbook文本格式为YAML,是一种标记语言,用来表示数据序列化的格式。

  • 特点

    • YAML的可读性好
    • YAML和脚本语言的交互性好
    • YAML使用实现语言的数据类型
    • YAML有一个一致的信息模型
    • YAML易于实现
    • YAML可以基于流来处理
    • YAML表达能力强,扩展性好

      官方示例

      变量

  • 变量的来源

    • ansible setup远程主机的所有变量都可以使用
    • 自定义变量
  • 优先级

    • 通过命令行指定变量,优先级最高
    • 在/etc/ansible/hosts 定义变量,在主机组中的主机单独定义
    • 在/etc/ansible/hosts 定义变量,针对主机组中的所有主机集中定义变量
    • 在Playbook中定义变量(建议使用这种方法)

      ansible-playbook命令

      格式:ansible-playbook [选项及参数]
  • —syntac-check:检查语法

  • —check:测试运行
  • -t TAGS:指定运行特定的任务
  • —skip-tags SKIP_TAGS:跳过哪些标签
  • handlers和notify结合使用出发条件,让playbook在满足一定条件时才触发某条task

    模板

  • 文本文件,内部嵌套有模板语言脚本(使用模板语言编写)

  • Jinja2 是由python编写的。在我们打算使用基于文本的模板语言时,jinja2是很好的解决方案。yaml是写 playbook,jinja2是写配置文件模板的
  • 功能:将模板的文件的变量值转换成对应的本地主机的确定值。例如:ansible端写一个内建变量 {{ansible_processor_vcpus }},当这个文件被复制到对应主机时会自动生成对应主机 cpu的颗数的结果替换之。

    • templates文件必须存放在templates目录下
    • yaml文件需要和templates目录平级

      角色

  • 路径:/etc/ansible/roles

  • 每个角色均需要具有如下目录:
    • defaults:此目录用于设定默认变量,一般会有一个main.yaml文件
    • files:存放用于copy或者script等模块调用的文件
    • handlers:定义各种hundlers文件,其他的文件需要进行包含调用
    • meta:定义当前角色的特殊设定及其依赖关系,其他的文件需要有main.yaml文件“包含”调用
    • tasks:定义各种tasks,一般都会有个main.yaml文件,其他的文件需要有main.yaml文件进行包含调用
    • template:定义由template模块文本
    • vars:定义各种变量,其他的文件需要进行包含调用
  • 调用role
    • 定义在site.yaml文件中,在/etc/ansible/role中