VimŸUnDoå—]ýƒmBždí"Ógž<þ1…5Äpú>ÿ¤#EÜ@‹Ê VÛÛÛÛW�æùn_ÐvÿÿÿÿJVvÿÿÿVÑA%õvxy5�_ÐwÿÿÿÿJVvÿÿÿVÑA&õv…zõwxz5�_ЄÿÿÿÿJVvÿÿÿVÑA(õƒ„5�_ÐyÿÿÿÿxJVvÿÿÿVÑA3õy{‡ õy{†5�_Ðz ÿÿÿÿxJVvÿÿÿVÑLBõy{‡ app.cull5�_Ðÿÿÿÿ{VÑaÔõˆõ‡5�_Ð{ÿÿÿÿ|VÑaêõz|ˆ app.cullTimeout = 5�_Ð zÿÿÿÿ|VÑb*õz|‰ õz|ˆ5�_Ð {ÿÿÿÿ}VÑb,õz|‰ /5�_Ð |ÿÿÿÿ}||vVÑb/õ{}‰ app.cullTimeout = 10005�_Ð {ÿÿÿÿ}||vVÑb1õz|‰ //5�_Ð zÿÿÿÿ}||vVÑb7õz|Š õz|‰5�_Ð  yÿÿÿÿ~}}vVÑb@õy{‹ õy{Š5�_Ð wÿÿÿÿ~~vVÑbCõwyŒ õwy‹5�_Ð{ÿÿÿÿ€vVÑbLõz|Œ kõy|‹( if (err) return api._registryError()õy{Œ( if (err) return api._registryError()õz|Œ5�_Ð|ÿÿÿÿ€|‰v)VÑbZõ{ŠŒ var app = new App(template) app.node = 9 // the app can be culled immediately after deployment app.cullTimeout = 1e self.logger.info('app created with template {0}, deploying with id {1}'.format(template, app.id)) app.save(function (err) { if (err) {! return api._badDatabase() } return api._success({ id: app.id }) }) })5�_Љÿÿÿÿ€|‰v)VÑb\õ‰‹� õ‰‹Œ5�_Ð{ ÿÿÿÿ€|‰v)VÑb`õ{}Ž õ{}�5�_Є ÿÿÿÿ�}Šv)VÑbmõ‚„Ž if (err) {return api._badDatabase()õƒ…Ž# return api._badDatabase()5�_Єÿÿÿÿ�}‰v)VÑboõƒ„ }5�_Ðeÿÿÿÿ�}ˆv)VÑbzõde }5�_Ðdÿÿÿÿ€|‡v)VÑb| õbd‹ if (err) {return api._badDatabase()õce‹ return api._badDatabase()5�_Ðs-ÿÿÿÿs4s-v-VÑbŠ õrtŠ8ClusterManager.prototype.preload = function (req, res) {5�_Ðzÿÿÿÿs4s-v-VÑb‘ õy{Š if (err) 5�_Ð|ÿÿÿÿs4s-v-VÑc³õ{}Š app.node = 5�_Ðzÿÿÿÿs4s-v-VÑc½õz|‹ õz|Š5�_Ð| ÿÿÿÿ€| †v(VÑcÐõ{‡‹ ! var app = new App(template) app.node = node; // the app can be culled immediately after deployment app.cullTimeout = 1g self.logger.info('app created with template {0}, deploying with id {1}'.format(template, app.id)) app.save(function (err) {* if (err) return api._badDatabase() return api._success({ id: app.id }) })5�_Ð{&ÿÿÿÿ€| †v(VÑcÒõz|‹) async.each(nodes, function (node) {5�_Їÿÿÿÿ€| †v(VÑc×õ†ˆ‹ })5�_Їÿÿÿÿ€| †v(VÑcØõ†ˆ‹ })5�_Ð ‡ÿÿÿÿ€| †v(VÑcÞ õ‡‰Œ }õ†‰‹ }, function (err)5�_Ð! ‡ÿÿÿÿ€| †v(VÑcá õ‡‰� õ‡‰Œ5�_Ð "!ˆ,ÿÿÿÿ€| †v(VÑcøõ‡‰�- if (err) return api._unknownFailure()5�_Ð!#"ˆ,ÿÿÿÿ€ˆ,ˆ.v.VÑdõ‡‰�0 if (err) return api._unknownFailure(err)5�_Ð"$#}ÿÿÿÿ€ˆ,ˆ.v.VÑd,õ|~� app.node = node5�_Ð#%$ÿÿÿÿ€ˆ,ˆ.v.VÑd;õ�Ž õ��5�_Ð$&%�ÿÿÿÿ�‰,‰.v.VÑdTõ€�i self.logger.info('app created with template {0}, deploying with id {1}'.format(template, app.id))5�_Ð%'&‰ÿÿÿÿVÑiõ‰‹Ž õ‰‹�5�_Ð&('uÿÿÿÿVÑj[õtvŽ$ var template = req.params.template5�_Ð')(uÿÿÿÿuu#v#VÑj^õtvŽ$ var template = api.params.template5�_Ð(*)wÿÿÿÿuu#v#VÑjšõvxŽF self.registry.fetchTemplate(templateName, function (err, template) {5�_Ð)+*ÿÿÿÿuu#v#VÑjÁõ�õŽ5�_Ð*,+ƒÿÿÿÿvv#v#VÑkEõ‚„�, if (err) return api._badDatabase()5�_Ð+.,‰ÿÿÿÿvv#v#VÑktõˆŠ�- if (err) return api._unknownFailure()5�_Ð,/-.ƒ@ÿÿÿÿƒ@ƒQvQVÑk~õ‚„�R if (err) return next(new Error('could not save app')) api._badDatabase()5�_Ð.0/ƒ?ÿÿÿÿƒ@ƒQvQVÑk~õ‚„�@ if (err) return next(new Error('could not save app')) 5�_Ð/10ƒ>ÿÿÿÿƒ@ƒQvQVÑk€õƒ…� õƒ…�5�_Ð021‚ÿÿÿÿƒ@ƒQvQVÑk†õ‚„‘ õ‚„�5�_Ð132„ ÿÿÿÿ„@„QvQVÑkˆõƒ„? if (err) return next(new Error('could not save app'))5�_Ð243„ÿÿÿÿ„@„QvQVÑk‰õƒ„5�_Ð354„ ÿÿÿÿ„@„QvQVÑkŠõƒ„ return api._success({5�_Ð465„ ÿÿÿÿ„@„QvQVÑk‹õƒ„ id: app.id5�_Ð576„ ÿÿÿÿ„@„QvQVÑk‹õƒ„ })5�_Ð687† ÿÿÿÿ„@„QvQVÑk�õ†ˆ� õ†ˆŒ5�_Ð798~ÿÿÿÿVÒ�–õ~€Ž õ~€�5�_Ð8:9sÿÿÿÿVØ’õsw�õsuŽ5�_Ð9;:uÿÿÿÿVØ’ õtv‘ *5�_Ð:<;‡ ÿÿÿÿVØ’ñõ†ˆ‘ return err5�_Ð;=<‡ ÿÿÿÿVØ’ôõ†ˆ‘ if err5�_Ð<>=‡ ÿÿÿÿ‡ ‡vVØ’÷"õ†ˆ‘ if err5�_Ð=?>‹ÿÿÿÿVØ”Éõ‹�’ })õŠ�‘ return api._success()5�_Ð>@?ŒÿÿÿÿVØ”ÊõŒŽ’5�_Ð?A@�ÿÿÿÿVØ”ÌõŒ�5�_Ð@BA‹ÿÿÿÿVØ”Ì%õ‹�“ õ‹�’5�_ÐACBfÿÿÿÿVÞƒþ&õeg“ return api._noRecord()5�_ÐBDCe ÿÿÿÿVÞ„ 'õdf“ if (!app) {5�_ÐCED% ÿÿÿÿVÞ²õ$&“# template: match.template,5�_ÐDFE% ÿÿÿÿVÞ²õ$&“ name: match.template,5�_ÐEGF%ÿÿÿÿVÞ²!(õ$&“# template: match.template,5�_ÐFHG%ÿÿÿÿVÞ´Yõ$&“ template: match.name,5�_ÐGIH%ÿÿÿÿVÞ´gõ“var _ = require('lodash')var async = require('async')%var format = require('string-format')format.extend(String.prototype)#var App = require('./state/app.js')-var RegistryClient = require('./registry.js')'var KubeClient = require('kube-stream')3var getLogger = require('binder-logging').getLogger$function ClusterManager (db, opts) { this.opts = opts this.db = db* this.registry = new RegistryClient(opts) App.initialize(db)5 this.logger = getLogger('binder-deploy-kubernetes')}/**Z * API handler that responds all applications (potentially only those matching a template) * running on the cluster */>ClusterManager.prototype.getAllApplications = function (api) { var self = this2 var template = api.params['template-name'] || {}Q this.logger.info('getting all applications for template: {0}'.format(template)). App.find(template, function (err, matches) { if (err) { return api._badDatabase() } else {] self.logger.info('successfully got all applications for template {0}'.format(template))4 var formatted = matches.map(function (match) { return { id: match.id,# template: match.template,# location: match.location, status: match.state } })$ return api._success(formatted) } })}/**B * API handler that deploys an application on a Kubernetes cluster */=ClusterManager.prototype.createApplication = function (api) { var self = this0 var templateName = api.params['template-name']Q self.logger.info('creating application with template {0}'.format(templateName))= // TODO pooling is currently disabled until further testing /* if (this.opts.pool.enabled) {[ var appPool = _.find(this.pools.find({ templateName: templateName }), function (pool) {! return pool.available() > 0 }) if (appPool) {+ appPool.assign(function (err, slot) { if (err) {V return res.status(500).send('could not create application: {0}').format(err) } var rsp = { id: slot.id,! location: slot.location } res.json(rsp) }) } else {X res.status(500).send('no pools available for template: {0}'.format(template.name)) } } else { */F self.registry.fetchTemplate(templateName, function (err, template) {( if (err) return api._registryError() var app = new App(template)e self.logger.info('app created with template {0}, deploying with id {1}'.format(template, app.id)) app.save(function (err) { if (err) {! return api._badDatabase() } return api._success({ id: app.id }) }) })}/**G * API handler that gets information assicated with a single deployment */:ClusterManager.prototype.getApplication = function (api) { var self = this, var template = api.params['template-name'] var id = api.params.id[ self.logger.info('getting application with template {0} and id {1}'.format(template, id))/ App.findOne({ id: id }, function (err, app) {& if (err) return api._badDatabase() if (!app || (app === {})) { return api.doesNotExist() } else {] self.logger.info('found application with template {0} and id {1}'.format(template, id)) var formatted = { id: app.id, template: app.template, location: app.location, status: app.state } api._success(formatted) } })}/**4 * Preloads a template onto all nodes of the cluster */3ClusterManager.prototype.preload = function (api) { var self = this, var template = api.params['template-name'] var kube = new KubeClient()B self.registry.fetchTemplate(template, function (err, template) {( if (err) return api._registryError()* kube.nodes.get(function (err, nodes) {+ if (err) return api._badKubeRequest()/ async.each(nodes, function (node, next) {# var app = new App(template)% app.node = node.metadata.name! app.pullPolicy = 'Always'= // the app can be culled immediately after deployment app.cullTimeout = 1X self.logger.info('preloading {0} onto {1}'.format(template, node.metadata.name))! app.save(function (err) { return next(err) }) }, function (err) {* if (err) return api._badDatabase() return api._success({ template: template }) }) }) })}module.exports = ClusterManager5�_ÐHJI%ÿÿÿÿVÞ´l)õ$&” template: match.name,5�_ÐIKJ€ÿÿÿÿVÞ´«*õ€‚• õ€‚”5�_ÐJLKlÿÿÿÿVÞµõkm• template: app.template,5�_ÐKMLlÿÿÿÿVÞµ õkm• template: app.tem,5�_ÐLNMlÿÿÿÿVÞµ õkm• 'template: app.tem,5�_ÐMONlÿÿÿÿVÞµ+õkm• 'template': app.tem,5�_ÐNPOlÿÿÿÿll(v(VÞµ°,õkm•) 'template': app['template-name'],5�_ÐOQPl$ÿÿÿÿll(v(VÞµ´-õkm•$ 'template': app.templateName5�_ÐPSQlÿÿÿÿll(v(VÞ¶/õkm•% 'template': app.templateName,5�_ÐQTRSlÿÿÿÿll(v(VÞ¶Öõkm•* 'template-name': app.templateName,5�_ÐSUTlÿÿÿÿll(v(VÞ¶×õkm•) 'template-name': apptemplateName,5�_ÐTVUl%ÿÿÿÿll(v(VÞ¶Û0õkm•* 'template-name': app['emplateName,5�_ÐUWV% ÿÿÿÿll(v(VÞ·Eõ$&•# template: match.template,5�_ÐVXW%ÿÿÿÿll(v(VÞ·Gõ$&•$ 'template: match.template,5�_ÐWYX%!ÿÿÿÿll(v(VÞ·Iõ$&•* 'template-name': match.template,5�_ÐXZY% ÿÿÿÿll(v(VÞ·Jõ$&•) 'template-name': match.emplate,5�_ÐY[Z% ÿÿÿÿll(v(VÞ·Jõ$&•( 'template-name': matchemplate,5�_ÐZ\[%"ÿÿÿÿll(v(VÞ·Mõ$&•2 'template-name': match['templae-emplate,5�_Ð[]\%+ÿÿÿÿll(v(VÞ·Põ$&•3 'template-name': match['template-emplate,5�_Ð\^]%0ÿÿÿÿll(v(VÞ·Q1õ$&•1 'template-name': match['template-name',5�_Ð]_^% ÿÿÿÿ% %!v!VÞ·æõ$&•2 'template-name': match['template-name'],5�_Ð^`_% ÿÿÿÿ% %!v!VÞ·çõ$&•1 'template-name': match'template-name'],5�_Ð_a`%!ÿÿÿÿ%!%0v0VÞ·éõ$&•2 'template-name': match.'template-name'],5�_Ð`balÿÿÿÿ%!%0v0VÞ·öõkm•. 'template-name': app['template-name'],5�_Ðacblÿÿÿÿ%!%0v0VÞ·öõkm•- 'template-name': app'template-name'],5�_Ðbdclÿÿÿÿ%!%0v0VÞ·÷õkm•, 'template-name': apptemplate-name'],5�_Ðcedlÿÿÿÿll+v+VÞ·ù2õkm•- 'template-name': app.template-name'],5�_Ðdfe ÿÿÿÿll+v+VÞ¸²3õ•. App.find(template, function (err, matches) {5�_ÐegfÿÿÿÿVðò»õ— tõ– õ•5�_ÐfhgÿÿÿÿVðò¼õ thi5�_ÐgihÿÿÿÿVðò½õ5�_ÐhjiÿÿÿÿVðò¾4õ– õ•5�_Ðikj ÿÿÿÿVðòÑõ ™ }õ ˜võ —õ –5�_Ðjlk ÿÿÿÿVðòÖõ › sõ š õ ™5�_Ðkml ÿÿÿÿVðòçõ › 'start-time': Date5�_Ðlnm ÿÿÿÿVðòê5õ › 'start-time': { type: Date5�_Ðmon ÿÿÿÿVðó7õ› this.preloaded = this.db.model5�_Ðnpo�ÿÿÿÿVðóõ�ƒœ õ�ƒ›5�_Ðoqp�ÿÿÿÿVðóGõ�ƒ� õ�ƒœ5�_ÐprqƒÿÿÿÿVðóKõ‚„� this.preloaded.5�_ÐqsrƒÿÿÿÿVðóKõƒ…ž õƒ…�5�_Ðrts„ÿÿÿÿVðóQõ„†Ÿ õ„†ž5�_Ðsut† ÿÿÿÿ† œv Vðó^õ…�ŸB self.registry.fetchTemplate(template, function (err, template) {( if (err) return api._registryError()* kube.nodes.get(function (err, nodes) {+ if (err) return api._badKubeRequest()/ async.each(nodes, function (node, next) {1 template['template-name'] = template.name# var app = new App(template)% app.node = node.metadata.name! app.pullPolicy = 'Always'= // the app can be culled immediately after deployment app.cullTimeout = 1X self.logger.info('preloading {0} onto {1}'.format(template, node.metadata.name))! app.save(function (err) { return next(err) }) }, function (err) {* if (err) return api._badDatabase() return api._success({ template: template }) }) }) })5�_Ðtvuœÿÿÿÿ† œv Vðó`8õœž  õœžŸ5�_Ðuwvƒÿÿÿÿ† œv Vðó‡õ‚„  this.preloaded.5�_Ðvxw�ÿÿÿÿ† œv Vðó®9õ�ƒ¡ õ�ƒ 5�_Ðwyx„#ÿÿÿÿ‡ �v Vðóºõƒ…¡# this.preloaded.findOneAndUpdate5�_Ðxzy„ÿÿÿÿ‡ �v VðóÏ:õƒ…¡S this.preloaded.findOneAndUpdate({ name: template }, updateOpts, function (err, 5�_Ðy{z„Gÿÿÿÿ‡ �v VðóÓõƒ…¡I this.preloaded.update({ name: template }, updateOpts, function (err, 5�_Ðz|{„Gÿÿÿÿ‡ �v VðóÔõƒ…¡H this.preloaded.update({ name: template }, updateOpts, function (err 5�_Ð{}|„Gÿÿÿÿ‡ �v VðóÕõ„†¢ }õƒ†¡G this.preloaded.update({ name: template }, updateOpts, function (err5�_Ð|~}„ÿÿÿÿˆ žv VðóÖ;õ„†£ õ„†¢5�_Ð}~‡ÿÿÿÿ‰ Ÿv VðóÛõˆŠ¥ }õ‡Š¤ õ‡‰£5�_Ð~€ 1ÿÿÿÿ‹ ¡v Vðóò<õ ¦ ;õ ¥1 'start-time': { type: Date, default: Date.now }5�_Ð�€…*ÿÿÿÿŒ ¢v Vðô=õ„†¦J this.preloaded.update({ name: template }, updateOpts, function (err) {5�_Ѐ‚�‰ÿÿÿÿŒ ¢v Vðô õ‰‹§ õ‰‹¦5�_Ð�ƒ‚Šÿÿÿÿ� £v Vðô õ‰Š this5�_Ђ„ƒ‰ÿÿÿÿ…‡vÿÿÿVðôõ‰‹¦5�_Ѓ…„Šÿÿÿÿ…‡vÿÿÿVðôõ‰Ž§õŠ‹§5�_Є†…�ÿÿÿÿ…‡vÿÿÿVðôõŒ�5�_Ð…‡†Š5ÿÿÿÿ…‡vÿÿÿVðô>õ‰‹©] this.preloaded.update({ name: template, status: 'loading' }, updateOpts, function (err) {5�_Іˆ‡¦ÿÿÿÿ…‡vÿÿÿVðôõ¨ª¬ }õ§ª« ]õ¦©ª õ¦¨©5�_Ї‰ˆ¨ÿÿÿÿ…‡vÿÿÿVðô$õ¨ª­ õ¨ª¬5�_ÐˆŠ‰© ÿÿÿÿ© ©vVðô‰õ¨ª­ if (err) return api._badKube5�_Љ‹Š© ÿÿÿÿ© © ©vVðô�?õ¨ª­ if (err) 5�_ЊŒ‹©"ÿÿÿÿ© © ©vVðô“õª¬¯ }õ©¬® õ©«­5�_Ћ�Œªÿÿÿÿ© © ©vVðô›@õª¬° õª¬¯5�_ÐŒŽ�© ÿÿÿÿ© © ©vVðôËAõ¨ª°# if (err) self.logger.error(err)5�_Ð��Žªÿÿÿÿ© © ©vVðôÐBõ©«° api._success({5�_ÐŽ��§ ÿÿÿÿ© © ©vVðôÕCõ©«³ põ¨«² põ§ª± õ§©°5�_Ð�‘��ÿÿÿÿ¬ ��vVðôçõ�‘³* if (err) return api._registryError()5�_Ð�’‘�ÿÿÿÿ¬ ��vVðôéõ�’³$ if (err) {api._registryError()5�_Б“’‘ÿÿÿÿ­ ��vVðôêõ‘“µ õ‘“´5�_Ð’”“‘ÿÿÿÿ® ��vVðôëDõ‘“¶ õ‘“µ5�_Г•”•ÿÿÿÿ¯ ••vVðôùõ”–¶- if (err) return api._badKubeRequest()5�_Д–••ÿÿÿÿ¯ ••vVðôúõ”—¶% if (err)api._badKubeRequest()5�_Е—–– ÿÿÿÿ° ••vVðôûõ–˜¸ õ–˜·5�_Ж˜—–ÿÿÿÿ± ••vVðôýFõ–˜¹ õ–˜¸5�_З™˜¥ÿÿÿÿ² ••vVðõõ¤§¹, if (err) return api._badDatabase()5�_Ð˜š™¦ ÿÿÿÿ³ ¦ ¦vVðõõ¥§º% return api._badDatabase()5�_Й›š¦ ÿÿÿÿ³ ¦ ¦vVðõõ¥§º api._badDatabase()5�_Кœ›¦ ÿÿÿÿ³ ¦ ¦vVðõõ¥§º pi._badDatabase()5�_Л�œ¦ ÿÿÿÿ³ ¦ ¦vVðõõ¦¨» õ¦¨º5�_Мž�¦ ÿÿÿÿ´ ¦ ¦vVðõ õ¦¨¼ õ¦¨»5�_Ð�Ÿž¨ ÿÿÿÿµ ¦ ¦vVðõ)õ¨ª½ õ¨ª¼5�_О Ÿª ÿÿÿÿ¶ ¦ ¦vVðõ,õ©ª return api._success({5�_П¡ ª ÿÿÿÿµ ¦ ¦vVðõ,õ©ª template: template5�_Р¢¡ª ÿÿÿÿ´ ¦ ¦vVðõ,Hõ©ª })5�_С£¢¸ÿÿÿÿ³ ¦ ¦vVðõ9õ¹½¼/õ¸»»õ¸ºº5�_Т¤£»ÿÿÿÿ³ ¦ ¦vVðõ<õº¼¾ *5�_У¥¤¼ÿÿÿÿ³ ¦ ¦vVðõ@õ»¾¿ */õ¼¾¿õ¼¾¾5�_Ф¦¥¼ÿÿÿÿ³ ¦ ¦vVðõKõ½¿Á }õ¼¿Àõ¼¾¿5�_Ð¥§¦½ÿÿÿÿ³ ¦ ¦vVðõVõ½¿Á5�_Ц¨§…ÿÿÿÿ³ ¦ ¦vVðõcõ„†Â] this.preloaded.update({ name: template, status: 'loading' }, updateOpts, function (err) {5�_Ч©¨Šÿÿÿÿ³ ¦ ¦vVðõeIõ‰‹Â_ this.preloaded.update({ name: template, status: 'completed' }, updateOpts, function (err) {5�_Шª©¾ÿÿÿÿ³ ¦ ¦vVðõmõ¾Àà sõ½ÀÂ5�_Щ«ª¾ÿÿÿÿ³ ¦ ¦vVðõzJõ¾ÀÄ õ¾ÀÃ5�_Ъ¬«Àÿÿÿÿ³ ¦ ¦vVðõ†õÀÂÅ }õ¿ÂÄ self.preloaded.find5�_Ы­¬Àÿÿÿÿ³ ¦ ¦vVðõ�KõÀÂÆ õÀÂÅ5�_Ь®­Á%ÿÿÿÿ³ ¦ ¦vVðõ—õÁÃÆ5�_Э¯®À8ÿÿÿÿ³ ¦ ¦vVðõ›Lõ¿ÁÇ? self.preloaded.findOne({ name: name }, function (err, name) {5�_Ю°¯Âÿÿÿÿ³ ¦ ¦vVðõŸõÂÄÈ }õÁÄÇ5�_Я±°Âÿÿÿÿ³ ¦ ¦vVðõ£õÂÄÈ5�_а²±Ãÿÿÿÿ³ ¦ ¦vVðõ©õÂÃ5�_б³²Ãÿÿÿÿ³ ¦ ¦vVðõ«MõÁÃÇ return api._success()õÁÃÈ return api._success({)õÂÄÈ })5�_в´³Æÿÿÿÿ³ ¦ ¦vVðõ°NõÅÆ5�_гµ´ÂÿÿÿÿVñ FõÂÄÇ })õÁÄÆ return api._success(status)5�_д¶µÂÿÿÿÿVñ RPõÂÄÈ õÂÄÇ5�_е·¶ÃÿÿÿÿVñ YQõÂÄÈ template: template5�_ж¸·ƒ*ÿÿÿÿVñ ­õƒ…É õƒ…È5�_з¹¸„ÿÿÿÿVñ ²õƒ„ var 5�_иº¹„ ÿÿÿÿVñ ³õ„†É õ„†È5�_й»º†*ÿÿÿÿ†*†=v=Vñ Âõ…‡É] self.preloaded.update({ name: template, status: 'loading' }, updateOpts, function (err) {5�_к¼»†*ÿÿÿÿ†*†=v=Vñ Ãõ…‡ÉI self.preloaded.update({ name: template}, updateOpts, function (err) {5�_л½¼†-ÿÿÿÿ†*†=v=Vñ ÄRõ…‡ÉJ self.preloaded.update({ name: template }, updateOpts, function (err) {5�_м¾½Šÿÿÿÿ†*†=v=Vñ ÈõŠŒÊ õŠŒÉ5�_н¿¾Œ*ÿÿÿÿŒŒ"v"Vñ Ôõ‹�Ê_ self.preloaded.update({ name: template, status: 'completed' }, updateOpts, function (err) {5�_оÀ¿Œ.ÿÿÿÿŒ.ŒBvBVñ ØTõ‹�Êa self.preloaded.update({ name: template }, status: 'completed' }, updateOpts, function (err) {5�_пÁÀÄÿÿÿÿŒ.ŒBvBVñ $õÃÅÊ return api._success({ 5�_ÐÀÂÁÄÿÿÿÿŒ.ŒBvBVñ &õÃÅÊ! return api._success(status { 5�_ÐÁÃÂÄ ÿÿÿÿŒ.ŒBvBVñ 'õÃÅÊ" return api._success(status) { 5�_ÐÂÄÃÅÿÿÿÿŒ.ŒBvBVñ ,õÄÅ template: status5�_ÐÃÅÄÅÿÿÿÿŒ.ŒBvBVñ .õÄÆÉ })5�_ÐÄÆÅÅÿÿÿÿŒ.ŒBvBVñ /VõÄÅ )5�_ÐÅÇÆÃÿÿÿÿŒ.ŒBvBVñ fWõÃÅÉ õÃÅÈ5�_ÐÆÈÇÿÿÿÿWÃfõ É'var KubeClient = require('kube-stream')5�_ÐÇÉÈÿÿÿÿ$v$WÃjõ É'var kubeClient = require('kube-stream')5�_ÐÈÊÉ(ÿÿÿÿ*(v(WÃnõÉ-var RegistryClient = require('./registry.js')5�_ÐÉËÊÿÿÿÿ vWÃpYõÉ#var App = require('./state/app.js')5�_ÐÊÌË‚ ÿÿÿÿ‚ ‚vWÃx[õ�ƒÉ var kube = new KubeClient()5�_ÐËÍ̱ÿÿÿÿW/Ù\õ°²É pre, 5�_ÐÌÎÍ#ÿÿÿÿWc›Xõ"#Q this.logger.info('getting all applications for template: {0}'.format(template))5�_ÐÍÏÎ'ÿÿÿÿWc›[]õ&'] self.logger.info('successfully got all applications for template {0}'.format(template))5�_ÐÎÐÏhÿÿÿÿWc›eõgh[ self.logger.info('getting application with template {0} and id {1}'.format(template, id))5�_ÐÏÑÐmÿÿÿÿWc›f^õlm] self.logger.info('found application with template {0} and id {1}'.format(template, id))5�_ÐÐÒÑÁ ÿÿÿÿWh0ñõÀÂÅ! return api._success(status) 5�_ÐÑÓÒÁÿÿÿÿWh0ñ_õÀÂÅ return api._success(status) 5�_ÐÒÔÓ± ÿÿÿÿ± ±vWu=5õ°²Å* if (err) return self.logger.error(err)5�_ÐÓÕÔ± ÿÿÿÿ± ±vWu=6õ°³Å# if (err) self.logger.error(err)5�_ÐÔÖÕ²ÿÿÿÿ± ±vWu=7`õ²´Ç õ²´Æ5�_ÐÕ×Ö²ÿÿÿÿ± ±vWu=9cõ²´È õ²´Ç5�_Ð֨׳!ÿÿÿÿ³#³!v!Wu=�hõ²´È% return api._unknownFailure(err)5�_Ð×ÙØkÿÿÿÿ³#³!v!Wu>(iõjlÈ return api.doesNotExist()5�_ÐØÚÙkÿÿÿÿ³#³!v!Wu>XkõjlÈ return api._doesNotExist()5�_ÐÙÛÚ9ÿÿÿÿW�æìlõ9;É õ9;È5�_ÐÚÛUÿÿÿÿW�æønõUWÊ õUWÉ5�_ÐQSRlÿÿÿÿll(v(VÞ¶Õõkm•) 'template-name': apptemplateName,5�_Ð,.-ƒ@ÿÿÿÿƒ@ƒRvÿÿÿVÑk{õ‚…�_ if (err) return next(new Error('could not save app')) return api._success({5�çª