SVN操作脚本

安装模块

pip install pywinrm

脚本如下


#!/usr/bin/env python3
# coding=utf-8
# author:LJX
# describe:仓库授权
# createdate:2021.5.27 import winrm
import json class SVN(object):
'''
# 1、查看winrm服务状态。默认没有启动 winrm enumerate winrm/config/listener
# 2、启动服务器(网络类型改为专有网络) winrm quickconfig
# 3、开启防火墙 netsh advfirewall firewall set rule group="Windows 远程管理" new enable=yes
# 4、启动 winrm quickconfig
# 5、查看 winrm enumerate winrm/config/listener
# 5、为winrm service 配置auth winrm set winrm/config/service/auth @{Basic="true"}
# 7、为winrm service 配置加密方式为允许非加密 winrm set winrm/config/service @{AllowUnencrypted="true"}
''' def __init__(self, host, port, user, passwd):
self.host = host
self.port = port
self.user = user
self.passwd = passwd
self.winConn = winrm.Session('http://{0}:{1}/wsman'.format(self.host, self.port), auth=(self.user, self.passwd)) def exec_shell(self, command, msg):
ret = self.winConn.run_ps(command)
if ret.status_code == 0:
print(msg + "成功")
return ret.std_out.decode()
elif ret.status_code == 1:
raise Exception(msg + "失败:" + str(ret.std_err, "utf-8")) def parse_data(self, data, isAll=True):
info_list = []
if type(data) is list or isAll:
if isAll:
if type(data) is list:
for info in data:
info_list.append(info["Name"])
return info_list
else:
return [data["Name"]]
else:
return [data["Name"]]
elif type(data) is dict:
return True def get_SvnUser(self, name=''):
'''
获取所有用户
:return:
'''
try:
data = json.loads(self.exec_shell("Get-SvnLocalUser {0} | ConvertTo-Json".format(name), "查询用户"))
result = self.parse_data(data, 1 - bool(name))
return result
except Exception as e:
print("用户不存在")
return [] def get_SvnGroup(self, name=''):
'''
查询用户组
:return: 用户组列表
'''
try:
data = json.loads(self.exec_shell("""Get-SvnLocalGroup {0}| ConvertTo-Json""".format(name), "查询用户组"))
result = self.parse_data(data, 1 - bool(name))
return result
except Exception as e:
print("用户组不存在")
return [] def get_SvnGroupUser(self, name):
try:
data = json.loads(self.exec_shell("Get-SvnLocalGroupMember {0} | ConvertTo-Json".format(name), "用户组中用户查询"))
result = self.parse_data(data, isAll=True)
return result
except Exception as e:
print("用户组不存在")
return [] def get_Repository(self, name=''):
'''
查询仓库
:return:返回仓库列表
'''
try:
data = json.loads(self.exec_shell("""Get-SvnRepository {0}| ConvertTo-Json""".format(name), "查询仓库"))
result = self.parse_data(data, 1 - bool(name))
return result
except Exception as e:
print("仓库不存在")
return [] def add_SvnUser(self, username, password):
'''
添加用户
:param username: 用户名
:param password: 密码
:return: 返回true 创建成功 or False 创建失败
'''
try:
if self.get_SvnUser(name=username) == []:
data = self.exec_shell(
'''New-SvnLocalUser -Name {0} -Password (ConvertTo-SecureString -String "{1}" -AsPlainText -Force)'''.format(
username, password), "创建用户")
else:
if input("用户已存在是否重置密码?Y/N").lower().split(' ') == "Y":
data = self.exec_shell(
'''Set-SvnLocalUser -Name {0} -Password (ConvertTo-SecureString -String "{1}" -AsPlainText -Force)'''.format(
username, password), "重置密码")
return True
except Exception as e:
print(e) def add_SvnGroup(self, GroupName):
'''
:param GroupName:
:return: True is successful or False is Fail
'''
try:
if self.get_SvnGroup(GroupName) == []:
data = self.exec_shell("""New-SvnLocalGroup {0}""".format(GroupName), "用户组添加")
else:
print("用户组已存在")
return True
except Exception as e:
print(e) def add_UserGroup(self, GroupName, Username):
try:
if self.get_SvnGroup(GroupName) != []:
if username in self.get_SvnGroupUser(GroupName):
print("用户已存在组中")
else:
self.exec_shell("Add-SvnLocalGroupMember {0} (Get-SvnLocalUser {1})".format(GroupName, Username),
"用户组添加用户")
else:
print("用户组不存在")
return True
except Exception as e:
print("添加失败") def add_Repository(self, RepoName):
'''
添加仓库
:param RepoName:
:return:
'''
try:
if self.get_Repository(RepoName) == []:
data = self.exec_shell("""New-SvnRepository {0}""".format(RepoName), "仓库添加")
else:
print("仓库已存在")
return True
except Exception as e:
print(e) def add_GrantUser(self, Repository, username, access):
'''
仓库授权用户
:param Repository
:param username
:param access: ReadOnly NoAccess ReadWrite
:return: True is successful or False is fail
'''
command = """Add-SvnAccessRule -AuthorizationProfile SubversionLocal -Repository {0} -Path / -AccountName {1} -Access {2} -Force""".format(
Repository, username, access)
if self.get_user(username):
print("用户已存在")
self.exec_shell(command, "仓库授权")
else:
print("用户不存在,创建用户")
data = self.Add_SvnUser(username)
if data:
print("用户创建成功")
self.exec_shell(command, "仓库授权")
else:
print("用户创建失败") def add_GrantGroup(self, Repository, GroupName, access):
'''
仓库授权用户组
:param Repository:
:param GroupName:
:param access:
:return: True is successful or False is fail
'''
command = '''Add-SvnAccessRule {0} -Path / -AccountId "@{1}" -Access {2}'''.format(Repository, GroupName,
access)
try:
if self.get_SvnGroup(GroupName):
self.exec_shell(command, "仓库授权用户组")
else:
print("用户不存在,创建用户")
data = self.add_SvnGroup(GroupName)
if data:
print("用户创建成功")
self.exec_shell(command, "仓库授权")
else:
print("用户创建失败")
except Exception as e:
print("用户组授权失败") def createObj():
svn = SVN(host="ip", port="port", user="user", passwd="password")
return svn if __name__ == "__main__":
svn = createObj()
params = {
"Repository": "xxxx",
"username": "xxxx",
# 权限分别是access: ReadOnly NoAccess ReadWrite
"access": "ReadOnly",
}
# 授权仓库用户权限
data = svn.add_GrantUser(Repository=params["Repository"],username=params["username"],access=params["access"])
# 授权用户用户组权限
# data = svn.add_GrantGroup(Repository=params["Repository"],GroupName=params["username"],access=params["access"])
print(data)

