UNPKG

masson

Version:

Module execution engine for cluster deployments.

130 lines (108 loc) 3.95 kB
--- title: NodeJs module: phyla/hadoop/nodejs layout: module --- # NodeJs Deploy multiple version of [NodeJs] using [N]. It depends on the "masson/core/git" and "masson/commons/users" modules. The former is used to download n and the latest is used to write a "~/.npmrc" file in the home of each users. ini = require 'ini' each = require 'each' mecano = require 'mecano' misc = require 'mecano/lib/misc' module.exports = [] module.exports.push 'masson/bootstrap/' module.exports.push 'masson/commons/git' module.exports.push 'masson/core/users' ## Configuration * `nodejs.version` (string) Any NodeJs version with the addition of "latest" and "stable", see the [N] documentation for more information, default to "stable". * `nodejs.merge` (boolean) Merge the properties defined in "nodejs.config" with the one present on the existing "~/.npmrc" file, default to true * `nodejs.config.http_proxy` (string) The HTTP proxy connection url, default to the one defined by the "masson/core/proxy" module. * `nodejs.config.https-proxy` (string) The HTTPS proxy connection url, default to the one defined by the "masson/core/proxy" module. * `nodejs.version` (string) * `nodejs.version` (string) Example: ```json { "nodejs": { "version": "stable", "config": { "registry": "http://some.aternative.registry" } } } ``` module.exports.push (ctx, next) -> require('../core/proxy').configure ctx ctx.config.nodejs ?= {} ctx.config.nodejs.version ?= 'stable' ctx.config.nodejs.merge ?= true ctx.config.nodejs.config ?= {} ctx.config.nodejs.method ?= 'binary' # one of "binary" or "n" ctx.config.nodejs.config['registry'] ?= 'http://registry.npmjs.org/' ctx.config.nodejs.config['proxy'] ?= ctx.config.proxy.http_proxy ctx.config.nodejs.config['https-proxy'] ?= ctx.config.proxy.http_proxy next() ## N Installation N is a Node.js binary management system, similar to nvm and nave. module.exports.push name: 'Node.js # N', timeout: 100000, callback: (ctx, next) -> # Accoring to current test, proxy env var arent used by ssh exec {method, http_proxy, https_proxy} = ctx.config.nodejs return next() unless method is 'n' env = {} env.http_proxy = http_proxy if http_proxy env.https_proxy = https_proxy if https_proxy ctx.execute env: env cmd: """ export http_proxy=#{http_proxy or ''} export https_proxy=#{http_proxy or ''} cd /tmp git clone https://github.com/visionmedia/n.git cd n make install """ not_if_exists: '/usr/local/bin/n' , (err, executed) -> next err, if executed then ctx.OK else ctx.PASS ## Node.js Installation Multiple installation of Node.js may coexist with N. module.exports.push name: 'Node.js # installation', timeout: -1, callback: (ctx, next) -> if method is 'n' ctx.execute cmd: "n #{ctx.config.nodejs.version}" , (err, executed) -> next err, if executed is 0 then ctx.OK else ctx.PASS else if ## NPM configuration Write the "~/.npmrc" file for each user defined by the "masson/core/users" module. module.exports.push name: 'Node.js # Npm Configuration', timeout: -1, callback: (ctx, next) -> {merge, config} = ctx.config.nodejs modified = false each(ctx.config.users) .on 'item', (user, next) -> return next() unless user.home ctx.write destination: "#{user.home}/.npmrc" content: config merge: merge uid: user.username gid: null , (err, written) -> modified = true if written next err .on 'both', (err) -> next err, if modified then ctx.OK else ctx.PASS [nodejs]: http://www.nodejs.org [n]: https://github.com/visionmedia/n