简述
- 这篇主要实践ansible的核心模块 playbook
- 何为playbook?Ansible-playbook是日常应用中使用频率最高的命令,类似于Linux中的sh或source命令,用来执行系列任务。其工作机制:通过读取预先编写好的playbook文件实现集中处理任务。Ansible-playbook命令后跟yml格式的playbook文件,playbook文件存放了要执行的任务代码,命令使用方式如下:
Ansible-playbook playbook.yml
<!--playbook.yml文件要提前编写好,建议使用绝对路径-->
playbook规则
运行规则
- 使用者使用Ansible或Ansible-Playbooks时,在服务器终端输入Ansible的Ad-Hoc命令集或Playbooks后,Ansible会遵循预选安排的规则将Playbooks逐步拆解为Play,再将Play组织成Ansible可以识别的任务,随后调用任务涉及的所有模块和插件,根据Inventory中定义的主机列表通过SSH将任务集以临时文件或命令的形式传输到远程客户端执行并返回执行结果,如果是临时文件则执行完毕后自动删除。
playbook语法
- playbook配置文件使用YAML语法,具有简洁明了、结构清晰等特点。
- playbook配置文件类似于shell脚本,是一个YAML格式的文件,用于保存针对特定需求的任务列表。
- 上面介绍的ansible命令虽然可以完成各种任务,但是当配置一些复杂任务时,逐条输入就显得效率非常低下。更有效的方案是在playbook配置文件中放置所有的任务代码,利用ansible-playbook命令执行该文件,可以实现自动化运维。
- YAML文件的扩展名通常为.yaml或.yml。
- YAML语法与其他高级语言类似,其结构通过缩进来展示,通过“-”来代表项;“:”用来分隔键和值;整个文件以“---”开头并以“…”结尾,如下所示:
---
- hosts: web <!--针对web组中的操作-->
remote_user: root <!--远端执行用户身份为root-->
tasks: <!--任务列表-->
- name: adduser <!--任务名称-->
user: name=user1 state=present <!--执行user模块,创建用户-->
tags: <!--创建tag标签-->
- aaa <!--tag标签为aaa-->
- name: addgroup <!--任务名称-->
group: name=root system=yes <!--执行group模块,创建组-->
tags: <!--创建tag标签-->
- bbb <!--tag标签为bbb-->
- hosts: web2 <!--针对web2组中的操作-->
remote_user: root <!--远端执行用户身份为root-->
tasks: <!--任务列表-->
- name: copy file to web <!--任务名称-->
copy: src=/etc/passwd dest=/home <!--执行copy模块,复制文件-->
tags: <!--创建tag标签-->
- ccc <!--tag标签为ccc-->
...
下面是实践:给web组主机安装Java1.8环境
- 思路就是先将Java压缩包放到各个主机的,/tmp/ 文件夹下,再交给脚本,具体怎么批量去放,根据环境的不同择优使用,推荐ansible copy 模块
- 话不多说,先上playbook Script 新建文件installJDK.yaml
---
# 针对web组中的操作
- hosts: web
remote_user: root
tasks:
- name: copy JDK to app dic
shell: mkdir /usr/app
- name: tar jdk
shell: tar -zxvf /tmp/jdk-8u311-linux-x64.tar.gz -C /usr/app/
- name: rename
shell: mv /usr/app/jdk1.8.0_311 /usr/app/java
- name: setting profile
shell: echo "export JAVA_HOME=/usr/app/java" >> /etc/profile &&
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile &&
echo "export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib" >> /etc/profile &&
echo "安装完毕!!!\r下面进行测试" &&
source /etc/profile &&
echo "java版本为:" &&
java -version &&
echo "Java环境安装完成"
...
- 写好脚本后,将脚本上传至ansible所在机器,/etc/ansible/ 下
- 先检查是否有错误
ansible-playbook --syntax-check /etc/ansible/installJDK.yaml
# 没有报错就是没有语法错误
ansible-playbook -C /etc/ansible/installJDK.yaml
ansible-playbook /etc/ansible/installJDK.yaml