hiera-mysql 0.2.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/hiera/backend/mysql_backend.rb +113 -74
  3. metadata +9 -13
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cbe2732edac5efdfc085c21fbe85932b9577a4cd
4
+ data.tar.gz: 7ae9728410ab5217383176aea9aefa5dfa86f5a0
5
+ SHA512:
6
+ metadata.gz: 361de3077a3572eec1cd01d582c71597ad24bee63d93971f64d4c335f555c28c21982352c85c7e022738eac15a170cb252bc268ec329dcf80a4f4e4693d7e311
7
+ data.tar.gz: 8d2ed4e05b3bfc9b9eb12a9f527cdf3c73ff002afaf04d2f69b43e3e1d1f9e82df31e551f1cec57d1478d0c5f6869eb5312b47088d241ba0f35c6b2eb86e7bb6
@@ -3,89 +3,128 @@
3
3
  # Author: Craig Dunn <craig@craigdunn.org>
4
4
  #
5
5
  class Hiera
6
- module Backend
7
- class Mysql_backend
8
- def initialize
9
- begin
10
- require 'mysql'
11
- rescue LoadError
12
- require 'rubygems'
13
- require 'mysql'
14
- end
15
-
16
- Hiera.debug("mysql_backend initialized")
17
- end
18
- def lookup(key, scope, order_override, resolution_type)
19
-
20
- Hiera.debug("mysql_backend invoked lookup")
21
- Hiera.debug("resolution type is #{resolution_type}")
22
-
23
- answer = nil
24
-
25
- # Parse the mysql query from the config, we also pass in key
26
- # to extra_data so this can be interpreted into the query
27
- # string
28
- #
29
- queries = [ Config[:mysql][:query] ].flatten
30
- queries.map! { |q| Backend.parse_string(q, scope, {"key" => key}) }
31
-
32
- queries.each do |mysql_query|
33
-
34
- results = query(mysql_query)
35
-
36
- unless results.empty?
37
- case resolution_type
38
- when :array
39
- answer ||= []
40
- results.each do |ritem|
41
- answer << Backend.parse_answer(ritem, scope)
42
- end
43
- else
44
- answer = Backend.parse_answer(results[0], scope)
45
- break
46
- end
47
- end
48
-
49
- end
50
- answer
51
- end
6
+ module Backend
7
+ class Mysql_backend
8
+ def initialize
9
+ @use_jdbc = defined?(JRUBY_VERSION) ? true : false
10
+ if @use_jdbc
11
+ require 'jdbc/mysql'
12
+ require 'java'
13
+ else
14
+ begin
15
+ require 'mysql'
16
+ rescue LoadError
17
+ require 'rubygems'
18
+ require 'mysql'
19
+ end
20
+ end
21
+
22
+ Hiera.debug("mysql_backend initialized")
23
+ Hiera.debug("JDBC mode #{@use_jdbc}")
24
+ end
52
25
 
53
- def query (sql)
54
- Hiera.debug("Executing SQL Query: #{sql}")
55
26
 
56
- data=[]
57
- mysql_host=Config[:mysql][:host]
58
- mysql_user=Config[:mysql][:user]
59
- mysql_pass=Config[:mysql][:pass]
60
- mysql_database=Config[:mysql][:database]
27
+ def lookup(key, scope, order_override, resolution_type)
61
28
 
62
- dbh = Mysql.new(mysql_host, mysql_user, mysql_pass, mysql_database)
63
- dbh.reconnect = true
29
+ Hiera.debug("mysql_backend invoked lookup")
30
+ Hiera.debug("resolution type is #{resolution_type}")
64
31
 
65
- res = dbh.query(sql)
66
- Hiera.debug("Mysql Query returned #{res.num_rows} rows")
32
+ answer = nil
67
33
 
34
+ # Parse the mysql query from the config, we also pass in key
35
+ # to extra_data so this can be interpreted into the query
36
+ # string
37
+ #
38
+ queries = [ Config[:mysql][:query] ].flatten
39
+ queries.map! { |q| Backend.parse_string(q, scope, {"key" => key}) }
68
40
 
69
- # Currently we'll just return the first element of each row, a future
70
- # enhancement would be to make this easily support hashes so you can do
71
- # select foo,bar from table
72
- #
73
- if res.num_fields < 2
74
- res.each do |row|
75
- Hiera.debug("Mysql value : #{row[0]}")
76
- data << row[0]
77
- end
41
+ queries.each do |mysql_query|
78
42
 
