| } | } | ||||
| var acquireConfig = function(slections){ | var acquireConfig = function(slections){ | ||||
| var configPriority = [ 'clusterNodeInstance', 'ownerInstnace', 'commonInstance', 'genericChessInstance' ] | |||||
| var configPriority = [ 'clusterNodeInstance', 'ownerInstnace', 'commonInstance' /*, 'genericChessInstance'*/ ] | |||||
| return any(configPriority.map(cfg => { return function() { return configs[cfg](slections) } } ), true, true) | return any(configPriority.map(cfg => { return function() { return configs[cfg](slections) } } ), true, true) | ||||
| } | } | ||||
| return cli.prompt( choices | return cli.prompt( choices | ||||
| , 'Config for instance not found. Would you like to ', 'e' ).then(propValue => { | , 'Config for instance not found. Would you like to ', 'e' ).then(propValue => { | ||||
| if(propValue === 't') return createInstance() | |||||
| if(propValue === 't') { | |||||
| selectedinstance.local = true; return createInstance(selectedinstance) | |||||
| } | |||||
| if(propValue === 'i') return eNotImplemented() | if(propValue === 'i') return eNotImplemented() | ||||
| if(propValue === 'f') return eNotImplemented() | if(propValue === 'f') return eNotImplemented() | ||||
| if(propValue === 'o') return eNotImplemented() | if(propValue === 'o') return eNotImplemented() | ||||
| return GIT | return GIT | ||||
| })(); | })(); | ||||
| function createInstance(selectedinstance) { | |||||
| function createInstance(target, source) { | |||||
| console.dir(selectedinstance) | |||||
| if(selectedinstance.local) { | |||||
| selectedinstance | |||||
| var args = { | |||||
| remotebase : selectedinstance.reposerver + '/chess/' | |||||
| , sourcerepo : 'chess-config' | |||||
| , targetrepo : `${selectedinstance.instanceName}-config-${selectedinstance.instanceType}` | |||||
| } | |||||
| var sourceinstance = source || target; | |||||
| console.dir(sourceinstance) | |||||
| var args = { | |||||
| remotebase : sourceinstance.reposerver + '/chess/' | |||||
| , sourcerepo : sourceinstance.repo || 'chess-config' | |||||
| , targetrepo : `${target.instanceName}-config-${target.instanceType}${target.nodeName ? ('-' + target.nodeName) : ''}` | |||||
| } | |||||
| if(sourceinstance.local) { | |||||
| var options = { | |||||
| inherit: true, shell: true, | |||||
| env: process.env | |||||
| , cwd : instanceroot | |||||
| , runas: processedArgs.runas | |||||
| } | |||||
| cmdseq = ['git', ['clone', `${args.remotebase}${args.sourcerepo}`, `${args.targetrepo}`], options] | cmdseq = ['git', ['clone', `${args.remotebase}${args.sourcerepo}`, `${args.targetrepo}`], options] | ||||
| return any(cmdseq.map(getshelltask)).then(() => { | return any(cmdseq.map(getshelltask)).then(() => { | ||||
| else { | else { | ||||
| // http://try.gitea.io/api/v1/org/{org}/repos | // http://try.gitea.io/api/v1/org/{org}/repos | ||||
| var server = new URL(selectedinstance.reposerver); | |||||
| if(source.reposerver !== target.reposerver && source.username !== target.username) { | |||||
| throw 'createInstance is possible only within the same repository server.' | |||||
| } | |||||
| var server = new URL(target.reposerver); | |||||
| return GITEA.repository.fork( { hostname : server.host, protocol : server.protocol | return GITEA.repository.fork( { hostname : server.host, protocol : server.protocol | ||||
| , username : selectedinstance.username, password : selectedinstance.password | |||||
| , username : target.username, password : target.password | |||||
| } | } | ||||
| // , { repo : `${selectedinstance.instanceName}-config-${selectedinstance.instanceType}`} | // , { repo : `${selectedinstance.instanceName}-config-${selectedinstance.instanceType}`} | ||||
| , { repo : `chess-config`, owner : 'chess' }, {}, function( repository ){ | |||||
| , { repo : `${args.sourcerepo}`, owner : `${target.username}` }, {}, function( repository ){ | |||||
| return GITEA.repository.updateattributes( { | return GITEA.repository.updateattributes( { | ||||
| hostname : server.host, protocol : server.protocol | hostname : server.host, protocol : server.protocol | ||||
| , username : selectedinstance.username, password : selectedinstance.password | |||||
| , username : target.username, password : target.password | |||||
| } | } | ||||
| , { repo : `chess-config`, owner : selectedinstance.username } | |||||
| , { name : `${selectedinstance.instanceName}-config-${selectedinstance.instanceType}${selectedinstance.nodeName ? '-' + selectedinstance.nodeName : ''}`} | |||||
| , { repo : `${args.sourcerepo}`, owner : `${target.username}` } | |||||
| , { name : `${args.targetrepo}`} | |||||
| ) | ) | ||||
| } | } | ||||
| ) | ) | ||||
| var e = { message : 'verifyAndInstall', success : true} | var e = { message : 'verifyAndInstall', success : true} | ||||
| var inittasks = [] | var inittasks = [] | ||||
| if(!detection_state.localInstanceDetected) { | if(!detection_state.localInstanceDetected) { | ||||
| inittasks.push(createInstance(selectedinstance).then(() => { preworkerconfig(); return elxrworker(true) })) | |||||
| var specifictask = ()=>{ return createInstance(selectedinstance) } | |||||
| var commantask = () => { preworkerconfig(); return elxrworker(true) } | |||||
| if(!__isElevated) { | |||||
| } | |||||
| else { | |||||
| specifictask = ()=>{ Promise.resolve(true) } | |||||
| } | |||||
| inittasks.push(specifictask().then( commantask )) | |||||
| } | } | ||||
| else { | else { | ||||
| inittasks.push(acquireConfig(selectedinstance).catch((err) => { | |||||
| var specifictask = ()=>{ return acquireConfig(selectedinstance) } | |||||
| var commantask = () => { preworkerconfig(); return elxrworker(true) } | |||||
| if(!__isElevated) { | |||||
| } | |||||
| else { | |||||
| specifictask = ()=>{ Promise.resolve(true) } | |||||
| } | |||||
| inittasks.push( specifictask().catch((err) => { | |||||
| e = err; | e = err; | ||||
| console.error('Chosen cofiguraton failed or not found. Fix config and rerun or chose another.') | console.error('Chosen cofiguraton failed or not found. Fix config and rerun or chose another.') | ||||
| console.error(err) | console.error(err) | ||||
| }).then(() => { preworkerconfig(); return elxrworker(true) }) | |||||
| }).then( commantask ) | |||||
| // .finally(()=>{ | // .finally(()=>{ | ||||
| // fs.writeFileSync('run.log', ', ' + JSON.stringify({ error: e.message }), { 'flag': 'a+' }) | // fs.writeFileSync('run.log', ', ' + JSON.stringify({ error: e.message }), { 'flag': 'a+' }) | ||||
| // if(!e.success) fs.writeFileSync('run.done', 'error'); | // if(!e.success) fs.writeFileSync('run.done', 'error'); |