JDK是各个组件所依赖的基础环境,所以第一步实现JDK批量安装部署。
说明:ansible控制节点和被控制节点的系统版本如下,为什麽要说明系统版本时因为linux系统版本不同通过命令获取的结果有可能不正确,可以根据自己实际系统版本进行调整。
[root@myhost yml]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
---
- hosts: all #这个是hosts定义个主机组名字,如果是单台主机可以直接写地址
gather_facts: yes #执行批量操作前获取系统变量(本脚本里面生成的变量要下一次才能用,所以第一次debug打印本次生成变量的时候回报错)
tasks:
- name: create /etc/ansible/facts.d/ #在远程主机上创建目录/etc/ansible/facts.d/,以备后续存放ansible本地变量使用
file: path=/etc/ansible/facts.d/ state=directory
- name: get the value of java_home and save it to /etc/ansible/facts.d/javainfo.fact #获取此远程主机$JAVA_HOME的值,并将结果值赋值给本地变量java_home,方便后续判断远程主机是否已经安装JDK
shell: echo -e "[java_home]\njava_home=`cat /etc/profile|grep JAVA_HOME|head -1|awk -F= '{print $2}'` " > /etc/ansible/facts.d/javainfo.fact
- block:
- debug:
msg: "value of java_home is: null"
- unarchive: src=/home/tools/jdk-8u131-linux-x64.tar.gz dest=/usr/local owner=root group=root #将控制端下载好的/home/tools/jdk-8u131-linux-x64.tar.gz解压安装到远程主机的/usr/local下面
- replace: path=/usr/local/jdk1.8.0_131/jre/lib/security/java.security regexp="securerandom.source=file:/dev/random" replace="securerandom.source=file:/dev/./urandom" #修改JDK下文件,防止Tomact8部署在linux下启动很慢的问题
- lineinfile: path=/etc/profile insertafter="{{item.position}}" line="{{item.value}}" state=present #默认在/etc/profile文件中设置JAVA环境变量
with_items:
- {position: EOF, value: "export JAVA_HOME=/usr/local/jdk1.8.0_131"}
- {position: EOF, value: "export JRE_HOME=${JAVA_HOME}/jre"}
- {position: EOF, value: "export CLASS_PATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib"}
- {position: EOF, value: "export PATH=${JAVA_HOME}/bin:$PATH"}
- file: dest=/usr/local/jdk1.8.0_131 mode=0755 recurse=yes #修改远程主机上JDK安装路径的执行权限
- file: dest=/usr/local/jdk1.8.0_131 owner=root group=root #修改远程主机上JDK安装路径的所属权限
- shell: source /etc/profile #使环境变量生效,好像不会生效(可以之后登陆远程主机执行一次source /etc/profile命令)
- shell: . /etc/profile #使环境变量生效,好像不会生效(可以之后登陆远程主机执行一次source /etc/profile命令)
when: ansible_local.javainfo.java_home.java_home == "" #判断条件:当JAVA_HOME为空时,表示还没有安装JDK,所以执行block里面安装JDK的任务
- name: get the value of java_home and save it to /etc/ansible/facts.d/javainfo.fact again #再次获取此远程主机$JAVA_HOME的值,并将结果值赋值给本地变量java_home,方便以后判断远程主机是否已经安装JDK?
shell: echo -e "[java_home]\njava_home=`cat /etc/profile|grep JAVA_HOME|head -1|awk -F= '{print $2}'` " > /etc/ansible/facts.d/javainfo.fact