Commit b49b89f2 authored by 智勇's avatar 智勇

common service

parent da7de734
{
"extends": "standard"
}
\ No newline at end of file
.DS_Store .DS_Store
node_modules node_modules
package-lock.json
/dist /dist
# local env files # local env files
......
const Router = require('koa-router')
const yaml = require('js-yaml')
const templates = require('../serviceTemplate')
const IMAGES = {
zookeeper: 'zookeeper:3.4.10',
rabbitmq: 'rabbitmq:3.6-management',
mysql: 'mysql:5.7'
}
const router = new Router()
module.exports = router
router.post('/create', async ctx => {
let { serviceName, namespace } = ctx.request.body
if (!Object.keys(IMAGES).includes(serviceName)) {
ctx.body = ctx.fail('不支持的服务类型')
return
}
let data = {
namespace,
image: IMAGES[serviceName]
}
let template = templates[serviceName].replace(/{{([A-Za-z0-9_]+)}}/g, function () {
if (data[arguments[1]] === undefined) {
throw new Error('缺少模板所需变量')
}
return data[arguments[1]]
})
let params = yaml.load(template)
await ctx.client.service_create(params)
ctx.body = ctx.ok('创建成功')
})
router.post('/delete', async ctx => {
let { serviceName, namespace } = ctx.request.body
await ctx.client.service_delete(serviceName, namespace)
ctx.body = ctx.ok('删除成功')
})
...@@ -7,7 +7,9 @@ const result = require('../middleware/result') ...@@ -7,7 +7,9 @@ const result = require('../middleware/result')
const namespaceRoute = require('./namespace') const namespaceRoute = require('./namespace')
const serviceRoute = require('./service') const serviceRoute = require('./service')
const rabbitmqRoute = require('./rabbitmq') // const rabbitmqRoute = require('./rabbitmq')
// const zookeeperRoute = require('./zookeeper')
const commonServiceRoute = require('./commonService')
const ingressRoute = require('./ingress') const ingressRoute = require('./ingress')
const client = require('../services/tke.service').create({ const client = require('../services/tke.service').create({
...@@ -28,20 +30,21 @@ function loadRoutes (router) { ...@@ -28,20 +30,21 @@ function loadRoutes (router) {
}, bodyParser()) }, bodyParser())
.use('/namespace', namespaceRoute.routes()) .use('/namespace', namespaceRoute.routes())
.use('/service', serviceRoute.routes()) .use('/service', serviceRoute.routes())
.use('/rabbitmq', rabbitmqRoute.routes()) // .use('/rabbitmq', rabbitmqRoute.routes())
// .use('/zookeeper', zookeeperRoute.routes())
.use('/commonService', commonServiceRoute.routes())
.use('/ingress', ingressRoute.routes()) .use('/ingress', ingressRoute.routes())
} }
exports.start = function () { exports.start = function () {
// 加载各种服务 // 加载各种服务
const app = new Koa()
const app = new Koa(); const router = new Router()
const router = new Router();
// 加载所有路由 // 加载所有路由
loadRoutes(router) loadRoutes(router)
app.use(router.routes()); app.use(router.routes())
app.listen(4000); app.listen(4000)
console.log('app start', 4000) console.log('app start', 4000)
} }
...@@ -4,16 +4,15 @@ const templates = require('../serviceTemplate') ...@@ -4,16 +4,15 @@ const templates = require('../serviceTemplate')
const IMAGES = ['rabbitmq:3.6-management'] const IMAGES = ['rabbitmq:3.6-management']
const router = new Router(); const router = new Router()
module.exports = router module.exports = router
router.post('/create', async ctx => { router.post('/create', async ctx => {
try { // let svc = await ctx.client.service_get('rabbitmq', ctx.request.body.namespace)
let svc = await ctx.client.service_get(serviceName, namespace) // if (svc) {
if (svc) { // ctx.body = ctx.fail('服务已经存在')
return ctx.body = ctx.fail('服务已经存在') // return
} // }
} catch (e) {}
let data = { let data = {
namespace: ctx.request.body.namespace, namespace: ctx.request.body.namespace,
...@@ -31,6 +30,6 @@ router.post('/create', async ctx => { ...@@ -31,6 +30,6 @@ router.post('/create', async ctx => {
}) })
router.post('/delete', async ctx => { router.post('/delete', async ctx => {
await client.service_delete('rabbitmq', ctx.request.body.namespace) await ctx.client.service_delete('rabbitmq', ctx.request.body.namespace)
ctx.body = ctx.ok('删除成功') ctx.body = ctx.ok('删除成功')
}) })
...@@ -4,7 +4,7 @@ const templates = require('../serviceTemplate') ...@@ -4,7 +4,7 @@ const templates = require('../serviceTemplate')
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.get('/', async ctx => { router.get('/', async ctx => {
...@@ -13,7 +13,7 @@ router.get('/', async ctx => { ...@@ -13,7 +13,7 @@ router.get('/', async ctx => {
}) })
router.post('/create', async ctx => { router.post('/create', async ctx => {
let {type, serviceName, namespace, image, system_name} = ctx.request.body let { type, serviceName, namespace, image, system_name } = ctx.request.body
if (!TYPES.includes(type)) { if (!TYPES.includes(type)) {
return ctx.body = ctx.fail('不支持的服务类型') return ctx.body = ctx.fail('不支持的服务类型')
} }
...@@ -56,4 +56,3 @@ router.post('/modifyImage', async ctx => { ...@@ -56,4 +56,3 @@ router.post('/modifyImage', async ctx => {
await ctx.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('更新成功')
}) })
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 => {
let data = {
namespace: ctx.request.body.namespace,
image: IMAGES[0]
}
let template = templates['zookeeper'].replace(/{{([A-Za-z0-9_]+)}}/g, function () {
if (data[arguments[1]] === undefined) {
throw new Error('缺少模板所需变量')
}
return data[arguments[1]]
})
let 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 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 nodejs = fs.readFileSync('serviceTemplate/nodejs.template.txt', 'utf8')
const rabbitmq = fs.readFileSync('serviceTemplate/rabbitmq.template.txt', 'utf8') const rabbitmq = fs.readFileSync('serviceTemplate/rabbitmq.template.txt', 'utf8')
const zookeeper = fs.readFileSync('serviceTemplate/zookeeper.template.txt', 'utf8')
const mysql = fs.readFileSync('serviceTemplate/mysql.template.txt', 'utf8')
module.exports = { module.exports = {
ui, ui,
rabbitmq nodejs,
java,
rabbitmq,
zookeeper,
mysql
} }
serviceName: {{serviceName}}
namespace: {{namespace}}
replicas: 1
accessType: ClusterIP
portMappings.0.protocol: TCP
portMappings.0.lbPort: 80
portMappings.0.containerPort: 80
containers.0.containerName: {{system_name}}
containers.0.image: {{image}}
containers.0.envs.0.name: SYSTEM_NAME
containers.0.envs.0.value: {{system_name}}
containers.0.envs.1.name: NAMESPACE
containers.0.envs.1.value: {{namespace}}
serviceName: mysql
namespace: {{namespace}}
replicas: 1
accessType: LoadBalancer
portMappings.0.protocol: TCP
portMappings.0.lbPort: 3306
portMappings.0.containerPort: 3306
containers.0.containerName: mysql
containers.0.image: {{image}}
containers.0.volumeMounts.0.volumeName: mysql-vol
containers.0.volumeMounts.0.mountPath: /var/lib/mysql
containers.0.volumeMounts.0.mode: rw
containers.0.envs.0.name: MYSQL_USER
containers.0.envs.0.value: qa
containers.0.envs.1.name: MYSQL_PASSWORD
containers.0.envs.1.value: qatest
containers.0.envs.2.name: MYSQL_ROOT_PASSWORD
containers.0.envs.2.value: qatest
volumes.0.name: mysql-vol
volumes.0.volumeType: hostPath
volumes.0.hostPath: /var/lib/data/mysql/{{namespace}}
...@@ -13,4 +13,3 @@ containers.0.envs.0.name: SYSTEM_NAME ...@@ -13,4 +13,3 @@ containers.0.envs.0.name: SYSTEM_NAME
containers.0.envs.0.value: {{serviceName}} containers.0.envs.0.value: {{serviceName}}
containers.0.envs.1.name: NAMESPACE containers.0.envs.1.name: NAMESPACE
containers.0.envs.1.value: {{namespace}} containers.0.envs.1.value: {{namespace}}
\ No newline at end of file
...@@ -24,4 +24,3 @@ containers.0.envs.1.value: qatest ...@@ -24,4 +24,3 @@ containers.0.envs.1.value: qatest
volumes.0.name: rabbitmq-vol volumes.0.name: rabbitmq-vol
volumes.0.volumeType: hostPath volumes.0.volumeType: hostPath
volumes.0.hostPath: /var/lib/data/rabbitmq/{{namespace}} volumes.0.hostPath: /var/lib/data/rabbitmq/{{namespace}}
\ No newline at end of file
...@@ -13,4 +13,3 @@ containers.0.envs.0.name: SYSTEM_NAME ...@@ -13,4 +13,3 @@ containers.0.envs.0.name: SYSTEM_NAME
containers.0.envs.0.value: {{system_name}} containers.0.envs.0.value: {{system_name}}
containers.0.envs.1.name: NAMESPACE containers.0.envs.1.name: NAMESPACE
containers.0.envs.1.value: {{namespace}} containers.0.envs.1.value: {{namespace}}
\ No newline at end of file
serviceName: zookeeper
namespace: {{namespace}}
replicas: 1
accessType: ClusterIP
portMappings.0.protocol: TCP
portMappings.0.lbPort: 2181
portMappings.0.containerPort: 2181
portMappings.1.protocol: TCP
portMappings.1.lbPort: 9090
portMappings.1.containerPort: 9090
containers.0.containerName: zookeeper
containers.0.image: {{image}}
containers.0.volumeMounts.0.volumeName: zookeeper-vol
containers.0.volumeMounts.0.mountPath: /var/lib/zookeeper
containers.0.volumeMounts.0.mode: rw
containers.0.envs.0.name: ZOO_USER
containers.0.envs.0.value: zookeeper
containers.0.envs.1.name: ZOO_PORT
containers.0.envs.1.value: 2181
volumes.0.name: zookeeper-vol
volumes.0.volumeType: hostPath
volumes.0.hostPath: /var/lib/data/zookeeper/{{namespace}}
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