ansible playbook 学习

ansible playbook 介绍

playbook 是 ansible 用于配置,部署,和管理被控节点的脚本,使用YAML语言编写
一、简单说明YAML的基本语法:
基本语法:
大小写敏感
使用缩进表示层级关系
缩进不允许使用 tab,只允许空格
缩进的空格数不重要,只要相同层级的元素左对齐即可
# 表示注释
: 号后面要加空格,这个容易忘记,需要特别注意
YAML数据类型:
对象:键值对的集合,key:value 字典(dictionary)
数组:一组按次序排列的值,列表(list)[ ]
纯量(scalars):字符串/布尔值/整数/浮点数/Null/时间/日期

###-开头表示属组
 1. name
 2. age
 3. height
###    [name,age,heihgt]
companies:
    -
        id: 1
        name: company1
        price: 20W
    -
        id: 2
        name: company2
        price: 50W
#另一种写法
companies: [{
   
   id: 1,name: company1,price: 20W},{
   
   id: 2,name: company2,price: 50W}]

二、ansible playbook常用到的YMAL格式:
  1、文件的第一行应该以 “—” (三个连字符)开始,表明YMAL文件的开始。
  2、在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
  3、YMAL中的列表元素以”-”开头然后紧跟着一个空格,后面为元素内容。
  4、同一个列表中的元素应该保持相同的缩进。否则会被当做错误处理。
  5、play中hosts,variables,roles,tasks等对象的表示方法都是键值中间以":“分隔表示,”:"后面还要增加一个空格。
三、使用ansible-playbook运行playbook文件,得到如下输出信息,输出内容为JSON格式。并且由不同颜色组成,便于识别。一般而言
| 绿色代表执行成功,系统保持原样
| 黄色代表系统代表系统状态发生改变
| 红色代表执行失败,显示错误输出
  执行有三个步骤:1、收集facts 2、执行tasks 3、报告结果
四、Playbook的核心元素:
Hosts:主机组;
Tasks:任务列表;
Variables:变量,设置方式有四种;
Templates:包含了模板语法的文本文件;
Handlers:由特定条件触发的任务;
五、Playbooks配置文件的基础组件:

  1. Hosts:运行指定任务的目标主机
  2. remoute_user:在远程主机上执行任务的用户;
  3. tasks:需要执行的任务列表
  #格式:
    tasks:
      – name: TASK_NAME
       module: arguments
       notify: HANDLER_NAME
       handlers:
      – name: HANDLER_NAME
       module: arguments

4、handlers:任务在特定条件下触发;接收到其它任务的通知时被触发;
  (1) 某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers;
  (2) 任务可以通过“tags“打标签,而后可在ansible-playbook命令上使用-t指定进行调用;
测试的play-book文件:

[root@test ~]# cd /etc/ansible
[root@test ansible]# vim  test-nginx.yml
---   ###表示开始写playbook
- hosts: testnode    ###要运行的主机组
  remote_user: root   ###运行用户
  tasks: ###要执行的任务,按定义顺序执行主任务,任务失败会导致整个Playbook中止,可以使用ignore_errors: true跳过失败任务,继续执行后续任务,以列表的形式写内容[key1:value1,key2:value2]
    - name: install nginx    ####安装一个nginx   
      yum: name=nginx state=present    
    - name: copy nginx.conf   ###复制配置文件
      copy: src=/tmp/nginx.conf dest=/etc/nginx/nginx.conf backup=yes   ###原文件做备份
      notify: reload    #当nginx.conf发生改变时,通知给相应的handlers,reload是handlers的名称不是执行的命令
      tags: reloadnginx   #打标签,方便在后续ansible-playbook 命令中直接调用这个任务
    - name: start nginx service
      service: name=nginx state=started
      tags: startnginx   #打标签
    - name: test error task
      yum: ssiil      ###执行这个任务会报错
      ignore_errors: true  ###出现错误忽略

  handlers:  #注意,前面没有-,是两个空格
    - name: reload     ###notify 指定的名称
      service: name=nginx state=restarted  #为了在进程中能看出来

单独说明一下notify

1、触发条件,只有ngtify所在的任务这些结果发生变化才执行notify指定的handlers任务

 1. changed=1:表示任务执行后目标状态发生了变化(如文件被修改、服务重启等)。
 2. changed=0:任务未执行或执行后无变化(如文件已存在、服务已运行),不会触发notify。 ‌

2、执行时机

 1. notify定义的handlers不会立即执行,而是在当前tasks中所有普通任务完成后统一执行。
 2. 若同一任务多次触发notify,最终只执行一次对应的handler,避免重复操作(如多次重启服务)。

 

示例:

[root@lrtm ansible]# ansible-playbook test-nginx.yml

PLAY [testnode]  #节点上执行playbook中的任务
******************************************************

TASK [Gathering Facts] #第一步收件节点信息
*******************************************************
ok: [gz-node10]   ##信息收集完成

TASK [install nginx] #执行第一个tasks任务按照nginx
*****************************************************
changed: [gz-node10]  ##已经安装完成

TASK [copy nginx.conf] #  复制nginx配置文件
*****************************************************
ok: [gz-node10]   ###执行完成

TASK [start nginx] # 启动nginx
*********************************************
changed: [gz-node10]  ###完成

PLAY RECAP # 执行结果4个任务执行都OK,2个步骤发生了变化
****************************
gz-node10                  : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[root@lrtm ansible]# ansible gz-node10 -m shell  -a "ss -tnl|grep 80"    ####80端口已经监听
gz-node10 | CHANGED | rc=0 >>
LISTEN     0      128          *:80                       *:*
LISTEN     0      128       [::]:80                    [::]:*

[root@lrtm ansible]# ansible-playbook test-nginx.yml -t startnginx    ##使用-t 参数指定执行标签任务

PLAY [testnode] ***************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值