Skip to content
This repository has been archived by the owner on Jun 6, 2024. It is now read-only.

Commit

Permalink
[Rest Server] update user's vc permission when create/remove vc (#2939)
Browse files Browse the repository at this point in the history
* 1049

* fix
  • Loading branch information
sunqinzheng authored Jun 18, 2019
1 parent fb025c0 commit 16b9a4f
Show file tree
Hide file tree
Showing 2 changed files with 143 additions and 3 deletions.
39 changes: 37 additions & 2 deletions src/rest-server/src/models/vc.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,13 @@ const xml2js = require('xml2js');
const yarnConfig = require('../config/yarn');
const createError = require('../util/error');
const logger = require('../config/logger');
const dbUtility = require('../util/dbUtil');
const secretConfig = require('../config/secret');

const db = dbUtility.getStorageObject('UserSecret', {
'paiUserNameSpace': secretConfig.paiUserNameSpace,
'requestConfig': secretConfig.requestConfig(),
});

class VirtualCluster {
getCapacitySchedulerInfo(queueInfo) {
Expand Down Expand Up @@ -167,10 +173,26 @@ class VirtualCluster {
// logger.debug('raw data to generate: ', data);
const vcdataXml = this.generateUpdateInfo(data);
// logger.debug('Xml send to yarn: ', vcdataXml);
this.sendUpdateInfo(vcdataXml, (err) => {
this.sendUpdateInfo(vcdataXml, async (err) => {
if (err) {
return callback(err);
} else {
// update admin users' permission
try {
const userList = await db.get('', null);
for (const user of userList) {
if (user.admin === 'true') {
const vc = user.virtualCluster.trim().split(',');
if (!vc.find((x) => x === vcName)) {
vc.push(vcName);
}
user.virtualCluster = vc.join(',');
await db.set(user.username, user, {update: true});
}
}
} catch (e) {
return callback(createError('Internal Server Error', 'UnknownError', `Failed to update user's permission`));
}
return callback(null);
}
});
Expand Down Expand Up @@ -287,7 +309,7 @@ class VirtualCluster {
// logger.debug('Raw data to generate: ', data);
const vcdataXml = this.generateUpdateInfo(data);
// logger.debug('Xml send to yarn: ', vcdataXml);
this.sendUpdateInfo(vcdataXml, (err) => {
this.sendUpdateInfo(vcdataXml, async (err) => {
if (err) {
this.activeVc(vcName, (errInfo) => {
if (errInfo) {
Expand All @@ -297,6 +319,19 @@ class VirtualCluster {
}
});
} else {
// update permission
try {
const userList = await db.get('', null);
for (const user of userList) {
const vc = user.virtualCluster.trim().split(',');
if (vc.find((x) => x === vcName)) {
user.virtualCluster = vc.filter((x) => x !== vcName).join(',');
await db.set(user.username, user, {update: true});
}
}
} catch (e) {
return callback(createError('Internal Server Error', 'UnknownError', `Failed to update user's permission`));
}
return callback(null);
}
});
Expand Down
107 changes: 106 additions & 1 deletion src/rest-server/test/vc.js
Original file line number Diff line number Diff line change
Expand Up @@ -745,7 +745,34 @@ describe('VC API PUT /api/v1/virtual-clusters', () => {
nock(yarnUri)
.put('/ws/v1/cluster/scheduler-conf')
.reply(200);

nock(apiServerRootUri)
.get('/api/v1/namespaces/pai-user/secrets/')
.reply(200, {
'kind': 'SecretList',
'apiVersion': 'v1',
'metadata': {
'selfLink': '/api/v1/namespaces/pai-user/secrets/',
'resourceVersion': '1062682'
},
'items': [
{
'metadata': {
'name': 'paitest',
},
'data': {
'admin': 'dHJ1ZQ==',
'password': 'MzFhNzQ0YzNhZjg5MDU2MDI0ZmY2MmMzNTZmNTQ3ZGRjMzUzYWQ3MjdkMzEwYTc3MzcxODgxMjk4MmQ1YzZlZmMzYmZmNzBkYjVlMTA0M2JkMjFkMmVkYzg4M2M4Y2Q0ZjllNzRhMWU1MjA1NDMzNjQ5MzYxMTQ4YmE4OTY0MzQ=',
'username': 'cGFpdGVzdA==',
'virtualCluster': 'ZGVmYXVsdCx2YzIsdmMz'
},
'type': 'Opaque'
},
]
});
nock(apiServerRootUri)
.put('/api/v1/namespaces/pai-user/secrets/70616974657374')
.reply(200);

chai.request(server)
.put('/api/v1/virtual-clusters/b')
.set('Authorization', `Bearer ${adminToken}`)
Expand All @@ -762,6 +789,33 @@ describe('VC API PUT /api/v1/virtual-clusters', () => {
nock(yarnUri)
.put('/ws/v1/cluster/scheduler-conf')
.reply(200);
nock(apiServerRootUri)
.get('/api/v1/namespaces/pai-user/secrets/')
.reply(200, {
'kind': 'SecretList',
'apiVersion': 'v1',
'metadata': {
'selfLink': '/api/v1/namespaces/pai-user/secrets/',
'resourceVersion': '1062682'
},
'items': [
{
'metadata': {
'name': 'paitest',
},
'data': {
'admin': 'dHJ1ZQ==',
'password': 'MzFhNzQ0YzNhZjg5MDU2MDI0ZmY2MmMzNTZmNTQ3ZGRjMzUzYWQ3MjdkMzEwYTc3MzcxODgxMjk4MmQ1YzZlZmMzYmZmNzBkYjVlMTA0M2JkMjFkMmVkYzg4M2M4Y2Q0ZjllNzRhMWU1MjA1NDMzNjQ5MzYxMTQ4YmE4OTY0MzQ=',
'username': 'cGFpdGVzdA==',
'virtualCluster': 'ZGVmYXVsdCx2YzIsdmMz'
},
'type': 'Opaque'
},
]
});
nock(apiServerRootUri)
.put('/api/v1/namespaces/pai-user/secrets/70616974657374')
.reply(200);

chai.request(server)
.put('/api/v1/virtual-clusters/a')
Expand All @@ -779,6 +833,33 @@ describe('VC API PUT /api/v1/virtual-clusters', () => {
nock(yarnUri)
.put('/ws/v1/cluster/scheduler-conf')
.reply(200);
nock(apiServerRootUri)
.get('/api/v1/namespaces/pai-user/secrets/')
.reply(200, {
'kind': 'SecretList',
'apiVersion': 'v1',
'metadata': {
'selfLink': '/api/v1/namespaces/pai-user/secrets/',
'resourceVersion': '1062682'
},
'items': [
{
'metadata': {
'name': 'paitest',
},
'data': {
'admin': 'dHJ1ZQ==',
'password': 'MzFhNzQ0YzNhZjg5MDU2MDI0ZmY2MmMzNTZmNTQ3ZGRjMzUzYWQ3MjdkMzEwYTc3MzcxODgxMjk4MmQ1YzZlZmMzYmZmNzBkYjVlMTA0M2JkMjFkMmVkYzg4M2M4Y2Q0ZjllNzRhMWU1MjA1NDMzNjQ5MzYxMTQ4YmE4OTY0MzQ=',
'username': 'cGFpdGVzdA==',
'virtualCluster': 'ZGVmYXVsdCx2YzIsdmMz'
},
'type': 'Opaque'
},
]
});
nock(apiServerRootUri)
.put('/api/v1/namespaces/pai-user/secrets/70616974657374')
.reply(200);

chai.request(server)
.put('/api/v1/virtual-clusters/a')
Expand Down Expand Up @@ -1082,6 +1163,30 @@ describe('VC API DELETE /api/v1/virtual-clusters', () => {
.reply(200)
.put('/ws/v1/cluster/scheduler-conf')
.reply(200);
nock(apiServerRootUri)
.get('/api/v1/namespaces/pai-user/secrets/')
.reply(200, {
'kind': 'SecretList',
'apiVersion': 'v1',
'metadata': {
'selfLink': '/api/v1/namespaces/pai-user/secrets/',
'resourceVersion': '1062682'
},
'items': [
{
'metadata': {
'name': 'paitest',
},
'data': {
'admin': 'dHJ1ZQ==',
'password': 'MzFhNzQ0YzNhZjg5MDU2MDI0ZmY2MmMzNTZmNTQ3ZGRjMzUzYWQ3MjdkMzEwYTc3MzcxODgxMjk4MmQ1YzZlZmMzYmZmNzBkYjVlMTA0M2JkMjFkMmVkYzg4M2M4Y2Q0ZjllNzRhMWU1MjA1NDMzNjQ5MzYxMTQ4YmE4OTY0MzQ=',
'username': 'cGFpdGVzdA==',
'virtualCluster': 'ZGVmYXVsdCx2YzIsdmMz'
},
'type': 'Opaque'
},
]
});

chai.request(server)
.delete('/api/v1/virtual-clusters/a')
Expand Down

0 comments on commit 16b9a4f

Please sign in to comment.