• svn管理权限下放方案


    前言

    由于公司项目越来越多,员工需求比较大,svn这块的管理工作,集中在一个人身上的话,比较繁重,因此就考虑安全的下放svn管理权限,让各部门的老大能够自己去规划组内成员的svn权限分配;

    思路

    打算让各部门的老大,自己编辑他们本地的一个xlsx表格,这个表格会通过ftp软件在本地打开,实际文件是存放在服务器上的,然后我会通过脚本把xlsx的内容填充到svn权限认证的文件中去(authz),最终同步到svn版本库的指定目录,具体的职责划分如下:
    部门leader:编辑部门的人员权限分配xlsx
    IT:为每一位成员配合用户名和密码
    脚本:根据xlsx表格填充配置文件和用户认证文件,并同步至正式svn服务器

    部署流程

    由于笔者这里已经部署完成了这套东西,因此这里仅展示各部分内容,有需要的同学,也可以参照这部分部署起来;

    Tree

    我们先看下目录树结构

    root@251:~/zj_tmp/template# cd -
    /root/zj_tmp
    root@251:~/zj_tmp# tree backup code config template  
    backup
    ├── authz_era.template.20210806153445
    ├── authz_era.template.20210918120616
    ├── authz_era.template.20210918120728
    ├── authz_era.template.20210928142538
    ├── authz_tt2.template.20210810172856
    ├── authz_tt2.template.20210810172936
    ├── authz_tt2.template.20210810172948
    ├── authz_tt2.template.20210818170436
    └── authz_tt2.template.20210818170451
    code
    ├── setting.py
    ├── setting.pyc
    └── svn_modifi.py
    config
    ├── authz_dl
    ├── authz_dlres
    ├── authz_era
    ├── authz_tt2
    └── passwd
    template
    ├── add_dl_svn.sh
    ├── add_era_svn.sh
    ├── add_tt2_svn.sh
    ├── authz_dlres.template
    ├── authz_dl.template
    ├── authz_era.template
    ├── authz_tt2.template
    ├── dl.template
    ├── era.template
    ├── passwd.template
    └── tt2.template
    

    路径说明

    简单介绍下各个路径的功能

    code:逻辑代码的位置,负责svn的配置填充以及同步至svn服务器

    config:填充之后的正式配置文件

    template:配置文件的模板以及分支模板,还有三个shell是创建分支的脚本

    backup:创建分支之前,需要备份当前的模板,这里是存放备份的地方

    除此之外,这台机器上还有各部门的用户以及家目录,家目录里放着每个项目的xlsx表格,表格里的内容展示如下:

    image

    ok,下面一起来看看脚本部分的内容。

    代码展示

    这部分主要针对是code路径下的代码介绍;

    首先是setting.py文件,内容如下,这里主要是 涉及一些路径变量的定义和对应xlsx表格所对应的模板文件;

    #!/usr/bin/env python
    #-*- coding:utf8 -*-
    # Powered by ZJ 2021-07-29 16:09:42
    
    template_dir = '/root/zj_tmp/template/'
    work_dir = '/data/'
    config_dir = '/root/zj_tmp/config/'
    xlsx_template = {
        'SRSVN权限分布': 'authz_tt2.template',
        'DLSVN权限分布': 'authz_dl.template',
        'ERASVN权限分布': 'authz_era.template',
        'DLRESSVN权限分布': 'authz_dlres.template',
        '用户密码配置文件': 'passwd.template'
        }
    

    其次是svn_modifi.py文件, 主要是逻辑操作类,内容如下:

    #!/usr/bin/env python
    #-*- coding:utf8 -*-
    # Powered by ZJ 2021-07-09 11:02:19
    
    import os
    import sys
    import re
    import pandas as pd
    import numpy as np
    from setting import *
    
    def read_excel(filename):
        pd.set_option('display.max_columns',None)
        pd.set_option('display.width',5000)
        xls_text=np.array(pd.read_excel(filename))
        return dict(xls_text)
    
    #填充项目权限配置函数
    def modifi_pro(xlsx):
        '''
        处理思路:
        从xlsx表中获取到分组名以及分组的成员值,组成字典;
        在SVN的配置文件中,把相同组名后面的参数换成从第一步中获取到的成员值;
        最后再将生成好的配置文件同步到线上SVN服务器.
        '''
        if xlsx not in xlsx_template.keys():
            print('请确认xlsx文件与模板的对应关系')
            sys.exit(1)
        group_dict = {}
        xlsx_data_dict = {}
        temp_file = xlsx_template[xlsx]
        final_file = temp_file.split('.')[0]
        os.system('cp -rf {} {}'.format(template_dir+temp_file,config_dir+final_file))
        varite_files = os.popen("find {} -name '{}*'".format(work_dir,xlsx)).read().strip()
        if len(varite_files) <= 0:
            print('未找到 {} 相关的xlsx配置文件,请检查!'.format(xlsx))
            sys.exit(1)
        for xlsx_file in varite_files.split('
    '):
            xlsx_data = read_excel(xlsx_file)
            xlsx_data_dict.update(xlsx_data)
            for i in xlsx_data.keys():
                varite_str = os.popen("sed -n '/^{} /p' {}".format(i,template_dir+temp_file)).read().strip()
                if len(varite_str) <= 0:
                    continue
                varite_value = varite_str.split('=')[1]
                varite_line_num = os.popen("sed -n '/^{} /=' {}".format(i,template_dir+temp_file)).read().strip()
                group_dict[i] = [varite_value,varite_line_num]
        for i in xlsx_data_dict.keys():
            os.system("sed -i '{} s/{}/ {}/' {}".format(group_dict[i][1],group_dict[i][0],xlsx_data_dict[i],config_dir+final_file))
        return ''
    
    #填充密码文件配置函数
    def modifi_pwd(xlsx):
        temp_file = xlsx_template[xlsx]
        final_file = temp_file.split('.')[0]
        os.system('cp -rf {} {}'.format(template_dir+temp_file,config_dir+final_file))
        varite_file = os.popen("find {} -name '{}*'".format(work_dir,xlsx)).read().strip()
        if len(varite_file) <= 0:
            print('未找到 {} 相关的xlsx配置文件,请检查!'.format(xlsx))
            sys.exit(1)
        xlsx_data = read_excel(varite_file)
        for k,v in xlsx_data.items():
            tgt_str = str(k)+' = '+str(v)
            os.system("sed -i '$a {}' {}".format(tgt_str,config_dir+final_file))
        return ''
    
    if __name__ == '__main__':
        for i in xlsx_template.keys():
            if i == '用户密码配置文件':
                modifi_pwd(i)
            else:
                modifi_pro(i)
        os.system("rsync -avz -r --password-file=/etc/rsync.pass /root/zj_tmp/config/ 192.168.0.111::conf")
    

    执行脚本后,你会发现config目录下的文件都更新了,涉及隐私,这里就不展示了,就是常规svn的authz文件分配方案,只是分组的成员标识,被替换成了xlsx表格中对应分组的成员信息;
    我们看下template的内容:

    [groups]
    devclient = ERA_CLIENT
    devserver = ERA_SERVER
    devdesign = ERA_DESIGN
    devart = ERA_ART
    devtest = ERA_TEST
    

    在配置文件的group中,我们配置了分组,但是成员部分,我们使用了设定的标识参数(ERA_CLIENT、ERA_SERVER),上面脚本的功能,就是把这里的标识参数,替换成xlsx表格里对应分组的成员信息;
    这么解释,大家是不是就能够明白这套逻辑了~
    为了跟全面的解放运维同学的双手,我做了计划任务
    每十分钟执行一次脚本,也就是说,部门老大在新增了组员之后,十分钟之后自动生效;

    root@251:/data/art# crontab -l
    */10 * * * * python /root/zj_tmp/code/svn_modifi.py > /dev/null 2>&1
    

    另外,服务器上的xlsx,可以通过ftp的形式,让各部门的老大进行编辑,我这边是用的工具是WinSCP,这里并不做强制要求;

    服务器上的xlsx展示如下:

    image

    添加分支

    其实添加分支这里,并不打算跟大家详细介绍,因为每个公司添加分支的放是否不一样,笔者这里的方法,并不一定适用于大家的场景,不做赘述了~

    总结

    以上这套东西部署下来,就能够实现把svn的管理权限下放到部门老大的手中去了 ,防止因为项目过多,由单个人管理的话,需要消耗的精力过大;
    这里有一点需要注意,这套东西仅仅是针对简单的人员新增或者削减,以及具体人员在svn配置的分组中的情况进行调整,也就是比较简单的场景,如果复杂的,涉及到模板变动的,还是需要由专门的管理员去维护的;
    没法做到完全的托管,但是可以适当减少企业微信头像的跳动频率,我 i 了。

  • 相关阅读:
    Primary key and Unique index
    Hash unique和Sort unique
    Oracle索引扫描算法
    Oracle预估的基数算法
    PGA突破pga_aggregate_target限制
    aix ipcs使用说明
    开窗函数和聚合函数区别
    【39.66%】【codeforces 740C】Alyona and mex
    【81.82%】【codeforces 740B】Alyona and flowers
    Android SDK离线安装
  • 原文地址:https://www.cnblogs.com/storyawine/p/15403435.html
Copyright © 2020-2023  润新知