Advertisement
Guest User

Untitled

a guest
Aug 11th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. # Class Mssql_backend
  2. # Description: MS SQL back end to Hiera.
  3. class Hiera
  4. module Backend
  5. class Mssql_backend
  6. def initialize
  7. @use_jdbc = defined?(JRUBY_VERSION) ? true : false
  8. if @use_jdbc
  9. require 'jdbc/sqlserver'
  10. require 'java'
  11. require 'rubygems'
  12. require 'sqljdbc4.jar'
  13. else
  14. require 'rubygems'
  15. require 'tiny_tds'
  16. end
  17.  
  18. Hiera.debug("mssql_backend initialized")
  19. Hiera.debug("JDBC mode #{@use_jdbc}")
  20. end
  21.  
  22.  
  23. def lookup(key, scope, order_override, resolution_type)
  24.  
  25. Hiera.debug("mssql_backend invoked lookup")
  26. Hiera.debug("resolution type is #{resolution_type}")
  27.  
  28. answer = nil
  29.  
  30. # Parse the mssql query from the config, we also pass in key
  31. # to extra_data so this can be interpreted into the query
  32. # string
  33. #
  34. queries = [ Config[:mssql][:query] ].flatten
  35. queries.map! { |q| Backend.parse_string(q, scope, {"key" => key}) }
  36.  
  37. queries.each do |mssql_query|
  38.  
  39. results = query(mssql_query)
  40.  
  41. unless results.empty?
  42. case resolution_type
  43. when :array
  44. answer ||= []
  45. results.each do |ritem|
  46. answer << Backend.parse_answer(ritem, scope)
  47. end
  48. else
  49. answer = Backend.parse_answer(results[0], scope)
  50. break
  51. end
  52. end
  53.  
  54. end
  55. answer
  56. end
  57.  
  58. def query (sql)
  59. Hiera.debug("Executing SQL Query: #{sql}")
  60.  
  61. data=[]
  62. mssql_host=Config[:mssql][:host]
  63. mssql_user=Config[:mssql][:user]
  64. mssql_pass=Config[:mssql][:pass]
  65. mssql_database=Config[:mssql][:database]
  66. mssql_instance=Config[:mssql][:instance]
  67.  
  68.  
  69. if @use_jdbc
  70. #
  71. # JDBC connection handling, this will be run under jRuby
  72. #
  73. Jdbc::Sqlserver.load_driver
  74. #Java::com.microsoft.sqlserver.jdbc.SQLServerDriver
  75. url = "jdbc:sqlserver://#{mssql_host}:1433;instanceName=#{mssql_instance};databaseName=#{mssql_database}"
  76. props = java.util.Properties.new
  77. props.set_property :user, mssql_user
  78. props.set_property :password, mssql_pass
  79. driver = Java::com.microsoft.sqlserver.jdbc.SQLServerDriver.new
  80. conn = driver.connect(url,props)
  81. statement = conn.create_statement
  82. res = statement.execute_query(sql)
  83. md = res.getMetaData
  84. numcols = md.getColumnCount
  85. Hiera.debug("MS sql Query returned #{numcols} rows")
  86.  
  87. while ( res.next ) do
  88. if numcols < 2
  89. Hiera.debug("MS sql value : #{res.getString(1)}")
  90. data << res.getString(1)
  91. else
  92. row = {}
  93. (1..numcols).each do |c|
  94. row[md.getColumnName(c)] = res.getString(c)
  95. end
  96. data << row
  97. end
  98. end
  99. else
  100. client = TinyTds::Client.new username: "#{mssql_user}", password: "#{mssql_pass}", host: "#{mssql_host}", database: "#{mssql_database}"
  101. res = client.execute(sql)
  102.  
  103. res.each do |row|
  104. data << row
  105. end
  106. end
  107. return data
  108. end
  109. end
  110. end
  111. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement