ansible之playbook的使用

  • 1. playbook的简介
  • 1.1. playbook的编写格式:
  • 1.2 playbook的编写示例:
  • 2. playbook的执行方式
  • 2.1 提高playbook输出的详细情况
  • 2.2.playbook可以接的参数
  • 3. playbook的使用
  • 3.1. play中的远程登录和特权升级
  • 4. 查找任务模块
  • 5. 编写多行字符串的方法


1. playbook的简介

playbook是用YAML编写的文本文件,playbook的文件的扩展名一般为.yml。

1.1. playbook的编写格式:

  • 处于同一级别的数据元素,需要相同的缩进;
  • 同一个任务中的子项的缩进要大于父项;
  • 对大小写要求严格;
  • 使用缩进表示层级关系;
  • 缩进时只能使用空格键,不能使用tab键;
  • ‘#’表示注释;
  • 字符串需要用单引号或双引号引起来

1.2 playbook的编写示例:

--- 表示开头
- name: 要执行的任务名
  hosts: 写主机名或IP地址,all是主机清单里的所有主机,也可以使用*来匹配>但要注意的是'*',必须要用引号引起来
  tasks: 要执行的任务
    - name: 对任务的描述
      yum: 模块名,下面的都是键值对state后面的跟的是参数
        name: httpd (如安装httpd服务)
        state: present安装(absent卸载、latest安装最新版)
        enabled: yes(yes为开机自启)

2. playbook的执行方式

ansible-playbook test.yml (这里的test.yml是你编写的playbook,他是作为参数进行传递的)

2.1 提高playbook输出的详细情况

下面是递进关系

参数

作用

-v

显示任务结果

-vv

显示任务结果和任务配置

-vvv

显示与受管主机的连接信息

- vvvv

显示连接插件相关的额外详细程序选项,包括受管主机上的脚本执行情况以及执行的用户

2.2.playbook可以接的参数

参数

作用

-C

模拟执行playbook,显示执行结果不会真正的去执行

–syntax-check

检查要执行的playbook的语法是否有错

–list-tasks

列出playbook中会被执行的tasks

–list-hosts

列出有哪些主机上会执行这个playbook

3. playbook的使用

// 创建一个名为zw的用户uid为2000
[root@node1 ~]# ansible-playbook user.yml 

PLAY [node2] *******************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node2]

TASK [创建用户] ********************************************************************
changed: [node2]

PLAY RECAP *********************************************************************
node2                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 
---
- name: one
  hosts: node2
  tasks:
   - name: 用户
     user:
       name: zw
       uid: 2000
       state: present
// 多个play的组合使用,安装apache服务,并开机设置自启
[root@node1 ~]# ansible-playbook apache.yml 

PLAY [node2] *******************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node2]

[root@node1 ~]# ansible-playbook apache.yml 

PLAY [node2] *******************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node2]

TASK [httpd服务] *****************************************************************
changed: [node2]

TASK [设置httpd服务的开机自启] **********************************************************
changed: [node2]

PLAY RECAP *********************************************************************
node2                      : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

---
- name: one
  hosts: node2
  tasks:
    - name: httpd服务
      yum:
        name: httpd
        state: present
    - name: 设置httpd服务的开机自启
      service:
         name: httpd
         enabled: yes

3.1. play中的远程登录和特权升级

become:yes表示启动特权升级,no和false表示禁用
remote_user: 用户 表示连接受控端的哪个用户
利用普通用户创建一个用户

---
[root@node1 ~]# ansible-playbook test.yml 

PLAY [node2] *******************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node2]

TASK [创建一个用户] ******************************************************************
changed: [node2]

PLAY RECAP *********************************************************************
node2                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
- hosts: node2
  remote_user: admin
  become: yes
  tasks: 
    - name: 创建一个用户
      user:
        name: tom
        state: present

[root@node2 ~]# id admin 
uid=1000(admin) gid=1000(admin) 组=1000(admin)

[root@node2 ~]# id tom
id: “tom”:无此用户
[root@node2 ~]# id tom
uid=1001(tom) gid=1001(tom) 组=1001(tom)

4. 查找任务模块

命令

作用

ansible-doc -l

查看所有模块

ansible-doc 模块名

查找指定的模块

5. 编写多行字符串的方法

  • 可以利用管道符表示要保留的字符串中的换行字符
  • 使用大于号字符来表示换行字符转换为空格并且行内的空白将被删除