剧本的组成

在ansible中创建目录模板 ansible脚本编写_命令行

剧本的编写规范

在ansible中创建目录模板 ansible脚本编写_查询变量_02

在ansible中创建目录模板 ansible脚本编写_命令行_03

  • 合理的信息缩进,两个空格表示一个缩进关系
    PS:在ansible中一定不能使用tab进行缩进
  • 冒号的使用。
    -冒号后面若有信息,则冒号后必须加上空格在编辑信息
    -若以冒号结尾,后面则不需要加上空格
  • 短横线应用(列表功能)

    PS:使用短横线构成列表信息,短横线后面需要有空格
  • 创建"/etc/ansible/ansible-playbook"目录,将所有的剧本文件放进此目录。剧本文件扩展名尽量写为"yaml",方便识别文件是一个剧本文件。

剧本中变量的设置

  1. 直接在剧本中编写
  2. 在ansible中创建目录模板 ansible脚本编写_命令行_04

  3. 若是剧本中没有指定变量,可以在命令行中进行指定变量
  4. 在ansible中创建目录模板 ansible脚本编写_命令行_05


  5. 在ansible中创建目录模板 ansible脚本编写_缩进_06

  6. 也可以在主机清单中定义剧本中需要的变量信息,这样ansible执行操作的时候就会到相应的主机中查询变量信息。
  7. 在ansible中创建目录模板 ansible脚本编写_查询变量_07

  8. 三种变量设置方式的优先级:
    最优先:命令行方式设置的变量信息
    此优先:剧本方式设置的变量信息
    最后:主机清单方式设置的变量信息

剧本中设置注册信息

为啥要在剧本中设置注册信息呢?因为当我们在剧本中下载一些软件包或启动一些服务,在不进入远程主机shell界面的情况下,我们无法得知,剧本中的操作是否已经成功。

有盆友会说可以在剧本中使用shell模块,执行“ps -ef”查看相应的进程信息就可以知道操作是否成功。这样的想法是对的,可是大家可以去尝试一下,在ansible执行操作时,会执行设置的指令,但是"ps -ef"执行的返回结果并不会出现在屏幕上,所以此时就需要设置注册信息。

在ansible中创建目录模板 ansible脚本编写_在ansible中创建目录模板_08


在ansible中创建目录模板 ansible脚本编写_命令行_09

剧本中设置判断信息

当在剧本中对多台主机进行管理时,可能就会出现,让某些主机执行一些操作,让某些主机执行另一些操作。为了简化剧本,就需要设置判断信息。

在ansible中创建目录模板 ansible脚本编写_在ansible中创建目录模板_10


获取内置变量的方法:“ansible 主机名 -m setup”

下面是我整理的一些常用内置变量:

在ansible中创建目录模板 ansible脚本编写_在ansible中创建目录模板_11


获取子信息的方法:

在ansible中创建目录模板 ansible脚本编写_命令行_12

剧本中设置循环信息

在ansible中创建目录模板 ansible脚本编写_命令行_13


在被管理的远程主机中就可以看到新创建的用户:

在ansible中创建目录模板 ansible脚本编写_命令行_14

剧本中设置忽略错误
默认playbook会检查命令和模块的返回状态,如遇到错误就中断playbook的执行。这样也无法知道下面配置的剧本信息是否正确。所以可以在出错的地方设置忽略错误信息,这样剧本遇见这个错误就可以忽略,继续向下执行。此设置多用于排错。

在ansible中创建目录模板 ansible脚本编写_在ansible中创建目录模板_15

剧本中设置标签功能

在剧本中设置标签,就可以在命令行中指定具体要执行哪个模块。

在ansible中创建目录模板 ansible脚本编写_在ansible中创建目录模板_16


在ansible中创建目录模板 ansible脚本编写_命令行_17

剧本中设置触发功能

在ansible中创建目录模板 ansible脚本编写_查询变量_18


剧本整合功能

  1. 方法一:将要执行的剧本使用"include"全部整合在一个新的剧本中。使用"include"方式会有警告。

    Gathering Facts可能会遇到的问题:
  2. 方式二:将要执行的剧本使用"import_playbook"整合在一个新的剧本中。相对于"include","import_playbook"不会有警告,而且是新版本ansible整合剧本的方式。

如何执行剧本

在ansible中创建目录模板 ansible脚本编写_查询变量_19

剧本中常见错误

  • 剧本语法规范是否符合(空格 冒号 短横线)
  • 剧本中模块使用是否正确
  • 剧本中一个name标识下面只能写一个模块任务信息
  • 剧本中尽量不要大量使用shell模块。因为使用shell模块就相当于拿着命令到远程主机的shel命令行去操作一样。在shell命令行中重复操作一些命令就会报错,所以包含shell模块的剧本,若是重复执行,可能就会报错,无法执行,即使剧本本身没有问题。

剧本执行出错排查思路/步骤

  • 找到剧本中出现问题的关键点
  • 将剧本中的操作转换成模块进行命令行操作
  • 本地管理主机上执行命令测试、远程被管理主机上执行命令测试