Ansible教程(3)playbook的基本使用
一、什么是Playbook
如果基于AD-Hoc去执行多任务(如安装Nginx、修改配置文件、启动服务),需要先使用yum或command模块安装程序,再使用copy模块复制配置文件,最后使用service模块启动服务。为了解决这种多任务繁琐的情况,可以使用Ansible的playbook(剧本)功能。
二、Ansible playbook的构成
Inventory:主机列表,表示剧本中的任务要应用在哪些主机上
Tasks:具体任务,即调用哪些模块完成操作,可以配置多个任务
Variables:变量,包含内置变量和自定义变量
Templates:模板,即使用模板语法来灵活变更的配置文件
Handlers与notify:触发器,由某事件触发执行的操作,比如修改配置文件后自动重启服务
三、Playbook的语法要求
1、playbook本质是包含了一个或多个play的YAML配置文件,通常以.yaml或者.yml结尾
2、在单一的一个playbook文件中,使用连续的三个中横线(---)作为每个play的区分
3、缩进必须统一,不能空格和tab混合使用,缩进级别需要一致,同样的缩进代表同样的级别
四、Ansible playbook示例说明
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 #触发要执行的动作
hosts:指定远程主机(多个主机用逗号分隔)或主机组
remote_user:指定执行任务的用户(也可单独给每个task定义),通常是root用户,也可指定非root用户使用sudo方式执行任务
--- - hosts: 192.168.1.31 remote_user: root #定义全局用户
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信息,可以使用这个选项
五、运行Ansible playbook
当playbook运行后在PLAY RECAP(汇总报告)一列将返回返回的结果包含了任务ok的数量(已经达到任务要求,无需再次处理)、changed数量(经过了ansible的处理,再次执行则会发现这些信息也变成了ok)
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
评论