
# Files View Install

Instantiate a Files view. For now it does only create a single instance of the file view for current cluster.
It uses the Apache Ambari REST Api.

    module.exports =  header: 'Ambari Views', handler: ({options})->
        url = ''
        protocol = if options.config['api.ssl'] is 'true' then 'https' else 'http'
        port = if protocol is 'https' then options.config['client.api.ssl.port'] else options.config['client.api.port']
        url = "#{protocol}://#{options.fqdn}:#{port}"

## Create the FILES View

        @system.execute
          header: 'FILES View'
          if: options.views.files.enabled
          cmd: """
            curl --fail --insecure --user admin:#{options.admin_password} -i -H 'X-Requested-By: ambari' -X POST \
            \"#{url}/api/v1/views/FILES/versions/#{options.views.files.version}/instances/RYBA_FILES_VIEW\" \
            --data '#{JSON.stringify ViewInstanceInfo:options.views.files.configuration}'
            """
          unless_exec: """
            curl --fail --insecure --user admin:#{options.admin_password} -i -H 'X-Requested-By: ambari' -X GET \
            \"#{url}/api/v1/views/FILES/versions/#{options.views.files.version}/instances/RYBA_FILES_VIEW\"
            """

## Create the HIVE View

        @system.execute
          header: 'HIVE View'
          if: options.views.hive.enabled
          cmd: """
            curl --fail --insecure --user admin:#{options.admin_password} -i -H 'X-Requested-By: ambari' -X POST \
            \"#{url}/api/v1/views/HIVE/versions/#{options.views.hive.version}/instances/RYBA_HIVE_VIEW\" \
            --data '#{JSON.stringify ViewInstanceInfo:options.views.hive.configuration}'
            """
          unless_exec: """
            curl --fail --insecure --user admin:#{options.admin_password} -i -H 'X-Requested-By: ambari' -X GET \
            \"#{url}/api/v1/views/HIVE/versions/#{options.views.hive.version}/instances/RYBA_HIVE_VIEW\"
            """
          # refers to hortonworks knowledge Base
          # when trying to instantiate a hive view. Some table might bemissing in ambari's database
          # its du to the fact that the page size for a row is to high (physical limit)
          # the table must be created with TEST attribute instead of varying character (2800)
          # @system.execute
          #   header: "Fix Ambari Database"
          #   unless_exec: db.cmd options.db, "select * from DS_JOBIMPL_1 limit 1"
          #   cmd: db.cmd options.db, """
                # CREATE TABLE DS_JOBIMPL_154 (
                #   ds_id TEXT NOT NULL,
                #   ds_applicationid TEXT,
                #   ds_conffile TEXT,
                #   ds_dagid TEXT,
                #   ds_dagname TEXT,
                #   ds_database TEXT,
                #   ds_datesubmitted bigint,
                #   ds_duration bigint,
                #   ds_forcedcontent TEXT,
                #   ds_globalsettings TEXT,
                #   ds_logfile TEXT,
                #   ds_owner TEXT,
                #   ds_queryfile TEXT,
                #   ds_queryid TEXT,
                #   ds_referrer TEXT,
                #   ds_sessiontag TEXT,
                #   ds_sqlstate TEXT,
                #   ds_status TEXT,
                #   ds_statusdir TEXT,
                #   ds_statusmessage TEXT,
                #   ds_title TEXT
                # );
          #   """

## Create the TEZ View  

        @system.execute
          header: 'TEZ View'
          if: options.views.tez.enabled
          cmd: """
            curl --fail --insecure --user admin:#{options.admin_password} -i -H 'X-Requested-By: ambari' -X POST \
            \"#{url}/api/v1/views/TEZ/versions/#{options.views.tez.version}/instances/RYBA_TEZ_VIEW\" \
            --data '#{JSON.stringify ViewInstanceInfo:options.views.tez.configuration}'
            """
          unless_exec: """
            curl --fail --insecure --user admin:#{options.admin_password} -i -H 'X-Requested-By: ambari' -X GET \
            \"#{url}/api/v1/views/TEZ/versions/#{options.views.tez.version}/instances/RYBA_TEZ_VIEW\"
            """

## Create the Workflow Manager (Oozie) View

        @system.execute
          header: 'Workflow Manager View'
          if: options.views.wfmanager.enabled
          cmd: """
            curl --fail --insecure --user admin:#{options.admin_password} -i -H 'X-Requested-By: ambari' -X POST \
            \"#{url}/api/v1/views/WORKFLOW_MANAGER/versions/#{options.views.wfmanager.version}/instances/RYBA_OOZIE_VIEW\" \
            --data '#{JSON.stringify ViewInstanceInfo:options.views.wfmanager.configuration}'
            """
          unless_exec: """
            curl --fail --insecure --user admin:#{options.admin_password} -i -H 'X-Requested-By: ambari' -X GET \
            \"#{url}/api/v1/views/WORKFLOW_MANAGER/versions/#{options.views.wfmanager.version}/instances/RYBA_OOZIE_VIEW\"
            """
