freighthop 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (270) hide show
  1. data/Puppetfile +1 -0
  2. data/Puppetfile.lock +3 -0
  3. data/Vagrantfile +1 -1
  4. data/bin/fh +2 -78
  5. data/lib/freighthop/cli/help.rb +69 -0
  6. data/lib/freighthop/cli/ssh.rb +46 -0
  7. data/lib/freighthop/cli/vagrant.rb +26 -0
  8. data/lib/freighthop/cli.rb +40 -0
  9. data/lib/freighthop/config.rb +4 -0
  10. data/lib/freighthop/vagrant_env.rb +24 -0
  11. data/lib/freighthop/version.rb +1 -1
  12. data/lib/freighthop.rb +7 -4
  13. data/local_modules/freighthop/manifests/database/mysql.pp +20 -0
  14. data/local_modules/freighthop/manifests/database/postgres.pp +6 -6
  15. data/local_modules/freighthop/manifests/database.pp +6 -8
  16. data/local_modules/freighthop/manifests/init.pp +1 -8
  17. data/local_modules/freighthop/manifests/params.pp +0 -3
  18. data/modules/apt/CHANGELOG +12 -2
  19. data/modules/apt/Gemfile +6 -5
  20. data/modules/apt/Gemfile.lock +40 -5
  21. data/modules/apt/Modulefile +1 -1
  22. data/modules/apt/README.md +2 -1
  23. data/modules/apt/Rakefile +1 -0
  24. data/modules/apt/manifests/init.pp +4 -1
  25. data/modules/apt/manifests/ppa.pp +1 -1
  26. data/modules/apt/manifests/update.pp +1 -0
  27. data/modules/apt/metadata.json +21 -13
  28. data/modules/apt/spec/defines/ppa_spec.rb +3 -3
  29. data/modules/apt/spec/defines/source_spec.rb +2 -2
  30. data/modules/apt/spec/spec_helper_system.rb +30 -0
  31. data/modules/apt/spec/system/apt_builddep_spec.rb +38 -0
  32. data/modules/apt/spec/system/apt_key_spec.rb +53 -0
  33. data/modules/apt/spec/system/apt_ppa_spec.rb +59 -0
  34. data/modules/apt/spec/system/apt_source_spec.rb +51 -0
  35. data/modules/apt/spec/system/basic_spec.rb +10 -0
  36. data/modules/apt/spec/system/class_spec.rb +20 -0
  37. data/modules/apt/templates/source.list.erb +2 -2
  38. data/modules/freighthop/manifests/database/mysql.pp +20 -0
  39. data/modules/freighthop/manifests/database/postgres.pp +6 -6
  40. data/modules/freighthop/manifests/database.pp +6 -8
  41. data/modules/freighthop/manifests/init.pp +1 -8
  42. data/modules/freighthop/manifests/params.pp +0 -3
  43. data/modules/mysql/CHANGELOG +403 -0
  44. data/modules/mysql/Gemfile +24 -0
  45. data/modules/mysql/Gemfile.lock +129 -0
  46. data/modules/mysql/LICENSE +201 -0
  47. data/modules/mysql/Modulefile +9 -0
  48. data/modules/mysql/README.md +492 -0
  49. data/modules/mysql/Rakefile +2 -0
  50. data/modules/mysql/TODO +8 -0
  51. data/modules/mysql/files/mysqltuner.pl +966 -0
  52. data/modules/mysql/lib/puppet/parser/functions/mysql_deepmerge.rb +52 -0
  53. data/modules/mysql/lib/puppet/parser/functions/mysql_password.rb +15 -0
  54. data/modules/mysql/lib/puppet/parser/functions/mysql_strip_hash.rb +21 -0
  55. data/modules/mysql/lib/puppet/provider/database/mysql.rb +52 -0
  56. data/modules/mysql/lib/puppet/provider/database_grant/mysql.rb +210 -0
  57. data/modules/mysql/lib/puppet/provider/database_user/mysql.rb +76 -0
  58. data/modules/mysql/lib/puppet/provider/mysql.rb +67 -0
  59. data/modules/mysql/lib/puppet/provider/mysql_database/mysql.rb +68 -0
  60. data/modules/mysql/lib/puppet/provider/mysql_grant/mysql.rb +115 -0
  61. data/modules/mysql/lib/puppet/provider/mysql_user/mysql.rb +115 -0
  62. data/modules/mysql/lib/puppet/type/database.rb +21 -0
  63. data/modules/mysql/lib/puppet/type/database_grant.rb +79 -0
  64. data/modules/mysql/lib/puppet/type/database_user.rb +31 -0
  65. data/modules/mysql/lib/puppet/type/mysql_database.rb +22 -0
  66. data/modules/mysql/lib/puppet/type/mysql_grant.rb +72 -0
  67. data/modules/mysql/lib/puppet/type/mysql_user.rb +45 -0
  68. data/modules/mysql/manifests/backup.pp +31 -0
  69. data/modules/mysql/manifests/bindings/java.pp +10 -0
  70. data/modules/mysql/manifests/bindings/perl.pp +10 -0
  71. data/modules/mysql/manifests/bindings/php.pp +10 -0
  72. data/modules/mysql/manifests/bindings/python.pp +10 -0
  73. data/modules/mysql/manifests/bindings/ruby.pp +10 -0
  74. data/modules/mysql/manifests/bindings.pp +33 -0
  75. data/modules/mysql/manifests/client/install.pp +8 -0
  76. data/modules/mysql/manifests/client.pp +27 -0
  77. data/modules/mysql/manifests/db.pp +59 -0
  78. data/modules/mysql/manifests/init.pp +100 -0
  79. data/modules/mysql/manifests/params.pp +230 -0
  80. data/modules/mysql/manifests/server/account_security.pp +22 -0
  81. data/modules/mysql/manifests/server/backup.pp +56 -0
  82. data/modules/mysql/manifests/server/config.pp +31 -0
  83. data/modules/mysql/manifests/server/install.pp +9 -0
  84. data/modules/mysql/manifests/server/monitor.pp +24 -0
  85. data/modules/mysql/manifests/server/mysqltuner.pp +9 -0
  86. data/modules/mysql/manifests/server/providers.pp +8 -0
  87. data/modules/mysql/manifests/server/root_password.pp +21 -0
  88. data/modules/mysql/manifests/server/service.pp +19 -0
  89. data/modules/mysql/manifests/server.pp +69 -0
  90. data/modules/mysql/metadata.json +289 -0
  91. data/modules/mysql/spec/classes/mysql_bindings_spec.rb +58 -0
  92. data/modules/mysql/spec/classes/mysql_client_spec.rb +16 -0
  93. data/modules/mysql/spec/classes/mysql_server_account_security_spec.rb +41 -0
  94. data/modules/mysql/spec/classes/mysql_server_backup_spec.rb +112 -0
  95. data/modules/mysql/spec/classes/mysql_server_monitor_spec.rb +31 -0
  96. data/modules/mysql/spec/classes/mysql_server_mysqltuner_spec.rb +5 -0
  97. data/modules/mysql/spec/classes/mysql_server_spec.rb +162 -0
  98. data/modules/mysql/spec/defines/mysql_db_spec.rb +51 -0
  99. data/modules/mysql/spec/spec.opts +6 -0
  100. data/modules/mysql/spec/spec_helper.rb +5 -0
  101. data/modules/mysql/spec/spec_helper_system.rb +28 -0
  102. data/modules/mysql/spec/system/mysql_account_delete_spec.rb +35 -0
  103. data/modules/mysql/spec/system/mysql_backup_spec.rb +77 -0
  104. data/modules/mysql/spec/system/mysql_bindings_spec.rb +90 -0
  105. data/modules/mysql/spec/system/mysql_db_spec.rb +61 -0
  106. data/modules/mysql/spec/system/mysql_server_monitor_spec.rb +30 -0
  107. data/modules/mysql/spec/system/mysql_server_root_password_spec.rb +71 -0
  108. data/modules/mysql/spec/system/mysql_server_spec.rb +85 -0
  109. data/modules/mysql/spec/system/types/mysql_grant_spec.rb +314 -0
  110. data/modules/mysql/spec/system/types/mysql_user_spec.rb +35 -0
  111. data/modules/mysql/spec/unit/mysql_password_spec.rb +27 -0
  112. data/modules/mysql/spec/unit/puppet/functions/mysql_deepmerge_spec.rb +77 -0
  113. data/modules/mysql/spec/unit/puppet/provider/database/mysql_spec.rb +86 -0
  114. data/modules/mysql/spec/unit/puppet/provider/database_grant/mysql_spec.rb +95 -0
  115. data/modules/mysql/spec/unit/puppet/provider/database_user/mysql_spec.rb +119 -0
  116. data/modules/mysql/spec/unit/puppet/provider/mysql_database/mysql_spec.rb +118 -0
  117. data/modules/mysql/spec/unit/puppet/provider/mysql_user/mysql_spec.rb +130 -0
  118. data/modules/mysql/spec/unit/puppet/type/mysql_database_spec.rb +29 -0
  119. data/modules/mysql/spec/unit/puppet/type/mysql_user_spec.rb +30 -0
  120. data/modules/mysql/templates/my.cnf.erb +17 -0
  121. data/modules/mysql/templates/my.cnf.pass.erb +7 -0
  122. data/modules/mysql/templates/my.conf.cnf.erb +17 -0
  123. data/modules/mysql/templates/mysqlbackup.sh.erb +57 -0
  124. data/modules/mysql/tests/backup.pp +8 -0
  125. data/modules/mysql/tests/bindings.pp +3 -0
  126. data/modules/mysql/tests/init.pp +1 -0
  127. data/modules/mysql/tests/java.pp +1 -0
  128. data/modules/mysql/tests/mysql_database.pp +12 -0
  129. data/modules/mysql/tests/mysql_grant.pp +5 -0
  130. data/modules/mysql/tests/mysql_user.pp +23 -0
  131. data/modules/mysql/tests/perl.pp +1 -0
  132. data/modules/mysql/tests/python.pp +1 -0
  133. data/modules/mysql/tests/ruby.pp +1 -0
  134. data/modules/mysql/tests/server/account_security.pp +4 -0
  135. data/modules/mysql/tests/server/config.pp +11 -0
  136. data/modules/mysql/tests/server.pp +3 -0
  137. data/modules/postgresql/Changelog +191 -0
  138. data/modules/postgresql/Gemfile +1 -0
  139. data/modules/postgresql/Gemfile.lock +9 -0
  140. data/modules/postgresql/LICENSE +198 -12
  141. data/modules/postgresql/Modulefile +2 -2
  142. data/modules/postgresql/NOTICE +14 -0
  143. data/modules/postgresql/README.md +435 -184
  144. data/modules/postgresql/files/validate_postgresql_connection.sh +31 -0
  145. data/modules/postgresql/lib/puppet/provider/postgresql_conf/parsed.rb +37 -0
  146. data/modules/postgresql/lib/puppet/provider/postgresql_psql/ruby.rb +4 -0
  147. data/modules/postgresql/lib/puppet/type/postgresql_conf.rb +31 -0
  148. data/modules/postgresql/lib/puppet/type/postgresql_psql.rb +4 -0
  149. data/modules/postgresql/manifests/client.pp +17 -16
  150. data/modules/postgresql/manifests/globals.pp +95 -0
  151. data/modules/postgresql/manifests/lib/devel.pp +15 -0
  152. data/modules/postgresql/manifests/lib/java.pp +15 -0
  153. data/modules/postgresql/manifests/lib/python.pp +13 -0
  154. data/modules/postgresql/manifests/params.pp +127 -222
  155. data/modules/postgresql/manifests/repo/apt_postgresql_org.pp +30 -0
  156. data/modules/postgresql/manifests/repo/yum_postgresql_org.pp +38 -0
  157. data/modules/postgresql/manifests/repo.pp +22 -0
  158. data/modules/postgresql/manifests/server/config.pp +113 -0
  159. data/modules/postgresql/manifests/server/config_entry.pp +43 -0
  160. data/modules/postgresql/manifests/server/contrib.pp +27 -0
  161. data/modules/postgresql/manifests/server/database.pp +75 -0
  162. data/modules/postgresql/manifests/server/database_grant.pp +18 -0
  163. data/modules/postgresql/manifests/server/db.pp +36 -0
  164. data/modules/postgresql/manifests/server/firewall.pp +21 -0
  165. data/modules/postgresql/manifests/server/grant.pp +81 -0
  166. data/modules/postgresql/manifests/server/initdb.pp +52 -0
  167. data/modules/postgresql/manifests/server/install.pp +49 -0
  168. data/modules/postgresql/manifests/server/passwd.pp +34 -0
  169. data/modules/postgresql/manifests/server/pg_hba_rule.pp +54 -0
  170. data/modules/postgresql/manifests/server/plperl.pp +27 -0
  171. data/modules/postgresql/manifests/server/reload.pp +15 -0
  172. data/modules/postgresql/manifests/{role.pp → server/role.pp} +19 -33
  173. data/modules/postgresql/manifests/server/service.pp +40 -0
  174. data/modules/postgresql/manifests/{table_grant.pp → server/table_grant.pp} +4 -4
  175. data/modules/postgresql/manifests/server/tablespace.pp +42 -0
  176. data/modules/postgresql/manifests/server.pp +61 -83
  177. data/modules/postgresql/manifests/validate_db_connection.pp +49 -50
  178. data/modules/postgresql/metadata.json +123 -73
  179. data/modules/postgresql/spec/spec_helper_system.rb +13 -1
  180. data/modules/postgresql/spec/system/client_spec.rb +22 -0
  181. data/modules/postgresql/spec/system/common_patterns_spec.rb +53 -0
  182. data/modules/postgresql/spec/system/contrib_spec.rb +33 -0
  183. data/modules/postgresql/spec/system/lib/devel_spec.rb +22 -0
  184. data/modules/postgresql/spec/system/lib/java_spec.rb +25 -0
  185. data/modules/postgresql/spec/system/lib/python_spec.rb +24 -0
  186. data/modules/postgresql/spec/system/postgresql_psql_spec.rb +51 -0
  187. data/modules/postgresql/spec/system/server/config_entry_spec.rb +32 -0
  188. data/modules/postgresql/spec/system/server/database_grant_spec.rb +54 -0
  189. data/modules/postgresql/spec/system/server/database_spec.rb +35 -0
  190. data/modules/postgresql/spec/system/server/db_spec.rb +143 -0
  191. data/modules/postgresql/spec/system/server/grant_spec.rb +55 -0
  192. data/modules/postgresql/spec/system/server/pg_hba_rule_spec.rb +85 -0
  193. data/modules/postgresql/spec/system/server/plperl_spec.rb +29 -0
  194. data/modules/postgresql/spec/system/server/role_spec.rb +103 -0
  195. data/modules/postgresql/spec/system/server/table_grant_spec.rb +72 -0
  196. data/modules/postgresql/spec/system/server/tablespace_spec.rb +74 -0
  197. data/modules/postgresql/spec/system/server_spec.rb +217 -0
  198. data/modules/postgresql/spec/system/validate_db_connection_spec.rb +91 -0
  199. data/modules/postgresql/spec/unit/classes/client_spec.rb +27 -2
  200. data/modules/postgresql/spec/unit/classes/globals_spec.rb +28 -0
  201. data/modules/postgresql/spec/unit/classes/lib/devel_spec.rb +12 -0
  202. data/modules/postgresql/spec/unit/classes/{postgresql_java_spec.rb → lib/java_spec.rb} +9 -19
  203. data/modules/postgresql/spec/unit/classes/lib/python_spec.rb +31 -0
  204. data/modules/postgresql/spec/unit/classes/params_spec.rb +2 -1
  205. data/modules/postgresql/spec/unit/classes/repo_spec.rb +17 -0
  206. data/modules/postgresql/spec/unit/classes/server/contrib_spec.rb +42 -0
  207. data/modules/postgresql/spec/unit/classes/server/initdb_spec.rb +28 -0
  208. data/modules/postgresql/spec/unit/classes/server/plperl_spec.rb +45 -0
  209. data/modules/postgresql/spec/unit/classes/server_spec.rb +83 -2
  210. data/modules/postgresql/spec/unit/defines/server/config_entry_spec.rb +23 -0
  211. data/modules/postgresql/spec/unit/defines/server/database_grant_spec.rb +26 -0
  212. data/modules/postgresql/spec/unit/defines/server/database_spec.rb +16 -0
  213. data/modules/postgresql/spec/unit/defines/server/db_spec.rb +28 -0
  214. data/modules/postgresql/spec/unit/defines/{database_grant_spec.rb → server/grant_spec.rb} +7 -4
  215. data/modules/postgresql/spec/unit/defines/{pg_hba_rule_spec.rb → server/pg_hba_rule_spec.rb} +59 -2
  216. data/modules/postgresql/spec/unit/defines/server/role_spec.rb +23 -0
  217. data/modules/postgresql/spec/unit/defines/server/table_grant_spec.rb +27 -0
  218. data/modules/postgresql/spec/unit/defines/server/tablespace_spec.rb +23 -0
  219. data/modules/postgresql/spec/unit/defines/validate_db_connection_spec.rb +22 -9
  220. data/modules/postgresql/spec/unit/provider/postgresql_conf/parsed_spec.rb +112 -0
  221. data/modules/postgresql/spec/unit/puppet/provider/postgresql_psql/ruby_spec.rb +29 -0
  222. data/modules/postgresql/spec/unit/puppet/type/postgresql_psql_spec.rb +1 -0
  223. data/modules/postgresql/spec/unit/type/postgresql_conf_spec.rb +50 -0
  224. metadata +177 -53
  225. data/modules/postgresql/examples/init.pp +0 -1
  226. data/modules/postgresql/examples/official-postgresql-repos.pp +0 -19
  227. data/modules/postgresql/examples/postgresql_database.pp +0 -22
  228. data/modules/postgresql/examples/postgresql_db.pp +0 -30
  229. data/modules/postgresql/examples/postgresql_grant.pp +0 -14
  230. data/modules/postgresql/examples/postgresql_pg_hba_rule.pp +0 -18
  231. data/modules/postgresql/examples/postgresql_pgconf_extras.pp +0 -19
  232. data/modules/postgresql/examples/postgresql_tablespace.pp +0 -73
  233. data/modules/postgresql/examples/postgresql_user.pp +0 -28
  234. data/modules/postgresql/examples/server.pp +0 -10
  235. data/modules/postgresql/lib/facter/postgres_default_version.rb +0 -69
  236. data/modules/postgresql/manifests/config/afterservice.pp +0 -47
  237. data/modules/postgresql/manifests/config/beforeservice.pp +0 -171
  238. data/modules/postgresql/manifests/config.pp +0 -74
  239. data/modules/postgresql/manifests/contrib.pp +0 -29
  240. data/modules/postgresql/manifests/database.pp +0 -85
  241. data/modules/postgresql/manifests/database_grant.pp +0 -35
  242. data/modules/postgresql/manifests/database_user.pp +0 -60
  243. data/modules/postgresql/manifests/db.pp +0 -77
  244. data/modules/postgresql/manifests/devel.pp +0 -27
  245. data/modules/postgresql/manifests/grant.pp +0 -77
  246. data/modules/postgresql/manifests/init.pp +0 -145
  247. data/modules/postgresql/manifests/initdb.pp +0 -52
  248. data/modules/postgresql/manifests/java.pp +0 -29
  249. data/modules/postgresql/manifests/package_source/apt_postgresql_org.pp +0 -21
  250. data/modules/postgresql/manifests/package_source/yum_postgresql_org.pp +0 -30
  251. data/modules/postgresql/manifests/pg_hba.pp +0 -19
  252. data/modules/postgresql/manifests/pg_hba_rule.pp +0 -41
  253. data/modules/postgresql/manifests/plperl.pp +0 -24
  254. data/modules/postgresql/manifests/psql.pp +0 -56
  255. data/modules/postgresql/manifests/python.pp +0 -18
  256. data/modules/postgresql/manifests/tablespace.pp +0 -59
  257. data/modules/postgresql/spec/system/install_spec.rb +0 -707
  258. data/modules/postgresql/spec/system/non_defaults_spec.rb +0 -114
  259. data/modules/postgresql/spec/unit/classes/contrib_spec.rb +0 -11
  260. data/modules/postgresql/spec/unit/classes/devel_spec.rb +0 -11
  261. data/modules/postgresql/spec/unit/classes/init_spec.rb +0 -71
  262. data/modules/postgresql/spec/unit/classes/postgresql_python_spec.rb +0 -53
  263. data/modules/postgresql/spec/unit/defines/database_spec.rb +0 -14
  264. data/modules/postgresql/spec/unit/defines/database_user_spec.rb +0 -19
  265. data/modules/postgresql/spec/unit/defines/db_spec.rb +0 -20
  266. data/modules/postgresql/spec/unit/defines/pg_hba_spec.rb +0 -20
  267. data/modules/postgresql/spec/unit/defines/psql_spec.rb +0 -20
  268. data/modules/postgresql/spec/unit/defines/role_spec.rb +0 -14
  269. data/modules/postgresql/spec/unit/defines/tablespace_spec.rb +0 -19
  270. data/modules/postgresql/spec/unit/facts/postgres_default_version_spec.rb +0 -14
