不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • Linux入门

  • Linux高级

  • Nginx

  • Keepalive

  • ansible

    • 01.ansible基础
    • 02.ansible安装配置
    • 03.Inventory(主机清单)
    • 04.ansible基本使用
    • 05.ansible常用模块
    • 06.playbook语法
      • 01.使用Playbook的好处
        • 1.1 Playbook好处
        • 1.2 yaml格式
      • 02.先来认识一下Playbook(自动部署Nginx)
        • 2.1 nginx-playbook.yml
        • 2.2 site.conf
        • 2.3 执行playbook
      • 03. Playbook文件结构
      • 04.在变更时执行操作(handlers)
        • 4.1 修改配置文件
        • 4.2 handlers只有修改才会重启
      • 05.任务控制(tags)
        • 5.1 添加tags
        • 5.2 指定只执行指定tag
      • 06. Playbook文件调试
        • 6.1 调试文件
        • 6.2 语法检查
        • 6.3 debug调试
    • 07.自动部署Tomcat
    • 08.playbook文件复用
    • 09.playbook条件循环
    • 10.角色(Role)
    • 11.ansible部署lnmp
  • zabbix

  • Shell

  • Linux内核

  • Linux
  • ansible
xiaonaiqiang
2021-02-13
目录

06.playbook语法

# Playbook基本使用

# 01.使用Playbook的好处

# 1.1 Playbook好处

  • 根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等等

  • 在shell脚本中是一条一条的命令,而在playbook中是一个一个的task任务构成,每个task任务可以看做shell中的一条命令;

  • shell脚本一般只是在当前服务器上执行,而playbook则是在不止一个服务器上执行,因此playbook需要在其中指定运行该playbook的服务器名。

# 1.2 yaml格式

  • 缩进表示层级关系
  • 不支持制表符“tab”缩进,使用空格缩进
  • 通常开头缩进 2 个空格
  • 字符后缩进 1 个空格,如冒号、逗号等
  • “---”表示YAML格式,一个文件的开始
  • “#”注释

# 02.先来认识一下Playbook(自动部署Nginx)

# 2.1 nginx-playbook.yml

[root@k8s-node2 ~]# vim nginx-playbook.yml
1
---
- hosts: webservers  # 对 webservers组中所有机器执行
  gather_facts: no   # 禁用 facts,可以加快执行速度
  vars:          # 添加变量
    hello: Ansible
  remote_user: root  # 以什么用户来执行
    
  tasks:  # 多个task通过 name名字区分
    - name: Add repo  #### 第一:拉取代码
      yum_repository:
        name: nginx
        description: nginx repo
        baseurl: http://nginx.org/packages/centos/7/$basearch/
        gpgcheck: no
        enabled: 1
  
    - name: Install nginx  #### 第二:安装nginx
      yum:
        name: nginx
        state: latest
    
    - name: Copy nginx configuration file  #### 第三:配置nginx
      copy:
        src: ./site.conf
        dest: /etc/nginx/conf.d/site.conf
        
    - name: Start nginx  #### 第四:启动nginx
      service:
        name: nginx
        state: started
        
    - name: Create wwwroot directory  #### 第五:创建网站根目录
      file:
        dest: /var/www/html
        state: directory
    
    - name: Create test page index.html  #### 第六:创建“主页”
      shell: echo "hello {{hello}}" > /var/www/html/index.html   # 在这里可以引用变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

# 2.2 site.conf

[root@k8s-node2 ~]# vim site.conf
server {
  listen 80;
  server_name www.example.com;
  location / {
    root /var/www/html;
    index index.html;
  }
}
1
2
3
4
5
6
7
8
9

# 2.3 执行playbook

# 检查语法
[root@k8s-node2 ~]# ansible-playbook nginx-playbook.yml --syntax-check
# 执行playbook
[root@k8s-node2 ~]# ansible-playbook nginx-playbook.yml
1
2
3
4
  • 查看配置文件是否成功
[root@k8s-node1 tmp]# cat /etc/nginx/conf.d/site.conf 
server {
  listen 80;
  server_name www.example.com;
  location / {
    root /var/www/html;
    index index.html;
  }
}
[root@k8s-node1 tmp]# systemctl status nginx   # 查看当前nginx服务状态
1
2
3
4
5
6
7
8
9
10

# 03. Playbook文件结构

---      # 标记文件的开始
- hosts: webservers    # 指定该playbook在哪个服务器上执行
  vars:             # 表示下面是定义的变量,
    http_port: 80      # 变量的形式,key: value,这里http_port是变量名,80是值
    max_clients: 200
  remote_user: root     # 指定远程的用户名,这里缩进和vars保持了一致,说明变量的代码块已经结束。
    tasks:             # 下面构成playbook的tasks,每个task都有 - name: 开始,name指定该任务的名称。
    - name: ensure apache is at the latest version    # 指定该任务的名称。
      yum: pkg=httpd state=latest               # yum说明要是用的模板名称,后面指定对应的参数,这两行结合起来就相当于一个shell命令。
  
    - name: write the apache config file          # 每个task之间可以使用空行来做区分。
      template: src=/srv/httpd.j2 dest=/etc/httpd.conf
