Menu

Cloudera Manager Server Prepare

Resources:

Options

  • cdh_version (string)
  • distrib (string, default "el6")
    One of "el5", "el6", "el7", "precise", "sles11", "trusty", "wheezy".
  • services (array)
    Services to download. Valid services include "cdh5", "accumulo", "sqoop-connectors"

Running

coffee -s <<COFFEE
m = require 'nikita'
m.register 'cm_prepare', 'ryba/cloudera-manager/server/prepare'
m.cm_prepare
  distrib: 'precise'
  cache_dir: './cache'
, (err, status) ->
  console.log err, status
COFFEE
module.exports = header: 'Cloudera Manager Server Prepare', handler: (options) ->
  # options.cdh_version ?= '5.7.0'
  options.distrib ?= 'el6'
  options.services ?= ['cdh5', 'accumulo', 'sqoop-connectors', 'phoenix', 'kafka']
  # options.sources['cdh4'] ?= null
  options['cdh4'] ?= version: '4.7.1.47'
  options['cdh5'] ?= version: '5.7.0'
  options['accumulo'] ?= version: '1.6.0'
  options['sqoop-connectors'] ?= version: '1.5.9'
  options['phoenix'] ?= version: '1.2.0.774', baseurl: 'http://archive.cloudera.com/cloudera-labs/phoenix/parcels/'
  options['kafka'] ?= version: '1.1.0.23', baseurl: 'http://archive.cloudera.com/cloudera-labs/kafka/parcels/'
  for service in options.services then do (service) =>
    @call
      header: "Read Manifest #{service}"
      unless: options[service].sources
      shy: true
    , (_, callback) ->
      baseurl = options[service].baseurl or "https://archive.cloudera.com/#{service}/parcels/"
      request "#{baseurl}/#{options[service].version}/manifest.json", json: true, (err, req, data) =>
        return callback err if err
        filenames = data.parcels.filter (parcel) ->
          parcel.parcelName.endsWith "#{options.distrib}.parcel"
        if filenames.length is 0
          @log message: "Invalid distribution", level: 'WARN', module: 'ryba/cloudera-manager/server/prepare'
          return callback()
        options[service].sources = []
        options[service].sources.push "#{baseurl}/#{options[service].version}/#{filename.parcelName}" for filename in filenames
        callback()
    @call
      header: "Download #{service}"
    , ->
      @file.cache (
        if: source
        source: source
        cache_dir: options.cache_dir
      ) for source in options[service].sources or []

Dependencies

request = require 'request'