Ansible教程(3)Ansible Playbook详细说明
一、Ansible Playbook介绍
如果基于AD-Hoc去执行多任务(如安装Nginx、修改配置文件、启动服务),需要先使用yum或command模块安装程序,再使用copy模块复制配置文件,最后使用service模块启动服务。为了解决这种多任务繁琐的情况,可以使用Ansible的playbook(剧本)功能。
二、Ansible Playbook构成
Inventory:主机列表,表示剧本中的任务要应用在哪些主机上
Tasks:具体任务,即调用哪些模块完成操作,可以配置多个任务
Variables:变量,包含内置变量和自定义变量
Templates:模板,即使用模板语法来灵活变更的配置文件
Handlers与notify:触发器,由某事件触发执行的操作,比如修改配置文件后自动重启服务
三、Ansible Playbook语法
1、playbook本质是包含了一个或多个任务的YAML配置文件,通常以.yaml或者.yml结尾
2、在单一的一个playbook文件中,使用连续的三个中横线(---)作为每个play的区分
3、缩进必须统一,不能空格和tab混合使用,缩进级别需要一致,同样的缩进代表同样的级别
4、使用冒号“:”之后还需要书写内容的话,则需要空一格才能书写
5、使用短横线“-”后必须追加一个空格
四、Ansible Playbook参数
· hosts:指定远程主机(多个主机用逗号分隔)或主机组
- hosts: webservers
· remote_user:指定执行任务的用户(可以定义在hosts字段下,也可单独给每个task定义),通常是root用户,也可指定非root用户使用sudo方式执行任务
- hosts: 192.168.1.31 remote_user: root #定义全局用户
· tasks:任务信息将定义在此字段下
tasks: - name: run df -h remote_user: test #单独为task定义用户 shell: name=df -h
· sudo(可省略):如果设置为yes,那么sudo_user指定的用户在执行任务时会获得root权限
· sudo_user(可省略):指定需要使用sudo执行操作的用户
tasks: - name: run df -h sudo_user: test sudo: yes shell: name=df -h
· connection(可省略):通过什么方式连接到远程主机,默认为SSH
· gather_facts(可省略):如果明确不需要通过setup模块来获取远程主机facts信息,可以使用这个选项,能提升一定的性能
- hosts: all gather_facts_: no tasks: - name: sleep 5 command: sleep 5
· ignore_errors(可省略):默认情况下ansible会因为一个错误导致后面的任务全部失败,有些时候可能会忽略一些错误的发生,让其他任务能正常执行
-hosts: all tasks: - name: ignore_test command: /bin/false ignore_errors: yes - name: touch file file: path=/tmp/test.txt state=touch
五、Ansible Playbook基础示例
1、基本示例
- hosts: webservers tasks: - name: 1.Installed NFS Server yum: name: nfs-utils state: present - name: 2.Configure NFS Server copy: src: ./exports.j2 dest: /etc/exports
2、高级示例,包含变量、触发器等使用
cat playbook01.yml - hosts: 192.168.1.31 #定义需要执行的主机或主机组 remote_user: root #远程用户 vars: #定义变量 http_port: 8088 #变量 tasks: #定义一个任务 - name: create new file #定义任务的名称 file: name=/tmp/playtest.txt state=touch #调用模块,具体要做的事情 - name: install package yum: name=httpd - name: config httpd template: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf notify: #触发器,当条件触发后需要做的操作,配合handlers使用 - restart apache #需要引用的handlers的名字 - name: copy index.html copy: src=/var/www/html/index.html dest=/var/www/html/index.html - name: start httpd service: name=httpd state=started handlers: #notify定义的触发执行相应的处理动作 - name: restart apache #要与notify定义的内容相同 service: name=httpd state=restarted #触发要执行的动作
六、Ansible playbook运行结果说明
当playbook运行后在PLAY RECAP(汇总报告)一列将返回返回的结果包含了任务ok的数量(已经达到任务要求,无需再次处理)、changed数量
ansible-playbook命令示例与常用选项
ansible-playbook -t tag_name httpd.yml #-t指定标签名,多个标签用逗号分隔 ansible-playbook playbookname.yml --list-task #列出该playbook中的任务 # --check | -C:只检测可能会发生的改变,但不真正执行操作 # --list-hosts:列出运行任务的主机 # --list-tags:列出playbook文件中定义的所有tags # --list-tasks:列出playbook文件中定义的所有任务 # --limit:主机列表 只针对主机列表中的某个主机或者某个组执行 # -f:指定并发数,默认为5个 # -t:指定tags运行,运行某一个或者多个tags。前提是playbook中有定义tags # -e:声明变量和值
七、使用ansible-vault加密Playbook
ansible-vault encrypt hello.yml #加密playbook,加密否的文件无法直接执行和查看 ansible-vault view hello.yml #查看加密后的文件 ansible-vault edit hello.yml #查看加密后的文件 ansible-vault decrypt hello.yml #解密playbook
评论