Class: Inspec::Resources::SybaseSession
- Inherits:
-
Object
- Object
- Inspec::Resources::SybaseSession
- Defined in:
- lib/inspec/resources/sybase_session.rb
Overview
STABILITY: Experimental This resource needs further testing and refinement
Instance Attribute Summary collapse
-
#bin ⇒ Object
readonly
TODO: allow to set -I interfaces file TODO: allow to customize -s column separator.
-
#col_sep ⇒ Object
readonly
TODO: allow to set -I interfaces file TODO: allow to customize -s column separator.
-
#database ⇒ Object
readonly
TODO: allow to set -I interfaces file TODO: allow to customize -s column separator.
-
#password ⇒ Object
readonly
TODO: allow to set -I interfaces file TODO: allow to customize -s column separator.
-
#server ⇒ Object
readonly
TODO: allow to set -I interfaces file TODO: allow to customize -s column separator.
-
#sybase_home ⇒ Object
readonly
TODO: allow to set -I interfaces file TODO: allow to customize -s column separator.
-
#username ⇒ Object
readonly
TODO: allow to set -I interfaces file TODO: allow to customize -s column separator.
Instance Method Summary collapse
-
#initialize(opts = {}) ⇒ SybaseSession
constructor
A new instance of SybaseSession.
- #query(sql) ⇒ Object
- #resource_id ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(opts = {}) ⇒ SybaseSession
Returns a new instance of SybaseSession.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/inspec/resources/sybase_session.rb', line 27 def initialize(opts = {}) @username = opts[:username] @password = opts[:password] @database = opts[:database] @server = opts[:server] @sybase_home = opts[:sybase_home] || "/opt/sap" @bin = opts[:bin] || "isql" @col_sep = "|" fail_resource "Can't run Sybase checks without authentication" unless username && password fail_resource "You must provide a server name for the session" unless server fail_resource "You must provide a database name for the session" unless database fail_resource "Cannot find #{bin} CLI tool" unless inspec.command(bin).exist? end |
Instance Attribute Details
#bin ⇒ Object (readonly)
TODO: allow to set -I interfaces file TODO: allow to customize -s column separator
25 26 27 |
# File 'lib/inspec/resources/sybase_session.rb', line 25 def bin @bin end |
#col_sep ⇒ Object (readonly)
TODO: allow to set -I interfaces file TODO: allow to customize -s column separator
25 26 27 |
# File 'lib/inspec/resources/sybase_session.rb', line 25 def col_sep @col_sep end |
#database ⇒ Object (readonly)
TODO: allow to set -I interfaces file TODO: allow to customize -s column separator
25 26 27 |
# File 'lib/inspec/resources/sybase_session.rb', line 25 def database @database end |
#password ⇒ Object (readonly)
TODO: allow to set -I interfaces file TODO: allow to customize -s column separator
25 26 27 |
# File 'lib/inspec/resources/sybase_session.rb', line 25 def password @password end |
#server ⇒ Object (readonly)
TODO: allow to set -I interfaces file TODO: allow to customize -s column separator
25 26 27 |
# File 'lib/inspec/resources/sybase_session.rb', line 25 def server @server end |
#sybase_home ⇒ Object (readonly)
TODO: allow to set -I interfaces file TODO: allow to customize -s column separator
25 26 27 |
# File 'lib/inspec/resources/sybase_session.rb', line 25 def sybase_home @sybase_home end |
#username ⇒ Object (readonly)
TODO: allow to set -I interfaces file TODO: allow to customize -s column separator
25 26 27 |
# File 'lib/inspec/resources/sybase_session.rb', line 25 def username @username end |
Instance Method Details
#query(sql) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/inspec/resources/sybase_session.rb', line 42 def query(sql) # We must write the SQl to a temp file on the remote target # try to get a temp path sql_file_path = upload_sql_file(sql) # isql reuires that we have a matching locale set, but does not support C.UTF-8. en_US.UTF-8 is the least evil. command = "LANG=en_US.UTF-8 SYBASE=#{sybase_home} #{bin} -s\"#{col_sep}\" -w80000 -S #{server} -U #{username} -D #{database} -P \"#{password}\" < #{sql_file_path}" isql_cmd = inspec.command(command) # Check for isql errors res = isql_cmd.exit_status raise Inspec::Exceptions::ResourceFailed.new("isql exited with code #{res} and stderr '#{isql_cmd.stderr}', stdout '#{isql_cmd.stdout}'") unless res == 0 # isql is ill-behaved, and returns 0 on error raise Inspec::Exceptions::ResourceFailed.new("isql exited with error '#{isql_cmd.stderr}', stdout '#{isql_cmd.stdout}'") unless isql_cmd.stderr == "" # check stdout for error messages when stderr is empty "Msg 102, Level 15, State 181:\nServer 'SYBASE', Line 1:\nIncorrect syntax near '.'.\n" raise Inspec::Exceptions::ResourceFailed.new("isql exited with error #{isql_cmd.stdout}") if isql_cmd.stdout.match?(/Msg\s\d+,\sLevel\s\d+,\sState\s\d+/) # Clean up temporary file rm_cmd = inspec.command("rm #{sql_file_path}") res = rm_cmd.exit_status # TODO: handle raise Inspec::Exceptions::ResourceFailed.new("Unable to delete temproary SQL input file at #{sql_file_path}: #{rm_cmd.stderr}") unless res == 0 DatabaseHelper::SQLQueryResult.new(isql_cmd, parse_csv_result(isql_cmd.stdout)) end |
#resource_id ⇒ Object
67 68 69 |
# File 'lib/inspec/resources/sybase_session.rb', line 67 def resource_id @database || "Sybase Session" end |
#to_s ⇒ Object
71 72 73 |
# File 'lib/inspec/resources/sybase_session.rb', line 71 def to_s "Sybase Session" end |