JDK这东西,简单来说就是一个包,主要生效的还是环境变量。
直接上实现

目录结构

1
2
3
4
5
$ tree
.
├── files
│   └── jdk1.6-centos6.tar.gz
└── main.yaml

简单的一个说明而已,没有必要搞什么最佳实践了。^_^

main.yaml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
---
- hosts: test_group
  sudo: yes
  sudo_user: root
  gather_facts: no
  vars:
    src_file: 'files/jdk1.6-centos6.tar.gz'
    dest_dir: /opt/soft/
  tasks:
  - name: copy and unzip
    unarchive: src={{src_file}} dest={{dest_dir}}
  - name: clear old env
#    shell: /bin/sed -i '/JAVA_HOME/d' /etc/profile && echo -e "\nexport JAVA_HOME=/opt/soft/jdk\nexport PATH=\\$JAVA_HOME/bin:\\$PATH\nexport CLASSPATH=.:\\$JAVA_HOME/lib/tools.jar:\\$JAVA_HOME/lib/rt.jar" >> /etc/profile
    lineinfile: dest=/etc/profile regexp='JAVA_HOME' state=absent
  - name: set env
    lineinfile:
      dest=/etc/profile
      insertafter="{{item.position}}"
      line="{{item.value}}"
      state=present
    with_items:
    - {position: EOF, value: "\n"}
    - {position: EOF, value: 'export JAVA_HOME=/opt/soft/jdk'}
    - {position: EOF, value: 'export PATH=$JAVA_HOME/bin:$PATH'}
    - {position: EOF, value: 'export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/rt.jar'}

以上。

  • 注释部分可看出原打算使用sed来实现替换profile文件的环境变量替换。但太麻烦,需要考虑转义什么的。后来找到了lineinfile这个好东西。
  • fact要是不用的话,就no掉吧,机器数量多了,会节省很多时间。
  • 简单使用了loop
  • 没啥技术含量,边查文档边搞弄出这么一个东西,算是备忘

-EOF-