Commit 594b562e authored by 智勇's avatar 智勇

init ns

parent d1d80b30
...@@ -22,6 +22,12 @@ const logFormat = ':req[x-real-ip] :req[x-forwarded-for] - -' ...@@ -22,6 +22,12 @@ const logFormat = ':req[x-real-ip] :req[x-forwarded-for] - -'
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()
const logFormat = ':req[x-real-ip] :req[x-forwarded-for] - -'
+ ' ":method :url HTTP/:http-version"'
+ ' :status :content-length ":referrer"'
+ ' ":user-agent" :req[x-auth-token] :response-time'
+ 'ms';
const logger = log4js.getLogger() const logger = log4js.getLogger()
log4js.configure(logConf.devlog) log4js.configure(logConf.devlog)
function loadRoutes(router) { function loadRoutes(router) {
......
const Router = require('koa-router') const Router = require('koa-router')
const yaml = require('js-yaml')
const logger = require('koa-log4').getLogger('router:namespace');
const templates = require('../serviceTemplate')
let newNsKey = ''
const router = new Router(); const router = new Router();
module.exports = router module.exports = router
router.get('/', async (ctx) => { router.get('/', async (ctx) => {
const data = await ctx.cluster.namespace_get() const data = await ctx.cluster.namespace_get()
ctx.body = ctx.ok(data) ctx.body = ctx.ok(data)
...@@ -14,7 +19,86 @@ router.post('/create', async (ctx) => { ...@@ -14,7 +19,86 @@ router.post('/create', async (ctx) => {
ctx.body = ctx.ok() ctx.body = ctx.ok()
}) })
const IMAGES = {
zookeeper: 'zookeeper:3.4.10',
rabbitmq: 'rabbitmq:3.6-management',
mysql: 'mysql:5.7',
redis: 'ccr.ccs.tencentyun.com/qa-db/redis:v4',
}
router.post('/init', async (ctx) => {
const body = ctx.request.body
if (body.code !== newNsKey) {
throw new Error('创建确认码不正确')
}
await ctx.cluster.namespace_create(body.namespace)
await ctx.cluster.ingress_create(body.namespace)
async function serviceCreate(element, index) {
if (index !== 'common') {
const data = {
namespace: body.namespace,
image: `ccr.ccs.tencentyun.com/qa-${index}/${element}:tke-latest`,
type: index,
serviceName: element,
system_name: element,
}
const template = templates[index].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.cluster.service_create(params, index)
}
if (index === 'common') {
const data = {
namespace: body.namespace,
image: IMAGES[element],
}
const template = templates[element].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.cluster.service_create(params)
}
}
for (const index in body.systems) {
if ({}.hasOwnProperty.call(body.systems, index)) {
for (const item in body.systems[index]) {
if ({}.hasOwnProperty.call(body.systems[index], item)) {
serviceCreate(body.systems[index][item], index)
}
}
}
}
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()
}) })
function generateUUID() {
let d = new Date().getTime();
const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
const r = (d + Math.random() * 16) % 16 | 0;
d = Math.floor(d / 16);
return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
return uuid;
}
router.get('/get_code', async (ctx) => {
newNsKey = newNsKey === '' ? generateUUID() : newNsKey
ctx.body = ctx.ok(newNsKey)
})
{ {
"delay": "2500", "delay": "500",
"ignore": ["*.test.js", "fixtures/*"], "ignore": ["*.test.js", "fixtures/*"],
"ext": "js json txt" "ext": "js json txt"
} }
\ No newline at end of file
...@@ -6,6 +6,7 @@ const node = fs.readFileSync('serviceTemplate/node.template.txt', 'utf8') ...@@ -6,6 +6,7 @@ const node = fs.readFileSync('serviceTemplate/node.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 zookeeper = fs.readFileSync('serviceTemplate/zookeeper.template.txt', 'utf8')
const mysql = fs.readFileSync('serviceTemplate/mysql.template.txt', 'utf8') const mysql = fs.readFileSync('serviceTemplate/mysql.template.txt', 'utf8')
const redis = fs.readFileSync('serviceTemplate/redis.template.txt', 'utf8')
module.exports = { module.exports = {
ui, ui,
...@@ -14,4 +15,5 @@ module.exports = { ...@@ -14,4 +15,5 @@ module.exports = {
rabbitmq, rabbitmq,
zookeeper, zookeeper,
mysql, mysql,
redis,
} }
serviceName: redis
namespace: {{namespace}}
replicas: 1
accessType: ClusterIP
portMappings.0.protocol: TCP
portMappings.0.lbPort: 6379
portMappings.0.containerPort: 6379
portMappings.1.protocol: TCP
portMappings.1.lbPort: 6380
portMappings.1.containerPort: 6380
portMappings.2.protocol: TCP
portMappings.2.lbPort: 6381
portMappings.2.containerPort: 6381
portMappings.3.protocol: TCP
portMappings.3.lbPort: 6382
portMappings.3.containerPort: 6382
portMappings.4.protocol: TCP
portMappings.4.lbPort: 6383
portMappings.4.containerPort: 6383
containers.0.containerName: redis
containers.0.image: {{image}}
containers.0.volumeMounts.0.volumeName: redis-vol
containers.0.volumeMounts.0.mountPath: /var/lib/redis
containers.0.volumeMounts.0.mode: rw
volumes.0.name: redis-vol
volumes.0.volumeType: hostPath
volumes.0.hostPath: /var/lib/data/redis/{{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