需求--01自动化部署
1.需求
给你一张表格
让你将安装包按分类发过去并安装
再修改其中的配置文件
------------------------------------例子分割线----------------------------------------------------------------------------------------------------------
1.1 传送agentSetup.tar.gz至Agent=8.0.0.111,安装agentSetup/setup/下的文件
1.2 修改agentSetup/conf/env.json
local["ip"]="8.0.0.111"
local["envtype"]="aaa"
server["ip"]="8.0.0.1"
master["ip"]="8.0.0.11"
判断同master对应的agent中ip大小,按末尾排号,按上表8.0.0.111最小
agent1["ip"]="8.0.0.111"
agent2["ip"]="8.0.0.112"
2.代码块(网上收录,未整理)
2.1 获取本机IP
#!/usr/bin/env python #encoding: utf-8 #description: get local ip address import os import socket, fcntl, struct def get_ip(): #注意外围使用双引号而非单引号,并且假设默认是第一个网卡,特殊环境请适当修改代码 out = os.popen("ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{print $1}' | head -1").read() print out #另一种方法, 只需要指定网卡接口, 我更倾向于这个方法 def get_ip2(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s', ifname[:15]))[20:24]) if __name__ == '__main__': get_ip() print get_ip2('eth0') print get_ip2('lo')
2.2 批量修改Json文件
#coding=utf-8 import os import json #获取目标文件夹的路径 filedir = os.getcwd()+'/ceshi' #获取文件夹中的文件名称列表 filenames=os.listdir(filedir) #遍历文件名 for filename in filenames: filepath = filedir+'/'+filename print filepath after = [] # 打开文件取出数据并修改,然后存入变量 with open(filepath, 'rb') as f: data = json.load(f) print type(data) for zidian in data: if zidian["conference_date"] == "": zidian["conference_date"] = "0001-01-01T00:00:00Z" if zidian["publication_date"] == "": zidian["publication_date"] = "0001-01-01T00:00:00Z" after = data # 打开文件并覆盖写入修改后内容 with open(filepath, 'wb') as f: data = json.dump(after, f)
2.3 读取Excel生成Json(有点问题)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import xlrd
import json
#定义函数打开excel并将数值做成列表
def open_excel(file_path):
book_data=xlrd.open_workbook(file_path)
book_sheet=book_data.sheet_by_index(0) #打开文件的中第一个表
rows_num=book_sheet.nrows #行数
rows0=book_sheet.row_values(0) #第一行的各个名称作为字典的键
rows0_num=len(rows0) #这个可以知道有几列
list=[]
for i in range(1,rows_num):
rows_data=book_sheet.row_values(i) #取每一行的值作为列表
rows_dir={}
for y in range(0,rows0_num): #将每一列的值与每一行对应起来
rows_dir[rows0[y]]=rows_data[y]
list.append(rows_dir)
return list
b='hosts.xlsx'
a=open_excel(b)
print(a)
with open("test.json","w") as f:
json.dump(a,f)
3.Ansible
3.1 添加本机的public ssh key添加到目标机器的authorized_keys
# 生成不对称加密公私钥
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
# 使本机可以访问目标机器
ssh-copy-id -i ~/.ssh/id_rsa.pub 目标用户@目标机器IP
3.2 依照目标IP发送安装包
参考文档:https://www.cnblogs.com/yc913344706/p/7867554.html
4.最终采取的方案:
因为内部的脚本无法发出来,所以这里就不粘贴了,总之就是上面几段代码的组合。
我写了两个脚本,一个transfer.py用于将excel转化为hosts,json,将结果与config.py传入目标机器集群中,通过ansible远程调用完成配置,感觉也没那么智能。但是因为没有引起波澜,似乎没那么大需求,所以再没有做更新。