freighthop 0.0.6 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Puppetfile +1 -0
- data/Puppetfile.lock +3 -0
- data/Vagrantfile +1 -1
- data/bin/fh +2 -78
- data/lib/freighthop/cli/help.rb +69 -0
- data/lib/freighthop/cli/ssh.rb +46 -0
- data/lib/freighthop/cli/vagrant.rb +26 -0
- data/lib/freighthop/cli.rb +40 -0
- data/lib/freighthop/config.rb +4 -0
- data/lib/freighthop/vagrant_env.rb +24 -0
- data/lib/freighthop/version.rb +1 -1
- data/lib/freighthop.rb +7 -4
- data/local_modules/freighthop/manifests/database/mysql.pp +20 -0
- data/local_modules/freighthop/manifests/database/postgres.pp +6 -6
- data/local_modules/freighthop/manifests/database.pp +6 -8
- data/local_modules/freighthop/manifests/init.pp +1 -8
- data/local_modules/freighthop/manifests/params.pp +0 -3
- data/modules/apt/CHANGELOG +12 -2
- data/modules/apt/Gemfile +6 -5
- data/modules/apt/Gemfile.lock +40 -5
- data/modules/apt/Modulefile +1 -1
- data/modules/apt/README.md +2 -1
- data/modules/apt/Rakefile +1 -0
- data/modules/apt/manifests/init.pp +4 -1
- data/modules/apt/manifests/ppa.pp +1 -1
- data/modules/apt/manifests/update.pp +1 -0
- data/modules/apt/metadata.json +21 -13
- data/modules/apt/spec/defines/ppa_spec.rb +3 -3
- data/modules/apt/spec/defines/source_spec.rb +2 -2
- data/modules/apt/spec/spec_helper_system.rb +30 -0
- data/modules/apt/spec/system/apt_builddep_spec.rb +38 -0
- data/modules/apt/spec/system/apt_key_spec.rb +53 -0
- data/modules/apt/spec/system/apt_ppa_spec.rb +59 -0
- data/modules/apt/spec/system/apt_source_spec.rb +51 -0
- data/modules/apt/spec/system/basic_spec.rb +10 -0
- data/modules/apt/spec/system/class_spec.rb +20 -0
- data/modules/apt/templates/source.list.erb +2 -2
- data/modules/freighthop/manifests/database/mysql.pp +20 -0
- data/modules/freighthop/manifests/database/postgres.pp +6 -6
- data/modules/freighthop/manifests/database.pp +6 -8
- data/modules/freighthop/manifests/init.pp +1 -8
- data/modules/freighthop/manifests/params.pp +0 -3
- data/modules/mysql/CHANGELOG +403 -0
- data/modules/mysql/Gemfile +24 -0
- data/modules/mysql/Gemfile.lock +129 -0
- data/modules/mysql/LICENSE +201 -0
- data/modules/mysql/Modulefile +9 -0
- data/modules/mysql/README.md +492 -0
- data/modules/mysql/Rakefile +2 -0
- data/modules/mysql/TODO +8 -0
- data/modules/mysql/files/mysqltuner.pl +966 -0
- data/modules/mysql/lib/puppet/parser/functions/mysql_deepmerge.rb +52 -0
- data/modules/mysql/lib/puppet/parser/functions/mysql_password.rb +15 -0
- data/modules/mysql/lib/puppet/parser/functions/mysql_strip_hash.rb +21 -0
- data/modules/mysql/lib/puppet/provider/database/mysql.rb +52 -0
- data/modules/mysql/lib/puppet/provider/database_grant/mysql.rb +210 -0
- data/modules/mysql/lib/puppet/provider/database_user/mysql.rb +76 -0
- data/modules/mysql/lib/puppet/provider/mysql.rb +67 -0
- data/modules/mysql/lib/puppet/provider/mysql_database/mysql.rb +68 -0
- data/modules/mysql/lib/puppet/provider/mysql_grant/mysql.rb +115 -0
- data/modules/mysql/lib/puppet/provider/mysql_user/mysql.rb +115 -0
- data/modules/mysql/lib/puppet/type/database.rb +21 -0
- data/modules/mysql/lib/puppet/type/database_grant.rb +79 -0
- data/modules/mysql/lib/puppet/type/database_user.rb +31 -0
- data/modules/mysql/lib/puppet/type/mysql_database.rb +22 -0
- data/modules/mysql/lib/puppet/type/mysql_grant.rb +72 -0
- data/modules/mysql/lib/puppet/type/mysql_user.rb +45 -0
- data/modules/mysql/manifests/backup.pp +31 -0
- data/modules/mysql/manifests/bindings/java.pp +10 -0
- data/modules/mysql/manifests/bindings/perl.pp +10 -0
- data/modules/mysql/manifests/bindings/php.pp +10 -0
- data/modules/mysql/manifests/bindings/python.pp +10 -0
- data/modules/mysql/manifests/bindings/ruby.pp +10 -0
- data/modules/mysql/manifests/bindings.pp +33 -0
- data/modules/mysql/manifests/client/install.pp +8 -0
- data/modules/mysql/manifests/client.pp +27 -0
- data/modules/mysql/manifests/db.pp +59 -0
- data/modules/mysql/manifests/init.pp +100 -0
- data/modules/mysql/manifests/params.pp +230 -0
- data/modules/mysql/manifests/server/account_security.pp +22 -0
- data/modules/mysql/manifests/server/backup.pp +56 -0
- data/modules/mysql/manifests/server/config.pp +31 -0
- data/modules/mysql/manifests/server/install.pp +9 -0
- data/modules/mysql/manifests/server/monitor.pp +24 -0
- data/modules/mysql/manifests/server/mysqltuner.pp +9 -0
- data/modules/mysql/manifests/server/providers.pp +8 -0
- data/modules/mysql/manifests/server/root_password.pp +21 -0
- data/modules/mysql/manifests/server/service.pp +19 -0
- data/modules/mysql/manifests/server.pp +69 -0
- data/modules/mysql/metadata.json +289 -0
- data/modules/mysql/spec/classes/mysql_bindings_spec.rb +58 -0
- data/modules/mysql/spec/classes/mysql_client_spec.rb +16 -0
- data/modules/mysql/spec/classes/mysql_server_account_security_spec.rb +41 -0
- data/modules/mysql/spec/classes/mysql_server_backup_spec.rb +112 -0
- data/modules/mysql/spec/classes/mysql_server_monitor_spec.rb +31 -0
- data/modules/mysql/spec/classes/mysql_server_mysqltuner_spec.rb +5 -0
- data/modules/mysql/spec/classes/mysql_server_spec.rb +162 -0
- data/modules/mysql/spec/defines/mysql_db_spec.rb +51 -0
- data/modules/mysql/spec/spec.opts +6 -0
- data/modules/mysql/spec/spec_helper.rb +5 -0
- data/modules/mysql/spec/spec_helper_system.rb +28 -0
- data/modules/mysql/spec/system/mysql_account_delete_spec.rb +35 -0
- data/modules/mysql/spec/system/mysql_backup_spec.rb +77 -0
- data/modules/mysql/spec/system/mysql_bindings_spec.rb +90 -0
- data/modules/mysql/spec/system/mysql_db_spec.rb +61 -0
- data/modules/mysql/spec/system/mysql_server_monitor_spec.rb +30 -0
- data/modules/mysql/spec/system/mysql_server_root_password_spec.rb +71 -0
- data/modules/mysql/spec/system/mysql_server_spec.rb +85 -0
- data/modules/mysql/spec/system/types/mysql_grant_spec.rb +314 -0
- data/modules/mysql/spec/system/types/mysql_user_spec.rb +35 -0
- data/modules/mysql/spec/unit/mysql_password_spec.rb +27 -0
- data/modules/mysql/spec/unit/puppet/functions/mysql_deepmerge_spec.rb +77 -0
- data/modules/mysql/spec/unit/puppet/provider/database/mysql_spec.rb +86 -0
- data/modules/mysql/spec/unit/puppet/provider/database_grant/mysql_spec.rb +95 -0
- data/modules/mysql/spec/unit/puppet/provider/database_user/mysql_spec.rb +119 -0
- data/modules/mysql/spec/unit/puppet/provider/mysql_database/mysql_spec.rb +118 -0
- data/modules/mysql/spec/unit/puppet/provider/mysql_user/mysql_spec.rb +130 -0
- data/modules/mysql/spec/unit/puppet/type/mysql_database_spec.rb +29 -0
- data/modules/mysql/spec/unit/puppet/type/mysql_user_spec.rb +30 -0
- data/modules/mysql/templates/my.cnf.erb +17 -0
- data/modules/mysql/templates/my.cnf.pass.erb +7 -0
- data/modules/mysql/templates/my.conf.cnf.erb +17 -0
- data/modules/mysql/templates/mysqlbackup.sh.erb +57 -0
- data/modules/mysql/tests/backup.pp +8 -0
- data/modules/mysql/tests/bindings.pp +3 -0
- data/modules/mysql/tests/init.pp +1 -0
- data/modules/mysql/tests/java.pp +1 -0
- data/modules/mysql/tests/mysql_database.pp +12 -0
- data/modules/mysql/tests/mysql_grant.pp +5 -0
- data/modules/mysql/tests/mysql_user.pp +23 -0
- data/modules/mysql/tests/perl.pp +1 -0
- data/modules/mysql/tests/python.pp +1 -0
- data/modules/mysql/tests/ruby.pp +1 -0
- data/modules/mysql/tests/server/account_security.pp +4 -0
- data/modules/mysql/tests/server/config.pp +11 -0
- data/modules/mysql/tests/server.pp +3 -0
- data/modules/postgresql/Changelog +191 -0
- data/modules/postgresql/Gemfile +1 -0
- data/modules/postgresql/Gemfile.lock +9 -0
- data/modules/postgresql/LICENSE +198 -12
- data/modules/postgresql/Modulefile +2 -2
- data/modules/postgresql/NOTICE +14 -0
- data/modules/postgresql/README.md +435 -184
- data/modules/postgresql/files/validate_postgresql_connection.sh +31 -0
- data/modules/postgresql/lib/puppet/provider/postgresql_conf/parsed.rb +37 -0
- data/modules/postgresql/lib/puppet/provider/postgresql_psql/ruby.rb +4 -0
- data/modules/postgresql/lib/puppet/type/postgresql_conf.rb +31 -0
- data/modules/postgresql/lib/puppet/type/postgresql_psql.rb +4 -0
- data/modules/postgresql/manifests/client.pp +17 -16
- data/modules/postgresql/manifests/globals.pp +95 -0
- data/modules/postgresql/manifests/lib/devel.pp +15 -0
- data/modules/postgresql/manifests/lib/java.pp +15 -0
- data/modules/postgresql/manifests/lib/python.pp +13 -0
- data/modules/postgresql/manifests/params.pp +127 -222
- data/modules/postgresql/manifests/repo/apt_postgresql_org.pp +30 -0
- data/modules/postgresql/manifests/repo/yum_postgresql_org.pp +38 -0
- data/modules/postgresql/manifests/repo.pp +22 -0
- data/modules/postgresql/manifests/server/config.pp +113 -0
- data/modules/postgresql/manifests/server/config_entry.pp +43 -0
- data/modules/postgresql/manifests/server/contrib.pp +27 -0
- data/modules/postgresql/manifests/server/database.pp +75 -0
- data/modules/postgresql/manifests/server/database_grant.pp +18 -0
- data/modules/postgresql/manifests/server/db.pp +36 -0
- data/modules/postgresql/manifests/server/firewall.pp +21 -0
- data/modules/postgresql/manifests/server/grant.pp +81 -0
- data/modules/postgresql/manifests/server/initdb.pp +52 -0
- data/modules/postgresql/manifests/server/install.pp +49 -0
- data/modules/postgresql/manifests/server/passwd.pp +34 -0
- data/modules/postgresql/manifests/server/pg_hba_rule.pp +54 -0
- data/modules/postgresql/manifests/server/plperl.pp +27 -0
- data/modules/postgresql/manifests/server/reload.pp +15 -0
- data/modules/postgresql/manifests/{role.pp → server/role.pp} +19 -33
- data/modules/postgresql/manifests/server/service.pp +40 -0
- data/modules/postgresql/manifests/{table_grant.pp → server/table_grant.pp} +4 -4
- data/modules/postgresql/manifests/server/tablespace.pp +42 -0
- data/modules/postgresql/manifests/server.pp +61 -83
- data/modules/postgresql/manifests/validate_db_connection.pp +49 -50
- data/modules/postgresql/metadata.json +123 -73
- data/modules/postgresql/spec/spec_helper_system.rb +13 -1
- data/modules/postgresql/spec/system/client_spec.rb +22 -0
- data/modules/postgresql/spec/system/common_patterns_spec.rb +53 -0
- data/modules/postgresql/spec/system/contrib_spec.rb +33 -0
- data/modules/postgresql/spec/system/lib/devel_spec.rb +22 -0
- data/modules/postgresql/spec/system/lib/java_spec.rb +25 -0
- data/modules/postgresql/spec/system/lib/python_spec.rb +24 -0
- data/modules/postgresql/spec/system/postgresql_psql_spec.rb +51 -0
- data/modules/postgresql/spec/system/server/config_entry_spec.rb +32 -0
- data/modules/postgresql/spec/system/server/database_grant_spec.rb +54 -0
- data/modules/postgresql/spec/system/server/database_spec.rb +35 -0
- data/modules/postgresql/spec/system/server/db_spec.rb +143 -0
- data/modules/postgresql/spec/system/server/grant_spec.rb +55 -0
- data/modules/postgresql/spec/system/server/pg_hba_rule_spec.rb +85 -0
- data/modules/postgresql/spec/system/server/plperl_spec.rb +29 -0
- data/modules/postgresql/spec/system/server/role_spec.rb +103 -0
- data/modules/postgresql/spec/system/server/table_grant_spec.rb +72 -0
- data/modules/postgresql/spec/system/server/tablespace_spec.rb +74 -0
- data/modules/postgresql/spec/system/server_spec.rb +217 -0
- data/modules/postgresql/spec/system/validate_db_connection_spec.rb +91 -0
- data/modules/postgresql/spec/unit/classes/client_spec.rb +27 -2
- data/modules/postgresql/spec/unit/classes/globals_spec.rb +28 -0
- data/modules/postgresql/spec/unit/classes/lib/devel_spec.rb +12 -0
- data/modules/postgresql/spec/unit/classes/{postgresql_java_spec.rb → lib/java_spec.rb} +9 -19
- data/modules/postgresql/spec/unit/classes/lib/python_spec.rb +31 -0
- data/modules/postgresql/spec/unit/classes/params_spec.rb +2 -1
- data/modules/postgresql/spec/unit/classes/repo_spec.rb +17 -0
- data/modules/postgresql/spec/unit/classes/server/contrib_spec.rb +42 -0
- data/modules/postgresql/spec/unit/classes/server/initdb_spec.rb +28 -0
- data/modules/postgresql/spec/unit/classes/server/plperl_spec.rb +45 -0
- data/modules/postgresql/spec/unit/classes/server_spec.rb +83 -2
- data/modules/postgresql/spec/unit/defines/server/config_entry_spec.rb +23 -0
- data/modules/postgresql/spec/unit/defines/server/database_grant_spec.rb +26 -0
- data/modules/postgresql/spec/unit/defines/server/database_spec.rb +16 -0
- data/modules/postgresql/spec/unit/defines/server/db_spec.rb +28 -0
- data/modules/postgresql/spec/unit/defines/{database_grant_spec.rb → server/grant_spec.rb} +7 -4
- data/modules/postgresql/spec/unit/defines/{pg_hba_rule_spec.rb → server/pg_hba_rule_spec.rb} +59 -2
- data/modules/postgresql/spec/unit/defines/server/role_spec.rb +23 -0
- data/modules/postgresql/spec/unit/defines/server/table_grant_spec.rb +27 -0
- data/modules/postgresql/spec/unit/defines/server/tablespace_spec.rb +23 -0
- data/modules/postgresql/spec/unit/defines/validate_db_connection_spec.rb +22 -9
- data/modules/postgresql/spec/unit/provider/postgresql_conf/parsed_spec.rb +112 -0
- data/modules/postgresql/spec/unit/puppet/provider/postgresql_psql/ruby_spec.rb +29 -0
- data/modules/postgresql/spec/unit/puppet/type/postgresql_psql_spec.rb +1 -0
- data/modules/postgresql/spec/unit/type/postgresql_conf_spec.rb +50 -0
- metadata +177 -53
- data/modules/postgresql/examples/init.pp +0 -1
- data/modules/postgresql/examples/official-postgresql-repos.pp +0 -19
- data/modules/postgresql/examples/postgresql_database.pp +0 -22
- data/modules/postgresql/examples/postgresql_db.pp +0 -30
- data/modules/postgresql/examples/postgresql_grant.pp +0 -14
- data/modules/postgresql/examples/postgresql_pg_hba_rule.pp +0 -18
- data/modules/postgresql/examples/postgresql_pgconf_extras.pp +0 -19
- data/modules/postgresql/examples/postgresql_tablespace.pp +0 -73
- data/modules/postgresql/examples/postgresql_user.pp +0 -28
- data/modules/postgresql/examples/server.pp +0 -10
- data/modules/postgresql/lib/facter/postgres_default_version.rb +0 -69
- data/modules/postgresql/manifests/config/afterservice.pp +0 -47
- data/modules/postgresql/manifests/config/beforeservice.pp +0 -171
- data/modules/postgresql/manifests/config.pp +0 -74
- data/modules/postgresql/manifests/contrib.pp +0 -29
- data/modules/postgresql/manifests/database.pp +0 -85
- data/modules/postgresql/manifests/database_grant.pp +0 -35
- data/modules/postgresql/manifests/database_user.pp +0 -60
- data/modules/postgresql/manifests/db.pp +0 -77
- data/modules/postgresql/manifests/devel.pp +0 -27
- data/modules/postgresql/manifests/grant.pp +0 -77
- data/modules/postgresql/manifests/init.pp +0 -145
- data/modules/postgresql/manifests/initdb.pp +0 -52
- data/modules/postgresql/manifests/java.pp +0 -29
- data/modules/postgresql/manifests/package_source/apt_postgresql_org.pp +0 -21
- data/modules/postgresql/manifests/package_source/yum_postgresql_org.pp +0 -30
- data/modules/postgresql/manifests/pg_hba.pp +0 -19
- data/modules/postgresql/manifests/pg_hba_rule.pp +0 -41
- data/modules/postgresql/manifests/plperl.pp +0 -24
- data/modules/postgresql/manifests/psql.pp +0 -56
- data/modules/postgresql/manifests/python.pp +0 -18
- data/modules/postgresql/manifests/tablespace.pp +0 -59
- data/modules/postgresql/spec/system/install_spec.rb +0 -707
- data/modules/postgresql/spec/system/non_defaults_spec.rb +0 -114
- data/modules/postgresql/spec/unit/classes/contrib_spec.rb +0 -11
- data/modules/postgresql/spec/unit/classes/devel_spec.rb +0 -11
- data/modules/postgresql/spec/unit/classes/init_spec.rb +0 -71
- data/modules/postgresql/spec/unit/classes/postgresql_python_spec.rb +0 -53
- data/modules/postgresql/spec/unit/defines/database_spec.rb +0 -14
- data/modules/postgresql/spec/unit/defines/database_user_spec.rb +0 -19
- data/modules/postgresql/spec/unit/defines/db_spec.rb +0 -20
- data/modules/postgresql/spec/unit/defines/pg_hba_spec.rb +0 -20
- data/modules/postgresql/spec/unit/defines/psql_spec.rb +0 -20
- data/modules/postgresql/spec/unit/defines/role_spec.rb +0 -14
- data/modules/postgresql/spec/unit/defines/tablespace_spec.rb +0 -19
- data/modules/postgresql/spec/unit/facts/postgres_default_version_spec.rb +0 -14
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'puppet'
|
2
|
+
require 'mocha/api'
|
3
|
+
require 'spec_helper'
|
4
|
+
RSpec.configure do |config|
|
5
|
+
config.mock_with :mocha
|
6
|
+
end
|
7
|
+
provider_class = Puppet::Type.type(:database_grant).provider(:mysql)
|
8
|
+
describe provider_class do
|
9
|
+
let(:root_home) { '/root' }
|
10
|
+
|
11
|
+
before :each do
|
12
|
+
@resource = Puppet::Type::Database_grant.new(
|
13
|
+
{ :privileges => 'all', :provider => 'mysql', :name => 'user@host'}
|
14
|
+
)
|
15
|
+
@provider = provider_class.new(@resource)
|
16
|
+
Facter.stubs(:value).with(:root_home).returns(root_home)
|
17
|
+
File.stubs(:file?).with("#{root_home}/.my.cnf").returns(true)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should query privileges from the database' do
|
21
|
+
provider_class.expects(:mysql) .with(["--defaults-extra-file=#{root_home}/.my.cnf", 'mysql', '-Be', 'describe user']).returns <<-EOT
|
22
|
+
Field Type Null Key Default Extra
|
23
|
+
Host char(60) NO PRI
|
24
|
+
User char(16) NO PRI
|
25
|
+
Password char(41) NO
|
26
|
+
Select_priv enum('N','Y') NO N
|
27
|
+
Insert_priv enum('N','Y') NO N
|
28
|
+
Update_priv enum('N','Y') NO N
|
29
|
+
EOT
|
30
|
+
provider_class.expects(:mysql).with(["--defaults-extra-file=#{root_home}/.my.cnf", 'mysql', '-Be', 'describe db']).returns <<-EOT
|
31
|
+
Field Type Null Key Default Extra
|
32
|
+
Host char(60) NO PRI
|
33
|
+
Db char(64) NO PRI
|
34
|
+
User char(16) NO PRI
|
35
|
+
Select_priv enum('N','Y') NO N
|
36
|
+
Insert_priv enum('N','Y') NO N
|
37
|
+
Update_priv enum('N','Y') NO N
|
38
|
+
EOT
|
39
|
+
provider_class.user_privs.should == %w(Select_priv Insert_priv Update_priv)
|
40
|
+
provider_class.db_privs.should == %w(Select_priv Insert_priv Update_priv)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should query set privileges' do
|
44
|
+
provider_class.expects(:mysql).with(["--defaults-extra-file=#{root_home}/.my.cnf", 'mysql', '-Be', "select * from mysql.user where user='user' and host='host'"]).returns <<-EOT
|
45
|
+
Host User Password Select_priv Insert_priv Update_priv
|
46
|
+
host user Y N Y
|
47
|
+
EOT
|
48
|
+
@provider.privileges.should == %w(Select_priv Update_priv)
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should recognize when all privileges are set' do
|
52
|
+
provider_class.expects(:mysql).with(["--defaults-extra-file=#{root_home}/.my.cnf", 'mysql', '-Be', "select * from mysql.user where user='user' and host='host'"]).returns <<-EOT
|
53
|
+
Host User Password Select_priv Insert_priv Update_priv
|
54
|
+
host user Y Y Y
|
55
|
+
EOT
|
56
|
+
@provider.all_privs_set?.should == true
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should recognize when all privileges are not set' do
|
60
|
+
provider_class.expects(:mysql).with(["--defaults-extra-file=#{root_home}/.my.cnf", 'mysql', '-Be', "select * from mysql.user where user='user' and host='host'"]).returns <<-EOT
|
61
|
+
Host User Password Select_priv Insert_priv Update_priv
|
62
|
+
host user Y N Y
|
63
|
+
EOT
|
64
|
+
@provider.all_privs_set?.should == false
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should be able to set all privileges' do
|
68
|
+
provider_class.expects(:mysql).with(["--defaults-extra-file=#{root_home}/.my.cnf", 'mysql', '-NBe', "SELECT '1' FROM user WHERE user='user' AND host='host'"]).returns "1\n"
|
69
|
+
provider_class.expects(:mysql).with(["--defaults-extra-file=#{root_home}/.my.cnf", 'mysql', '-Be', "update user set Select_priv = 'Y', Insert_priv = 'Y', Update_priv = 'Y' where user='user' and host='host'"])
|
70
|
+
provider_class.expects(:mysqladmin).with(%W(--defaults-extra-file=#{root_home}/.my.cnf flush-privileges))
|
71
|
+
@provider.privileges=(%w(all))
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should be able to set partial privileges' do
|
75
|
+
provider_class.expects(:mysql).with(["--defaults-extra-file=#{root_home}/.my.cnf", 'mysql', '-NBe', "SELECT '1' FROM user WHERE user='user' AND host='host'"]).returns "1\n"
|
76
|
+
provider_class.expects(:mysql).with(["--defaults-extra-file=#{root_home}/.my.cnf", 'mysql', '-Be', "update user set Select_priv = 'Y', Insert_priv = 'N', Update_priv = 'Y' where user='user' and host='host'"])
|
77
|
+
provider_class.expects(:mysqladmin).with(%W(--defaults-extra-file=#{root_home}/.my.cnf flush-privileges))
|
78
|
+
@provider.privileges=(%w(Select_priv Update_priv))
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'should be case insensitive' do
|
82
|
+
provider_class.expects(:mysql).with(["--defaults-extra-file=#{root_home}/.my.cnf", 'mysql', '-NBe', "SELECT '1' FROM user WHERE user='user' AND host='host'"]).returns "1\n"
|
83
|
+
provider_class.expects(:mysql).with(["--defaults-extra-file=#{root_home}/.my.cnf", 'mysql', '-Be', "update user set Select_priv = 'Y', Insert_priv = 'Y', Update_priv = 'Y' where user='user' and host='host'"])
|
84
|
+
provider_class.expects(:mysqladmin).with(["--defaults-extra-file=#{root_home}/.my.cnf", 'flush-privileges'])
|
85
|
+
@provider.privileges=(%w(SELECT_PRIV insert_priv UpDaTe_pRiV))
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'should not pass --defaults-extra-file if $root_home/.my.cnf is absent' do
|
89
|
+
File.stubs(:file?).with("#{root_home}/.my.cnf").returns(false)
|
90
|
+
provider_class.expects(:mysql).with(['mysql', '-NBe', "SELECT '1' FROM user WHERE user='user' AND host='host'"]).returns "1\n"
|
91
|
+
provider_class.expects(:mysql).with(['mysql', '-Be', "update user set Select_priv = 'Y', Insert_priv = 'N', Update_priv = 'Y' where user='user' and host='host'"])
|
92
|
+
provider_class.expects(:mysqladmin).with(%w(flush-privileges))
|
93
|
+
@provider.privileges=(%w(Select_priv Update_priv))
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
provider_class = Puppet::Type.type(:database_user).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
|
+
let(:newhash) { '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5' }
|
11
|
+
|
12
|
+
let(:raw_users) do
|
13
|
+
<<-SQL_OUTPUT
|
14
|
+
root@127.0.0.1
|
15
|
+
root@::1
|
16
|
+
@localhost
|
17
|
+
debian-sys-maint@localhost
|
18
|
+
root@localhost
|
19
|
+
usvn_user@localhost
|
20
|
+
@vagrant-ubuntu-raring-64
|
21
|
+
SQL_OUTPUT
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:parsed_users) { %w(root@127.0.0.1 root@::1 debian-sys-maint@localhost root@localhost usvn_user@localhost) }
|
25
|
+
|
26
|
+
before :each do
|
27
|
+
# password hash = mypass
|
28
|
+
@resource = Puppet::Type::Database_user.new(
|
29
|
+
{ :password_hash => '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4',
|
30
|
+
:name => 'joe@localhost',
|
31
|
+
:max_user_connections => '10'
|
32
|
+
}
|
33
|
+
)
|
34
|
+
@provider = provider_class.new(@resource)
|
35
|
+
Facter.stubs(:value).with(:root_home).returns(root_home)
|
36
|
+
Puppet::Util.stubs(:which).with('mysql').returns('/usr/bin/mysql')
|
37
|
+
subject.stubs(:which).with('mysql').returns('/usr/bin/mysql')
|
38
|
+
subject.stubs(:defaults_file).returns('--defaults-extra-file=/root/.my.cnf')
|
39
|
+
end
|
40
|
+
|
41
|
+
describe 'self.instances' do
|
42
|
+
it 'returns an array of users' do
|
43
|
+
subject.stubs(:mysql).with([defaults_file, 'mysql', "-BNeselect concat(User, '@',Host) as User from mysql.user"]).returns(raw_users)
|
44
|
+
|
45
|
+
usernames = subject.instances.collect {|x| x.name }
|
46
|
+
parsed_users.should match_array(usernames)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe 'create' do
|
51
|
+
it 'makes a user' do
|
52
|
+
subject.expects(:mysql).with([defaults_file, 'mysql', '-e', "grant usage on *.* to 'joe'@'localhost' identified by PASSWORD
|
53
|
+
'*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4' with max_user_connections 10"])
|
54
|
+
@provider.expects(:exists?).returns(true)
|
55
|
+
@provider.create.should be_true
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe 'destroy' do
|
60
|
+
it 'removes a user if present' do
|
61
|
+
subject.expects(:mysql).with([defaults_file, 'mysql', '-e', "drop user 'joe'@'localhost'"])
|
62
|
+
@provider.expects(:exists?).returns(false)
|
63
|
+
@provider.destroy.should be_true
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe 'password_hash' do
|
68
|
+
it 'returns a hash' do
|
69
|
+
subject.expects(:mysql).with([defaults_file, 'mysql', '-NBe', "select password from mysql.user where CONCAT(user, '@', host) = 'joe@localhost'"]).returns('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4')
|
70
|
+
@provider.password_hash.should == '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4'
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe 'password_hash=' do
|
75
|
+
it 'changes the hash' do
|
76
|
+
subject.expects(:mysql).with([defaults_file, 'mysql', '-e', "SET PASSWORD FOR 'joe'@'localhost' = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'"]).returns('0')
|
77
|
+
|
78
|
+
@provider.expects(:password_hash).returns('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5')
|
79
|
+
@provider.password_hash=('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5')
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe 'max_user_connections' do
|
84
|
+
it 'returns max user connections' do
|
85
|
+
subject.expects(:mysql).with([defaults_file, 'mysql', '-NBe', "select max_user_connections from mysql.user where CONCAT(user, '@', host) = 'joe@localhost'"]).returns('10')
|
86
|
+
@provider.max_user_connections.should == '10'
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe 'max_user_connections=' do
|
91
|
+
it 'changes max user connections' do
|
92
|
+
subject.expects(:mysql).with([defaults_file, 'mysql', '-e', "grant usage on *.* to 'joe'@'localhost' with max_user_connections 42"]).returns('0')
|
93
|
+
@provider.expects(:max_user_connections).returns('42')
|
94
|
+
@provider.max_user_connections=('42')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe 'exists?' do
|
99
|
+
it 'checks if user exists' do
|
100
|
+
subject.expects(:mysql).with([defaults_file, 'mysql', '-NBe', "select '1' from mysql.user where CONCAT(user, '@', host) = 'joe@localhost'"]).returns('1')
|
101
|
+
@provider.exists?.should be_true
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe 'flush' do
|
106
|
+
it 'removes cached privileges' do
|
107
|
+
subject.expects(:mysqladmin).with([defaults_file, 'flush-privileges'])
|
108
|
+
@provider.flush
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe 'self.defaults_file' do
|
113
|
+
it 'sets --defaults-extra-file' do
|
114
|
+
File.stubs(:file?).with('#{root_home}/.my.cnf').returns(true)
|
115
|
+
@provider.defaults_file.should == '--defaults-extra-file=/root/.my.cnf'
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Puppet::Type.type(:mysql_database).provider(:mysql) do
|
4
|
+
|
5
|
+
let(:defaults_file) { '--defaults-extra-file=/root/.my.cnf' }
|
6
|
+
|
7
|
+
let(:raw_databases) do
|
8
|
+
<<-SQL_OUTPUT
|
9
|
+
information_schema
|
10
|
+
mydb
|
11
|
+
mysql
|
12
|
+
performance_schema
|
13
|
+
test
|
14
|
+
SQL_OUTPUT
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:parsed_databases) { %w(information_schema mydb mysql performance_schema test) }
|
18
|
+
|
19
|
+
let(:resource) { Puppet::Type.type(:mysql_database).new(
|
20
|
+
{ :ensure => :present,
|
21
|
+
:charset => 'latin1',
|
22
|
+
:collate => 'latin1_swedish_ci',
|
23
|
+
:name => 'new_database',
|
24
|
+
:provider => described_class.name
|
25
|
+
}
|
26
|
+
)}
|
27
|
+
let(:provider) { resource.provider }
|
28
|
+
|
29
|
+
before :each do
|
30
|
+
Facter.stubs(:value).with(:root_home).returns('/root')
|
31
|
+
Puppet::Util.stubs(:which).with('mysql').returns('/usr/bin/mysql')
|
32
|
+
File.stubs(:file?).with('/root/.my.cnf').returns(true)
|
33
|
+
provider.class.stubs(:mysql).with([defaults_file, '-NBe', 'show databases']).returns('new_database')
|
34
|
+
provider.class.stubs(:mysql).with([defaults_file, '-NBe', 'show variables like "%_database"', 'new_database']).returns("character_set_database latin1\ncollation_database latin1_swedish_ci\nskip_show_database OFF")
|
35
|
+
end
|
36
|
+
|
37
|
+
let(:instance) { provider.class.instances.first }
|
38
|
+
|
39
|
+
describe 'self.instances' do
|
40
|
+
it 'returns an array of databases' do
|
41
|
+
provider.class.stubs(:mysql).with([defaults_file, '-NBe', 'show databases']).returns(raw_databases)
|
42
|
+
raw_databases.each_line do |db|
|
43
|
+
provider.class.stubs(:mysql).with([defaults_file, '-NBe', 'show variables like "%_database"', db.chomp]).returns("character_set_database latin1\ncollation_database latin1_swedish_ci\nskip_show_database OFF")
|
44
|
+
end
|
45
|
+
databases = provider.class.instances.collect {|x| x.name }
|
46
|
+
parsed_databases.should match_array(databases)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe 'self.prefetch' do
|
51
|
+
it 'exists' do
|
52
|
+
provider.class.instances
|
53
|
+
provider.class.prefetch({})
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe 'create' do
|
58
|
+
it 'makes a database' do
|
59
|
+
provider.expects(:mysql).with([defaults_file, '-NBe', "create database `#{resource[:name]}` character set #{resource[:charset]} collate #{resource[:collate]}"])
|
60
|
+
provider.expects(:exists?).returns(true)
|
61
|
+
provider.create.should be_true
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe 'destroy' do
|
66
|
+
it 'removes a database if present' do
|
67
|
+
provider.expects(:mysql).with([defaults_file, '-NBe', "drop database `#{resource[:name]}`"])
|
68
|
+
provider.expects(:exists?).returns(false)
|
69
|
+
provider.destroy.should be_true
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe 'exists?' do
|
74
|
+
it 'checks if database exists' do
|
75
|
+
instance.exists?.should be_true
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe 'self.defaults_file' do
|
80
|
+
it 'sets --defaults-extra-file' do
|
81
|
+
File.stubs(:file?).with('/root/.my.cnf').returns(true)
|
82
|
+
provider.defaults_file.should eq '--defaults-extra-file=/root/.my.cnf'
|
83
|
+
end
|
84
|
+
it 'fails if file missing' do
|
85
|
+
File.stubs(:file?).with('/root/.my.cnf').returns(false)
|
86
|
+
provider.defaults_file.should be_nil
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe 'charset' do
|
91
|
+
it 'returns a charset' do
|
92
|
+
instance.charset.should == 'latin1'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe 'charset=' do
|
97
|
+
it 'changes the charset' do
|
98
|
+
provider.expects(:mysql).with([defaults_file, '-NBe', "alter database `#{resource[:name]}` CHARACTER SET blah"]).returns('0')
|
99
|
+
|
100
|
+
provider.charset=('blah')
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe 'collate' do
|
105
|
+
it 'returns a collate' do
|
106
|
+
instance.collate.should == 'latin1_swedish_ci'
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe 'collate=' do
|
111
|
+
it 'changes the collate' do
|
112
|
+
provider.expects(:mysql).with([defaults_file, '-NBe', "alter database `#{resource[:name]}` COLLATE blah"]).returns('0')
|
113
|
+
|
114
|
+
provider.collate=('blah')
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Puppet::Type.type(:mysql_user).provider(:mysql) do
|
4
|
+
let(:defaults_file) { '--defaults-extra-file=/root/.my.cnf' }
|
5
|
+
let(:newhash) { '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5' }
|
6
|
+
|
7
|
+
let(:raw_users) do
|
8
|
+
<<-SQL_OUTPUT
|
9
|
+
root@127.0.0.1
|
10
|
+
root@::1
|
11
|
+
@localhost
|
12
|
+
debian-sys-maint@localhost
|
13
|
+
root@localhost
|
14
|
+
usvn_user@localhost
|
15
|
+
@vagrant-ubuntu-raring-64
|
16
|
+
SQL_OUTPUT
|
17
|
+
end
|
18
|
+
|
19
|
+
let(:parsed_users) { %w(root@127.0.0.1 root@::1 @localhost debian-sys-maint@localhost root@localhost usvn_user@localhost @vagrant-ubuntu-raring-64) }
|
20
|
+
|
21
|
+
let(:resource) { Puppet::Type.type(:mysql_user).new(
|
22
|
+
{ :ensure => :present,
|
23
|
+
:password_hash => '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4',
|
24
|
+
:name => 'joe@localhost',
|
25
|
+
:max_user_connections => '10',
|
26
|
+
:max_connections_per_hour => '10',
|
27
|
+
:max_queries_per_hour => '10',
|
28
|
+
:max_updates_per_hour => '10',
|
29
|
+
:provider => described_class.name
|
30
|
+
}
|
31
|
+
)}
|
32
|
+
let(:provider) { resource.provider }
|
33
|
+
|
34
|
+
before :each do
|
35
|
+
# Set up the stubs for an instances call.
|
36
|
+
Facter.stubs(:value).with(:root_home).returns('/root')
|
37
|
+
Puppet::Util.stubs(:which).with('mysql').returns('/usr/bin/mysql')
|
38
|
+
File.stubs(:file?).with('/root/.my.cnf').returns(true)
|
39
|
+
provider.class.stubs(:mysql).with([defaults_file, '-NBe', "SELECT CONCAT(User, '@',Host) AS User FROM mysql.user"]).returns('joe@localhost')
|
40
|
+
provider.class.stubs(:mysql).with([defaults_file, '-NBe', "SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, PASSWORD FROM mysql.user WHERE CONCAT(user, '@', host) = 'joe@localhost'"]).returns('10 10 10 10 *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4')
|
41
|
+
end
|
42
|
+
|
43
|
+
let(:instance) { provider.class.instances.first }
|
44
|
+
|
45
|
+
describe 'self.instances' do
|
46
|
+
it 'returns an array of users' do
|
47
|
+
provider.class.stubs(:mysql).with([defaults_file, '-NBe', "SELECT CONCAT(User, '@',Host) AS User FROM mysql.user"]).returns(raw_users)
|
48
|
+
parsed_users.each do |user|
|
49
|
+
provider.class.stubs(:mysql).with([defaults_file, '-NBe', "SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, PASSWORD FROM mysql.user WHERE CONCAT(user, '@', host) = '#{user}'"]).returns('10 10 10 10 ')
|
50
|
+
end
|
51
|
+
|
52
|
+
usernames = provider.class.instances.collect {|x| x.name }
|
53
|
+
parsed_users.should match_array(usernames)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe 'self.prefetch' do
|
58
|
+
it 'exists' do
|
59
|
+
provider.class.instances
|
60
|
+
provider.class.prefetch({})
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe 'create' do
|
65
|
+
it 'makes a user' do
|
66
|
+
provider.expects(:mysql).with([defaults_file, '-e', "GRANT USAGE ON *.* TO 'joe'@'localhost' IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4' WITH MAX_USER_CONNECTIONS 10 MAX_CONNECTIONS_PER_HOUR 10 MAX_QUERIES_PER_HOUR 10 MAX_UPDATES_PER_HOUR 10"])
|
67
|
+
provider.expects(:exists?).returns(true)
|
68
|
+
provider.create.should be_true
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe 'destroy' do
|
73
|
+
it 'removes a user if present' do
|
74
|
+
provider.expects(:mysql).with([defaults_file, '-e', "DROP USER 'joe'@'localhost'"])
|
75
|
+
provider.expects(:exists?).returns(false)
|
76
|
+
provider.destroy.should be_true
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe 'exists?' do
|
81
|
+
it 'checks if user exists' do
|
82
|
+
instance.exists?.should be_true
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe 'self.defaults_file' do
|
87
|
+
it 'sets --defaults-extra-file' do
|
88
|
+
File.stubs(:file?).with('/root/.my.cnf').returns(true)
|
89
|
+
provider.defaults_file.should eq '--defaults-extra-file=/root/.my.cnf'
|
90
|
+
end
|
91
|
+
it 'fails if file missing' do
|
92
|
+
File.expects(:file?).with('/root/.my.cnf').returns(false)
|
93
|
+
provider.defaults_file.should be_nil
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe 'password_hash' do
|
98
|
+
it 'returns a hash' do
|
99
|
+
instance.password_hash.should == '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4'
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe 'password_hash=' do
|
104
|
+
it 'changes the hash' do
|
105
|
+
provider.expects(:mysql).with([defaults_file, '-e', "SET PASSWORD FOR 'joe'@'localhost' = '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5'"]).returns('0')
|
106
|
+
|
107
|
+
provider.expects(:password_hash).returns('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5')
|
108
|
+
provider.password_hash=('*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF5')
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
['max_user_connections', 'max_connections_per_hour', 'max_queries_per_hour',
|
113
|
+
'max_updates_per_hour'].each do |property|
|
114
|
+
|
115
|
+
describe property do
|
116
|
+
it "returns #{property}" do
|
117
|
+
instance.send("#{property}".to_sym).should == '10'
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe "#{property}=" do
|
122
|
+
it "changes #{property}" do
|
123
|
+
provider.expects(:mysql).with([defaults_file, '-e', "GRANT USAGE ON *.* TO 'joe'@'localhost' WITH #{property.upcase} 42"]).returns('0')
|
124
|
+
provider.expects(property.to_sym).returns('42')
|
125
|
+
provider.send("#{property}=".to_sym, '42')
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'puppet'
|
2
|
+
require 'puppet/type/mysql_database'
|
3
|
+
describe Puppet::Type.type(:mysql_database) do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@user = Puppet::Type.type(:mysql_database).new(:name => 'test', :charset => 'utf8', :collate => 'utf8_blah_ci')
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should accept a database name' do
|
10
|
+
@user[:name].should == 'test'
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should accept a charset' do
|
14
|
+
@user[:charset] = 'latin1'
|
15
|
+
@user[:charset].should == 'latin1'
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should accept a collate' do
|
19
|
+
@user[:collate] = 'latin1_swedish_ci'
|
20
|
+
@user[:collate].should == 'latin1_swedish_ci'
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should require a name' do
|
24
|
+
expect {
|
25
|
+
Puppet::Type.type(:mysql_database).new({})
|
26
|
+
}.to raise_error(Puppet::Error, 'Title or name must be provided')
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'puppet'
|
2
|
+
require 'puppet/type/mysql_user'
|
3
|
+
describe Puppet::Type.type(:mysql_user) do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@user = Puppet::Type.type(:mysql_user).new(:name => 'foo@localhost', :password_hash => 'pass')
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should accept a user name' do
|
10
|
+
@user[:name].should == 'foo@localhost'
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should fail with a long user name' do
|
14
|
+
expect {
|
15
|
+
Puppet::Type.type(:mysql_user).new({:name => '12345678901234567@localhost', :password_hash => 'pass'})
|
16
|
+
}.to raise_error /MySQL usernames are limited to a maximum of 16 characters/
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should accept a password' do
|
20
|
+
@user[:password_hash] = 'foo'
|
21
|
+
@user[:password_hash].should == 'foo'
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should require a name' do
|
25
|
+
expect {
|
26
|
+
Puppet::Type.type(:mysql_user).new({})
|
27
|
+
}.to raise_error(Puppet::Error, 'Title or name must be provided')
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<% @options.sort.map do |k,v| -%>
|
2
|
+
<% if v.is_a?(Hash) -%>
|
3
|
+
[<%= k %>]
|
4
|
+
<% @options[k].sort.map do |ki, vi| -%>
|
5
|
+
<% if vi == true -%>
|
6
|
+
<%= ki %>
|
7
|
+
<% elsif vi and vi != '' -%>
|
8
|
+
<%= ki %> = <%= vi %>
|
9
|
+
<% elsif vi -%>
|
10
|
+
<%= ki %>
|
11
|
+
<% end -%>
|
12
|
+
<% end -%>
|
13
|
+
|
14
|
+
<% end -%>
|
15
|
+
<% end -%>
|
16
|
+
|
17
|
+
!includedir /etc/mysql/conf.d/
|
@@ -0,0 +1,17 @@
|
|
1
|
+
### MANAGED BY PUPPET ###
|
2
|
+
<% @settings.sort.each do |section, content| -%>
|
3
|
+
[<%= section %>]
|
4
|
+
<% content.sort.each do |key, values| -%>
|
5
|
+
<% [values].flatten.sort.each do |value| -%>
|
6
|
+
<%= !value ? '#' : '' %><%= key -%><%=
|
7
|
+
case value
|
8
|
+
when true, false
|
9
|
+
''
|
10
|
+
else
|
11
|
+
" = #{value}"
|
12
|
+
end
|
13
|
+
%>
|
14
|
+
<% end -%>
|
15
|
+
<% end -%>
|
16
|
+
|
17
|
+
<% end -%>
|
@@ -0,0 +1,57 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
#
|
3
|
+
# MySQL Backup Script
|
4
|
+
# Dumps mysql databases to a file for another backup tool to pick up.
|
5
|
+
#
|
6
|
+
# MySQL code:
|
7
|
+
# GRANT SELECT, RELOAD, LOCK TABLES ON *.* TO 'user'@'localhost'
|
8
|
+
# IDENTIFIED BY 'password';
|
9
|
+
# FLUSH PRIVILEGES;
|
10
|
+
#
|
11
|
+
##### START CONFIG ###################################################
|
12
|
+
|
13
|
+
USER=<%= @backupuser %>
|
14
|
+
PASS=<%= @backuppassword %>
|
15
|
+
DIR=<%= @backupdir %>
|
16
|
+
ROTATE=<%= [ Integer(@backuprotate) - 1, 0 ].max %>
|
17
|
+
|
18
|
+
PREFIX=mysql_backup_
|
19
|
+
|
20
|
+
##### STOP CONFIG ####################################################
|
21
|
+
PATH=/usr/bin:/usr/sbin:/bin:/sbin
|
22
|
+
|
23
|
+
set -o pipefail
|
24
|
+
|
25
|
+
cleanup()
|
26
|
+
{
|
27
|
+
find "${DIR}/" -maxdepth 1 -type f -name "${PREFIX}*.sql*" -mtime +${ROTATE} -print0 | xargs -0 -r rm -f
|
28
|
+
}
|
29
|
+
|
30
|
+
<% if @delete_before_dump -%>
|
31
|
+
cleanup
|
32
|
+
|
33
|
+
<% end -%>
|
34
|
+
<% if @backupdatabases.empty? -%>
|
35
|
+
<% if @file_per_database -%>
|
36
|
+
mysql -s -r -N -e 'SHOW DATABASES' | while read dbname
|
37
|
+
do
|
38
|
+
mysqldump -u${USER} -p${PASS} --opt --flush-logs --single-transaction \
|
39
|
+
${dbname} <% if @backupcompress %>| bzcat -zc <% end %>> ${DIR}/${PREFIX}${dbname}_`date +%Y%m%d-%H%M%S`.sql<% if @backupcompress %>.bz2<% end %>
|
40
|
+
done
|
41
|
+
<% else -%>
|
42
|
+
mysqldump -u${USER} -p${PASS} --opt --flush-logs --single-transaction \
|
43
|
+
--all-databases <% if @backupcompress %>| bzcat -zc <% end %>> ${DIR}/${PREFIX}`date +%Y%m%d-%H%M%S`.sql<% if @backupcompress %>.bz2<% end %>
|
44
|
+
<% end -%>
|
45
|
+
<% else -%>
|
46
|
+
<% @backupdatabases.each do |db| -%>
|
47
|
+
mysqldump -u${USER} -p${PASS} --opt --flush-logs --single-transaction \
|
48
|
+
<%= db %><% if @backupcompress %>| bzcat -zc <% end %>> ${DIR}/${PREFIX}<%= db %>_`date +%Y%m%d-%H%M%S`.sql<% if @backupcompress %>.bz2<% end %>
|
49
|
+
<% end -%>
|
50
|
+
<% end -%>
|
51
|
+
|
52
|
+
<% unless @delete_before_dump -%>
|
53
|
+
if [ $? -eq 0 ] ; then
|
54
|
+
cleanup
|
55
|
+
fi
|
56
|
+
<% end -%>
|
57
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
include mysql
|
@@ -0,0 +1 @@
|
|
1
|
+
class { 'mysql::java':}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class { 'mysql::server':
|
2
|
+
config_hash => {'root_password' => 'password'}
|
3
|
+
}
|
4
|
+
database{ ['test1', 'test2', 'test3']:
|
5
|
+
ensure => present,
|
6
|
+
charset => 'utf8',
|
7
|
+
require => Class['mysql::server'],
|
8
|
+
}
|
9
|
+
database{ 'test4':
|
10
|
+
ensure => present,
|
11
|
+
charset => 'latin1',
|
12
|
+
}
|