背景:

  我们要在Apollo中批量给新创建的用户授可编辑权限

  apollo系统版本: java-2.1.0

  管理员账号:Apollo

  可编辑账号:guoyabin

过程:

  在没写这段代码的时候从网上搜了一些文章如下:
  apollo_adminservice、apollo_configservice改成自己的域名,在不知道用户密码的前提下可以获取cluster、app_ids、namespaces的脚本。

# !/usr/bin/env python
# -*-coding:utf-8 -*- """
# File : apollo.py
# Time :2023/6/6/006 11:01
# Author :GuoYabin
# version :python 3.8
# Description:利用apollo_adminservice的8090和apollo_configservice的8080
获取所有Apollo环境/appid/cluster
"""
import json
import time
import requests
from urllib.parse import urlparse def get_response(uri):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20200101 Firefox/60.0",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "close"
}
return requests.get(uri, headers=headers, timeout=20, allow_redirects=False) def get_app_ids(uri):
print(uri)
app_ids = []
response = get_response("{}/apps".format(uri))
html = response.text
print(html)
if response.status_code == 200:
for app in json.loads(html):
app_ids.append(app.get("appId"))
return app_ids def get_clusters(uri, app_ids):
clusters = {}
for app_id in app_ids:
clusters[app_id] = []
response = get_response("{}/apps/{}/clusters".format(uri, app_id))
html = response.text
if response.status_code == 200:
for app in json.loads(html):
clusters[app_id].append(app.get("name"))
return clusters def get_namespaces(uri, app_ids, clusters):
namespaces = {}
for app_id in app_ids:
namespaces[app_id] = []
for cluster in clusters[app_id]:
url = "{}/apps/{}/clusters/{}/namespaces".format(uri, app_id, cluster)
response = get_response(url)
html = response.text
if response.status_code == 200:
for app in json.loads(html):
namespaces[app_id].append(app.get("namespaceName"))
return namespaces def get_configurations(uri, app_ids, clusters, namespaces):
configurations = []
for app_id in app_ids:
for cluster in clusters[app_id]:
for namespace in namespaces[app_id]:
key_name = "{}-{}-{}".format(app_id, cluster, namespace)
url = "{}/configs/{}/{}/{}".format(uri, app_id, cluster, namespace)
response = get_response(url)
code = response.status_code
html = response.text
print("[+] get {} configs, status: {}".format(url, code))
time.sleep(1)
if code == 200:
configurations.append({key_name: json.loads(html)})
return configurations if __name__ == "__main__":
apollo_adminservice = "http://192.168.40.185:8090"
apollo_configservice = "http://192.168.40.185:8080" scheme0, netloc0, path0, params0, query0, fragment0 = urlparse(apollo_adminservice)
host0 = "{}://{}".format(scheme0, netloc0) _ids = get_app_ids(host0)
print("All appIds:")
print(_ids) _clusters = get_clusters(host0, _ids)
print("\nAll Clusters:")
print(_clusters) _namespaces = get_namespaces(host0, _ids, _clusters)
print("\nAll Namespaces:")
print(_namespaces)
print() scheme1, netloc1, path1, params1, query1, fragment1 = urlparse(apollo_configservice)
host1 = "{}://{}".format(scheme1, netloc1)
_configurations = get_configurations(host1, _ids, _clusters, _namespaces)
print("\nresults:\n")
print(_configurations)

解决方法:

  下面我们自己写一个批量授权的方法、使用管理员apollo给guoyabin账号授权,允许guoyabin账号可以编辑,但无法发布权限。

# !/usr/bin/env python
# -*-coding:utf-8 -*- """
# File : apollo.py
# Time :2023/6/6/006 11:01
# Author :GuoYabin
# version :python 3.8
# Description:模拟Apollo登陆,获取所有envs/appid添加guoyabin账号编辑权限
""" import requests
import json class apollo:
def __init__(self):
self.username = "apollo"
self.password = "*********"
self.apollourl = "http://**************"
self.addauth = "guoyabin"
self.session = requests.session()
self.headers = self.setheaders() def login(self):
url = '{}/signin'.format(self.apollourl)
payload = {
"username": self.username,
"password": self.password,
"login-submit": "登录"
}
self.session.post(url=url,data=payload)
res = self.session.cookies
return (res.get_dict()['SESSION']) def setheaders(self):
session = self.login()
myheaders = {
"Accept": "application/json, text/plain, */*",
"Cookie": "Hm_lvt_488a0e7e13b847119c47d080b3dc7272=1677469471; NG_TRANSLATE_LANG_KEY=zh-CN; SESSION={0}".format(session),
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}
return (myheaders) def getenvs(self):
url = 'http://{}/envs'.format(self.apollourl)
head = self.headers
res = requests.get(url=url,headers=head)
return (res.text) def getappid(self):
url = 'http://{}/apps'.format(self.apollourl)
params = {'page': 0}
res = requests.get(url, params=params,headers=self.headers)
date = json.loads(res.text)
allapp = [d['appId'] for d in date]
return (allapp) def addauth(self,appid):
uri = 'http://{0}/apps/{1}/namespaces/application/roles/ModifyNamespace'.format(self.apollourl,appid)
playload = self.addauth
try:
response = requests.post(url=uri,data=playload,headers=self.headers)
response.raise_for_status()
except requests.exceptions.HTTPError as error:
json_data = error.response.json()
error_message = json_data['message']
print(appid,error_message) if __name__ == '__main__':
apollo_obj = apollo()
for i in apollo_obj.getappid():
apollo_obj.addauth(i)

Apollo批量给新创建的用户授可编辑权限的更多相关文章

  1. Oracle 创建普通用户,并赋予权限

    采用sys or system / manager as sysdba; 连接数据库. 创建普通用户konglin: create user konglin identified by pwd_ora ...

  2. mysql创建本地用户及赋予数据库权限的方法示例

    大家在安装 mysql 时通常会生成一个超级用户 root,很多人之后就一直沿用这一个用户,虽然这会很方便,但超级用户权限太大,在所有地方使用它通常是一个安全隐患. 这一点跟操作系统的用户管理也是类似 ...

  3. 给新创建的用户 赋予所有的权利 *.* 查看权限 删除用户 ---------DCL用户权限管理篇

    第一步:进入数据库以后,先用 show databases; 再use mysql;    再 show tables;    再 select user,host from mysql.user; ...

  4. deepin 新创建的用户文件管理中挂载点打不开

    使用 root 用户可以打开,但是使用非 root 用户打不开 原因是权限不够 test1@test1-PC:~$ cd /media/ test1@test1-PC:/media$ ls apt c ...

  5. centos上为新创建的用户(git)指定根目录并生成公钥和私钥

    1.修改用户的根目录 vim /etc/passed 2.su git 3.ssh-keygen -t rsa ssh-keygen -t rsa 4.如图所示,如果要实现无密码访问git仓库,把公钥 ...

  6. 为Ubuntu新创建用户创建默认.bashrc并自动加载

    首先,su – 到新创建的用户 拷贝默认的.bashrc过来   1 cp /etc/skel/.bashrc ~/ 然后创建.profile文件   1 vi ~/.profile 粘贴下面的内容 ...

  7. oracle 创建一个用户,并且设定只能访问指定的对象

    出处:http://www.cnblogs.com/BetterWF/archive/2012/07/03/2574416.html 今天在开发接口时候,需要给接口开发公司提供一个ORACLE 用户, ...

  8. sql server 2008 数据库管理系统使用SQL语句创建登录用户详细步骤

    --服务器角色:--固定服务器角色具有一组固定的权限,并且适用于整个服务器范围. 它们专门用于管理 SQL Server,且不能更改分配给它们的权限. --可以在数据库中不存在用户帐户的情况下向固定服 ...

  9. 第一安装oracle数据库后,需要创建一个用户,给用户解锁并赋予权限

    1.第一次安装oracle数据库应该做的事情. 注: 1.安装oracle后需要创建用户,连接数据库,(注意数据库名,还有好像后面的 ":"也有影响) 2.解锁用户, 3.授予新登 ...

  10. Linux下useradd命令创建的用户不能登录的问题

    Linux下useradd命令创建的用户不能登录的问题  问题: 用useradd命令新创建一个用户tester 密码pwdtest mkdir -p /home/tester(创建文件夹) user ...

随机推荐

  1. 有关主席树的一些 trick

    主席树做题记录. 主席树,即可持久化权值线段树. P3248 [HNOI2016] 树 难爆了这题.题目中会多次把模板树的某个子树放到大树上的某个节点下,我们把这一整个子树看作一个大节点,把模板树.大 ...

  2. Windows 系统下 Docker 和 Docker Compose 安装配置:一键部署有来开源项目本地环境

    作者主页: 有来技术 开源项目: youlai-mall vue3-element-admin youlai-boot vue-uniapp-template 仓库主页: GitCode Gitee ...

  3. Redis持久化(RDB、AOF)

    为什么要持久化 Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘中,那么一旦服务器进程退出,服务器的数据库状态就会消失(即断电即失).为了保证数据不丢失,我们需要将内存中的数据存储到磁盘, ...

  4. wireshark抓包学习

    ip 过滤 ip.src_host ip.dst_host ip.addr mac 过滤 eth.src eth.dst eth.addr 端口过滤 tcp.port tcp.srcport tcp. ...

  5. Dart中操作符详细介绍和使用

    dart中静态成员 1 使用satic关键字 来实现类级别的变量和函数 2 静态方法不能够访问非静态成员, 非静态方法可以访问静态成员 3 静态属性,不要通过this去访问 因为this指向的是这个实 ...

  6. Janus Pro:DeepSeek 开源革新,多模态 AI 的未来

    Janus Pro 是 DeepSeek 开发的一个开源多模态人工智能框架,它通过集成视觉和语言处理能力,提供了高性能的多模态任务处理能力. 在线体验: https://deepseek-janusp ...

  7. 应用中的 PostgreSQL项目案例

    title: 应用中的 PostgreSQL项目案例 date: 2025/2/3 updated: 2025/2/3 author: cmdragon excerpt: 随着大数据和云计算的兴起,企 ...

  8. (vm/vb)虚拟机复制或者拷贝之后连不上网络怎么处理?

    (vm/vb)虚拟机复制或者拷贝之后连不上网络怎么处理? Linux虚拟机无论在VMware还是VirtualBox下面,只要复制拷贝到别的地方,开启网络服务都会出现报错的问题. 这里以CentOS ...

  9. linux配置maven

    1.下载mavenhttps://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/ 中找到相应的版本wget https://mirrors.tun ...

  10. FreeSql学习笔记——0.FreeSql启动!

    FreeSql FreeSql是功能强大的 .NET ORM,支持 .NetFramework 4.0+..NetCore 2.1+.Xamarin等支持 NetStandard 所有运行平台.支持  ...