ansible-playbook基础语法

一.简述:

    前面写的几篇文档基本上对ansible的常用模块及适用的场景做了些了解(系列文章,感兴趣的可以通过主页或者专栏查看)。但ansible能够实现的功能远远不止这些,其中核心部分是批量配置管理,这些功能在ad-hoc命令中并不能完全实现,故,有了playbook功能组件(实现复杂的配置管理功能)。

二. 基础语法:

ansible的playbook文件格式为YAML语法,按照层次化结构划分,ansible可分为以下部分:

a) tasks:定义任务列表(名称,模块:模块操作);
b) files:存放由copy或script等模块调用的文件;
c) template:定义Jinja2模板文件;
d) handlers:通过notify(task结束时)触发的任务操作(一般用于服务重启);
e) vars:定义变量;

另外,说下ansible比较安全的一点:ansible的modules 具有”幂等”性,意思是如果再一次地执行 moudle(比如遇到远端系统被意外改动,需要恢复),moudle 只会改变需要改变的地方.所以重复多次执行 playbook 也很安全.
 

三. 使用案例:

 这里通过一个简单yum安装nginx的例子说明:

---  #yaml声明
- hosts: test        #目前主机组(多个,隔开)
  remote_user: web   #用户
  sudo: yes          #sudo执行(也可以在特定的task中指定)
  serial: 15         #playbook并发数
 
  tasks:             #task集合
      - name: install nginx server
        yum: name=nginx state=present    #子集合yum安装nginx(state=present(创建)|absent(删除)}  force=(是否强制操作删除家目录))

      - name: copy nginx.conf            #子集合从本地copy nginx配置文件到目标主机
        template: src=/tmp/nginx.conf.j2 dest=/data/web/nginx/conf/nginx.conf 
            owner=web group=web mode=0644 validate='/data/web/nginx/sbin/nginx -c %s -t'             
        notify:                          #template执行没问题,触发(notify)handlers(注意名字)
             - restart nginx     

  handlers:                              #待触发的handlers
      - name: restart nginx
        service: name=nginx state=restarted

   注:validate中的%s 会自动赋值到copy的数据文件,但不是/data/web/nginx/conf/nginx.conf,而是一个临时文件,所以nginx中的配置用到相对路径的,需要注意, 例如这里,原本nginx.conf.j2中mime.type如下:

include       mime.types;

再执行validate会报如下错误:

因为 -c的文件在/root/.ansible/tmp/ansible-tmp-1466396234.95-155429102630968下,所以include需要改为:

include       /data/web/nginx/conf/mime.types;
正常执行结果如下:
# ansible-playbook nginx.yaml 

PLAY [test] ********************************************************************

TASK [setup] *******************************************************************
ok: [10.5.11.18]

TASK [install nginx server] ****************************************************
changed: [10.5.11.18]

TASK [copy nginx.conf] *********************************************************
changed: [10.5.11.18]

RUNNING HANDLER [restart nginx] ************************************************
changed: [10.5.11.18]

PLAY RECAP *********************************************************************
10.5.11.18                 : ok=4    changed=3    unreachable=0    failed=0   

可以通过以下命令查看语法,task名称,目标主机:

# ansible-playbook nginx.yaml --syntax-check
# ansible-playbook nginx.yaml --list-task
# ansible-playbook nginx.yaml --list-hosts

也可以单独执行某一个task(比如修改了nginx.conf.j2的配置文件):

#ansible-playbook nginx.yaml --start-at-task='copy nginx.conf'

其他参数-h ............................

更多案例可参考:

https://github.com/ansible/ansible-examples

http://docs.ansible.com/ansible/playbooks_intro.html

----------------------------------------------------------------------------------------------

深耕运维行业多年,擅长linux、容器云原生、运维自动化等方面。
承接各类运维环境部署、方案设计/实施、服务代运维工作,欢迎沟通交流 !
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值