1
2
3
4
5
6
7
8
9
10
11
12

# 04.在变更时执行操作(handlers)

# 4.1 修改配置文件

  • 修改nginx配置文件,从新加载
[root@k8s-node1 tmp]# vim verify-nginx-conf.yaml
---
- hosts: webservers
  gather_facts: no
  remote_user: root
  
  tasks:
  - name: Copy nginx configuration file
    copy:
      src: ./site.conf
      dest: /etc/nginx/conf.d/site.conf

  - name: reload nginx
    service: name=nginx state=reloaded
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • 执行playbook修改配置文件
[root@k8s-node2 ~]# ansible-playbook verify-nginx-conf.yaml --syntax-check
[root@k8s-node2 ~]# ansible-playbook verify-nginx-conf.yaml
1
2

# 4.2 handlers只有修改才会重启

[root@k8s-node1 tmp]# vim verify-nginx-conf.yaml
---
- hosts: webservers
  gather_facts: no
  remote_user: root
  
  tasks:
  - name: Copy nginx configuration file
    copy:
      src: ./site.conf
      dest: /etc/nginx/conf.d/site.conf

  - name: reload nginx
    service: name=nginx state=reloaded
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • 由于 site.conf配置没有修改,所以 changed=0 (没有执行 reload)
[root@k8s-node2 ~]# ansible-playbook verify-nginx-conf.yaml 
PLAY RECAP **************************************************************************************************************************************************
192.168.56.65              : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.56.66              : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 
1
2
3
4

# 05.任务控制(tags)

  • 在一个大的 playbook配置文件中,指定执行某一个任务
  • 比如下面这个案子nginx部署的项目,可以在每个模块中添加一个tags
  • 这样就可以单独管理

# 5.1 添加tags

[root@k8s-node2 ~]# vim nginx-playbook.yml
1
---
- hosts: webservers  # 对 webservers组中所有机器执行
  vars:          # 添加变量
    hello: Ansible
  remote_user: root  # 以什么用户来执行
    
  tasks:  # 多个task通过 name名字区分
    - name: Add repo  #### 第一:拉取代码
      yum_repository:
        name: nginx
        description: nginx repo
        baseurl: http://nginx.org/packages/centos/7/$basearch/
        gpgcheck: no
        enabled: 1
      tags: addrepo
  
    - name: Install nginx  #### 第二:安装nginx
      yum:
        name: nginx
        state: latest
      tags: install
    
    - name: Copy nginx configuration file  #### 第三:配置nginx
      copy:
        src: ./site.conf
        dest: /etc/nginx/conf.d/site.conf
        
    - name: Start nginx  #### 第四:启动nginx
      service:
        name: nginx
        state: started
      tags: startngx
        
    - name: Create wwwroot directory  #### 第五:创建网站根目录
      file:
        dest: /var/www/html
        state: directory
    
    - name: Create test page index.html  #### 第六:创建“主页”
      shell: echo "hello {{hello}}" > /var/www/html/index.html   # 在这里可以引用变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

# 5.2 指定只执行指定tag

# 指定,只执行启动nginx这个步骤
[root@k8s-node2 ~]# ansible-playbook nginx-playbook.yml --tags "startngx"
# 跳过,除了不启动nginx,其他都执行
[root@k8s-node2 ~]# ansible-playbook nginx-playbook.yml --skip-tags "startngx"
1
2
3
4

# 06. Playbook文件调试

# 6.1 调试文件

[root@k8s-node2 ~]# vim debug.yaml
---
- hosts: webservers  # 对 webservers组中所有机器执行
  vars:          # 添加变量
    hello: Ansible
  remote_user: root  # 以什么用户来执行
    
  tasks:  # 多个task通过 name名字区分        
    - name: Create wwwroot directory  #### 第五:创建网站根目录
      file:
        dest: /var/www/html
        state: directory
    
    - name: Create test page index.html  #### 第六:创建“主页”
      shell: echo "hello {{hello}}" > /var/www/html/index.html   # 在这里可以引用变量
      
    - name: debug playbook file
      debug: msg="输出:{{hello}}"
      tags: debugtag
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 6.2 语法检查

[root@k8s-node2 ~]# ansible-playbook debug.yaml --syntax-check
playbook: debug.yaml
1
2

# 6.3 debug调试

[root@k8s-node2 ~]# ansible-playbook debug.yaml --tags debugtag
TASK [debug playbook file] **********************************************************************************************************************************
ok: [192.168.56.65] => {
    "msg": "输出:Ansible"
}
ok: [192.168.56.66] => {
    "msg": "输出:Ansible"
}
1
2
3
4
5
6
7
8
上次更新: 2024/3/13 15:35:10
05.ansible常用模块
07.自动部署Tomcat

← 05.ansible常用模块 07.自动部署Tomcat→

最近更新
01
04.数组双指针排序_子数组
03-25
02
08.动态规划
03-25
03
06.回溯算法
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式