python 远程操作svn的更多相关文章

  1. 如何使用python远程操作linux

    在云服务测试中,往往需要我们进入云服务内容进行相关内容的测试.这测试可以使用平台自身的noVNC.外部辅助xshell等工具连接到云服务内部进行测试.但是在如此反复的测试操作中,就需要用到自动化测试方 ...

  2. python远程操作服务器

    python远程控制 标签(空格分隔): 远程Linux python远程控制:方案: Paramiko Pexpect(主要Linux机器) 安装Paramiko pip install param ...

  3. c#实现远程操作svn

    /// <summary> /// 本地svn服务器地址 /// </summary> private static string localSVN = Configurati ...

  4. Python 使用Python远程连接并操作InfluxDB数据库

    使用Python远程连接并操作InfluxDB数据库 by:授客 QQ:1033553122 实践环境 Python 3.4.0 CentOS 6 64位(内核版本2.6.32-642.el6.x86 ...

  5. python paramiko通过远程操作linux

    python-paramiko通过远程操作linux 1. python-paramiko通过远程操作linux python3 远程操作linux 使用第三方paramiko库,对于实现运维自动部署 ...

  6. python 远程执行命令、上传、下载举例

    使用python中的 paramiko 实现远程操作,需要安装 paramiko 模块. # vi pssh.py #!/usr/bin/python #coding=utf-8 ''' Create ...

  7. 在ubunut下使用pycharm和eclipse进行python远程调试

    我比较喜欢Pycharm,因为这个是JetBrains公司出的python IDE工具,该公司下的java IDE工具--IDEA,无论从界面还是操作上都甩eclipse几条街,但项目组里有些人使用e ...

  8. python基础===利用PyCharm进行Python远程调试(转)

    原文链接:利用PyCharm进行Python远程调试 背景描述 有时候Python应用的代码在本地开发环境运行十分正常,但是放到线上以后却出现了莫名其妙的异常,经过再三排查以后还是找不到问题原因,于是 ...

  9. vscode连接云服务,搭建Python远程开发

    配置Python远程开发环境前提 配置步骤 1.windows 10 开发机配置 win10 1809后支持ssh ssh-keygen -t rsa -b 4096 #会显示生成到的目录C:\Use ...

  10. Python API 操作Hadoop hdfs详解

    1:安装 由于是windows环境(linux其实也一样),只要有pip或者setup_install安装起来都是很方便的 >pip install hdfs 2:Client——创建集群连接 ...

随机推荐

  1. AcWing 4489. 最长子序列题解

    思路 此题较为简单,简述一下思路. 设原始数列为 \(a\). 定义 \(dp\) 数组,初始值都为 \(1\). 遍历数组,如果 \(a[i-1]*2 \leq a[i]\) ,那么 \(dp[i] ...

  2. SpringBoot整合Websocket,实现作为客户端接收消息的同时作为服务端向下游客户发送消息

    SpringBoot整合Websocket 1. SpringBoot作为服务端 作为服务端时,需要先导入websocket的依赖 <dependency> <groupId> ...

  3. Nextcloud允许不被信任的域访问 取消 trusted domains

    在服务器部署了Nextcloud,由于测试需要,经常从不同的地址访问,但是每次访问都要把域名添加到受信任域,反反复复修改也挺麻烦,暂时又没找到通配符或者禁用的方法. 不过网上提供了一个替代方法,动态生 ...

  4. Linux: rsyslog.conf 配置

    refer to: https://www.debian.org/doc/manuals/debian-handbook/sect.syslog.en.html 日志子系统 Each log mess ...

  5. 解密Prompt系列12. LLM Agent零微调范式 ReAct & Self Ask

    前三章我们分别介绍了思维链的使用,原理和在小模型上的使用.这一章我们正式进入应用层面,聊聊如何把思维链和工具使用结合得到人工智能代理. 要回答我们为什么需要AI代理?代理可以解决哪些问题?可以有以下两 ...

  6. AcWing 4798. 打怪兽题解

    可以从 \(1\) 枚举到 \(n\) 表示要打多少个怪兽. 因为你要打 \(t\) 个怪兽,并不管顺序,所以我们可以对 \([1, t]\) 这一段进行排序,然后计算 \(a[t], a[t - 2 ...

  7. Programming abstractions in C阅读笔记:p107-p110

    <Programming Abstractions In C>学习第46天,p107-p110,3.1小节--"The concept of interface",总结 ...

  8. 【问题解决】容器部署MySQL的数据在docker commit导出的镜像中丢失

    问题起因 最近公司有个甲方项目参加竞赛,要求在(基于kubeflow/arena)平台上部置应用,可以将MySQL打包在应用一起,也可以分开部署,没有提供volume相关的支持.大意是可以把初始好的数 ...

  9. MindSponge分子动力学模拟——软件架构(2023.08)

    技术背景 在前面一篇文章中,我们介绍了MindSponge的两种不同的安装与使用方法,让大家能够上手使用.这篇文章主要讲解MindSponge的软件架构,并且协同mindscience仓库讲解一下二者 ...

  10. 如何通过API接口获取1688的商品详情

    1688是中国最大的B2B电商平台之一,吸引了大量的国内外买家和卖家,提供了丰富的商品资源.许多开发者和企业想要通过API接口获取1688商品的详细信息,以便于进行商品数据分析.价格监控等工作.在本文 ...