playbook的使用

playbook

简介
playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等等,在shell脚本中是一条一条的命令,而在playbook中是一个一个的task任务构成,每个task任务可以看做shell中的一条命令;shell脚本一般只是在当前服务器上执行,而playbook则是在不止一个服务器上执行,因此playbook需要在其中指定运行该playbook的服务器名

语法结构

项目Value
-uREMOTE_USER, --user=REMOTE_USER
ssh连接的用户名
-k,–ask-pass
ssh登录认证密码
-s–sudo
sudo到root用户,相当于Linux系统下的sudo命令
-U SUDO_USER–sudo-user=SUDO_USER
sudo到对应的用户
-K–ask-sudo-pass #用户的密码(—sudo时使用)
-T TIMEOUT–timeout=TIMEOUT
ssh连接超时,默认 10 秒
-C,–check指定该参数后,执行 playbook 文件不会真正去执行,而是模拟执行一遍,然后输出本次执行会对远程主机造成的修改
-e EXTRA_VARS–extra-vars=EXTRA_VARS
设置额外的变量如key=value 形式 或者 YAML or JSON,以空格分隔变量
-f FORKS–forks=FORKS
-i INVENTORY–inventory-file=INVENTORY
指定 hosts文件路径
-l SUBSET–limit=SUBSET
指定一个 pattern对- hosts:匹配到的主机再过滤一次
–list-hosts只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook
–list-tasks列出该 playbook 中会被执行的 task
–private-key=PRIVATE_KEY_FILE私钥路径
–step同一时间只执行一个 task,每个 task 执行前都会提示确认一遍
–syntax-check只检测 playbook 文件语法是否有问题,不会执行该 playbook
-t TAGS–tags=TAGS #当 play 和 task 的 tag 为该参数指定的值时才执行,多个 tag 以逗号分隔
–skip-tags=SKIP_TAGS当 play 和 task 的 tag 不匹配该参数指定的值时,才执行
-v, --verbose输出更详细的执行过程信息,-vvv可得到所有执行过程信息

检查MySQL的运行状态

[root@test2 playbook]# cat test.yml
---
 - hosts: all
   remote_user: root
   gather_facts: no             #不收集对应主机的信息,这样运行会快点。
   tasks:
     - name: check the mysql stauts
       service: name=mysqld state=running

运行结果:

[root@test2 playbook]# ansible-playbook test.yml

PLAY [all] ********************************************************************

TASK: [check the mysql stauts] ************************************************
ok: [10.0.102.200]
ok: [10.0.102.162]
ok: [10.0.102.212]

PLAY RECAP ********************************************************************
10.0.102.162               : ok=1    changed=0    unreachable=0    failed=0
10.0.102.200               : ok=1    changed=0    unreachable=0    failed=0
10.0.102.212               : ok=1    changed=0    unreachable=0    failed=0

限定主机范围执行
虽然playbook中定义了执行的主机,但是有时候我们可能仅想在定义的主机中的部分机器上执行,这时候怎么办?修改playbook中的hosts的范围,但是每次改变主机就修改一次,比较麻烦,我们可以使用–limit参数,指定该playbook在指定的主机上执行。有以下inventory文件,我们想在dbservers上执行上面测试用的playbook内容

[all]
10.0.102.212
10.0.102.200
10.0.102.162

[dbservers]
10.0.102.162

上面测试的playbook中hosts定义all,我们想仅在dbservers上执行

[root@test2 playbook]# ansible-playbook test.yml --limit dbservers

PLAY [all] ********************************************************************

TASK: [check the mysql stauts] ************************************************
ok: [10.0.102.162]

PLAY RECAP ********************************************************************
10.0.102.162               : ok=1    changed=0    unreachable=0    failed=0

ansibleplaybook中的handlers

在系统中,我们修改了服务器的配置文件,这时候就需要重启操作服务,就可以使用到handlers

handlers:                               #下面定义了两个handlers
    - name: restart memcached
      service:  name=memcached state=restarted
    - name: restart apache
      service: name=apache state=restarted

- name: template configuration file
  template: src=template.j2 dest=/etc/foo.conf  #修改了配置文件然后依次启动memcached和apache服务。
  notify:                               #使用notify来声明引用handlers。
     - restart memcached
     - restart apache
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值