4-playbook快速入门

ansible的任务配置文件是playbook,可以称为是“剧本”,playbook中包含一系列任务,每个任务被称为是“play、戏剧”。
学习playbook需要先学习 YAML基础

playbook语法特性

  1. 需要以---开始,并顶行首写
  2. 次行开始正常写playbook的内容,建议首先将该playbook的作用标明
  3. 使用#表示注释
  4. 缩进必须要进行注意,同级别的缩进格数是一样的,不能使用Tab进行缩进
  5. 区分大小写

shell与playbook的转换

ansible可以将shell脚本或者命令轻松的转换为playbook。

1
2
touch /home/playbook-test.txt
echo "playbook 学习" > /home/playbook-test.txt

简单的转换为playbook文件。

1
2
3
4
5
6
7
---     # 开始字符,文件顶行写
- hosts: test3 #指定远程操作的主机
tasks:
- name: "创建/home/playbook-test.txt文件" #为task数组的对象指定一个name
command: touch /home/playbook-test.txt #使用command模块来运行标准shell命令
- name: "在/home/playbook-test.txt文件中输入playbook 学习"
shell: echo "playbook 学习" > /home/playbook-test.txt #因为用到了重定向,所以使用shell模块

还可以使用ansible的模块进行编写playbook文件。

1
2
3
4
5
6
7
8
9
10
11
12
---     # 开始字符,文件顶行写
- hosts: test3 #指定远程操作的主机
remote_user: root #可以指定在进行远程操作时使用哪个用户进行操作,相当于sudo: yes
tasks:
- name: "创建/home/playbook-test.txt文件" #为task数组的对象指定一个name
file:
path: /home/playbook-test.txt
state: touch
- name: "在/home/playbook-test.txt文件中输入'playbook 学习'"
lineinfile:
path: /home/playbook-test.txt
line: "playbook 学习"
收起代码

每个task的name都会在playbook执行时展示执行情况,虽然在playbook中不添加name也可以,但是还是建议加上,以便于问题的排查。

playbook与shell的区别

因为ansible有着“幂等性”的特性,所以执行一个playbook时,当ansible会发现系统现有的状态与playbook定义的状态是相同时,就会跳过该操作,所以当再次执行playbook时,执行速度会非常的快;但是shell脚本重复重复进行操作时,会将所有的步骤在执行一遍。

playbook中多个paly

1
2
3
4
5
6
7
8
9
---
- hosts : test3
tasks :
- name : test1
command : ls /home
- hosts : test3
tasks :
- name : test2
command : ls /home/yyg

这样一个palybook中就包含了两个paly

用户

remote_user: root    #在远程主机上以哪个用户身份执行
become: yes #是否允许身份切换
become_method: sudo #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo
become_user: root #切换成什么用户身份,默认为root
以上选项不仅可用于全局,也可用于各task中。
如果需要指定切换用户身份时的密码,可在执行ansible-playbook时使用选项--ask-become-pass或者-K

ansible-playbook 执行技巧

限定执行范围

  • limit
    指定操作的主机范围可以在playbook中通过hosts进行限定
    也可以在ansible-playbook命令来指定主机。
    1
    ansible-playbook XXX.yml -limit test3  #通过这种方式执行,及时playbook中是hosts: test3,test4,test5,也只会对test3进行操作
  • –list-hosts
    该选项可以知道playbook会操作用在那些主机上,并不会执行playbook文件。

用户与权限设置

  • –remote-user
    在playbook中,如果hosts字段下没有定义users,那么将会使用你在Inventory文件中定义的用户,如果Inventory文件中也没有定义用户,则会使用当前系统用户身份来ssh远程。
    可以在ansible-playbook中使用–remote-user选项来指定用户。

    1
    ansible-playbook XXX.yml --remote-user=yyg
  • –ask-sudo-pass

  • -ask-sudo-pass在需要输入ssh密码的情况下交互式的输入密码

  • –sudo
    使用–sudo选项,可以强制所有play都使用sudo用户,同时使用–sudo-user选项指定sudo可以使用哪个用户的权限

    1
    2
    以yyg身份运行playbook,并在执行执行过程中交互式输入密码
    ansible-playbook XXX.yml --sudo --sudo-user=yyg -ask-sudo-pass

其他常用选项

  • –inventory=PATH -i :指定inventory文件
  • -v:输出详细信息
  • –fork=NUM :执行并发数