/// module Kubernetes { export var hostPorts =[]; /** * Sorts the the ip field * * @param ip the ip such as '10.1.2.13' * @returns {any} */ export function sortByPodIp(ip) : any { // i guess there is maybe nicer ways of sort this without parsing and slicing var regex = /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; var groups = regex.exec(ip); if (angular.isDefined(groups)) { var g1 = ("00" + groups[1]).slice(-3); var g2 = ("00" + groups[2]).slice(-3); var g3 = ("00" + groups[3]).slice(-3); var g4 = ("00" + groups[4]).slice(-3); var answer = g1 + g2 + g3 + g4; return answer; } else { return 0; } } export function ramdomPort(): number{ var hostPort=Math.floor(30000+Math.random()*(65535-30000)); while(hostPorts.indexOf(hostPort) === 0){ hostPort = Math.floor(30000+Math.random()*(65535-30000)); } hostPorts.push(hostPort); return hostPort } export function getRandomString(len : number) : string{ len = len || 32; var $chars = 'abcdefhijkmnprstwxyz'; // 默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1 var maxPos = $chars.length; var pwd = ''; for (var i = 0; i < len; i++) { pwd += $chars.charAt(Math.floor(Math.random() * maxPos)); } return pwd; } export class resourceRCTemplate{ public image="oracle:utf8"; public names = ["admin","cfgtoollogs","checkpoints","diag","flash-recovery-area","oradata"]; public createRC(Obj){ var labels = { "style": "oracle", "status": "0", "isExtract": "0", "isTarget": Obj.isTarget }; for(var item in Obj.labels) labels[item] = Obj.labels[item]; return { "apiVersion" : Kubernetes.defaultApiVersion, "kind" : "ReplicationController", "metadata" : { "name" : Obj.name, "labels" : labels, "annotations": Obj.annotations }, "spec" : { replicas : Obj.replicas || 1, "template" : this.createTemplate(Obj) } } } public createVolumeMounts(){ var volumeMounts = []; for(var item in this.names){ if(this.names[item] === 'flash-recovery-area') volumeMounts.push({ "name" : this.names[item], "mountPath" : "/opt/oracle/app/flash_recovery_area" }); else volumeMounts.push({ "name" : this.names[item], "mountPath" : "/opt/oracle/app/" + this.names[item] }); } return volumeMounts; } public createVolumes(rootPath :string){ var volumes = []; for(var item in this.names){ if(this.names[item] === 'flash-recovery-area') volumes.push({ "name" : this.names[item], "hostPath" :{ "path" : rootPath + "flash_recovery_area" } }); else volumes.push({ "name" : this.names[item], "hostPath" :{ "path" : rootPath + this.names[item] } }); } return volumes; } public createContainers(Obj){ var containers = []; containers.push( { "name" : "oracle", "image": this.image, "imagePullPolicy": "IfNotPresent", "command":["/assets/entrypoint.sh"], "ports": [ { "containerPort": 1521, "hostPort": Obj.port || ramdomPort() }], "volumeMounts" : this.createVolumeMounts() }); return containers } public createTemplate(Obj){ return { "metadata": { //"name": Obj.name, "labels": Obj.labels }, "spec" : { "terminationGracePeriodSeconds" : 0, "containers" : this.createContainers(Obj), "volumes" : this.createVolumes(Obj.path) } } } } export function labelToChinese(labels){ var answer = {}; angular.forEach(labels,(value, key) => { answer[key] = labelChangeToChines(value, key); }); return answer } export function findSameNameReplicationControllers(replicationControllers, name){ var names = []; replicationControllers.forEach((rc) => { var rcName = getName(rc); if(rcName.indexof(name) !== -1) names.push(rcName); }); if(names.length === 0){ return name + "_1"; }else{ var max = 0; names.forEach((value) => { var answer = value.split("_"); var key = parseInt(answer[1]); if(max < key) max = key; }); return name + (max+1); } } export function isFilterRC(rc){ var answer = false; angular.forEach(Core.pathGet(rc, ["metadata", "labels"]),(value, key) => { if(key === 'isTarget' && value === 'true'){ answer = true; } }); return answer; } export function isInclude(rcs, rc){ for(var i in rcs){ if(getName(rcs[i]) === getName(rc)) return true; } return false; } export function labelChangeToChines(value:string, key:string){ var trueValue = ''; switch(key){ case 'type': if(value === '01') trueValue = '财政'; else if(value === '02') trueValue = '社保'; else trueValue = value; break; case 'batch': if(value === 'A') trueValue = '批次A'; else if(value === 'B') trueValue = '批次B'; else trueValue = value; break; case 'region': trueValue = Kubernetes.getCountyByCode(value); break; case 'system': trueValue = Kubernetes.getSystemNameById(value); break; case 'version': var reg= new RegExp('^[0-9]$').exec(value); if(reg) trueValue = '版本' + reg[0]; else trueValue = value; break; case 'isTarget': if(value === 'true') trueValue = '汇总数据库'; else trueValue = value; break; default: trueValue = value; } return trueValue; } }