ansible-playbook: Centos 环境下用Ansible批量安装部署JDK

JDK是各个组件所依赖的基础环境,所以第一步实现JDK批量安装部署。

说明:ansible控制节点和被控制节点的系统版本如下,为什麽要说明系统版本时因为linux系统版本不同通过命令获取的结果有可能不正确,可以根据自己实际系统版本进行调整。

[root@myhost yml]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
---
- hosts: new #这个是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安装路径的执行权限

      - 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 

你可能感兴趣的:(Ansible)