自动化创建ETX用户帐号

在芯片设计行业,ETX是常见的远程访问环境。用户在通过ETX访问远程环境前必须首先加入ETX系统,然后通过profile分配相关的环境的访问权限。

通常这些操作在ETX WEB页面手工操作,如果我们期望实现用户帐号注册全自动化,就需要将以上操作通过脚本来实现。

经过调查发现ETX提供了REST访问接口,因此帐号注册全自动化就可以实现。

主要流程如下:

在调用ETX REST接口前还需要获取ETX API的URL以及访问密钥。登录ETX后,点击右上部用户头像旁边的齿轮图标,在用户设置中选择创建 API keys即可生成ETX API访问密钥。 

 ETX登录界面左上角选择 REST API即可显示所有ETX API,点击还可查看API的详细说明和示例。

通过 Python 自动创建ETX帐号的示例代码如下:

#!/opt/miniconda3/bin/python
################################################################################
#
# Author: Shuguangbo
#
################################################################################import traceback
import logging
import logging.config
import urllib3
import requests
import jsonurllib3.disable_warnings()class userHandler():def __init__(self):self._account = ''self._userID = ''self._etxUserID = ''self.getETXGroup()...def getETXUserID(self):session = NoneuserData = dict()userID = ''account = self._accounttry:apiurl = self._config['ETX']['ETX_URL'] + f'/etx/api/v2/users?where_login={account}'session = requests.Session()header = {'Content-Type': 'application/json', 'Authorization': f"ETX {self._config['ETX']['API_KEY']}"}result = session.get(apiurl, headers=header, verify=False)if result.status_code == 200:logging.info('Get ETX user ID succeeded.')userList = json.loads(result.text)userID = userList[0]['id']self._etxUserID = userIDelse:logging.error('Get ETX user ID failed.')except Exception as e:logging.error(f"Get ETX user ID failed. error: {str(e)}, stack: {traceback.format_exc()}")finally:if session:session.close()return userIDdef getETXGroup(self):groupData = dict()session = Nonetry:apiurl = self._config['ETX']['ETX_URL'] + '/etx/api/v2/usergroups'session = requests.Session()header = {'Content-Type': 'application/json', 'Authorization': f"ETX {self._config['ETX']['API_KEY']}"}result = session.get(apiurl, headers=header, verify=False)if result.status_code == 200:logging.info('Get ETX group info succeeded.')groupList = json.loads(result.text)for group in groupList:groupData[group['name']] = groupelse:logging.error(f'Get ETX group info failed. Error: {result.text}')exit(1)except Exception as e:logging.error(f"GET ETX user group info failed. error: {str(e)}, stack: {traceback.format_exc()}")exit(1)finally:if session:session.close()self._etxGroups = groupDatadef addETXUserIntoGroup(self, userID, groupID):result = Truesession = Nonetry:apiurl = self._config['ETX']['ETX_URL'] + f'/etx/api/v2/usergroups/{groupID}/members/addbyid/{userID}'session = requests.Session()header = {'Content-Type': 'application/json', 'Authorization': f"ETX {self._config['ETX']['API_KEY']}"}result = session.post(apiurl, headers=header, verify=False)if result and result.status_code == 200:logging.info(f'Add user {userID} into ETX group {groupID} succeeded.')else:logging.error(f'Add user {userID} into ETX group {groupID} failed.')result = Falseexcept Exception as e:logging.error(f"Add ETX user into user group failed. error: {str(e)}, stack: {traceback.format_exc()}")result = Falsefinally:if session:session.close()return resultdef registerETXUser(self):EMSG = ''session = Nonetry:account = self._accountname = self._nameemail = self._emailapiurl = self._config['ETX']['ETX_URL'] + '/etx/api/v2/users'session = requests.Session()header = {'Content-Type': 'application/json', 'Authorization': f"ETX {self._config['ETX']['API_KEY']}"}data = {'login': account, 'name': name, 'email': email, 'role':{'name':'User'}}result = session.post(apiurl, headers=header, data=json.dumps(data), verify=False)if result and result.status_code == 200:userData = json.loads(result.text)self._etxUserID = userData['id']logging.info(f'Register ETX user {account} succeeded. User id: {userData["id"]}')else:logging.error(f'Register ETX user {account} failed. Error: {result.text}')EMSG = f"Register ETX user {account} failed."except Exception as e:logging.error(f"Register ETX user {account} failed. Error: {str(e)}")EMSG = f"Register ETX user {account} failed."finally:if session:session.close()return EMSGdef addETXUser(self):EMSG = ''try:user = self._accountret = self._registerETXUser()if len(ret):EMSG += retreturn EMSGuserID = self._etxUserIDif len(userID) == 0:EMSG = "ETX user id is invalid.\n"return EMSGetxgroup = self._config['ETX']['DEFAULT_GROUP']                     groupID = self._etxGroups[etxgroup]['id']ret = self.addETXUserIntoGroup(userID, groupID)if not ret:EMSG += f'Failed to add ETX profile for {user} .\n'             except Exception as e:logging.error(f"Add ETX User profile failed. error: {str(e)}, stack: {traceback.format_exc()}"EMSG += "Add ETX User profile failed.\n"return EMSG

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot整合Mybatis框架实现多数据源的静态数据源和动态数据源配置落地

Mybatis是什么 Mybatis是一个基于JDBC实现的,支持普通 SQL 查询、存储过程和高级映射的优秀持久层框架,去掉了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。 Mybatis主要思想是将程序中大量的 SQL 语句剥离出来,配置在配置文件中,以实现 SQL 的灵活配置。…

一文搞懂Git版本工具常用的操作命令

简述 Git是一个分布式的版本控制工具,其在使用上要比SVN等版本控制工具稍显复杂。为了便于理解,本文通过图文方式详细介绍Git的使用,以便于快速掌握Git。Git涉及的主要概念和命令如图所示。理解上述概念后,基本可以使用Git完成日常开发工作。关于Git的介绍以及常用命令在之前的…

代码随想录算法训练营第16天 |(二叉树3 104.二叉树的最大深度 559. N叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数

二叉树part03 104.二叉树的最大深度 (优先掌握递归)(昨天用层序迭代做过解题思路 559. N叉树的最大深度111.二叉树的最小深度 (优先掌握递归)(昨天用层序迭代做过解题思路 222.完全二叉树的节点个数&#x…

人工智能在银行支付领域的应用场景与发展建议

人工智能在银行支付领域的应用场景与发展建议 随着科技的不断进步和金融行业的发展,人工智能(AI)在银行支付领域的应用正日益广泛。AI技术可以通过数据分析和智能算法,提升支付系统的效率、安全性和用户体验。以下是人工智能在银…

易经占卜中的人工智能思想:先随机有一个答案不管正确与否 等后期积累经验再完善,答案就会越来越准确好用

《易经》:研究变化,平衡,对不确定性、复杂性处理、动态适应以及系统性决策 《易经》(又称《周易》)是中国古代的一部哲学经典,主要讨论的是宇宙和生活中的变化规律。它不仅仅是一部占卜书籍,更…

【YOLO系列】 YOLO V4之正则化DropBlock

资料下载 论文下载:DropBlock: A regularization method for convolutional networks 一、简介 DropBlock是一种正则化技术,用于防止深度神经网络的过拟合。它通过在训练过程中随机丢弃网络中的一部分特征图,来增加模型的泛化能力。 文章中分…

在微信公众号上怎么实现拼团功能

拼团魅力:微信公众号上的拼团功能如何助力营销 一、引言 在这个数字化时代,微信公众号成为了企业与消费者互动的重要平台。而拼团功能作为微信营销的一大利器,为企业带来了巨大的商业价值。那么,如何在微信公众号上实现拼团功能&…

gseaplot3修改一下clusterProfiler默认绘图函数

直接使用clusterProfiler::gseaplot2绘图会出现下边的结果&#xff0c;导致四周显示不全&#xff0c;线的粗细也没办法调整&#xff0c;因为返回的是一个aplot包中的gglist对象&#xff0c;没太多研究。 p1 <- clusterProfiler::gseaplot2(gsea_result, gsea_result$ID, pv…

JavaScript初见

书写位置 和css差不多 行内script标签内script所引的js文件 输入输出语句 输入 prompt();输出 console();// 控制台显示 alert();//弹出框 alert(字符串 变量 ’\n‘);变量 声明 var neme 原神; var tele 1;不用管类型&#xff0c;真不错啊 **js中变量的声明不需…

Logback框架基本认识

文章目录 一.什么是Logback1.1 初识Logbcak 二.Logbcak的结构三.日志的级别四.配置组件详解4.1 logger 日志记录器属性的介绍如何在配置文件里配置 4.2 appender 附加器 配合日志记录器的输出格式4.2.1 控制台附加器4.2.2 文件附加器4.3.3滚动文件附加器 4.3 Filter: 过滤器&am…

记录一次应用服务响应慢问题排查过程

3个自建系统使用了一个统一的外部系统接入服务&#xff0c;该服务主要是统一处理外部系统对接&#xff0c;处理掉数据鉴权等问题&#xff0c;提供内部鉴权接口给自己的服务使用。类似一个对接网关。 问题背景 研发反应&#xff0c;后端接口请求时快时慢&#xff0c;影响演示效…

21.正则表达式

正则表达式 文章目录 正则表达式1. 正则表达式分类2. 基本正则表达式3. 扩展正则表达式 1. 正则表达式分类 正则表达式&#xff1a;REGEXP&#xff0c;REGular EXPression。 正则表达式分为两类&#xff1a; Basic REGEXP&#xff08;基本正则表达式&#xff09;Extended REG…

【MATLAB】快速绘制曲线图的形状,粗细,颜色

目录 MATLAB 快速绘制曲线图的形状&#xff0c;粗细&#xff0c;颜色 1.通过改变R-G-B 的值改变线条的颜色&#xff1a;2.通过改变c∈[1,∞)的值改变线条的粗细&#xff1a;3.线条形状&#xff0c;粗细&#xff0c;颜色选择&#xff1a;4.Matlab中画图实现案例&#xff1a; MA…

js封装根据年月日获取星座效果demo(整理)

//根据年月日获取星座 function getZodiacSign(dateString) {// 用法:const dateStr 2024-01-11;// const zodiacSign getZodiacSign(dateStr);const date new Date(dateString);const month date.getMonth() 1;const day date.getDate();if ((month 1 && day &…

Python教程39:使用turtle画美国队长盾牌

---------------turtle源码集合--------------- Python教程36&#xff1a;海龟画图turtle写春联 Python源码35&#xff1a;海龟画图turtle画中国结 Python源码31&#xff1a;海龟画图turtle画七道彩虹 Python源码30&#xff1a;海龟画图turtle画紫色的小熊 Python源码29&a…

HTML date类型数前后端互传,页面显示date类型

springMVCthymeleafHTML(date) 1.实体类定义字段为date类型 private Date bizdate;2.前端HTML中input的date类型 <div class"form-group"><label for"bizdate">请输入交易日期</label><input type"date" class"form…

Edge浏览器设置自动刷新

1. 使用浏览器扩展 你可以在 Edge 的扩展商店中搜索并安装这些扩展。以下是一些常见的扩展&#xff1a; Super Auto Refresh: 提供了强大的自动刷新功能&#xff0c;可以根据自定义的时间间隔进行刷新。 Auto Refresh: 允许你设置页面刷新的间隔。 2. 使用开发者工具&#xff1…

【uview2.0】Keyboard 键盘 与 CodeInput 验证码输入 结合使用 uview

https://www.uviewui.com/components/codeInput.html &#xff08;CodeInput 验证码输入&#xff09; https://www.uviewui.com/components/keyboard.html &#xff08;Keyboard 键盘&#xff09; <u-keyboard mode"number" :dotDisabled"true" :show&q…

一体式气象站的优点是什么?带大家了解一下

一体式气象站是一款高度集成、低功耗、可快速安装、便于野外监测使用的高精度自动气象观测设备。 一体式气象站的优点主要体现在以下几个方面&#xff1a; 集成度高&#xff1a;一体式气象站集成了多种气象传感器、数据处理单元、显示单元和通讯模块等&#xff0c;可以同时监…

2019年认证杯SPSSPRO杯数学建模B题(第一阶段)外星语词典全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 基于方差分布的方法对未知语言文本中重复片段的自动搜索问题的研究 B题 外星语词典 原题再现&#xff1a; 我们发现了一种未知的语言&#xff0c;现只知道其文字是以 20 个字母构成的。我们已经获取了许多段由该语言写成的文本&#xff0c;但…