python 远程操作svn
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的更多相关文章
- 如何使用python远程操作linux
在云服务测试中,往往需要我们进入云服务内容进行相关内容的测试.这测试可以使用平台自身的noVNC.外部辅助xshell等工具连接到云服务内部进行测试.但是在如此反复的测试操作中,就需要用到自动化测试方 ...
- python远程操作服务器
python远程控制 标签(空格分隔): 远程Linux python远程控制:方案: Paramiko Pexpect(主要Linux机器) 安装Paramiko pip install param ...
- c#实现远程操作svn
/// <summary> /// 本地svn服务器地址 /// </summary> private static string localSVN = Configurati ...
- Python 使用Python远程连接并操作InfluxDB数据库
使用Python远程连接并操作InfluxDB数据库 by:授客 QQ:1033553122 实践环境 Python 3.4.0 CentOS 6 64位(内核版本2.6.32-642.el6.x86 ...
- python paramiko通过远程操作linux
python-paramiko通过远程操作linux 1. python-paramiko通过远程操作linux python3 远程操作linux 使用第三方paramiko库,对于实现运维自动部署 ...
- python 远程执行命令、上传、下载举例
使用python中的 paramiko 实现远程操作,需要安装 paramiko 模块. # vi pssh.py #!/usr/bin/python #coding=utf-8 ''' Create ...
- 在ubunut下使用pycharm和eclipse进行python远程调试
我比较喜欢Pycharm,因为这个是JetBrains公司出的python IDE工具,该公司下的java IDE工具--IDEA,无论从界面还是操作上都甩eclipse几条街,但项目组里有些人使用e ...
- python基础===利用PyCharm进行Python远程调试(转)
原文链接:利用PyCharm进行Python远程调试 背景描述 有时候Python应用的代码在本地开发环境运行十分正常,但是放到线上以后却出现了莫名其妙的异常,经过再三排查以后还是找不到问题原因,于是 ...
- vscode连接云服务,搭建Python远程开发
配置Python远程开发环境前提 配置步骤 1.windows 10 开发机配置 win10 1809后支持ssh ssh-keygen -t rsa -b 4096 #会显示生成到的目录C:\Use ...
- Python API 操作Hadoop hdfs详解
1:安装 由于是windows环境(linux其实也一样),只要有pip或者setup_install安装起来都是很方便的 >pip install hdfs 2:Client——创建集群连接 ...
随机推荐
- pe文件对齐
PE中规定了三类对齐:数据在内存中的对齐. 数据在文件中的对齐.资源文件资源数据的对齐. 1.内存对齐 由于windows操作系统对内存属性的设置以也为单位,所以通常情况下,节在内存中的对齐单位必须至 ...
- Java8 函数式编程stream流
1.初始环境准备 场景:现在有一个公司,公司部门有一级部门,二级部门甲和二级部门乙(其中二级部门甲和二级部门乙是一级部门的子部门), 一级部门下面有有001号员工小明,二级部门甲下面有002号员工 ...
- 《HelloGitHub》第 88 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...
- 模型权重保存、加载、冻结(pytorch)
1. 保存整个网络 torch.save(net, PATH) model = torch.load(PATH) 2. 保存网络中的参数(速度快,占空间小) torch.save(net.state_ ...
- SSL 证书过期巡检脚本 (Python 版)
哈喽大家好,我是咸鱼 之前写了个 shell 版本的 SSL 证书过期巡检脚本 (文章:<SSL 证书过期巡检脚本>),后台反响还是很不错的 那么今天咸鱼给大家介绍一下 python 版本 ...
- 青少年CTF-Web-帝国CMS1-3通关记录
0x01说明 本次进通过平台内题目进行,非真实环境. 帝国CMS01 首先下发题目链接 我们首先先找后台看看 后台地址为/e/admin/ 随后,经过dirsearch进行扫描,得到了一个www.zi ...
- Nginx深入:nginx功能模块、目录结构及配置文件详解
Nginx功能模块说明 1.Nginx 核心功能模块(Core functionality) Nginx核心功能模块负责Nginx的全局应用,主要对应主配置文件的核心层(Main层)和事件(Event ...
- 3、Spring之入门案例
3.1.创建module 3.1.1.右击project,创建新module 3.1.2.选择maven 3.1.3.设置module名称和路径 3.1.4.module初始状态 3.1.5.配置打包 ...
- [ABC131E] Friendships
2023-01-30 题目 题目传送门 翻译 翻译 难度&重要性(1~10):4 题目来源 AtCoder 题目算法 找规律,构造 解题思路 先构造一个菊花图为最大边的图,再依次连边减小k. ...
- 通过Scrum实现最大生产力的五种方法
在数字化.信息化.智能化蓬勃发展的今天,敏捷开发和Scrum已成为重塑项目管理的重要方式. 敏捷是一种体现不同方法的思维方式,包括了Scrum,看板,极限编程(XP).精益开发等众多框架. Scrum ...