Commit 9ed2f17c authored by 薛智杰's avatar 薛智杰

Merge branch 'kewei' into 'master'

Kewei



See merge request !4
parents a2f08518 862d71c1
node_modules/*.js
config/logger.js
module.exports = {
extends: [
"airbnb-base"
],
rules: {
"semi": "off",
"func-names": "off",
"no-restricted-syntax": "off",
"no-underscore-dangle": "off",
"import/no-dynamic-require": "off",
'prefer-destructuring': "off",
"no-bitwise": "off",
"no-param-reassign": "off",
"no-await-in-loop": "off",
"consistent-return": "off",
"no-shadow": "off",
"no-useless-escape": "off",
"camelcase": "off",
"prefer-rest-params" : "off",
"max-len" :["error", { "code": 150 }]
}
}
{
"extends": "standard"
}
\ No newline at end of file
...@@ -5,36 +5,36 @@ const templates = require('../serviceTemplate') ...@@ -5,36 +5,36 @@ const templates = require('../serviceTemplate')
const IMAGES = { const IMAGES = {
zookeeper: 'zookeeper:3.4.10', zookeeper: 'zookeeper:3.4.10',
rabbitmq: 'rabbitmq:3.6-management', rabbitmq: 'rabbitmq:3.6-management',
mysql: 'mysql:5.7' mysql: 'mysql:5.7',
} }
const router = new Router() const router = new Router()
module.exports = router module.exports = router
router.post('/create', async ctx => { router.post('/create', async (ctx) => {
let { serviceName, namespace } = ctx.request.body const { serviceName, namespace } = ctx.request.body
if (!Object.keys(IMAGES).includes(serviceName)) { if (!Object.keys(IMAGES).includes(serviceName)) {
ctx.body = ctx.fail('不支持的服务类型') ctx.body = ctx.fail('不支持的服务类型')
return return
} }
let data = { const data = {
namespace, namespace,
image: IMAGES[serviceName] image: IMAGES[serviceName],
} }
let template = templates[serviceName].replace(/{{([A-Za-z0-9_]+)}}/g, function () { const template = templates[serviceName].replace(/{{([A-Za-z0-9_]+)}}/g, function () {
if (data[arguments[1]] === undefined) { if (data[arguments[1]] === undefined) {
throw new Error('缺少模板所需变量') throw new Error('缺少模板所需变量')
} }
return data[arguments[1]] return data[arguments[1]]
}) })
let params = yaml.load(template) const params = yaml.load(template)
await ctx.client.service_create(params) await ctx.client.service_create(params)
ctx.body = ctx.ok('创建成功') ctx.body = ctx.ok('创建成功')
}) })
router.post('/delete', async ctx => { router.post('/delete', async (ctx) => {
let { serviceName, namespace } = ctx.request.body const { serviceName, namespace } = ctx.request.body
await ctx.client.service_delete(serviceName, namespace) await ctx.client.service_delete(serviceName, namespace)
ctx.body = ctx.ok('删除成功') ctx.body = ctx.ok('删除成功')
}) })
const Koa = require('koa') const Koa = require('koa')
const Router = require('koa-router') const Router = require('koa-router')
const bodyParser = require('koa-bodyparser') const bodyParser = require('koa-bodyparser')
const log4js = require('koa-log4')
const logConf = require('../config/logger')
const error = require('../middleware/error') const error = require('../middleware/error')
const result = require('../middleware/result') const result = require('../middleware/result')
...@@ -12,9 +14,13 @@ const tag = require('./tag') ...@@ -12,9 +14,13 @@ const tag = require('./tag')
const commonServiceRoute = require('./commonService') const commonServiceRoute = require('./commonService')
const ingressRoute = require('./ingress') const ingressRoute = require('./ingress')
const cluster = require('../services/tke.clusterService').create() const cluster = require('../services/tke.clusterService').create()
const container = require('../services/tke.containerService').create() const container = require('../services/tke.containerService').create()
function loadRoutes (router) {
const logger = log4js.getLogger()
log4js.configure(logConf.devlog)
function loadRoutes(router) {
router router
.use(error()) .use(error())
.use(result()) .use(result())
...@@ -24,12 +30,13 @@ function loadRoutes (router) { ...@@ -24,12 +30,13 @@ function loadRoutes (router) {
ctx.cluster = cluster ctx.cluster = cluster
await next() await next()
}, bodyParser()) }, bodyParser())
.use('/namespace', namespaceRoute.routes()) .use('/namespace', namespaceRoute.routes())
.use('/service', serviceRoute.routes()) .use('/service', serviceRoute.routes())
.use('/commonService', commonServiceRoute.routes()) .use('/commonService', commonServiceRoute.routes())
.use('/ingress', ingressRoute.routes()) .use('/ingress', ingressRoute.routes())
.use('/repository',repositoryRouter.routes()) .use('/repository', repositoryRouter.routes())
.use('/tag',tag.routes()) .use('/tag', tag.routes())
} }
exports.start = function () { exports.start = function () {
...@@ -39,8 +46,9 @@ exports.start = function () { ...@@ -39,8 +46,9 @@ exports.start = function () {
// 加载所有路由 // 加载所有路由
loadRoutes(router) loadRoutes(router)
app.use(log4js.koaLogger())
app.use(router.routes()) app.use(router.routes())
app.listen(4000) app.listen(4000)
console.log('app start', 4000) logger.info('server listening 4000')
logger.info('加载环境配置: ', process.env.NODE_ENV)
} }
...@@ -3,8 +3,8 @@ const Router = require('koa-router') ...@@ -3,8 +3,8 @@ const Router = require('koa-router')
const router = new Router(); const router = new Router();
module.exports = router module.exports = router
router.get('/', async ctx => { router.get('/', async (ctx) => {
let data = await ctx.client.ingress_get(ctx.query.namespace) const data = await ctx.client.ingress_get(ctx.query.namespace)
ctx.body = ctx.ok(data) ctx.body = ctx.ok(data)
}) })
...@@ -12,26 +12,28 @@ router.get('/', async ctx => { ...@@ -12,26 +12,28 @@ router.get('/', async ctx => {
namespace namespace
rules rules
*/ */
router.post('/modify', async ctx => { router.post('/modify', async (ctx) => {
let ingress = await ctx.client.ingress_get(ctx.request.body.namespace) const ingress = await ctx.client.ingress_get(ctx.request.body.namespace)
if (!ingress) { if (!ingress) {
return ctx.body = ctx.fail('namespace下没有ingress,请先创建') ctx.body = ctx.fail('namespace下没有ingress,请先创建')
return ctx.body
} }
console.log(1, ingress) console.log(1, ingress)
// let data = await ctx.client.ingress_modify() // let data = await ctx.client.ingress_modify()
ctx.body = ctx.ok(ingress) ctx.body = ctx.ok(ingress)
}) })
router.post('/create', async ctx => { router.post('/create', async (ctx) => {
let ingress = await ctx.client.ingress_get(ctx.request.body.namespace) const ingress = await ctx.client.ingress_get(ctx.request.body.namespace)
if (ingress) { if (ingress) {
return ctx.body = ctx.fail('namespace下已存在ingress') ctx.body = ctx.fail('namespace下已存在ingress')
return ctx.body
} }
await ctx.client.ingress_create(ctx.request.body.namespace) await ctx.client.ingress_create(ctx.request.body.namespace)
ctx.body = ctx.ok() ctx.body = ctx.ok()
}) })
router.post('/delete', async ctx => { router.post('/delete', async (ctx) => {
await ctx.client.ingress_delete(ctx.request.body.ingressName, ctx.request.body.namespace) await ctx.client.ingress_delete(ctx.request.body.ingressName, ctx.request.body.namespace)
ctx.body = ctx.ok() ctx.body = ctx.ok()
}) })
const Router = require('koa-router') const Router = require('koa-router')
const { log } = require('../config/logger')
const router = new Router(); const router = new Router();
module.exports = router module.exports = router
router.get('/', async (ctx) => {
router.get('/', async ctx => { ctx.logger.info('hhello')
let data = await ctx.cluster.namespace_get() const data = await ctx.cluster.namespace_get()
ctx.body = ctx.ok(data) ctx.body = ctx.ok(data)
}) })
router.post('/create', async ctx => { router.post('/create', async (ctx) => {
await ctx.cluster.namespace_create(ctx.request.body.name) await ctx.cluster.namespace_create(ctx.request.body.name)
await ctx.cluster.ingress_create(ctx.request.body.name) await ctx.cluster.ingress_create(ctx.request.body.name)
ctx.body = ctx.ok() ctx.body = ctx.ok()
}) })
router.post('/delete', async ctx => { router.post('/delete', async (ctx) => {
await ctx.cluster.namespace_delete(ctx.request.body.name) await ctx.cluster.namespace_delete(ctx.request.body.name)
ctx.body = ctx.ok() ctx.body = ctx.ok()
}) })
const Router = require('koa-router')
const yaml = require('js-yaml')
const templates = require('../serviceTemplate')
const IMAGES = ['rabbitmq:3.6-management']
const router = new Router()
module.exports = router
router.post('/create', async (ctx) => {
// let svc = await ctx.client.service_get('rabbitmq', ctx.request.body.namespace)
// if (svc) {
// ctx.body = ctx.fail('服务已经存在')
// return
// }
const data = {
namespace: ctx.request.body.namespace,
image: IMAGES[0],
}
const template = templates.rabbitmq.replace(/{{([A-Za-z0-9_]+)}}/g, function () {
if (data[arguments[1]] === undefined) {
throw new Error('缺少模板所需变量')
}
return data[arguments[1]]
})
const params = yaml.load(template)
await ctx.client.service_create(params)
ctx.body = ctx.ok('创建成功')
})
router.post('/delete', async (ctx) => {
await ctx.client.service_delete('rabbitmq', ctx.request.body.namespace)
ctx.body = ctx.ok('删除成功')
})
...@@ -2,7 +2,7 @@ const Router = require('koa-router') ...@@ -2,7 +2,7 @@ const Router = require('koa-router')
const router = new Router() const router = new Router()
module.exports = router module.exports = router
router.post('/', async ctx => { router.post('/', async (ctx) => {
let data = await ctx.container.repository_get(ctx.request.body.namespace) const data = await ctx.container.repository_get(ctx.request.body.namespace)
ctx.body = ctx.ok(data) ctx.body = ctx.ok(data)
}) })
const Router = require('koa-router') const Router = require('koa-router')
const yaml = require('js-yaml') const yaml = require('js-yaml')
const templates = require('../serviceTemplate') const templates = require('../serviceTemplate')
const TYPES = ['ui', 'java', 'node', 'python', 'go'] const TYPES = ['ui', 'java', 'node', 'python', 'go']
const router = new Router() const router = new Router()
module.exports = router module.exports = router
router.get('/', async ctx => { router.get('/', async (ctx) => {
let data = await ctx.cluster.service_list(ctx.query.namespace) const data = await ctx.cluster.service_list(ctx.query.namespace)
ctx.body = ctx.ok(data) ctx.body = ctx.ok(data)
}) })
router.post('/create', async ctx => { router.post('/create', async (ctx) => {
let {type, serviceName, namespace, image, system_name, lable} = ctx.request.body const {
type, serviceName, namespace, image, system_name, lable,
} = ctx.request.body
if (!TYPES.includes(type)) { if (!TYPES.includes(type)) {
return ctx.body = ctx.fail('不支持的服务类型') ctx.body = ctx.fail('不支持的服务类型')
return ctx.body
} }
let data = { const data = {
serviceName, serviceName,
namespace, namespace,
image, image,
system_name, system_name,
lable lable,
} }
if (!system_name) { if (!system_name) {
// ui abTest的时候不一样 // ui abTest的时候不一样
data.system_name = serviceName data.system_name = serviceName
} }
let template = templates[type].replace(/{{([A-Za-z0-9_]+)}}/g, function () { const template = templates[type].replace(/{{([A-Za-z0-9_]+)}}/g, function () {
if (data[arguments[1]] === undefined) { if (data[arguments[1]] === undefined) {
throw new Error('缺少模板所需变量') throw new Error('缺少模板所需变量')
} }
return data[arguments[1]] return data[arguments[1]]
}) })
let params = yaml.load(template) const params = yaml.load(template)
await ctx.cluster.service_create(params, type) await ctx.cluster.service_create(params, type)
ctx.body = ctx.ok('创建成功') ctx.body = ctx.ok('创建成功')
}) })
router.post('/details', async ctx => { router.post('/details', async (ctx) => {
let data = await ctx.cluster.service_get(ctx.request.body.serviceName, ctx.request.body.namespace) const data = await ctx.cluster.service_get(ctx.request.body.serviceName, ctx.request.body.namespace)
ctx.body = ctx.ok(data) ctx.body = ctx.ok(data)
}) })
router.post('/delete', async ctx => { router.post('/delete', async (ctx) => {
await ctx.cluster.service_delete(ctx.request.body.serviceName, ctx.request.body.namespace) await ctx.cluster.service_delete(ctx.request.body.serviceName, ctx.request.body.namespace)
ctx.body = ctx.ok('删除成功') ctx.body = ctx.ok('删除成功')
}) })
router.post('/modifyImage', async ctx => { router.post('/modifyImage', async (ctx) => {
await ctx.cluster.service_modifyImage(ctx.request.body.serviceName, ctx.request.body.image, ctx.request.body.namespace) await ctx.cluster.service_modifyImage(ctx.request.body.serviceName, ctx.request.body.image, ctx.request.body.namespace)
ctx.body = ctx.ok('更新成功') ctx.body = ctx.ok('更新成功')
}) })
router.post('/instance', async ctx => { router.post('/instance', async (ctx) => {
let data = await ctx.cluster.instance_get(ctx.request.body.serviceName, ctx.request.body.namespace) const data = await ctx.cluster.instance_get(ctx.request.body.serviceName, ctx.request.body.namespace)
ctx.body = ctx.ok(data) ctx.body = ctx.ok(data)
}) })
router.post('/redeploy', async ctx => { router.post('/redeploy', async (ctx) => {
await ctx.cluster.service_redeployment(ctx.request.body.serviceName, ctx.request.body.namespace) await ctx.cluster.service_redeployment(ctx.request.body.serviceName, ctx.request.body.namespace)
ctx.body = ctx.ok('服务重部署成功') ctx.body = ctx.ok('服务重部署成功')
}) })
...@@ -2,7 +2,7 @@ const Router = require('koa-router') ...@@ -2,7 +2,7 @@ const Router = require('koa-router')
const router = new Router() const router = new Router()
module.exports = router module.exports = router
router.post('/', async ctx => { router.post('/', async (ctx) => {
let data = await ctx.container.tag_get(ctx.request.body.reponame) const data = await ctx.container.tag_get(ctx.request.body.reponame)
ctx.body = ctx.ok(data) ctx.body = ctx.ok(data)
}) })
const Router = require('koa-router')
const yaml = require('js-yaml')
const templates = require('../serviceTemplate')
const IMAGES = ['zookeeper:3.4.10']
const router = new Router()
module.exports = router
router.post('/create', async (ctx) => {
const data = {
namespace: ctx.request.body.namespace,
image: IMAGES[0],
}
const template = templates.zookeeper.replace(/{{([A-Za-z0-9_]+)}}/g, function () {
if (data[arguments[1]] === undefined) {
throw new Error('缺少模板所需变量')
}
return data[arguments[1]]
})
const params = yaml.load(template)
await ctx.client.service_create(params)
ctx.body = ctx.ok('创建成功')
})
router.post('/delete', async (ctx) => {
await ctx.client.service_delete('zookeeper', ctx.request.body.namespace)
ctx.body = ctx.ok('删除成功')
})
const app = require('../app') const app = require('../app')
app.start() app.start()
module.exports={ module.exports = {
secretId: 'AKID4rY7wwNphsUcaFsy1pRtKhQvDj4CA3Ac', secretId: 'AKID4rY7wwNphsUcaFsy1pRtKhQvDj4CA3Ac',
secretKey: 'YBduRnjgVRGzmagZJbss3Vo58wWCyhgc', secretKey: 'YBduRnjgVRGzmagZJbss3Vo58wWCyhgc',
clusterId: 'cls-acfx4pvj', clusterId: 'cls-acfx4pvj',
region: 'ap-beijing', region: 'ap-beijing',
method :'POST', method: 'POST',
protocal : 'https://', protocal: 'https://',
clusterPoint : 'ccs.api.qcloud.com', //访问集群以及服务的域名 clusterPoint: 'ccs.api.qcloud.com', // 访问集群以及服务的域名
containerPoint : 'ccr.api.qcloud.com', //访问镜像仓库的域名 containerPoint: 'ccr.api.qcloud.com', // 访问镜像仓库的域名
path : '/v2/index.php', path: '/v2/index.php',
domain : ".lkbang.com", domain: '.lkbang.com',
} }
const path = require('path')
const logDir = path.resolve(process.cwd(), './logs')
module.exports = {
devlog: {
appenders: {
out: {type: 'stdout'},
app: {
type: 'dateFile', filename: `${logDir}/tke-eos.log`, daysToKeep: 3, compress: true,
},
error: {
type: 'dateFile', filename: `${logDir}/tke-eos.error.log`, daysToKeep: 3, compress: true,
},
timing: {
type: 'dateFile', filename: `${logDir}/tke-eos.timing.log`, daysToKeep: 3, compress: true,
},
just_errors: {type: 'logLevelFilter', appender: 'error', level: 'error'},
},
categories: {
default: {appenders: ['out', 'app', 'just_errors'], level: 'info'},
error: {appenders: ['stdout', 'error'], level: 'error'},
timing: {appenders: ['out', 'timing'], level: 'info'}
}
}
}
moduele.exports = {} // moduele.exports = {}
\ No newline at end of file
*
!.gitignore
\ No newline at end of file
'use strict'
// const logger = require('koa-log4').getLogger('middleware:error') const logger = require('log4js').getLogger('error')
module.exports = function () { module.exports = function () {
return async function (ctx, next) { return async function (ctx, next) {
...@@ -14,13 +14,13 @@ module.exports = function () { ...@@ -14,13 +14,13 @@ module.exports = function () {
msg = e.message msg = e.message
} }
console.error(ctx.path) logger.error(ctx.path)
console.error(e) logger.error(e)
ctx.respond = true ctx.respond = true
ctx.status = 200 ctx.status = 200
ctx.body = { ctx.body = {
code: '0001', code: '0001',
msg: msg msg,
} }
} }
} }
......
'use strict'
/** /**
*/ */
...@@ -7,5 +7,5 @@ module.exports = { ...@@ -7,5 +7,5 @@ module.exports = {
// 通用参数错误 // 通用参数错误
ERROR_INPUT: { msg: '输入参数不正确', code: '0001' }, ERROR_INPUT: { msg: '输入参数不正确', code: '0001' },
// 自定义参数错误 // 自定义参数错误
ERROR_GITPATH: { msg: 'git_path格式不正确', code: '0001' } ERROR_GITPATH: { msg: 'git_path格式不正确', code: '0001' },
} }
'use strict'
const Code = require('./code') const Code = require('./code')
...@@ -9,7 +9,7 @@ module.exports = function () { ...@@ -9,7 +9,7 @@ module.exports = function () {
ctx.ok = function (data = {}) { ctx.ok = function (data = {}) {
return { return {
code: '0000', code: '0000',
data: data data,
} }
} }
...@@ -22,7 +22,7 @@ module.exports = function () { ...@@ -22,7 +22,7 @@ module.exports = function () {
return { return {
code: code || '0001', code: code || '0001',
msg: msg || '请求失败,请稍候重试' msg: msg || '请求失败,请稍候重试',
} }
} }
......
This diff is collapsed.
...@@ -7,17 +7,28 @@ ...@@ -7,17 +7,28 @@
"js-yaml": "^3.12.1", "js-yaml": "^3.12.1",
"koa": "^2.6.2", "koa": "^2.6.2",
"koa-bodyparser": "^4.2.1", "koa-bodyparser": "^4.2.1",
"koa-log4": "^2.3.2",
"koa-router": "^7.4.0", "koa-router": "^7.4.0",
"lodash": "^4.17.11", "lodash": "^4.17.11",
"log4js": "^4.0.2",
"request": "^2.88.0" "request": "^2.88.0"
}, },
"devDependencies": { "devDependencies": {
"eslint": "^5.15.3",
"eslint-config-airbnb-base": "^13.1.0",
"eslint-plugin-import": "^2.16.0",
"nodemon": "^1.18.9" "nodemon": "^1.18.9"
}, },
"scripts": { "scripts": {
"test": "echo \"Error: no test specified\" && exit 1", "test": "echo \"Error: no test specified\" && exit 1",
"start": "NODE_DEBUG=request nodemon" "start": "NODE_DEBUG=request NODE_ENV=env nodemon",
"lint": "eslint .",
"fix": "eslint --fix ."
}, },
"pre-commit": [
"fix",
"lint"
],
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git@git.quantgroup.cn:QA/tke-eos.git" "url": "git@git.quantgroup.cn:QA/tke-eos.git"
......
const fs = require('fs') const fs = require('fs')
const ui = fs.readFileSync('serviceTemplate/ui.template.txt', 'utf8') const ui = fs.readFileSync('serviceTemplate/ui.template.txt', 'utf8')
const java = fs.readFileSync('serviceTemplate/java.template.txt', 'utf8') const java = fs.readFileSync('serviceTemplate/java.template.txt', 'utf8')
const node = fs.readFileSync('serviceTemplate/node.template.txt', 'utf8') const node = fs.readFileSync('serviceTemplate/node.template.txt', 'utf8')
...@@ -12,5 +13,5 @@ module.exports = { ...@@ -12,5 +13,5 @@ module.exports = {
java, java,
rabbitmq, rabbitmq,
zookeeper, zookeeper,
mysql mysql,
} }
...@@ -8,58 +8,63 @@ class Cluster extends Client { ...@@ -8,58 +8,63 @@ class Cluster extends Client {
} }
namespace_get() { namespace_get() {
return this.post('DescribeClusterNameSpaces', {clusterId: this.clusterId}) return this.post('DescribeClusterNameSpaces', { clusterId: this.clusterId })
} }
namespace_create(name) { namespace_create(name) {
return this.post('CreateClusterNamespace', {name, description: '', clusterId: this.clusterId}) return this.post('CreateClusterNamespace', { name, description: '', clusterId: this.clusterId })
} }
namespace_delete(name) { namespace_delete(name) {
return this.post('DeleteClusterNamespace', {"names.0": name, clusterId: this.clusterId}) return this.post('DeleteClusterNamespace', { 'names.0': name, clusterId: this.clusterId })
} }
service_list(namespace) { service_list(namespace) {
return this.post('DescribeClusterService', {namespace, clusterId: this.clusterId, allnamespace: 0}) return this.post('DescribeClusterService', { namespace, clusterId: this.clusterId, allnamespace: 0 })
} }
service_get(serviceName, namespace) { service_get(serviceName, namespace) {
return this.post('DescribeClusterServiceInfo', {serviceName, namespace, clusterId: this.clusterId}) return this.post('DescribeClusterServiceInfo', { serviceName, namespace, clusterId: this.clusterId })
} }
async service_create(params, type) { async service_create(params, type) {
params.clusterId = this.clusterId params.clusterId = this.clusterId
let str = JSON.stringify(params) const str = JSON.stringify(params)
await this.post('CreateClusterService', params) await this.post('CreateClusterService', params)
// 腾讯云api暂只能通过修改服务来改成Recreate策略 // 腾讯云api暂只能通过修改服务来改成Recreate策略
let modifyParams = JSON.parse(str) const modifyParams = JSON.parse(str)
modifyParams.strategy = 'Recreate' modifyParams.strategy = 'Recreate'
await this.post('ModifyClusterService', modifyParams) await this.post('ModifyClusterService', modifyParams)
let updateLabels = { const updateLabels = {
clusterId: params.clusterId, clusterId: params.clusterId,
serviceName: params.serviceName, serviceName: params.serviceName,
namespace: params.namespace, namespace: params.namespace,
"labels.type": type 'labels.type': type,
} }
return this.post('ModifyServiceLabels', updateLabels) return this.post('ModifyServiceLabels', updateLabels)
} }
service_delete(serviceName, namespace) { service_delete(serviceName, namespace) {
return this.post('DeleteClusterService', {serviceName, namespace, clusterId: this.clusterId}) return this.post('DeleteClusterService', { serviceName, namespace, clusterId: this.clusterId })
} }
service_modifyImage(serviceName, image, namespace) { service_modifyImage(serviceName, image, namespace) {
return this.post('ModifyClusterServiceImage', {serviceName, namespace, image, clusterId: this.clusterId}) return this.post('ModifyClusterServiceImage', {
serviceName, namespace, image, clusterId: this.clusterId,
})
} }
service_redeployment(serviceName,namespace){
return this.post('RedeployClusterService', {serviceName, namespace, clusterId: this.clusterId}) service_redeployment(serviceName, namespace) {
return this.post('RedeployClusterService', { serviceName, namespace, clusterId: this.clusterId })
} }
instance_get(serviceName,namespace){
return this.post('DescribeServiceInstance', {serviceName, namespace, clusterId: this.clusterId}) instance_get(serviceName, namespace) {
return this.post('DescribeServiceInstance', { serviceName, namespace, clusterId: this.clusterId })
} }
ingress_get(namespace) { ingress_get(namespace) {
return this.post('DescribeIngress', {namespace, clusterId: this.clusterId}) return this.post('DescribeIngress', { namespace, clusterId: this.clusterId })
} }
ingress_create(namespace) { ingress_create(namespace) {
...@@ -67,18 +72,19 @@ class Cluster extends Client { ...@@ -67,18 +72,19 @@ class Cluster extends Client {
ingressName: `qa-${namespace}`, ingressName: `qa-${namespace}`,
ingressDesc: '', ingressDesc: '',
namespace, namespace,
clusterId: this.clusterId clusterId: this.clusterId,
}) })
} }
ingress_delete(ingressName, namespace) { ingress_delete(ingressName, namespace) {
return this.post('DeleteIngress', {ingressName, namespace, clusterId: this.clusterId}) return this.post('DeleteIngress', { ingressName, namespace, clusterId: this.clusterId })
} }
ingress_modify(ingressName, namespace, rules) { ingress_modify(ingressName, namespace, rules) {
return this.post('MosifyIngress', {ingressName, namespace, ...rules, clusterId: this.clusterId}) return this.post('MosifyIngress', {
ingressName, namespace, ...rules, clusterId: this.clusterId,
})
} }
} }
exports.create = function () { exports.create = function () {
......
...@@ -7,11 +7,12 @@ class Container extends Client { ...@@ -7,11 +7,12 @@ class Container extends Client {
this.endpoint = domainConfig.containerPoint this.endpoint = domainConfig.containerPoint
} }
repository_get( namespace) { repository_get(namespace) {
return this.post('SearchUserRepository', {namespace}) return this.post('SearchUserRepository', { namespace })
} }
tag_get( reponame) {
return this.post('GetTagList', {reponame}) tag_get(reponame) {
return this.post('GetTagList', { reponame })
} }
} }
......
...@@ -20,19 +20,19 @@ class Client { ...@@ -20,19 +20,19 @@ class Client {
sign(params, signMethod) { sign(params, signMethod) {
let str = '' let str = ''
let keys = Object.keys(params) const keys = Object.keys(params)
keys.sort() keys.sort()
for (let key of keys) { for (const key of keys) {
str += '&' + key + '=' + params[key] str += `&${key}=${params[key]}`
} }
str = str.slice(1) str = str.slice(1)
let signStr = this.method + this.endpoint + this.path + '?' + str const signStr = `${this.method + this.endpoint + this.path}?${str}`
let signMethodMap = { const signMethodMap = {
HmacSHA1: "sha1", HmacSHA1: 'sha1',
HmacSHA256: "sha256" HmacSHA256: 'sha256',
} }
let hmac = crypto.createHmac(signMethodMap[signMethod], this.secretKey) const hmac = crypto.createHmac(signMethodMap[signMethod], this.secretKey)
return hmac.update(Buffer.from(signStr, 'utf-8')).digest('base64') return hmac.update(Buffer.from(signStr, 'utf-8')).digest('base64')
} }
...@@ -59,27 +59,25 @@ class Client { ...@@ -59,27 +59,25 @@ class Client {
} }
this.formatRequestData(action, params) this.formatRequestData(action, params)
let url = this.protocal + this.endpoint + this.path const url = this.protocal + this.endpoint + this.path
let self = this const self = this
return new Promise(function (resolve, reject) { return new Promise(((resolve, reject) => {
request({ request({
method: self.method, method: self.method,
url, url,
json: true, json: true,
form: params form: params,
}, function (err, res, body) { }, (err, res, body) => {
if (err) { if (err) {
console.error(err) // console.error(err)
reject(err) reject(err)
} else { } else if (body.code === 0) {
if (body.code === 0) {
resolve(body.data) resolve(body.data)
} else { } else {
reject(body) reject(body)
} }
}
})
}) })
}))
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment