Menu

Knox Client Check

Execute som curl command towards knox'server rest api.

module.exports = header: 'Knox Client Check', handler: ({options}) ->
  return unless options.test.user?.name? and options.test.user?.password?

Register

  @registry.register 'ranger_policy', 'ryba/ranger/actions/ranger_policy'

Wait

  @connection.wait options.wait_knox_server.tcp

Add Ranger Policy

Create the policy to run the checks. The policy can be accessed from the command line with:

curl --fail -k -X GET -H "Content-Type: application/json" \
-u admin:rangerAdmin123 \
"https://master03.metal.ryba:6182/service/public/v2/api/service/hadoop-ryba-knox/policy/ryba-check-edge01"
  @call
    header: 'Ranger Policy'
    if: !!options.ranger_admin
  , ->
    # Wait for Ranger admin to be started
    @call 'ryba/ranger/admin/wait', once: true, options.wait_ranger_admin
    # Prepare the list of databases
    @wait.execute
      header: 'Wait Service'
      cmd: """
      curl --fail -H \"Content-Type: application/json\" -k -X GET  \
        -u #{options.ranger_admin.username}:#{options.ranger_admin.password} \
        \"#{options.ranger_install['POLICY_MGR_URL']}/service/public/v2/api/service/name/#{options.ranger_install['REPOSITORY_NAME']}\"
      """
      code_skipped: [1, 7, 22] # 22 is for 404 not found, 7 is for not connected to host
    @ranger_policy
      header: 'Create'
      username: options.ranger_admin.username
      password: options.ranger_admin.password
      url: options.ranger_install['POLICY_MGR_URL']
      policy:
        'name': "ryba-check-knox"
        'description': 'Ryba policy used to check the knox service'
        'service': options.ranger_install['REPOSITORY_NAME']
        'isEnabled': true
        'isAuditEnabled': true
        'resources':
          'topology':
            'values': Object.keys options.topologies
            'isExcludes': false
            'isRecursive': false
          'service':
            'values': ['*']
            'isExcludes': false
            'isRecursive': false
        'policyItems': [
          'accesses': [
            'type': 'allow'
            'isAllowed': true
          ]
          'users': [options.test.user.name]
          'groups': []
          'conditions': []
          'delegateAdmin': false
        ]

Check WebHDFS Proxy

Testing WebHDFS by getting the home directory

At the gateway host, enter curl --negotiate -ku : http://$webhdfs-host:50470/webhdfs/v1?op=GETHOMEDIRECTORY. The host displays: {"Path":"/user/gopher"} At an external client, enter curl -ku user:password https://$gateway-host:$gateway_port/$gateway/$cluster_name/webhdfs/v1?op=GETHOMEDIRECTORY. The external client displays: {"Path":"/user/gopher"}

curl -fiku hdfs:hdfs123 "https://front1.ryba:8443/gateway/torval/webhdfs/v1/?op=GETHOMEDIRECTORY"

  @call header: 'WebHDFS', ->
    for gateway in options.knox_gateway
      topologies = Object.keys(gateway.topologies).filter((tp) -> gateway.topologies[tp].services.webhdfs?)
      for tp in topologies
        @system.execute
          cmd: "curl -fiku #{options.test.user.name}:#{options.test.user.password} https://#{gateway.fqdn}:#{gateway.gateway_site['gateway.port']}/#{gateway.gateway_site['gateway.path']}/#{tp}/webhdfs/v1/?op=GETHOMEDIRECTORY"

Check WebHCat Proxy

Testing WebHCat/Templeton by getting the version

At the gateway host, enter curl --negotiate -u : http://$webhcat-host:50111/templeton/v1/version. The host displays: {"supportedVersions":["v1"],"version":"v1"} At an external client, enter curl -ku user:password https://$gateway-host:$gateway_port/$gateway/$cluster_name/webhcat/v1/version. The external client displays: {"supportedVersions":["v1"],"version":"v1"}

  @call header: 'WebHCat', ->
    for gateway in options.knox_gateway
      topologies = Object.keys(gateway.topologies).filter((tp) -> gateway.topologies[tp].services.webhcat)
      for tp in topologies
        @system.execute
          cmd: "curl -fiku #{options.test.user.name}:#{options.test.user.password} https://#{gateway.fqdn}:#{gateway.gateway_site['gateway.port']}/#{gateway.gateway_site['gateway.path']}/#{tp}/templeton/v1/version"

Check HBase REST Proxy

Testing HBase/Stargate by getting the version

At the gateway host, enter curl --negotiate -u : http://$hbase-host:60080/version. The host displays: rest 0.0.2 JVM: Oracle Corporation 1.7.0_51-24.45-b08 OS: Linux 3.8.0-29-generic amd64 Server: jetty/6.1.26 Jersey: 1.8. At an external client, enter curl -ku user:password http://$gateway-host:$gateway_port/$gateway/$cluster_name/hbase/version. The external client displays: rest 0.0.2 JVM: Oracle Corporation 1.7.0_51-24.45-b08 OS: Linux 3.8.0-29-generic amd64 Server: jetty/6.1.26 Jersey: 1.8.

  @call header: 'WebHBase', ->
    for gateway in options.knox_gateway
      topologies = Object.keys(gateway.topologies).filter((tp) -> gateway.topologies[tp].services.webhcat)
      for tp in topologies
        @system.execute
          cmd: "curl -fiku #{options.test.user.name}:#{options.test.user.password} https://#{gateway.fqdn}:#{gateway.gateway_site['gateway.port']}/#{gateway.gateway_site['gateway.path']}/#{tp}/hbase/version"

Check Oozie Proxy

Testing Oozie by getting the version

At the gateway host, enter curl --negotiate -u : http://$oozie-host:11000/oozie/v1/admin/build-version. The host displays: {"buildVersion":"4.0.0.2.1.1.0-302"} At an external client, enter curl -ku user:password https://$gateway-host:$gateway_port/$gateway/$cluster_name/oozie/v1/admin/build-version. The external client displays: {"buildVersion":"4.0.0.2.1.1.0-302"}

  @call header: 'Oozie', ->
    for gateway in options.knox_gateway
      topologies = Object.keys(gateway.topologies).filter((tp) -> gateway.topologies[tp].services.oozie)
      for tp in topologies
        @system.execute
          cmd: "curl -fiku #{options.test.user.name}:#{options.test.user.password} https://#{gateway.fqdn}:#{gateway.gateway_site['gateway.port']}/#{gateway.gateway_site['gateway.path']}/#{tp}/oozie/v1/admin/build-version"

Check HiveServer2 Proxy

Testing HiveServer2 Both of the following URLs return an authentication error, which users can safely ignore.

At the gateway host, enter curl --negotiate -u : http://$hive-host:10001/cliservice. At an external client, enter curl -ku user:password https://$gateway-host:$gateway_port/$gateway/$cluster_name/hive/cliservice/

  @call header: 'HiveServer2', ->
    for gateway in options.knox_gateway
      console.log gateway.topologies['ryba_users'].services
      topologies = Object.keys(gateway.topologies).filter((tp) -> gateway.topologies[tp].services.hive)
      for tp in topologies
        @system.execute
          cmd: "curl -fiku #{options.test.user.name}:#{options.test.user.password} https://#{gateway.fqdn}:#{gateway.gateway_site['gateway.port']}/#{options.gateway_site['gateway.path']}/#{tp}/hive/cliservice"