ansible playbook 安装 java jdk,tomcat,批量添加用户等案例分享


相关文章: Jenkins 结合 Ansible 实现生产环境自动发布与备份

如果你对ansible不熟,还请移步看我之前写的基础内容:

自动化工具 ansible安装和常用模块汇总

本文主要对 ansible playbook 做线上案例分享,基础内容不再赘述

Tips:
以下多个案例按用途写成单独的小模块,可以单一执行,也可以加在入口文件中,按顺序执行,比较灵活

企业案例1:安装java jdk

1、创建目录

cd /etc/ansible/roles
mkdir {java}/{files,vars,templates,tasks} -pv
[root@master01 roles]# tree  java
java
├── files   #java安装包路径
├── tasks     #任务文件main.yml,使用file指令时自动去files目录下面找对于的包,templates指令也是一样的
├── templates   #模版文件存放在该目录下
└── vars #变量文件main.yml

2、编写playbook
cat java/tasks/main.yml

- name: remove openjdk #移除系统自带的jdk
  yum: name={{ item }} state=absent #这里用到了循环
  with_items: 
    - java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64
    - java-1.6.0-openjdk-1.6.0.38-1.13.10.4.el6.x86_64
  ignore_errors: True #忽略异常
- name: unzip jdk
  unarchive: src={{ item }}  dest={{ java_home }}/
  with_items:
    - server-jre-8u121-linux-x64.tar.gz #包在file目录下,自动去找
    #- jdk-7u67-linux-x64.tar.gz #因为有些项目依赖的jdk低,不想再写一个playbook,这里根据需要注视掉其中一个
- name: link jdk java #创建软链接
  file: src={{ java_home }}/{{ item.name }}  dest={{ java_home }}/{{ item.linkname }} state=link
  with_items:
    - { name: jdk1.8.0_121,linkname: jdk8 }
    #- { name: jdk1.7.0_80,linkname: jdk7 }
- name: copy java.sh
  template: src=java.sh.j2  dest=/etc/profile.d/java.sh #模版文件.j2结尾,自动去template目录下找文件
- name: source
  shell: source  /etc/profile

企业案例2:配置/etc/hosts

1、跟上面同样先创建目录

cd /etc/ansible/roles
mkdir {hosts}/{templates,tasks} -pv
[root@master01 roles]# tree  hosts
hosts
├── tasks     #任务文件main.yml
├── templates   #模版文件存放在该目录下

2、编写playbook
cat hosts/tasks/main.yml

- name: copy /etc/hosts
  template: src=hosts.j2 dest=/etc/hosts

#在templates目录下准备了一个模版文件,通过变量自动替换ip或主机名,若要替换成功,文件名必须.j2结尾
cat hosts/templates/hosts.j2

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
{{ ansible_eth0.ipv4.address }} {{ ansible_nodename }}

企业案例3:安装tomcat

cd /etc/ansible/roles
mkdir {tomcat}/{files,vars,templates,tasks} -pv
[root@node1 roles]# tree  tomcat
tomcat
├── files   #tomcat安装包路径
├── tasks     #任务文件main.yml
├── templates   #模版文件存放在该目录下
└── vars #变量文件main.yml

将tomcat下载到tomcat/files目录下,不从网上直接下载tomcat安装包,避免网络问题导致太慢或失败
编写task任务
cat tasks/main.yml

- name: #判断tomcat是否已经安装
  stat: path={{ tomcat_path }}
  register: reg
- name: unzip 
  #shell: tar zxvf {{ dest_path }}/apache-tomcat-8.5.23.tar.gz -C /ane
  unarchive: src=apache-tomcat-8.5.23.tar.gz  dest=/ane 
  when: not reg.stat.exists  #当/ane/tomcat目录不存在时执行解压操作
- name: rename
  command: chdir=/ane   mv apache-tomcat-8.5.23 tomcat
  when: not reg.stat.exists #当 /ane/tomcat不存在的时候执行rename操作
  #ignore_errors: True
- name: conf
  template: 
    src=server.xml.j2 dest={{ tomcat_path }}/conf/server.xml
- name: tocmat_startup.sh    
  template:
    src=startup8.sh.j2 dest=/ane/startup.sh mode=655
- name: start_service
  shell: sh /ane/startup.sh
vars变量(此处用到局部变量)

cat vars/main.yml

dest_path: /ane/soft
tomcat_path: /ane/tomcat
template模版文件
tree templates/
templates/
├── server.xml.j2
├── startup7.sh.j2
└── startup8.sh.j2

脚本中使用的变量获取ip方式(ansible_ens33.ipv4.addreee可以通过setup模块获取).
cat templates/startup8.sh.j2

#!/bin/bash
PROCESS=`ps -ef|grep -w java |grep -v grep|grep -v PPID|awk '{ print $2}'`
for p in $PROCESS
do
  kill -9 $p
done

-Dcom.sun.management.jmxremote.port=9001
-Djava.rmi.server.hostname={{ ansible_ens33.ipv4.address }}
-XX:+HeapDumpOnOutOfMemoryError
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

编写入口执行文件
cat /etc/ansible/roles/tomcat.yml

- hosts: test   #选择需要执行的主机组或IP
  remote_user: root  #远程执行用户
  roles:
  #- hosts
  #- java     #若没有配置java环境变量,请在tomcat之前加上java,按顺序执行
  - tomcat    #选择tomcat项目

执行ansible playbook:
在这里插入图片描述

当我再次执行playbook,先判断/ane/tomcat目录存在,存在即不执行
在这里插入图片描述

查看脚本中的变量是否替换成功

ansible all -m shell -a 'sed -n /hostname/p  /ane/startup.sh' 
 [WARNING]: Consider using template or lineinfile module rather than running sed

172.16.77.137 | SUCCESS | rc=0 >>
-Djava.rmi.server.hostname=172.16.77.137

172.16.77.157 | SUCCESS | rc=0 >>
-Djava.rmi.server.hostname=172.16.77.157

根据返回结果,明显替换成功了
找到ipv4–>address,再查看ipv4的父级,即网卡名称(ens33是我网卡的名字);
固定格式:ansible_网卡名.ipv4.address(以点来分级)
在这里插入图片描述
在这里插入图片描述

将template模版文件分发到各主机时,会自动将模版中的变量替换成常量(即当前主机的ip)

企业案例4:批量添加用户

方法一:

cd /etc/ansible/roles
mkdir -p user/tasks

#写playbook
cat user/tasks/main.yml

- name: add user ane
  user: name=ane shell=/bin/bash  password={{ 'ane' |password_hash('sha512') }} update_password=always append=yes


方法二:
[root@lbzpf roles]# cat user/tasks/main.ymlbak 
- name: add user
  shell: useradd ane |echo "ane" | passwd --stdin ane

以上内容只是ansible playbook案例的冰山一角,后续将结合jenkins,kubernetes分享更多内容
使用 ansible 一键安装kubernetes+containerd+calico集群

  • 38
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛溪博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值