Playbook 是由一个或多个piay组成的列表,只要功能是讲task 定义好角色归并未一组进行统一管理,也就是经过task调用 Ansible 的模讲多个play组成在一个playbook中运行mysql
- hosts: webserver //定义的主机组,即应用的主机 vars: //定义变量 http_port: 80 max_clients: 200 user: root tasks: //执行的任务 - name: ensure apache is at the latest version #显示信息自定义显示输出 yum: pkg=httpd state=latest #模块对参数 state=latest 检查最新版本 - name: write the apache config file template: src=/srv/httpd.j2 dest=/etc/httpd.conf #放在管理端 notify: #调用 - restart apache #调用下面的参数 - name: ensure apache is running service: name=httpd state=started #开启 restarted 重启 stopped 中止 handlers: //处理器 - name: restart apache service: name=httpd state=restarted 执行一个playbook ansible-playbook [yaml文件名] 例如:ansible-playbook ping.yml 参数:-k(–ask-pass) 用来交互输入ssh密码 -K(-ask-become-pass) 用来交互输入sudo密码 -u 指定用户
命令 | 说明 |
---|---|
ansible-playbook nginx.yaml --syntax-check | 检查yaml文件的语法是否正确 |
ansible-playbook nginx.yaml --list-task | 检查tasks任务 |
ansible-playbook nginx.yaml --list-hosts | 检查生效的主机 |
ansible-playbook nginx.yaml --start-at-task='Copy Nginx.conf' | 指定从某个task开始运行 |
名称 | IP | 组号 |
---|---|---|
主服务器 | 192.168.10.5 | |
被管理服务器 | 192.168.10.8 | aaa |
被管理服务器 | 192.168.10.11 | bbb |
能够为每一个任务定义远程执行用户:linux
- hosts: mysql remote_user: root tasks: #任务 - name: test connection #显示信 ping: #使用ping这个模块 remote_user: zhangsan #指定远程主机执行tasks的运行用户为zhangsan
指定远程主机sudo切换用户:nginx
- hosts: mysql remote_user: root become: yes #2.6版本之后的参数,以前是sudo,意思为切换用户运行 become_user: mysql #指定sudo用户为mysql
忽略错误,强制返回成功web
- hosts: webserver remote_user: root tasks: - name: disable selinux command: '/sbin/setenforce 0' ignore_errors: True #忽略错误,强制返回成功 - name: make sure apache is running service: name=httpd state=started
Handlers也是一些task的列表,和通常的task并无什么区别。
是由通知者进行的notify,若是没有被notify,则Handlers不会执行,假如被notify了,则Handlers被执行
无论有多少个通知者进行了notify,等到play中的全部task执行完成以后,handlers也只会被执行一次sql
在主配置文件中定义变量
shell
若是须要根据变量、facts(setup)或此前任务的执行结果来做为某task执行与否的前提时要用到条件测试,在Playbook中条件测试使用when子句。
在task后添加when子句便可使用条件测试:when子句支持jinjia2表达式或语法apache
当有须要重复性执行的任务时,可使用迭代机制。其使用格式为将须要迭代的内容定义为item变量引用,并经过with_items语句指明迭代的元素列表便可。
定义标签
事实上,不光能够为单个或多个task指定同一个tags。playbook还提供了一个特殊的tags为always。做用就是当使用always当tags的task时,不管执行哪个tags时,定义有always的tags都会执行安全