@@ -0,0 +1,85 @@
1
+ require 'spec_helper_system'
2
+
3
+ describe 'mysql class' do
4
+ case node.facts['osfamily']
5
+ when 'RedHat'
6
+ package_name = 'mysql-server'
7
+ service_name = 'mysqld'
8
+ mycnf = '/etc/my.cnf'
9
+ when 'Suse'
10
+ package_name = 'mysql-community-server'
11
+ service_name = 'mysql'
12
+ mycnf = '/etc/my.cnf'
13
+ when 'Debian'
14
+ package_name = 'mysql-server'
15
+ service_name = 'mysql'
16
+ mycnf = '/etc/mysql/my.cnf'
17
+ end
18
+
19
+ describe 'running puppet code' do
20
+ # Using puppet_apply as a helper
21
+ it 'should work with no errors' do
22
+ pp = <<-EOS
23
+ class { 'mysql::server': }
24
+ EOS
25
+
26
+ # Run it twice and test for idempotency
27
+ puppet_apply(pp) do |r|
28
+ r.exit_code.should_not == 1
29
+ r.refresh
30
+ r.exit_code.should be_zero
31
+ end
32
+ end
33
+
34
+ describe package(package_name) do
35
+ it { should be_installed }
36
+ end
37
+
38
+ describe service(service_name) do
39
+ it { should be_running }
40
+ it { should be_enabled }
41
+ end
42
+ end
43
+
44
+ describe 'mycnf' do
45
+ it 'should contain sensible values' do
46
+ pp = <<-EOS
47
+ class { 'mysql::server': }
48
+ EOS
49
+ puppet_apply(pp) do |r|
50
+ r.exit_code.should_not == 1
51
+ end
52
+ end
53
+
54
+ describe file(mycnf) do
55
+ it { should contain 'key_buffer = 16M' }
56
+ it { should contain 'max_binlog_size = 100M' }
57
+ it { should contain 'query_cache_size = 16M' }
58
+ end
59
+ end
60
+
61
+ describe 'my.cnf changes' do
62
+ it 'sets values' do
63
+ pp = <<-EOS
64
+ class { 'mysql::server':
65
+ override_options => { 'mysqld' =>
66
+ { 'key_buffer' => '32M',
67
+ 'max_binlog_size' => '200M',
68
+ 'query_cache_size' => '32M',
69
+ }
70
+ }
71
+ }
72
+ EOS
73
+ puppet_apply(pp) do |r|
74
+ r.exit_code.should_not == 1
75
+ end
76
+ end
77
+
78
+ describe file(mycnf) do
79
+ it { should contain 'key_buffer = 32M' }
80
+ it { should contain 'max_binlog_size = 200M' }
81
+ it { should contain 'query_cache_size = 32M' }
82
+ end
83
+ end
84
+
85
+ end
@@ -0,0 +1,314 @@
1
+ require 'spec_helper_system'
2
+
3
+ describe 'mysql_grant' do
4
+
5
+ describe 'setup' do
6
+ it 'setup mysql::server' do
7
+ pp = <<-EOS
8
+ class { 'mysql::server': }
9
+ EOS
10
+
11
+ puppet_apply(pp)
12
+ end
13
+ end
14
+
15
+ describe 'missing privileges for user' do
16
+ it 'should fail' do
17
+ pp = <<-EOS
18
+ mysql_grant { 'test1@tester/test.*':
19
+ ensure => 'present',
20
+ table => 'test.*',
21
+ user => 'test1@tester',
22
+ }
23
+ EOS
24
+
25
+ puppet_apply(pp) do |r|
26
+ r.stderr.should =~ /privileges parameter is required/
27
+ end
28
+ end
29
+
30
+ it 'should not find the user' do
31
+ shell("mysql -NBe \"SHOW GRANTS FOR test1@tester\"") do |r|
32
+ r.stderr.should =~ /There is no such grant defined for user 'test1' on host 'tester'/
33
+ r.exit_code.should eq 1
34
+ end
35
+ end
36
+ end
37
+
38
+ describe 'missing table for user' do
39
+ it 'should fail' do
40
+ pp = <<-EOS
41
+ mysql_grant { 'atest@tester/test.*':
42
+ ensure => 'present',
43
+ user => 'atest@tester',
44
+ privileges => ['ALL'],
45
+ }
46
+ EOS
47
+
48
+ puppet_apply(pp) do |r|
49
+ r.exit_code.should eq 1
50
+ end
51
+ end
52
+
53
+ it 'should not find the user' do
54
+ shell("mysql -NBe \"SHOW GRANTS FOR atest@tester\"") do |r|
55
+ r.stderr.should =~ /There is no such grant defined for user 'atest' on host 'tester'/
56
+ r.exit_code.should eq 1
57
+ end
58
+ end
59
+ end
60
+
61
+ describe 'adding privileges' do
62
+ it 'should work without errors' do
63
+ pp = <<-EOS
64
+ mysql_grant { 'test2@tester/test.*':
65
+ ensure => 'present',
66
+ table => 'test.*',
67
+ user => 'test2@tester',
68
+ privileges => ['SELECT', 'UPDATE'],
69
+ }
70
+ EOS
71
+
72
+ puppet_apply(pp)
73
+ end
74
+
75
+ it 'should find the user' do
76
+ shell("mysql -NBe \"SHOW GRANTS FOR test2@tester\"") do |r|
77
+ r.stdout.should =~ /GRANT SELECT, UPDATE.*TO 'test2'@'tester'/
78
+ r.stderr.should be_empty
79
+ r.exit_code.should be_zero
80
+ end
81
+ end
82
+ end
83
+
84
+ describe 'adding option' do
85
+ it 'should work without errors' do
86
+ pp = <<-EOS
87
+ mysql_grant { 'test3@tester/test.*':
88
+ ensure => 'present',
89
+ table => 'test.*',
90
+ user => 'test3@tester',
91
+ options => ['GRANT'],
92
+ privileges => ['SELECT', 'UPDATE'],
93
+ }
94
+ EOS
95
+
96
+ puppet_apply(pp)
97
+ end
98
+
99
+ it 'should find the user' do
100
+ shell("mysql -NBe \"SHOW GRANTS FOR test3@tester\"") do |r|
101
+ r.stdout.should =~ /GRANT SELECT, UPDATE ON `test`.* TO 'test3'@'tester' WITH GRANT OPTION$/
102
+ r.stderr.should be_empty
103
+ r.exit_code.should be_zero
104
+ end
105
+ end
106
+ end
107
+
108
+ describe 'adding all privileges without table' do
109
+ it 'should fail' do
110
+ pp = <<-EOS
111
+ mysql_grant { 'test4@tester/test.*':
112
+ ensure => 'present',
113
+ user => 'test4@tester',
114
+ options => ['GRANT'],
115
+ privileges => ['SELECT', 'UPDATE', 'ALL'],
116
+ }
117
+ EOS
118
+
119
+ puppet_apply(pp) do |r|
120
+ r.stderr.should =~ /table parameter is required./
121
+ end
122
+ end
123
+
124
+ end
125
+
126
+
127
+ describe 'adding all privileges' do
128
+ it 'should only try to apply ALL' do
129
+ pp = <<-EOS
130
+ mysql_grant { 'test4@tester/test.*':
131
+ ensure => 'present',
132
+ table => 'test.*',
133
+ user => 'test4@tester',
134
+ options => ['GRANT'],
135
+ privileges => ['SELECT', 'UPDATE', 'ALL'],
136
+ }
137
+ EOS
138
+
139
+ puppet_apply(pp)
140
+ end
141
+
142
+ it 'should find the user' do
143
+ shell("mysql -NBe \"SHOW GRANTS FOR test4@tester\"") do |r|
144
+ r.stdout.should =~ /GRANT ALL PRIVILEGES ON `test`.* TO 'test4'@'tester' WITH GRANT OPTION/
145
+ r.stderr.should be_empty
146
+ r.exit_code.should be_zero
147
+ end
148
+ end
149
+ end
150
+
151
+ # Test combinations of user@host to ensure all cases work.
152
+ describe 'short hostname' do
153
+ it 'should apply' do
154
+ pp = <<-EOS
155
+ mysql_grant { 'test@short/test.*':
156
+ ensure => 'present',
157
+ table => 'test.*',
158
+ user => 'test@short',
159
+ privileges => 'ALL',
160
+ }
161
+ mysql_grant { 'test@long.hostname.com/test.*':
162
+ ensure => 'present',
163
+ table => 'test.*',
164
+ user => 'test@long.hostname.com',
165
+ privileges => 'ALL',
166
+ }
167
+ mysql_grant { 'test@192.168.5.6/test.*':
168
+ ensure => 'present',
169
+ table => 'test.*',
170
+ user => 'test@192.168.5.6',
171
+ privileges => 'ALL',
172
+ }
173
+ mysql_grant { 'test@2607:f0d0:1002:0051:0000:0000:0000:0004/test.*':
174
+ ensure => 'present',
175
+ table => 'test.*',
176
+ user => 'test@2607:f0d0:1002:0051:0000:0000:0000:0004',
177
+ privileges => 'ALL',
178
+ }
179
+ mysql_grant { 'test@::1/128/test.*':
180
+ ensure => 'present',
181
+ table => 'test.*',
182
+ user => 'test@::1/128',
183
+ privileges => 'ALL',
184
+ }
185
+ EOS
186
+
187
+ puppet_apply(pp)
188
+ end
189
+
190
+ it 'finds short hostname' do
191
+ shell("mysql -NBe \"SHOW GRANTS FOR test@short\"") do |r|
192
+ r.stdout.should =~ /GRANT ALL PRIVILEGES ON `test`.* TO 'test'@'short'/
193
+ r.stderr.should be_empty
194
+ r.exit_code.should be_zero
195
+ end
196
+ end
197
+ it 'finds long hostname' do
198
+ shell("mysql -NBe \"SHOW GRANTS FOR 'test'@'long.hostname.com'\"") do |r|
199
+ r.stdout.should =~ /GRANT ALL PRIVILEGES ON `test`.* TO 'test'@'long.hostname.com'/
200
+ r.stderr.should be_empty
201
+ r.exit_code.should be_zero
202
+ end
203
+ end
204
+ it 'finds ipv4' do
205
+ shell("mysql -NBe \"SHOW GRANTS FOR 'test'@'192.168.5.6'\"") do |r|
206
+ r.stdout.should =~ /GRANT ALL PRIVILEGES ON `test`.* TO 'test'@'192.168.5.6'/
207
+ r.stderr.should be_empty
208
+ r.exit_code.should be_zero
209
+ end
210
+ end
211
+ it 'finds ipv6' do
212
+ shell("mysql -NBe \"SHOW GRANTS FOR 'test'@'2607:f0d0:1002:0051:0000:0000:0000:0004'\"") do |r|
213
+ r.stdout.should =~ /GRANT ALL PRIVILEGES ON `test`.* TO 'test'@'2607:f0d0:1002:0051:0000:0000:0000:0004'/
214
+ r.stderr.should be_empty
215
+ r.exit_code.should be_zero
216
+ end
217
+ end
218
+ it 'finds short ipv6' do
219
+ shell("mysql -NBe \"SHOW GRANTS FOR 'test'@'::1/128'\"") do |r|
220
+ r.stdout.should =~ /GRANT ALL PRIVILEGES ON `test`.* TO 'test'@'::1\/128'/
221
+ r.stderr.should be_empty
222
+ r.exit_code.should be_zero
223
+ end
224
+ end
225
+ end
226
+
227
+ describe 'complex test' do
228
+ it 'setup mysql::server' do
229
+ pp = <<-EOS
230
+ $dbSubnet = '10.10.10.%'
231
+
232
+ mysql_database { 'foo':
233
+ ensure => present,
234
+ }
235
+
236
+ exec { 'mysql-create-table':
237
+ command => '/usr/bin/mysql -NBe "CREATE TABLE foo.bar (name VARCHAR(20))"',
238
+ environment => "HOME=${::root_home}",
239
+ unless => '/usr/bin/mysql -NBe "SELECT 1 FROM foo.bar LIMIT 1;"',
240
+ require => Mysql_database['foo'],
241
+ }
242
+
243
+ Mysql_grant {
244
+ ensure => present,
245
+ options => ['GRANT'],
246
+ privileges => ['ALL'],
247
+ table => '*.*',
248
+ require => [ Mysql_database['foo'], Exec['mysql-create-table'] ],
249
+ }
250
+
251
+ mysql_grant { "user1@${dbSubnet}/*.*":
252
+ user => "user1@${dbSubnet}",
253
+ }
254
+ mysql_grant { "user2@${dbSubnet}/foo.bar":
255
+ privileges => ['SELECT', 'INSERT', 'UPDATE'],
256
+ user => "user2@${dbSubnet}",
257
+ table => 'foo.bar',
258
+ }
259
+ mysql_grant { "user3@${dbSubnet}/foo.*":
260
+ privileges => ['SELECT', 'INSERT', 'UPDATE'],
261
+ user => "user3@${dbSubnet}",
262
+ table => 'foo.*',
263
+ }
264
+ mysql_grant { 'web@%/*.*':
265
+ user => 'web@%',
266
+ }
267
+ mysql_grant { "web@${dbSubnet}/*.*":
268
+ user => "web@${dbSubnet}",
269
+ }
270
+ mysql_grant { "web@${fqdn}/*.*":
271
+ user => "web@${fqdn}",
272
+ }
273
+ mysql_grant { 'web@localhost/*.*':
274
+ user => 'web@localhost',
275
+ }
276
+ EOS
277
+
278
+ puppet_apply(pp) do |r|
279
+ r.exit_code.should_not == 1
280
+ r.refresh
281
+ r.exit_code.should be_zero
282
+ end
283
+ end
284
+ end
285
+
286
+ describe 'lower case privileges' do
287
+ it 'create ALL privs' do
288
+ pp = <<-EOS
289
+ mysql_grant { 'lowercase@localhost/*.*':
290
+ user => 'lowercase@localhost',
291
+ privileges => 'ALL',
292
+ table => '*.*',
293
+ }
294
+ EOS
295
+
296
+ puppet_apply(pp)
297
+ end
298
+
299
+ it 'create lowercase all privs' do
300
+ pp = <<-EOS
301
+ mysql_grant { 'lowercase@localhost/*.*':
302
+ user => 'lowercase@localhost',
303
+ privileges => 'all',
304
+ table => '*.*',
305
+ }
306
+ EOS
307
+
308
+ puppet_apply(pp) do |r|
309
+ r.exit_code.should be_zero
310
+ end
311
+ end
312
+ end
313
+
314
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper_system'
2
+
3
+ describe 'mysql_user' do
4
+
5
+ describe 'setup' do
6
+ it 'should work with no errors' do
7
+ pp = <<-EOS
8
+ class { 'mysql::server': }
9
+ EOS
10
+
11
+ puppet_apply(pp)
12
+ end
13
+ end
14
+
15
+ describe 'adding user' do
16
+ it 'should work without errors' do
17
+ pp = <<-EOS
18
+ mysql_user { 'ashp@localhost':
19
+ password_hash => '6f8c114b58f2ce9e',
20
+ }
21
+ EOS
22
+
23
+ puppet_apply(pp)
24
+ end
25
+
26
+ it 'should find the user' do
27
+ shell("mysql -NBe \"select '1' from mysql.user where CONCAT(user, '@', host) = 'ashp@localhost'\"") do |r|
28
+ r.stdout.should =~ /^1$/
29
+ r.stderr.should be_empty
30
+ r.exit_code.should be_zero
31
+ end
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'the mysql_password function' do
4
+ before :all do
5
+ Puppet::Parser::Functions.autoloader.loadall
6
+ end
7
+
8
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
9
+
10
+ it 'should exist' do
11
+ Puppet::Parser::Functions.function('mysql_password').should == 'function_mysql_password'
12
+ end
13
+
14
+ it 'should raise a ParseError if there is less than 1 arguments' do
15
+ lambda { scope.function_mysql_password([]) }.should( raise_error(Puppet::ParseError))
16
+ end
17
+
18
+ it 'should raise a ParseError if there is more than 1 arguments' do
19
+ lambda { scope.function_mysql_password(%w(foo bar)) }.should( raise_error(Puppet::ParseError))
20
+ end
21
+
22
+ it 'should convert password into a hash' do
23
+ result = scope.function_mysql_password(%w(password))
24
+ result.should(eq('*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19'))
25
+ end
26
+
27
+ end
@@ -0,0 +1,77 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Puppet::Parser::Functions.function(:mysql_deepmerge) do
6
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
7
+
8
+ describe 'when calling mysql_deepmerge from puppet' do
9
+ it "should not compile when no arguments are passed" do
10
+ pending("Fails on 2.6.x, see bug #15912") if Puppet.version =~ /^2\.6\./
11
+ Puppet[:code] = '$x = mysql_deepmerge()'
12
+ expect {
13
+ scope.compiler.compile
14
+ }.to raise_error(Puppet::ParseError, /wrong number of arguments/)
15
+ end
16
+
17
+ it "should not compile when 1 argument is passed" do
18
+ pending("Fails on 2.6.x, see bug #15912") if Puppet.version =~ /^2\.6\./
19
+ Puppet[:code] = "$my_hash={'one' => 1}\n$x = mysql_deepmerge($my_hash)"
20
+ expect {
21
+ scope.compiler.compile
22
+ }.to raise_error(Puppet::ParseError, /wrong number of arguments/)
23
+ end
24
+ end
25
+
26
+ describe 'when calling mysql_deepmerge on the scope instance' do
27
+ it 'should require all parameters are hashes' do
28
+ expect { new_hash = scope.function_mysql_deepmerge([{}, '2'])}.to raise_error(Puppet::ParseError, /unexpected argument type String/)
29
+ expect { new_hash = scope.function_mysql_deepmerge([{}, 2])}.to raise_error(Puppet::ParseError, /unexpected argument type Fixnum/)
30
+ end
31
+
32
+ it 'should accept empty strings as puppet undef' do
33
+ expect { new_hash = scope.function_mysql_deepmerge([{}, ''])}.not_to raise_error
34
+ end
35
+
36
+ it 'should be able to mysql_deepmerge two hashes' do
37
+ new_hash = scope.function_mysql_deepmerge([{'one' => '1', 'two' => '1'}, {'two' => '2', 'three' => '2'}])
38
+ new_hash['one'].should == '1'
39
+ new_hash['two'].should == '2'
40
+ new_hash['three'].should == '2'
41
+ end
42
+
43
+ it 'should mysql_deepmerge multiple hashes' do
44
+ hash = scope.function_mysql_deepmerge([{'one' => 1}, {'one' => '2'}, {'one' => '3'}])
45
+ hash['one'].should == '3'
46
+ end
47
+
48
+ it 'should accept empty hashes' do
49
+ scope.function_mysql_deepmerge([{},{},{}]).should == {}
50
+ end
51
+
52
+ it 'should mysql_deepmerge subhashes' do
53
+ hash = scope.function_mysql_deepmerge([{'one' => 1}, {'two' => 2, 'three' => { 'four' => 4 } }])
54
+ hash['one'].should == 1
55
+ hash['two'].should == 2
56
+ hash['three'].should == { 'four' => 4 }
57
+ end
58
+
59
+ it 'should append to subhashes' do
60
+ hash = scope.function_mysql_deepmerge([{'one' => { 'two' => 2 } }, { 'one' => { 'three' => 3 } }])
61
+ hash['one'].should == { 'two' => 2, 'three' => 3 }
62
+ end
63
+
64
+ it 'should append to subhashes 2' do
65
+ hash = scope.function_mysql_deepmerge([{'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }, {'two' => 'dos', 'three' => { 'five' => 5 } }])
66
+ hash['one'].should == 1
67
+ hash['two'].should == 'dos'
68
+ hash['three'].should == { 'four' => 4, 'five' => 5 }
69
+ end
70
+
71
+ it 'should append to subhashes 3' do
72
+ hash = scope.function_mysql_deepmerge([{ 'key1' => { 'a' => 1, 'b' => 2 }, 'key2' => { 'c' => 3 } }, { 'key1' => { 'b' => 99 } }])
73
+ hash['key1'].should == { 'a' => 1, 'b' => 99 }
74
+ hash['key2'].should == { 'c' => 3 }
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+
3
+ provider_class = Puppet::Type.type(:database).provider(:mysql)
4
+
5
+ describe provider_class do
6
+ subject { provider_class }
7
+
8
+ let(:root_home) { '/root' }
9
+ let(:defaults_file) { '--defaults-extra-file=/root/.my.cnf' }
10
+
11
+ let(:raw_databases) do
12
+ <<-SQL_OUTPUT
13
+ information_schema
14
+ mydb
15
+ mysql
16
+ performance_schema
17
+ test
18
+ SQL_OUTPUT
19
+ end
20
+
21
+ let(:parsed_databases) { %w(information_schema mydb mysql performance_schema test) }
22
+
23
+ before :each do
24
+ @resource = Puppet::Type::Database.new(
25
+ { :charset => 'utf8', :name => 'new_database' }
26
+ )
27
+ @provider = provider_class.new(@resource)
28
+ Facter.stubs(:value).with(:root_home).returns(root_home)
29
+ Puppet::Util.stubs(:which).with('mysql').returns('/usr/bin/mysql')
30
+ subject.stubs(:which).with('mysql').returns('/usr/bin/mysql')
31
+ subject.stubs(:defaults_file).returns('--defaults-extra-file=/root/.my.cnf')
32
+ end
33
+
34
+ describe 'self.instances' do
35
+ it 'returns an array of databases' do
36
+ subject.stubs(:mysql).with([defaults_file, '-NBe', 'show databases']).returns(raw_databases)
37
+
38
+ databases = subject.instances.collect {|x| x.name }
39
+ parsed_databases.should match_array(databases)
40
+ end
41
+ end
42
+
43
+ describe 'create' do
44
+ it 'makes a user' do
45
+ subject.expects(:mysql).with([defaults_file, '-NBe', "create database `#{@resource[:name]}` character set #{@resource[:charset]}"])
46
+ @provider.create
47
+ end
48
+ end
49
+
50
+ describe 'destroy' do
51
+ it 'removes a user if present' do
52
+ subject.expects(:mysqladmin).with([defaults_file, '-f', 'drop', "#{@resource[:name]}"])
53
+ @provider.destroy
54
+ end
55
+ end
56
+
57
+ describe 'charset' do
58
+ it 'returns a charset' do
59
+ subject.expects(:mysql).with([defaults_file, '-NBe', "show create database `#{@resource[:name]}`"]).returns('mydbCREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8 */')
60
+ @provider.charset.should == 'utf8'
61
+ end
62
+ end
63
+
64
+ describe 'charset=' do
65
+ it 'changes the charset' do
66
+ subject.expects(:mysql).with([defaults_file, '-NBe', "alter database `#{@resource[:name]}` CHARACTER SET blah"]).returns('0')
67
+
68
+ @provider.charset=('blah')
69
+ end
70
+ end
71
+
72
+ describe 'exists?' do
73
+ it 'checks if user exists' do
74
+ subject.expects(:mysql).with([defaults_file, '-NBe', 'show databases']).returns('information_schema\nmydb\nmysql\nperformance_schema\ntest')
75
+ @provider.exists?
76
+ end
77
+ end
78
+
79
+ describe 'self.defaults_file' do
80
+ it 'sets --defaults-extra-file' do
81
+ File.stubs(:file?).with('#{root_home}/.my.cnf').returns(true)
82
+ @provider.defaults_file.should == '--defaults-extra-file=/root/.my.cnf'
83
+ end
84
+ end
85
+
86
+ end