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

  • 相关阅读:
    暑假日报-11
    暑假日报-10
    暑假日报-9
    暑假日报-8
    暑假日报-7
    暑假日报-6
    暑假日报-5
    暑假日报-4
    暑假日报-3
    第二次集训的每日感想
  • 原文地址:https://www.cnblogs.com/cevinchen/p/9434203.html
Copyright © 2020-2023  润新知