UNPKG

tooltwist

Version:
283 lines (245 loc) 10.6 kB
/** * Plugin to create a Docker container */ var fs = null, Log = null, Gradle = null, mkdirp = require('mkdirp'), exec = require('child_process').exec, Config = null, Templates = null; /** * Set up the plugin */ exports.init = function(appDir) { // console.log('plugins.docker.init()') // Run requires, based on main app directory (i.e. not relative to the plugin) Log = require(appDir + '/log'); Config = require(appDir + '/config'); Templates = require(appDir + '/templates'); Gradle = require(appDir + '../../lib/gradle'); fs = require('fs'); //ZZZZZ Check Docker is installed } /** * Create a default config file for the Designer. */ exports.commandLineInit = function() { // console.log('plugins.docker.commandLineInit()') // Get Docker IP address from the DOCKER_HOST environment variable. var HOST = '192.168.59.103'; // default for boot2docker var dockerHost = process.env['DOCKER_HOST']; if (dockerHost) { if (dockerHost.indexOf('tcp://') != 0) { Log.error('Environment variable DOCKER_HOST should be tcp://<host>:<port>'); Log.error('Will use default host (' + HOST + ')'); } else { dockerHost = dockerHost.substring(6); var pos = dockerHost.indexOf(':'); if (pos <= 0) { Log.error('Environment variable DOCKER_HOST should be tcp://<host>:<port>'); Log.error('Will use default host (' + HOST + ')'); } else { HOST = dockerHost.substring(0, pos); Log.log('Using Docker IP address from DOCKER_HOST environment variable (' + HOST + ')'); } } } // Use the template to create the initial config file var from = __dirname + '/templates/' + "docker-tooltwist.js" Log.debug('from=' + from) var data = { MODE: 'docker', HOST: HOST }; var creatingExampleTemplate = false; Templates.copy(from, Config.CONFIG_FILE, creatingExampleTemplate, data); // Display a nice message. Log.always(); Log.always('\tSpecification file \'' + Config.CONFIG_FILE + '\' has been created with a default'); Log.always('\tconfiguration to install the demo webdesign project \'ttdemo\' into'); Log.always('\ta Docker container. Modify this file to suit your needs, then run:'); Log.always(); Log.always('\t $ tooltwist docker') Log.always(); Log.always('\tFor debugging purposes you can also run:') Log.always(); Log.always('\t $ tooltwist designer') Log.always(); // Create example templates var code = exec('tooltwist example-templates', function(error, stdout, stderr) { Log.always(stdout); Log.always(stderr); if (error) { Log.error('error while creating templates: ', error) } process.exit(1); }); // All done process.exit(0) } exports.beforePhase1 = function() { // console.log('plugins.docker.beforePhase1()') var config = Config.getConfig(); // DESIGNER MODE Config.REPO = config['designer'].repo; //ZZZ check is set Config.BRANCH = config['designer'].branch; // ZZZ check works if undefined Config.USE_PHASE2 = true; } /** * This function is called as soon as PHASE1 detects that Tomcat is running. */ exports.tomcatRunning = function() { // console.log('\nplugins.docker.tomcatRunning()') // Display a nice message for Designer users. //Log.log(); // Log.log(' (Server can be stopped with Control-C)'); // Log.log(); Log.log(); Log.log(); Log.log('\t\t THE SERVER IS NOW RUNNING.') Log.log(); Log.log('\t\t http://localhost:' + Config.HTTP_PORT + '/ttsvr/login'); Log.log(); Log.log(); // Log.log(); //Log.log(' Default log file is ' + Config.HIDDEN_DIR + '/tooltwist.log') } /** * This function is called after generating the default build files from * templates, but before starting Phase 2. Note that phase 2 occurs WITHIN * phase 1, so afterPhase1() has not been called yet. */ exports.beforePhase2 = function() { // console.log("plugins.docker.beforePhase2"); // Set a few extra variables var config = Config.getConfig(); config.CONTAINER_HTTP_PORT = 6080; config.DOCKER_HOST = '192.168.59.103'; // Default for boot2docker (I think) if ( !config['deploy']) { Log.error() Log.error('Error: ' + Config.CONFIG_FILE + ' does not have config.deploy section.'); Log.error() process.exit(1) } if (config['deploy'].servers.length < 1) { Log.error() Log.error('Error: ' + Config.CONFIG_FILE + ' does not have config.deploy.servers array.'); Log.error() process.exit(1) } // if ( !config['deploy'].servers[0].host) { // Log.error() // Log.error('Error: ' + Config.CONFIG_FILE + ' does not define config.deploy.servers[0].host'); // Log.error() // process.exit(1) // } if ( !config['deploy'].servers[0].id) { Log.error() Log.error('Error: ' + Config.CONFIG_FILE + ' does not define config.deploy.servers[0].id'); Log.error() process.exit(1) } // if ( !config['deploy'].servers[0].sshPort) { // Log.error() // Log.error('Error: ' + Config.CONFIG_FILE + ' does not define config.deploy.servers[0].sshPort'); // Log.error() // process.exit(1) // } // if ( !config['deploy'].servers[0].serverHome) { // Log.error() // Log.error('Error: ' + Config.CONFIG_FILE + ' does not define config.deploy.servers[0].serverHome'); // Log.error() // process.exit(1) // } // if ( !config['deploy'].servers[0].fipPort) { // Log.error() // Log.error('Error: ' + Config.CONFIG_FILE + ' does not define config.deploy.servers[0].fipPort'); // Log.error() // process.exit(1) // } // if ( !config['deploy'].servers[0].httpPort) { // Log.error() // Log.error('Error: ' + Config.CONFIG_FILE + ' does not define config.deploy.servers[0].httpPort'); // Log.error() // process.exit(1) // } config.DOCKER_HOST = config['deploy'].servers[0].host; config.CONTAINER_NAME = config['deploy'].servers[0].id; config.CONTAINER_HTTP_PORT = config['deploy'].servers[0].httpPort; //config.SERVER_HOME = config['deploy'].servers[0].serverHome; Log.info('DOCKER_HOST=' + config.DOCKER_HOST); Log.info('CONTAINER_NAME=' + config.CONTAINER_NAME); // Log.info('SERVER_HOME=' + config.SERVER_HOME); // Log.info('CONTAINER_HTTP_PORT=' + config.CONTAINER_HTTP_PORT); /* * Generate files for PHASE2 (Grunt), Docker, and installing. */ var templateDir = __dirname + '/templates'; // PHASE2 (generate, build docker, install, etc) mkdirp.sync(Config.HIDDEN_DIR + '/PHASE2'); Templates.copyTemplate(templateDir, 'docker-PHASE2-DOIT', 'PHASE2/DOIT', Config.getConfig()) fs.chmodSync(Config.HIDDEN_DIR+'/PHASE2/DOIT', '744'); Templates.copyTemplate(templateDir, 'docker-PHASE2-package.json', 'PHASE2/package.json', Config.getConfig()) Templates.copyTemplate(templateDir, 'docker-PHASE2-Gruntfile.js', 'PHASE2/Gruntfile.js', Config.getConfig()) // Create production config files var outputsDir = Config.HIDDEN_DIR + '/outputs'; var creatingExamples = false; Templates.copyTemplateDirectory(templateDir, 'production', 'docker-production-', creatingExamples, outputsDir, Config.getConfig()); // Docker stuff mkdirp.sync(Config.HIDDEN_DIR + '/do_docker'); Templates.copyTemplate(templateDir, 'docker-docker-Dockerfile', 'do_docker/Dockerfile', Config.getConfig()) Templates.copyTemplate(templateDir, 'docker-docker-build.sh', 'do_docker/build.sh', Config.getConfig()) fs.chmodSync(Config.HIDDEN_DIR+'/do_docker/build.sh', '744'); Templates.copyTemplate(templateDir, 'docker-docker-run.sh', 'do_docker/run.sh', Config.getConfig()) fs.chmodSync(Config.HIDDEN_DIR+'/do_docker/run.sh', '744'); Templates.copyTemplate(templateDir, 'docker-docker-stop.sh', 'do_docker/stop.sh', Config.getConfig()) fs.chmodSync(Config.HIDDEN_DIR+'/do_docker/stop.sh', '744'); Templates.copyTemplate(templateDir, 'docker-docker-commit.sh', 'do_docker/commit.sh', Config.getConfig()) fs.chmodSync(Config.HIDDEN_DIR+'/do_docker/commit.sh', '744'); Templates.copyTemplate(templateDir, 'docker-docker-publish.sh', 'do_docker/publish.sh', Config.getConfig()) fs.chmodSync(Config.HIDDEN_DIR+'/do_docker/publish.sh', '744'); Templates.copyTemplate(templateDir, 'docker-docker-login.sh', 'do_docker/login.sh', Config.getConfig()) fs.chmodSync(Config.HIDDEN_DIR+'/do_docker/login.sh', '744'); Templates.copyTemplate(templateDir, 'docker-docker-opendemo.sh', 'do_docker/opendemo.sh', Config.getConfig()) fs.chmodSync(Config.HIDDEN_DIR+'/do_docker/opendemo.sh', '744'); Templates.copyTemplate(templateDir, 'docker-docker-openroot.sh', 'do_docker/openroot.sh', Config.getConfig()) fs.chmodSync(Config.HIDDEN_DIR+'/do_docker/openroot.sh', '744'); // // Install stuff // mkdirp.sync(Config.HIDDEN_DIR + '/do_install'); // Templates.copyTemplate(templateDir, 'docker-install-DOIT', 'do_install/DOIT', Config.getConfig()) // fs.chmodSync(Config.HIDDEN_DIR+'/do_install/DOIT', '744'); // Templates.copyTemplate(templateDir, 'docker-install-pair.sh', 'do_install/pair.sh', Config.getConfig()) // fs.chmodSync(Config.HIDDEN_DIR+'/do_install/pair.sh', '744'); // Templates.copyTemplate(templateDir, 'docker-install-build.gradle', 'do_install/build.gradle', Config.getConfig()) // Templates.copyTemplate(templateDir, 'docker-install-rules', 'do_install/rules', Config.getConfig()) // // Save the configuration as JSON into the install directory, for use by InstallerUtil. // var configJson = JSON.stringify(Config.getConfig(), null, 2); // fs.writeFileSync(Config.HIDDEN_DIR + '/do_install/tooltwistJsAsJson.json', configJson) // // Create gradle wrapper files // Gradle.checkGradleWrapper(Config.HIDDEN_DIR + '/do_install'); // Ensure that required directories exist mkdirp.sync(Config.HIDDEN_DIR + '/do_generate/work'); mkdirp.sync(Config.HIDDEN_DIR + '/do_generate/logs'); mkdirp.sync(Config.HIDDEN_DIR + '/image'); mkdirp.sync(Config.HIDDEN_DIR + '/image/webdesign-projects/config'); fs.writeFileSync(Config.HIDDEN_DIR + '/image/webdesign-projects/config/_empty', '') } exports.afterPhase2 = function() { // console.log("plugins.docker.afterPhase2"); // Create Dockerfile //ZZZZ } exports.afterPhase1 = function(code) { // console.log('\nplugins.docker.afterPhase1()') } exports.createExampleTemplates = function() { // console.log('\nplugins.docker.createExampleTemplates()') var templateDir = __dirname + '/templates'; Templates.copyExampleTemplate(templateDir, 'PHASE2/'+Config.mode+'-Gruntfile.js'); Templates.copyExampleTemplate(templateDir, 'PHASE2/'+Config.mode+'-package.json'); // Templates.copyTemplate(templateDir, 'docker-PHASE2-package.json', 'PHASE2/package.json', Config.getConfig()) // Templates.copyTemplate(templateDir, 'docker-PHASE2-Gruntfile.js', 'PHASE2/Gruntfile.js', Config.getConfig()) }