
# 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'
