0%

Ansible实践(一)

ansible实践,在三台服务器上安装JDK

Ansible实践(一)

服务器准备

服务器(CentOS Linux 7) 作用 描述
192.168.241.139 Ansible主机
192.168.241.140 受管服务器 安装JDK
192.168.241.141 受管服务器 安装JDK

安装Ansible

在192.168.241.139上安装ansible

1
2
yum -y install epel-release
yum -y install ansible

配置ssh授权

Ansible主机生成密钥

在192.168.241.139上执行命令,遇到需要输入的地方直接敲回车

1
ssh-keygen -t rsa -P ""

复制公钥到受管服务器

复制公钥到受管服务器,方便Ansible免密登录

1
2
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.241.140
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.241.141

检查受管节点连通性

1
2
3
4
5
# 检查所有结点
ansible -m ping all

# 检查指定角色结点
ansible webserver -m ping

Ansible配置

Ansible通用配置

配置文件

1
vim /etc/ansible/ansible.cfg

受管服务器host配置

1
vim /etc/ansible/hosts

在hosts文件中加入, 并保存

1
2
3
[jdk]
192.168.241.140
192.168.241.141

文件准备

上传jdk安装包jdk1.8.0_201.tar.gz到Ansible主机目录/opt/jdk/files

并在该目录下添加.bashrc文件,文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

# User specific environment and startup programs

export JAVA_HOME=/opt/jdk/jdk1.8.0_201
export PATH=$JAVA_HOME/bin:$HOME/bin:$PATH

编写Ansible剧本

1
vim /etc/ansible/roles/jdkinstall.yml

jdkinstall.yml内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- hosts: jdk
vars:
- ansible_python_interpreter: /usr/bin/python
- ansible_ssh_user: root
environment:
JAVA_HOME: /opt/jdk/jdk1.8.0_201
tasks:
- name: Create directory /opt/jdk
file: path=/opt/jdk state=directory owner=root group=root
- name: Unarchive JDK Software
unarchive: src=jdk/files/jdk1.8.0_201.tar.gz dest=/opt/jdk/
- name: Copy JDK env .bashrc
copy: src=jdk/files/.bashrc dest=/root/ mode=755
- name: enable jdk env
shell: source /root/.bashrc

注:src路径是相对role_path(可以在ansible.cfg中修改)的路径

执行Ansible剧本

1
ansible-playbook /etc/ansible/roles/jdkinstall.yml

执行过程下如

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
26
27
28
29
30
31
PLAY [jdk] ******************************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [192.168.241.142]
ok: [192.168.241.140]
ok: [192.168.241.141]

TASK [Create directory /opt/jdk] ********************************************************
ok: [192.168.241.141]
ok: [192.168.241.140]
ok: [192.168.241.142]

TASK [Unarchive JDK Software] ***********************************************************
ok: [192.168.241.141]
ok: [192.168.241.140]
ok: [192.168.241.142]

TASK [Copy JDK env .bashrc] *************************************************************
ok: [192.168.241.140]
ok: [192.168.241.141]
ok: [192.168.241.142]

TASK [enable jdk env] *******************************************************************
changed: [192.168.241.140]
changed: [192.168.241.142]
changed: [192.168.241.141]

PLAY RECAP ******************************************************************************
192.168.241.140 : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.241.141 : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.241.142 : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

Q&A

环境变量修改

如果需要通过ansible修改环境变量,需要修改.bashrc文件,并用soucre命令使其生效,执行source命令时最好不要有其他客户端登录受控机器,因为这可能导致source命令执行不起作用