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 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章