文章目录

  • 一、基本了解
  • 二、编写playbook
  • 2.1 单剧本
  • 2.2 多剧本
  • 2.3 特权升级
  • 2.4 语法优化
  • 三、模块查找


一、基本了解

为什么要写playbook?

  • 前面我们可以使用临时命令对受控机进行操作,但当有重复性的工作时就不能这么玩了,因为你要一遍遍的去执行命令,这时playbook就可以有效解决这个问题,它轻松重复的对一组目标主机执行多项复杂的任务。

playbook是是什么?

  • playbook是一个文本文件,包含由一个或多个按特定顺序运行的play组成的列表,所以我们在编写playbook时需要理清思路,先执行什么,再执行什么。

注意事项:

  1. Playbook使用空格字符缩进来表示其数据结构。
  • 同一级别的数据元素缩进量必须相同。
  • 若项目属于其他项目的子项,其缩进量(空格数)必须大于父项。
  • 使用空格键进行缩进,不支持tab键,一般2个空格表示一个级别。
  1. Playbook开头一行由三个破折号组成,代表开始。在文档结尾可能会使用三个圆点表示结束,实践中进场忽略结尾符号。
  2. 两个标记之间,会以一个play列表的形式来定义playbook。YAML列表中的项目以一个破折号加空格开头。
  3. 在执行playbook时,会有一个特殊的任务自动执行——Gathering Facts任务,它是通过setup模块启动的,通常在play启动时自动运行这项任务,用于获取受控机的信息。

提高输出的详细程度:

  • ansible-playbook命令提供的默认输出不提供详细的任务执行信息。ansible-playbook -v命令提供了额外的信息,总共有四个级别。
  • -v :显示任务结果。
  • -vv :任务结果和任务配置都会显示。
  • -vvv :包含关于与受管主机连接的信息。
  • -vvvv :增加了连接插件相关的额外详细程序选项,包括受管主机上用于执行脚本的用户以及所执行的脚本。

二、编写playbook

编写思路:

  1. 确定目标。比如我想在受控机上安装一个服务,是需要先系统初始化配置yum源,再开始安装,然后修改一些配置参数,最后启动。
  2. 确定要使用什么模块。执行不通的动作需要用不同的模块来完成。
  3. 验证playbook语法。
  4. 空执行,用于测试playbook输出的结果是否是我们想要的,但实际不会在受控机上执行。

2.1 单剧本

  • 示例:在192.168.130.161受控机上启动防火墙。

1.确定清单文件。

ansible playbook 参数 ansible的playbook_运维

2.确定能与受控机通信。

ansible playbook 参数 ansible的playbook_linux_02


3.创建一个ploybook目录,用于专门存放ploybook文件,编写playbook,名为qingjun.yml。

[root@localhost ansible]# mkdir playbook
[root@localhost ansible]# cd playbook/
[root@localhost playbook]# vim qingjun.yml
[root@localhost playbook]# cat qingjun.yml 
---
- name: 系统初始化         ##任务名称,自定义。
  hosts: 192.168.130.161      ##对哪个受控机进行操作。
  tasks:                      ## 任务。
    - name: 关闭防火墙      ##任务里可以有很多个小任务,比如这里就只有一个任务,关闭防火墙,名称自定义。
      service:             ##关闭防火墙要用哪个模块。
        name: firewalld          ##service模块参数,作用对象。
        state: stopped            ##service模块参数,操作动作。

4.语法验证。验证没问题之后才能往后面操作。

[root@localhost playbook]# ansible-playbook --syntax-check qingjun.yml

ansible playbook 参数 ansible的playbook_自动化_03


5.执行空运行,测试结果是否是我们想要的,但不实际在受控机上执行。

ansible playbook 参数 ansible的playbook_ansible_04

6.执行ploybook,查看结果。

ansible playbook 参数 ansible的playbook_linux_05

2.2 多剧本

  • 示例:关闭所有受控机的防火墙,在192.168.130.162上安装zsh服务。

1.配置清单文件。

ansible playbook 参数 ansible的playbook_自动化_06

2.编写剧本。

[root@localhost playbook]# cat baimu.yml 
---
- name: 系统初始化
  hosts: all
  tasks:
    - name: 关闭防火墙
      service:
        name: firewalld
        state: stopped
- name: 安装服务
  hosts: 192.168.130.162
  tasks:
    - name: 安装zsh服务
      yum:
        name: zsh
        state: present

3.检查语法。

ansible playbook 参数 ansible的playbook_ansible_07


4.空执行测试。

ansible playbook 参数 ansible的playbook_linux_08


5.正式执行,查看结果。

ansible playbook 参数 ansible的playbook_运维_09


ansible playbook 参数 ansible的playbook_ansible playbook 参数_10

2.3 特权升级

参数

释义

remote_user

使用受控机上的哪个用户执行任务,默认为root用户。

become

true和false,是否开启特权升级。

become_method

切换受控机用户的方式。

become_user

切换到受控机上的哪个用户。

–ask-become-pass

切换用户时,是否需要输入密码。

1.编写剧本。

[root@localhost playbook]# cat baimu.yml 
---
- name: 系统初始化
  hosts: all
  remote_user: qingjun     ##使用受控机上的qingjun用户执行任务。
  become: true             ##开启特权升级。
  become_user: root        ##升级成哪个用户。
  become_method: su        ##使用su方式切换成root用户。
  tasks:
    - name: 查看文件内容
      lineinfile:             ##查看文件里是否有某行内容。
        name: /etc/hosts
        line: 'qingjun hahahah'
        state: present

2.测试语法。

ansible playbook 参数 ansible的playbook_linux_11


ansible playbook 参数 ansible的playbook_自动化_12


3.正式执行。

ansible playbook 参数 ansible的playbook_自动化_13

2.4 语法优化

1.若有字符串型内容,需要用单引号或双引号。

ansible playbook 参数 ansible的playbook_ansible_14


2.若有多行字符串时,可以使用管道符。

ansible playbook 参数 ansible的playbook_ansible_15


3.列表方式和内联方式表示。

ansible playbook 参数 ansible的playbook_运维_16


ansible playbook 参数 ansible的playbook_自动化_17

三、模块查找

1.官网查找,模块连接

ansible playbook 参数 ansible的playbook_ansible_18


2.命令查找指定模块,可以查看到playbook编写格式及所有参数。

ansible playbook 参数 ansible的playbook_运维_19


3.命令查找所有模块。

ansible playbook 参数 ansible的playbook_linux_20