Menu

Atlas Solr Collection Bootstrap

module.exports = headler: 'SolrCloud Ranger Layout', handler: ({options}) ->
  # migration: lucasbak 02112017
  # use this bootstrap scripts for every type
  return unless options.solr_type is 'external'
  protocol = if options.solr.cluster_config.ssl_enabled then 'https' else 'http'

Wait

  @connection.wait options.wait_solr

Collection Layout

  @file.download
    source: "#{__dirname}/../resources/solr/managed-schema"
    target: "#{options.solr.cluster_config.ranger_collection_dir}/managed-schema"
  @file.render
    source: "#{__dirname}/../resources/solr/solrconfig.xml.j2"
    target: "#{options.solr.cluster_config.ranger_collection_dir}/solrconfig.xml"
    local: true
    context: retention_period: options.audit_retention_period
  @file.download
    source: "#{__dirname}/../resources/solr/elevate.xml"
    target: "#{options.solr.cluster_config.ranger_collection_dir}/elevate.xml"
  @file.download
    source: "#{__dirname}/../resources/solr/elevate.xml"
    target: "#{options.solr.cluster_config.ranger_collection_dir}/elevate.xml"

Create Atlas Collection in Solr

  @call
    header: "Create ranger_audits collection"
    unless_exec: mkcmd.solr options.solr.cluster_config, """
      curl --fail --negotiate -k -u : \
      "#{protocol}://#{options.solr.cluster_config['master']}:#{options.solr.cluster_config['port']}/solr/admin/collections?action=LIST" | grep ranger_audits
    """
  , ->
    @system.execute
      cmd: mkcmd.solr options.solr.cluster_config, """
      #{options.solr_client_source}/server/scripts/cloud-scripts/zkcli.sh  \
      -zkhost #{options.solr.cluster_config.zk_connect} \
      -cmd upconfig \
      -confdir #{options.solr.cluster_config.ranger_collection_dir} \
      -confname ranger_audits
    """
    @system.execute
      cmd: mkcmd.solr options.solr.cluster_config, """
        curl --fail --negotiate -k -u : "#{protocol}://#{options.solr.cluster_config['master']}:#{options.solr.cluster_config['port']}/solr/#{getPath(options.solr.cluster_config.collection)}"
      """
    #equivalent to
    #curl  --negotiate -k -u : "http://docker01.metal.ryba8983/solr/admin/collections?action=CREATE&name=ranger_audits&numShards=3&replicationFactor=2&collection.configName=ranger_audits&maxShardsPerNode=2"

Zookeeper Znode ACL

  @system.execute
    header: 'Zookeeper SolrCloud Znode ACL'
    unless_exec: mkcmd.solr options.solr.cluster_config, """
    zookeeper-client -server #{options.solr.cluster_config.zk_connect} \
      getAcl #{options.solr.cluster_config.zk_node} | grep \"'sasl,'#{options.solr.cluster_config.user}\"
    """
    cmd: mkcmd.solr options.solr.cluster_config, """
    zookeeper-client -server #{options.solr.cluster_config.zk_connect} \
      setAcl #{options.solr.cluster_config.zk_node} sasl:#{options.solr.cluster_config.user}:cdrwa
    """

getPath = (opts) ->
  path = "admin/collections?action=CREATE"
  path += "&#{param}=#{opts[param]}" for param in [
    'name'
    'numShards'
    'replicationFactor'
    'collection.configName'
    'maxShardsPerNode'
    # 'createNodeSet'
  ]
  return path

Dependencies

mkcmd = require '../../lib/mkcmd'