需求--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远程调用完成配置,感觉也没那么智能。但是因为没有引起波澜,似乎没那么大需求,所以再没有做更新。

posted on 2018-08-06 23:23  CevinChen  阅读(239)  评论(0编辑  收藏  举报