79
- else
80
- res.each_hash do |row|
81
- data << row
82
- end
83
- end
43
+ results = query(mysql_query)
84
44
 
85
- return data
45
+ unless results.empty?
46
+ case resolution_type
47
+ when :array
48
+ answer ||= []
49
+ results.each do |ritem|
50
+ answer << Backend.parse_answer(ritem, scope)
51
+ end
52
+ else
53
+ answer = Backend.parse_answer(results[0], scope)
54
+ break
86
55
  end
56
+ end
57
+
58
+ end
59
+ answer
60
+ end
61
+
62
+ def query (sql)
63
+ Hiera.debug("Executing SQL Query: #{sql}")
64
+
65
+ data=[]
66
+ mysql_host=Config[:mysql][:host]
67
+ mysql_user=Config[:mysql][:user]
68
+ mysql_pass=Config[:mysql][:pass]
69
+ mysql_database=Config[:mysql][:database]
70
+
71
+
72
+ if @use_jdbc
73
+ #
74
+ # JDBC connection handling, this will be run under jRuby
75
+ #
76
+ Jdbc::MySQL.load_driver
77
+ url = "jdbc:mysql://#{mysql_host}:3306/#{mysql_database}"
78
+ props = java.util.Properties.new
79
+ props.set_property :user, mysql_user
80
+ props.set_property :password, mysql_pass
81
+
82
+ conn = com.mysql.jdbc.Driver.new.connect(url,props)
83
+ stmt = conn.create_statement
84
+
85
+ res = stmt.execute_query(sql)
86
+ md = res.getMetaData
87
+ numcols = md.getColumnCount
88
+
89
+ Hiera.debug("Mysql Query returned #{numcols} rows")
90
+
91
+ while ( res.next ) do
92
+ if numcols < 2
93
+ Hiera.debug("Mysql value : #{res.getString(1)}")
94
+ data << res.getString(1)
95
+ else
96
+ row = {}
97
+ (1..numcols).each do |c|
98
+ row[md.getColumnName(c)] = res.getString(c)
99
+ end
100
+ data << row
101
+ end
102
+ end
103
+ else
104
+ #
105
+ # Native mysql connection, for calls outside of jRuby
106
+ #
107
+ dbh = Mysql.new(mysql_host, mysql_user, mysql_pass, mysql_database)
108
+ dbh.reconnect = true
109
+
110
+ res = dbh.query(sql)
111
+ Hiera.debug("Mysql Query returned #{res.num_rows} rows")
112
+
113
+ if res.num_fields < 2
114
+ res.each do |row|
115
+ Hiera.debug("Mysql value : #{row[0]}")
116
+ data << row[0]
117
+ end
118
+ else
119
+ res.each_hash do |row|
120
+ data << row
121
+ end
122
+ end
87
123
  end
88
- end
89
- end
90
124
 
125
+ return data
91
126
 
127
+ end
128
+ end
129
+ end
130
+ end
metadata CHANGED
@@ -1,30 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hiera-mysql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Craig Dunn
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-01-16 00:00:00.000000000 Z
11
+ date: 2015-05-07 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: mysql
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  description: Hiera back end for retrieving configuration values from MySQL
@@ -36,26 +33,25 @@ files:
36
33
  - lib/hiera/backend/mysql_backend.rb
37
34
  homepage: http://github.com/crayfishx/hiera-mysql
38
35
  licenses: []
36
+ metadata: {}
39
37
  post_install_message:
40
38
  rdoc_options: []
41
39
  require_paths:
42
40
  - lib
43
41
  required_ruby_version: !ruby/object:Gem::Requirement
44
- none: false
45
42
  requirements:
46
- - - ! '>='
43
+ - - '>='
47
44
  - !ruby/object:Gem::Version
48
45
  version: '0'
49
46
  required_rubygems_version: !ruby/object:Gem::Requirement
50
- none: false
51
47
  requirements:
52
- - - ! '>='
48
+ - - '>='
53
49
  - !ruby/object:Gem::Version
54
50
  version: '0'
55
51
  requirements: []
56
52
  rubyforge_project:
57
- rubygems_version: 1.8.24
53
+ rubygems_version: 2.2.2
58
54
  signing_key:
59
- specification_version: 3
55
+ specification_version: 4
60
56
  summary: MySQL backend for Hiera
61
57
  test_files: []