1、实验环境:bp一个阿里云的实验虚机,,选docker环境的 os比较新
https://developer.aliyun.com/adc/scenario/e6875b45034a4461b2a7769e06451657
# cat /etc/system-release
CentOS Linux release 7.7.1908 (Core)
# python -V
Python 2.7.5
2、安装ansible和 nginx(用来假装是前置的外部服务)
yum -y install ansible nginx lrzsz
3、准备一个测试数据 cmdb.csv
cat cmdb.csv
配置编号,名称,IP,负责人,所在项目
编号89757,test1,127.0.0.1,李雷,高数
编号89758,test2,172.16.2.222,韩梅梅,大物
# 放到nginx默认下载目录下
cd /usr/share/nginx/html/
rz
# 上传cmdb.csv文件
chmod 644 /usr/share/nginx/html/cmdb.csv
cat cmdb.csv
systemctl start nginx
# 下载配置看看,没毛病
cd /tmp
wget http://127.0.0.1/cmdb.csv
cat cmdb.csv
4、构建过程 cd /tmp;vi build.sh
#!/bin/bash
# 创建两级临时目录
mkdir -p /tmp/test/motd
cd /tmp/test
# 创建秘钥对和两个测试用户
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa > /dev/null
useradd test1;useradd test2
cp /root/.ssh/id_rsa.pub /tmp/
su - test1 -c "mkdir ~/.ssh;cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys;chmod 700 ~/.ssh;chmod 600 ~/.ssh/authorized_keys"
su - test2 -c "mkdir ~/.ssh;cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys;chmod 700 ~/.ssh;chmod 600 ~/.ssh/authorized_keys"
# 免ansible初次验证
sed -i 's/^#\(host_key_checking = False\)/\1/' /etc/ansible/ansible.cfg
# 创建测试用ansible-Inventory文件,,
# 取了实验机的两个私有ip,因为新版本不支持一个ip多个用户操作了,同ip只取最后一个配置
ip2=`ip a|grep inet|grep -v 127.0.0.1|head -1|awk '{print substr($2,1,length($2)-3)}'`
echo -e "[1]
127.0.0.1 ansible_ssh_user=test1
[2]
"$ip2 "ansible_ssh_user=test2"> linshi
# 下载外部提供的配置表,替换ip
wget http://127.0.0.1/cmdb.csv >& /dev/null
sed -i 's/88.88/'"$ip2"'/g' cmdb.csv
# 根据表生成一堆配置
cat cmdb.csv|awk -F, '{print "######\n"$1"-"$2"\nIP:"$3"\n负责人:"$4"\n项目:"$5"\n######" > "/tmp/test/motd/"$3}'
cat cmdb.csv|awk -F, '{print "######\n"$1"-"$2"\nIP:"$3"\n负责人:"$4"\n项目:"$5"\n######" > "/tmp/test/motd/"$2}'
# 启动临时http服务
nohup python -m SimpleHTTPServer 8888 >& http8888.log &
# 创建小jo本,模拟ansible控制远端来下载文件,,
# 生产上我会取ip做key,实验中我只有一个机器,就使用username了
echo -e '#!/bin/bash
wget -O ~/motdfile http://localhost:8888/motd/`whoami`
echo "cat ~/motdfile" >>~/.bash_profile' > /tmp/test/1.sh
# 下发jo本执行
ansible -i linshi all -m script -a "/tmp/test/1.sh" >& /dev/null
5、验证
sh build.sh
# ansible调自定义命令查看结果
cd /tmp/test
ansible -i linshi all -m shell -a ". ~/.bash_profile"
# 最终想要的效果,手动切个进去康康
6、清除
# 销毁临时http服务,删除用户和目录
netstat -ntlp|grep 8888|awk '{print $7}'|awk -F/ '{print $1}'|xargs kill -9 >& /dev/null
userdel test1;userdel test2
cd /tmp
rm -rf /tmp/test /home/test*
【完工】
网友评论