Commit da7de734 authored by xuezj's avatar xuezj

node

parent 92b2c389
const Koa = require('koa') const Koa = require('koa')
const Router = require('koa-router') const Router = require('koa-router')
const bodyParser = require('koa-bodyparser')
const error = require('../middleware/error') const error = require('../middleware/error')
const result = require('../middleware/result') const result = require('../middleware/result')
const namespaceRoute = require('./namespace') const namespaceRoute = require('./namespace')
const serviceRoute = require('./service') const serviceRoute = require('./service')
const baseServiceRoute = require('./baseService') const rabbitmqRoute = require('./rabbitmq')
const ingressRoute = require('./ingress')
const client = require('../services/tke.service').create({
secretId: 'AKID4rY7wwNphsUcaFsy1pRtKhQvDj4CA3Ac',
secretKey: 'YBduRnjgVRGzmagZJbss3Vo58wWCyhgc',
clusterId: 'cls-acfx4pvj',
region: 'ap-beijing'
})
function loadRoutes (router) { function loadRoutes (router) {
router router
.use(error()) .use(error())
.use(result()) .use(result())
.use(async (ctx, next) => {
// 腾讯云
ctx.client = client
await next()
}, bodyParser())
.use('/namespace', namespaceRoute.routes()) .use('/namespace', namespaceRoute.routes())
.use('/service', serviceRoute.routes()) .use('/service', serviceRoute.routes())
.use('/baseService', baseServiceRoute.routes()) .use('/rabbitmq', rabbitmqRoute.routes())
.use('/ingress', ingressRoute.routes())
} }
exports.start = function () { exports.start = function () {
......
const Router = require('koa-router')
const router = new Router();
module.exports = router
router.get('/', async ctx => {
let data = await ctx.client.ingress_get(ctx.query.namespace)
ctx.body = ctx.ok(data)
})
/**
namespace
rules
*/
router.post('/modify', async ctx => {
let ingress = await ctx.client.ingress_get(ctx.request.body.namespace)
if (!ingress) {
return ctx.body = ctx.fail('namespace下没有ingress,请先创建')
}
console.log(1, ingress)
// let data = await ctx.client.ingress_modify()
ctx.body = ctx.ok(ingress)
})
router.post('/create', async ctx => {
let ingress = await ctx.client.ingress_get(ctx.request.body.namespace)
if (ingress) {
return ctx.body = ctx.fail('namespace下已存在ingress')
}
await ctx.client.ingress_create(ctx.request.body.namespace)
ctx.body = ctx.ok()
})
router.post('/delete', async ctx => {
await ctx.client.ingress_delete(ctx.request.body.ingressName, ctx.request.body.namespace)
ctx.body = ctx.ok()
})
const Router = require('koa-router') const Router = require('koa-router')
const bodyParser = require('koa-bodyparser');
const client = require('../services/tke.service').create({
secretId: 'AKID4rY7wwNphsUcaFsy1pRtKhQvDj4CA3Ac',
secretKey: 'YBduRnjgVRGzmagZJbss3Vo58wWCyhgc',
clusterId: 'cls-acfx4pvj',
region: 'ap-beijing'
})
const ReservedNamespace = ['default', 'kube-system']
const router = new Router(); const router = new Router();
module.exports = router module.exports = router
router.use(async (ctx, next) => {
// 默认使用腾讯云的服务
ctx.k8s = client
await next()
}, bodyParser())
// 查询namespace
router.get('/', async ctx => { router.get('/', async ctx => {
let data = await client.namespace_get() let data = await ctx.client.namespace_get()
ctx.body = ctx.ok(data) ctx.body = ctx.ok(data)
}) })
router.post('/create', async ctx => { router.post('/create', async ctx => {
await client.namespace_create(ctx.request.body.name) await ctx.client.namespace_create(ctx.request.body.name)
await ctx.client.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 client.namespace_delete(ctx.request.body.name) await ctx.client.namespace_delete(ctx.request.body.name)
ctx.body = ctx.ok() ctx.body = ctx.ok()
}) })
const Router = require('koa-router') const Router = require('koa-router')
const bodyParser = require('koa-bodyparser');
const yaml = require('js-yaml') const yaml = require('js-yaml')
const templates = require('../serviceTemplate') const templates = require('../serviceTemplate')
const client = require('../services/tke.service').create({ const IMAGES = ['rabbitmq:3.6-management']
secretId: 'AKID4rY7wwNphsUcaFsy1pRtKhQvDj4CA3Ac',
secretKey: 'YBduRnjgVRGzmagZJbss3Vo58wWCyhgc',
clusterId: 'cls-acfx4pvj',
region: 'ap-beijing'
})
const TYPES = ['rabbitmq']
const IMAGES = {
rabbitmq: ['rabbitmq:3.6-management']
}
const router = new Router(); const router = new Router();
module.exports = router module.exports = router
router.use(async (ctx, next) => { router.post('/create', async ctx => {
ctx.k8s = client
await next()
}, bodyParser())
router.post('/rabbitmq/create', async ctx => {
try { try {
let svc = await client.service_get(serviceName, namespace) let svc = await ctx.client.service_get(serviceName, namespace)
if (svc) { if (svc) {
return ctx.body = ctx.fail('服务已经存在') return ctx.body = ctx.fail('服务已经存在')
} }
} catch (e) { } catch (e) {}
}
let data = { let data = {
namespace: ctx.request.body.namespace, namespace: ctx.request.body.namespace,
image: IMAGES.rabbitmq[0] image: IMAGES[0]
} }
let template = templates['rabbitmq'].replace(/{{([A-Za-z0-9_]+)}}/g, function () { let template = templates['rabbitmq'].replace(/{{([A-Za-z0-9_]+)}}/g, function () {
if (data[arguments[1]] === undefined) { if (data[arguments[1]] === undefined) {
...@@ -42,15 +26,11 @@ router.post('/rabbitmq/create', async ctx => { ...@@ -42,15 +26,11 @@ router.post('/rabbitmq/create', async ctx => {
return data[arguments[1]] return data[arguments[1]]
}) })
let params = yaml.load(template) let params = yaml.load(template)
console.log(params) await ctx.client.service_create(params)
await client.service_create(params)
ctx.body = ctx.ok('创建成功') ctx.body = ctx.ok('创建成功')
}) })
router.post('/rabbitmq/delete', async ctx => { router.post('/delete', async ctx => {
await client.service_delete('rabbitmq', ctx.request.body.namespace) await client.service_delete('rabbitmq', ctx.request.body.namespace)
ctx.body = ctx.ok('删除成功') ctx.body = ctx.ok('删除成功')
}) })
const Router = require('koa-router') const Router = require('koa-router')
const bodyParser = require('koa-bodyparser');
const yaml = require('js-yaml') const yaml = require('js-yaml')
const templates = require('../serviceTemplate') const templates = require('../serviceTemplate')
const client = require('../services/tke.service').create({
secretId: 'AKID4rY7wwNphsUcaFsy1pRtKhQvDj4CA3Ac',
secretKey: 'YBduRnjgVRGzmagZJbss3Vo58wWCyhgc',
clusterId: 'cls-acfx4pvj',
region: 'ap-beijing'
})
const TYPES = ['ui', 'java', 'nodejs', 'python', 'go'] const TYPES = ['ui', 'java', 'nodejs', 'python', 'go']
const router = new Router(); const router = new Router();
module.exports = router module.exports = router
router.use(async (ctx, next) => {
ctx.k8s = client
await next()
}, bodyParser())
router.get('/', async ctx => { router.get('/', async ctx => {
let data = await client.service_list(ctx.query.namespace) let data = await ctx.client.service_list(ctx.query.namespace)
ctx.body = ctx.ok(data) ctx.body = ctx.ok(data)
}) })
...@@ -32,7 +19,7 @@ router.post('/create', async ctx => { ...@@ -32,7 +19,7 @@ router.post('/create', async ctx => {
} }
// try { // try {
// let svc = await client.service_get(serviceName, namespace) // let svc = await ctx.client.service_get(serviceName, namespace)
// if (svc) { // if (svc) {
// return ctx.body = ctx.fail('服务已经存在') // return ctx.body = ctx.fail('服务已经存在')
// } // }
...@@ -56,17 +43,17 @@ router.post('/create', async ctx => { ...@@ -56,17 +43,17 @@ router.post('/create', async ctx => {
return data[arguments[1]] return data[arguments[1]]
}) })
let params = yaml.load(template) let params = yaml.load(template)
await 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 => {
await client.service_delete(ctx.request.body.serviceName, ctx.request.body.namespace) await ctx.client.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 client.service_modifyImage(ctx.request.body.serviceName, ctx.request.body.image, ctx.request.body.namespace) await ctx.client.service_modifyImage(ctx.request.body.serviceName, ctx.request.body.image, ctx.request.body.namespace)
ctx.body = ctx.ok('更新成功') ctx.body = ctx.ok('更新成功')
}) })
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: test-ui
namespace: xuezhijie
spec:
replicas: 1
strategy:
type: Recreate
revisionHistoryLimit: 0
template:
metadata:
labels:
app: test-ui
spec:
restartPolicy: Always
containers:
- name: test-ui-v1
imagePullPolicy: Always
env:
- name: SYSTEM_NAME
value: xjd-ui
- name: NAMESPACE
value: xuezhijie
image: 192.168.4.4/tmp/test-ui:2.2
ports:
- containerPort: 80
\ No newline at end of file
apiVersion: v1
kind: Service
metadata:
name: test-ui
namespace: xuezhijie
spec:
ports:
- name: tcp-80-80-fwdy6
port: 80
protocol: TCP
targetPort: 80
sessionAffinity: None
type: ClusterIP
\ No newline at end of file
This diff is collapsed.
...@@ -9,10 +9,11 @@ ...@@ -9,10 +9,11 @@
"koa-bodyparser": "^4.2.1", "koa-bodyparser": "^4.2.1",
"koa-router": "^7.4.0", "koa-router": "^7.4.0",
"lodash": "^4.17.11", "lodash": "^4.17.11",
"nodemon": "^1.18.9", "request": "^2.88.0"
"tencentcloud-sdk-nodejs": "^3.0.43" },
"devDependencies": {
"nodemon": "^1.18.9"
}, },
"devDependencies": {},
"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 nodemon"
......
serviceName: {{serviceName}}
namespace: {{namespace}}
replicas: 1
accessType: ClusterIP
portMappings.0.protocol: TCP
portMappings.0.lbPort: 80
portMappings.0.containerPort: 80
containers.0.containerName: {{serviceName}}
containers.0.image: {{image}}
containers.0.envs.0.name: SYSTEM_NAME
containers.0.envs.0.value: {{serviceName}}
containers.0.envs.1.name: NAMESPACE
containers.0.envs.1.value: {{namespace}}
\ No newline at end of file
...@@ -11,9 +11,10 @@ class Client { ...@@ -11,9 +11,10 @@ class Client {
this.protocal = 'https://' this.protocal = 'https://'
this.endpoint = 'ccs.api.qcloud.com' this.endpoint = 'ccs.api.qcloud.com'
this.path = '/v2/index.php' this.path = '/v2/index.php'
this.domain = ".lkbang.com"
// 禁止操作以下命名空间 // 禁止操作以下命名空间
this.ReservedNamespace = ['default', 'kube-system'] this.defaultNamespaces = ['default', 'kube-system', 'kube-public']
} }
sign (params, signMethod) { sign (params, signMethod) {
...@@ -52,7 +53,7 @@ class Client { ...@@ -52,7 +53,7 @@ class Client {
} }
post (action, params = {}) { post (action, params = {}) {
if (params.namespace && this.ReservedNamespace.includes(params.namespace)) { if (params.namespace && this.defaultNamespaces.includes(params.namespace)) {
return Promise.reject(new Error('未授权的namespace')) return Promise.reject(new Error('未授权的namespace'))
} }
...@@ -119,6 +120,22 @@ class Client { ...@@ -119,6 +120,22 @@ class Client {
return this.post('ModifyClusterServiceImage', {serviceName, namespace, image, clusterId: this.clusterId}) return this.post('ModifyClusterServiceImage', {serviceName, namespace, image, clusterId: this.clusterId})
} }
ingress_get (namespace) {
return this.post('DescribeIngress', {namespace, clusterId: this.clusterId})
}
ingress_create (namespace) {
return this.post('CreateIngress', {ingressName: `qa-${namespace}`, ingressDesc: '', namespace, clusterId: this.clusterId})
}
ingress_delete (ingressName, namespace) {
return this.post('DeleteIngress', {ingressName, namespace, clusterId: this.clusterId})
}
ingress_modify (ingressName, namespace, rules) {
return this.post('MosifyIngress', {ingressName, namespace, ...rules, clusterId: this.clusterId})
}
} }
exports.create = function (config) { exports.create = function (config) {
......
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