machines 0.5.1

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 (180) hide show
  1. data/.gitignore +11 -0
  2. data/EXAMPLES.md +18 -0
  3. data/Gemfile +4 -0
  4. data/Guardfile +14 -0
  5. data/INSTALL.md +25 -0
  6. data/LICENSE +23 -0
  7. data/README.md +271 -0
  8. data/Rakefile +60 -0
  9. data/TODO.md +92 -0
  10. data/bin/machines +6 -0
  11. data/lib/machines/app_settings.rb +54 -0
  12. data/lib/machines/base.rb +13 -0
  13. data/lib/machines/checks.rb +63 -0
  14. data/lib/machines/cloud_machine.rb +33 -0
  15. data/lib/machines/command.rb +86 -0
  16. data/lib/machines/commandline.rb +148 -0
  17. data/lib/machines/configuration.rb +49 -0
  18. data/lib/machines/core.rb +117 -0
  19. data/lib/machines/database.rb +17 -0
  20. data/lib/machines/file_operations.rb +104 -0
  21. data/lib/machines/help.rb +30 -0
  22. data/lib/machines/installation.rb +151 -0
  23. data/lib/machines/log_command.rb +22 -0
  24. data/lib/machines/logger.rb +65 -0
  25. data/lib/machines/machinesfile.rb +25 -0
  26. data/lib/machines/named_buffer.rb +9 -0
  27. data/lib/machines/questions.rb +15 -0
  28. data/lib/machines/services.rb +24 -0
  29. data/lib/machines/upload.rb +29 -0
  30. data/lib/machines/version.rb +4 -0
  31. data/lib/machines.rb +19 -0
  32. data/lib/packages/abiword.rb +11 -0
  33. data/lib/packages/amazon_mp3.rb +4 -0
  34. data/lib/packages/awstats.rb +16 -0
  35. data/lib/packages/base.rb +14 -0
  36. data/lib/packages/chrome.rb +12 -0
  37. data/lib/packages/cruisecontrol.rb +22 -0
  38. data/lib/packages/dependencies.rb +10 -0
  39. data/lib/packages/docky.rb +36 -0
  40. data/lib/packages/dotfiles.rb +26 -0
  41. data/lib/packages/file_roller.rb +12 -0
  42. data/lib/packages/finalise.rb +4 -0
  43. data/lib/packages/firefox.rb +4 -0
  44. data/lib/packages/gedit.rb +11 -0
  45. data/lib/packages/git.rb +4 -0
  46. data/lib/packages/gmate.rb +33 -0
  47. data/lib/packages/gnome.rb +10 -0
  48. data/lib/packages/gnumeric.rb +11 -0
  49. data/lib/packages/hosts.rb +13 -0
  50. data/lib/packages/load_machines.rb +38 -0
  51. data/lib/packages/monit.rb +10 -0
  52. data/lib/packages/mysql.rb +46 -0
  53. data/lib/packages/nginx.rb +22 -0
  54. data/lib/packages/nginx_logrotate.rb +26 -0
  55. data/lib/packages/openbox.rb +35 -0
  56. data/lib/packages/passenger.rb +14 -0
  57. data/lib/packages/passenger_nginx.rb +8 -0
  58. data/lib/packages/postfix.rb +10 -0
  59. data/lib/packages/questions.rb +5 -0
  60. data/lib/packages/rbenv.rb +27 -0
  61. data/lib/packages/rvm.rb +20 -0
  62. data/lib/packages/save_machines.rb +4 -0
  63. data/lib/packages/slim.rb +6 -0
  64. data/lib/packages/sqlserver.rb +5 -0
  65. data/lib/packages/subtle.rb +29 -0
  66. data/lib/packages/sudo_mods.rb +6 -0
  67. data/lib/packages/time.rb +6 -0
  68. data/lib/packages/time_daily.rb +5 -0
  69. data/lib/packages/timezone.rb +10 -0
  70. data/lib/packages/unison.rb +5 -0
  71. data/lib/packages/virtualbox.rb +11 -0
  72. data/lib/packages/virtualbox_guest.rb +7 -0
  73. data/lib/packages/webapps.rb +36 -0
  74. data/lib/template/Machinesfile +48 -0
  75. data/lib/template/certificates/example.com.crt +0 -0
  76. data/lib/template/certificates/example.com.key +0 -0
  77. data/lib/template/certificates/selfsigned.crt +14 -0
  78. data/lib/template/certificates/selfsigned.key +16 -0
  79. data/lib/template/config.yml +98 -0
  80. data/lib/template/logrotate/app.erb +10 -0
  81. data/lib/template/logrotate/nginx.erb +12 -0
  82. data/lib/template/machines.yml +179 -0
  83. data/lib/template/misc/awstats.conf.erb +7 -0
  84. data/lib/template/misc/ntp.conf +7 -0
  85. data/lib/template/monit/conf.d/delayed_job.erb +11 -0
  86. data/lib/template/monit/conf.d/mysql.erb +7 -0
  87. data/lib/template/monit/conf.d/nginx +5 -0
  88. data/lib/template/monit/conf.d/postfix +7 -0
  89. data/lib/template/monit/conf.d/ssh +6 -0
  90. data/lib/template/monit/conf.d/system.erb +14 -0
  91. data/lib/template/monit/monitrc.erb +10 -0
  92. data/lib/template/monit/upstart.conf +16 -0
  93. data/lib/template/mysql/dbmaster.cnf +7 -0
  94. data/lib/template/mysql/dbslave.cnf +3 -0
  95. data/lib/template/nginx/app_server.conf.erb +87 -0
  96. data/lib/template/nginx/nginx.conf.erb +46 -0
  97. data/lib/template/nginx/upstart.conf.erb +21 -0
  98. data/lib/template/packages/custom.rb +17 -0
  99. data/lib/template/packages/productivity.rb +18 -0
  100. data/lib/template/slim/themes/dark/background.jpg +0 -0
  101. data/lib/template/slim/themes/dark/panel.png +0 -0
  102. data/lib/template/slim/themes/dark/slim.theme +39 -0
  103. data/lib/template/users/phil/dotfiles/bash_aliases +45 -0
  104. data/lib/template/users/phil/dotfiles/config/Trolltech.conf +4 -0
  105. data/lib/template/users/phil/dotfiles/config/gtk-3.0/settings.ini +9 -0
  106. data/lib/template/users/phil/dotfiles/config/openbox/autostart.sh +14 -0
  107. data/lib/template/users/phil/dotfiles/config/openbox/rc.xml +482 -0
  108. data/lib/template/users/phil/dotfiles/config/terminator/config +10 -0
  109. data/lib/template/users/phil/dotfiles/fonts.conf +15 -0
  110. data/lib/template/users/phil/dotfiles/gitconfig +27 -0
  111. data/lib/template/users/phil/dotfiles/gtkrc-2.0 +16 -0
  112. data/lib/template/users/phil/dotfiles/local/share/applications/mimeapps.list +4 -0
  113. data/lib/template/users/phil/dotfiles/unison/default.prf +33 -0
  114. data/lib/template/users/www/authorized_keys +0 -0
  115. data/lib/template/users/www/dotfiles/bash_aliases +40 -0
  116. data/lib/template/webapps.yml +75 -0
  117. data/machines.gemspec +44 -0
  118. data/spec/acceptance/dev_machine_spec.rb +22 -0
  119. data/spec/lib/machines/app_settings_spec.rb +106 -0
  120. data/spec/lib/machines/checks_spec.rb +105 -0
  121. data/spec/lib/machines/cloud_machine_spec.rb +36 -0
  122. data/spec/lib/machines/command_spec.rb +184 -0
  123. data/spec/lib/machines/commandline_spec.rb +299 -0
  124. data/spec/lib/machines/configuration_spec.rb +61 -0
  125. data/spec/lib/machines/core_spec.rb +299 -0
  126. data/spec/lib/machines/database_spec.rb +51 -0
  127. data/spec/lib/machines/file_operations_spec.rb +124 -0
  128. data/spec/lib/machines/help_spec.rb +22 -0
  129. data/spec/lib/machines/installation_spec.rb +176 -0
  130. data/spec/lib/machines/log_command_spec.rb +16 -0
  131. data/spec/lib/machines/logger_spec.rb +70 -0
  132. data/spec/lib/machines/machinesfile_spec.rb +34 -0
  133. data/spec/lib/machines/questions_spec.rb +73 -0
  134. data/spec/lib/machines/services_spec.rb +26 -0
  135. data/spec/lib/machines/upload_spec.rb +86 -0
  136. data/spec/lib/packages/abiword_spec.rb +20 -0
  137. data/spec/lib/packages/amazon_mp3_spec.rb +17 -0
  138. data/spec/lib/packages/awstats_spec.rb +26 -0
  139. data/spec/lib/packages/base_spec.rb +21 -0
  140. data/spec/lib/packages/chrome_spec.rb +30 -0
  141. data/spec/lib/packages/cruisecontrol_spec.rb +33 -0
  142. data/spec/lib/packages/dependencies_spec.rb +20 -0
  143. data/spec/lib/packages/docky_spec.rb +32 -0
  144. data/spec/lib/packages/dotfiles_spec.rb +44 -0
  145. data/spec/lib/packages/file_roller_spec.rb +69 -0
  146. data/spec/lib/packages/firefox_spec.rb +16 -0
  147. data/spec/lib/packages/gedit_spec.rb +20 -0
  148. data/spec/lib/packages/git_spec.rb +16 -0
  149. data/spec/lib/packages/gmate_spec.rb +39 -0
  150. data/spec/lib/packages/gnome_spec.rb +22 -0
  151. data/spec/lib/packages/gnumeric_spec.rb +21 -0
  152. data/spec/lib/packages/hosts_spec.rb +41 -0
  153. data/spec/lib/packages/load_machines_spec.rb +118 -0
  154. data/spec/lib/packages/monit_spec.rb +34 -0
  155. data/spec/lib/packages/mysql_spec.rb +69 -0
  156. data/spec/lib/packages/nginx_logrotate_spec.rb +80 -0
  157. data/spec/lib/packages/nginx_spec.rb +46 -0
  158. data/spec/lib/packages/openbox_spec.rb +41 -0
  159. data/spec/lib/packages/passenger_nginx_spec.rb +20 -0
  160. data/spec/lib/packages/passenger_spec.rb +26 -0
  161. data/spec/lib/packages/postfix_spec.rb +19 -0
  162. data/spec/lib/packages/questions_spec.rb +29 -0
  163. data/spec/lib/packages/rbenv_spec.rb +32 -0
  164. data/spec/lib/packages/rvm_spec.rb +31 -0
  165. data/spec/lib/packages/save_machines_spec.rb +51 -0
  166. data/spec/lib/packages/slim_spec.rb +22 -0
  167. data/spec/lib/packages/sqlserver_spec.rb +17 -0
  168. data/spec/lib/packages/timezone_spec.rb +27 -0
  169. data/spec/lib/packages/unison_spec.rb +17 -0
  170. data/spec/lib/packages/virtualbox_guest_spec.rb +25 -0
  171. data/spec/lib/packages/virtualbox_spec.rb +23 -0
  172. data/spec/lib/packages/webapps_spec.rb +70 -0
  173. data/spec/spec_helper.rb +103 -0
  174. data/spec/support/coverage.rb +8 -0
  175. data/spec/support/fake_out.rb +22 -0
  176. data/spec/support/fakefs_additions.rb +10 -0
  177. data/spec/support/minitest.rb +69 -0
  178. data/spec/support/vm_control.rb +54 -0
  179. data/tmp/.gitkeep +0 -0
  180. metadata +581 -0
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/mysql' do
4
+ before(:each) do
5
+ load_package('mysql')
6
+
7
+ $conf.from_hash(:machine => {
8
+ :address => 'DB_IP',
9
+ :root_pass => 'DB_PASS',
10
+ :replication_user => 'REPL_USER',
11
+ :replication_pass => 'REPL_PASS'
12
+ })
13
+ $conf.from_hash(:db_server => {
14
+ :address => 'SERVER_IP',
15
+ :root_pass => 'SERVER_PASS',
16
+ :replication_user => 'REPL_USER',
17
+ :replication_pass => 'REPL_PASS'
18
+ })
19
+ end
20
+
21
+ describe 'db role' do
22
+ it 'installs MySQL' do
23
+ $conf.roles = :db
24
+
25
+ eval_package
26
+ $conf.commands.map(&:info).must_equal [
27
+ "TASK mysql - Install MySQL",
28
+ "SUDO echo mysql-server-5.5 mysql-server/root_password password DB_PASS | debconf-set-selections",
29
+ "SUDO echo mysql-server-5.5 mysql-server/root_password_again password DB_PASS | debconf-set-selections",
30
+ "SUDO apt-get -q -y install mysql-server",
31
+ "SUDO apt-get -q -y install mysql-client",
32
+ "SUDO apt-get -q -y install libmysqlclient-dev",
33
+ "RUN service mysql restart"
34
+ ]
35
+ end
36
+ end
37
+
38
+ describe 'dbmaster role' do
39
+ it 'sets permissions for each app to access database and grants replication rights for slave' do
40
+ $conf.roles = :dbmaster
41
+ $conf.webapps = {'name' => AppBuilder.new({:name => 'name', :password => 'PASSWORD'})}
42
+ eval_package
43
+ $conf.commands.map(&:info).must_equal [
44
+ "TASK dbperms - Grant applications access to the database",
45
+ %{RUN echo "GRANT ALL ON *.* TO 'name'@'%' IDENTIFIED BY 'PASSWORD';" | mysql -u root -pDB_PASS},
46
+ "TASK replication - Grant replication access to this machine",
47
+ "UPLOAD mysql/dbmaster.cnf to /tmp/dbmaster.cnf",
48
+ "SUDO cp -rf /tmp/dbmaster.cnf /etc/mysql/conf.d/dbmaster.cnf",
49
+ "RUN rm -rf /tmp/dbmaster.cnf",
50
+ "RUN echo \"GRANT REPLICATION SLAVE ON *.* TO 'REPL_USER'@'%' IDENTIFIED BY 'REPL_PASS';\" | mysql -u root -pDB_PASS"
51
+ ]
52
+ end
53
+ end
54
+
55
+ describe 'dbslave role' do
56
+ it 'sets up slave to replicate from master' do
57
+ $conf.roles = :dbslave
58
+ eval_package
59
+ $conf.commands.map(&:info).must_equal [
60
+ "TASK replication - Setup database replication from master",
61
+ "UPLOAD mysql/dbslave.cnf to /tmp/dbslave.cnf",
62
+ "SUDO cp -rf /tmp/dbslave.cnf /etc/mysql/conf.d/dbslave.cnf",
63
+ "RUN rm -rf /tmp/dbslave.cnf",
64
+ "RUN echo \"CHANGE MASTER TO MASTER_HOST='SERVER_IP', MASTER_USER='REPL_USER' MASTER_PASSWORD='REPL_PASS';\" | mysql -u root -pDB_PASS"
65
+ ]
66
+ end
67
+ end
68
+ end
69
+
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/nginx_logrotate' do
4
+ before(:each) do
5
+ load_package('nginx_logrotate')
6
+ $conf.webapps = {'name' => AppBuilder.new({:name => 'appname', :path => 'apppath'})}
7
+ FileUtils.mkdir_p 'logrotate'
8
+ File.open('logrotate/nginx.erb', 'w') {|f| f.puts 'nginx template' }
9
+ File.open('logrotate/app.erb', 'w') {|f| f.puts 'app template' }
10
+ end
11
+
12
+ it 'generates command' do
13
+ eval_package
14
+ $conf.commands.map(&:info).must_equal [
15
+ 'TASK logrotate_nginx - Logrotate nginx access and error logs and optionally generate stats',
16
+ "UPLOAD buffer from logrotate/nginx.erb to /tmp/appname_nginx_access",
17
+ "SUDO cp -rf /tmp/appname_nginx_access /etc/logrotate.d/appname_nginx_access",
18
+ "RUN rm -rf /tmp/appname_nginx_access",
19
+ "UPLOAD buffer from logrotate/nginx.erb to /tmp/appname_nginx_error",
20
+ "SUDO cp -rf /tmp/appname_nginx_error /etc/logrotate.d/appname_nginx_error",
21
+ "RUN rm -rf /tmp/appname_nginx_error",
22
+ 'TASK logrotate_apps - Logrotate Rails app logs',
23
+ "UPLOAD buffer from logrotate/app.erb to /tmp/appname_app",
24
+ "SUDO cp -rf /tmp/appname_app /etc/logrotate.d/appname_app",
25
+ "RUN rm -rf /tmp/appname_app",
26
+ ]
27
+ end
28
+
29
+ describe 'nginx logs template' do
30
+ before(:each) do
31
+ nginx_template = nil
32
+ RealFS do
33
+ nginx_template = File.read 'lib/template/logrotate/nginx.erb'
34
+ end
35
+ File.open('logrotate/nginx.erb', 'w') {|f| f.puts nginx_template }
36
+ end
37
+
38
+ describe 'when awstats set' do
39
+ it 'generates stats command' do
40
+ skip
41
+ settings = stub 'AppBuilder'
42
+ stats_prerotate = '/usr/lib/cgi-bin/awstats.pl -update -config=appname stats_path/appname > /dev/null'
43
+ stats_postrotate = '/usr/local/bin/awstats_render riskplatform.insidemedia.net /home/risk/riskplatform_stats/public > /dev/null'
44
+ options = {:log_path => '/var/log/nginx/appname.access.log', stats_prerotate: stats_prerotate, stats_postrotate: stats_postrotate}
45
+ AppBuilder.stubs(:new)
46
+ AppBuilder.expects(:new).with(options).returns settings
47
+ options = {:log_path => '/var/log/nginx/appname.error.log', stats_prerotate: nil, stats_postrotate: nil}
48
+ AppBuilder.expects(:new).with(options).returns settings
49
+ options = {:settings => settings, :to => '/etc/logrotate.d/appname_nginx_access'}
50
+ expects(:create_from).with('logrotate/nginx.erb', options).returns Machines::Command.new 'command', 'check'
51
+ eval_package
52
+ end
53
+ end
54
+
55
+ describe 'when awstats not set' do
56
+ it 'does not generate stats command' do
57
+ skip
58
+ settings = stub 'AppBuilder'
59
+ AppBuilder.stubs(:new)
60
+ options = {:log_path => '/var/log/nginx/appname.access.log', :stats_command => nil}
61
+ AppBuilder.expects(:new).with(options).returns settings
62
+ options = {:settings => settings, :to => '/etc/logrotate.d/appname_nginx_access'}
63
+ expects(:create_from).with('logrotate/nginx.erb', options).returns Command.new 'command', 'check'
64
+ eval_package
65
+ end
66
+ end
67
+ end
68
+ describe 'apps logs template' do
69
+ it 'generates correct template' do
70
+ mock_settings = mock 'AppBuilder'
71
+ stubs(:create_from).returns Machines::Command.new 'command', 'check'
72
+ AppBuilder.stubs(:new)
73
+ AppBuilder.expects(:new).with(:log_path => 'apppath/shared/log/*.log').returns mock_settings
74
+ options = {:settings => mock_settings, :to => '/etc/logrotate.d/appname_app'}
75
+ expects(:create_from).with('logrotate/app.erb', options).returns Machines::Command.new 'command', 'check'
76
+ eval_package
77
+ end
78
+ end
79
+ end
80
+
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/nginx' do
4
+ before(:each) do
5
+ load_package('nginx')
6
+ $conf.from_hash(:webserver => {:name => 'nginx', :version => '1.0.2', :path => 'nginx_path', :conf_path => 'conf',
7
+ :url => 'nginx_url/package', :src_path => '/usr/local/src/nginx-1.2.3', :modules => '--with-http_ssl_module'})
8
+ $conf.from_hash(:passenger => {:nginx => '/passenger/path/ext/nginx'})
9
+ FileUtils.mkdir_p 'nginx'
10
+ File.open('nginx/nginx.conf.erb', 'w') {|f| f.puts 'the template' }
11
+ File.open('nginx/upstart.conf.erb', 'w') {|f| f.puts 'the template' }
12
+ end
13
+
14
+ it 'adds the following commands for staging environment' do
15
+ $conf.environment = 'staging'
16
+ eval_package
17
+ $conf.commands.map(&:info).join("\n").must_equal [
18
+ "TASK nginx - Download and configure Nginx",
19
+ "SUDO cd /usr/local/src && wget nginx_url/package && tar -zxf package && rm package && cd -",
20
+ 'SUDO cd /usr/local/src/nginx-1.2.3 && ./configure --with-http_ssl_module --add-module=/passenger/path/ext/nginx && make && make install',
21
+ "UPLOAD buffer from nginx/nginx.conf.erb to /tmp/nginx.conf",
22
+ "SUDO cp -rf /tmp/nginx.conf nginx_path/conf/nginx.conf",
23
+ "RUN rm -rf /tmp/nginx.conf",
24
+ "UPLOAD buffer from nginx/upstart.conf.erb to /tmp/nginx.conf",
25
+ "SUDO cp -rf /tmp/nginx.conf /etc/init/nginx.conf",
26
+ "RUN rm -rf /tmp/nginx.conf"
27
+ ].join("\n")
28
+ end
29
+
30
+ it 'adds the following commands for development environment' do
31
+ $conf.environment = 'development'
32
+ eval_package
33
+ $conf.commands.map(&:info).join("\n").must_equal [
34
+ "TASK nginx - Download and configure Nginx",
35
+ "SUDO cd /usr/local/src && wget nginx_url/package && tar -zxf package && rm package && cd -",
36
+ 'SUDO cd /usr/local/src/nginx-1.2.3 && ./configure --with-http_ssl_module --add-module=/passenger/path/ext/nginx && make && make install',
37
+ "UPLOAD buffer from nginx/nginx.conf.erb to /tmp/nginx.conf",
38
+ "SUDO cp -rf /tmp/nginx.conf nginx_path/conf/nginx.conf",
39
+ "RUN rm -rf /tmp/nginx.conf",
40
+ "UPLOAD buffer from nginx/upstart.conf.erb to /tmp/nginx.conf",
41
+ "SUDO cp -rf /tmp/nginx.conf /etc/init/nginx.conf",
42
+ "RUN rm -rf /tmp/nginx.conf"
43
+ ].join("\n")
44
+ end
45
+ end
46
+
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/openbox' do
4
+ before(:each) do
5
+ load_package('openbox')
6
+ end
7
+
8
+ it 'adds the following commands' do
9
+ eval_package
10
+ $conf.commands.map(&:info).join("\n").must_equal [
11
+ "TASK openbox - Install Openbox window manager and associated fonts, themes, etc",
12
+ "SUDO echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula boolean true | debconf-set-selections",
13
+ "SUDO apt-get -q -y install dmz-cursor-theme",
14
+ "SUDO apt-get -q -y install elementary-icon-theme",
15
+ "SUDO apt-get -q -y install feh",
16
+ "SUDO apt-get -q -y install gnome-screenshot",
17
+ "SUDO apt-get -q -y install gnome-themes-standard",
18
+ "SUDO apt-get -q -y install lxappearance",
19
+ "SUDO apt-get -q -y install obconf",
20
+ "SUDO apt-get -q -y install openbox",
21
+ "SUDO apt-get -q -y install pcmanfm",
22
+ "SUDO apt-get -q -y install suckless-tools",
23
+ "SUDO apt-get -q -y install terminator",
24
+ "SUDO apt-get -q -y install ttf-ubuntu-font-family",
25
+ "SUDO apt-get -q -y install ttf-mscorefonts-installer",
26
+ "SUDO apt-get -q -y install xautolock",
27
+ "SUDO apt-get -q -y install xcompmgr",
28
+ "SUDO apt-get -q -y install xorg",
29
+ "TASK fonts - Set openbox and Gnome interface fonts (See also rc.xml, fonts.conf, gtkrc-2.0)",
30
+ "RUN gconftool-2 --set \"/apps/metacity/general/titlebar_font\" --type string \"Ubuntu Bold 8\"",
31
+ "RUN gconftool-2 --set \"/apps/nautilus/preferences/desktop_font\" --type string \"Ubuntu Light 8\"",
32
+ "RUN gconftool-2 --set \"/apps/nautilus/preferences/default_folder_viewer\" --type string \"compact_view\"",
33
+ "RUN gconftool-2 --set \"/desktop/gnome/interface/font_name\" --type string \"Ubuntu Light 8\"",
34
+ "RUN gconftool-2 --set \"/desktop/gnome/interface/document_font_name\" --type string \"Ubuntu Light 8\"",
35
+ "RUN gconftool-2 --set \"/desktop/gnome/interface/monospace_font_name\" --type string \"Monospace 10\"",
36
+ "SUDO grep \"inode/directory=pcmanfm.desktop\" .local/share/applications/mimeapps.list || echo \"inode/directory=pcmanfm.desktop\" >> .local/share/applications/mimeapps.list",
37
+ "RUN grep \"ck-launch-session openbox-session\" ~/.xinitrc || echo \"ck-launch-session openbox-session\" >> ~/.xinitrc"
38
+ ].join("\n")
39
+ end
40
+ end
41
+
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/passenger_nginx' do
4
+ before(:each) do
5
+ load_package('passenger_nginx')
6
+ $conf.from_hash(:webserver => {:path => 'nginx_dest', :version => '1.0.2'})
7
+ $conf.password = 'pass'
8
+ $conf.from_hash(:passenger => {:root => '/home/user/gems/passenger-1.2.3'})
9
+ $conf.from_hash(:ruby => {:gems_path => 'lib/ruby/gems/1.9.1/gems'})
10
+ end
11
+
12
+ it 'adds the following commands' do
13
+ eval_package
14
+ $conf.commands.map(&:info).must_equal [
15
+ "TASK passenger_nginx - Build the passenger module for Nginx",
16
+ 'RUN cd /home/user/gems/passenger-1.2.3/ext/nginx && rake nginx RELEASE=yes && cd -'
17
+ ]
18
+ end
19
+ end
20
+
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/passenger' do
4
+ before(:each) do
5
+ load_package('passenger')
6
+ $conf.user_home = '/home/user'
7
+ $conf.from_hash(:passenger => {:version => '3.0.7'})
8
+ $conf.from_hash(:ruby => {:gems_path => 'ruby/gems', :executable => 'bin/ruby'})
9
+ end
10
+
11
+ it 'adds the following commands' do
12
+ eval_package
13
+ $conf.commands.map(&:info).must_equal [
14
+ "TASK passenger - Install passenger",
15
+ 'SUDO apt-get -q -y install libcurl4-openssl-dev',
16
+ 'RUN gem install passenger -v "3.0.7"',
17
+ ]
18
+ end
19
+
20
+ it 'sets passenger root and ruby' do
21
+ eval_package
22
+ $conf.passenger.root.must_equal '/home/user/ruby/gems/passenger-3.0.7'
23
+ $conf.passenger.ruby.must_equal '/home/user/bin/ruby'
24
+ end
25
+ end
26
+
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/postfix' do
4
+ before(:each) do
5
+ load_package('postfix')
6
+ $conf.from_hash(:mail => {:domain => 'domain'})
7
+ end
8
+
9
+ it 'adds the following commands' do
10
+ eval_package
11
+ $conf.commands.map(&:info).must_equal [
12
+ "TASK postfix - Install postfix mail",
13
+ "SUDO echo postfix postfix/main_mailer_type select Internet Site | debconf-set-selections",
14
+ "SUDO echo postfix postfix/mailname string domain | debconf-set-selections",
15
+ "SUDO apt-get -q -y install postfix"
16
+ ]
17
+ end
18
+ end
19
+
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/questions' do
4
+ before(:each) do
5
+ load_package('questions')
6
+ $conf.machine = AppConf.new
7
+ end
8
+
9
+ it 'asks for a password' do
10
+ expects(:enter_password).with('users', false)
11
+ eval_package
12
+ end
13
+
14
+ it 'does not ask for a password when machine is EC2' do
15
+ $conf.machine.ec2 = {}
16
+ expects(:enter_password).never
17
+ eval_package
18
+ end
19
+
20
+ it 'sets password when logging' do
21
+ $conf.log_only = true
22
+ expects(:enter_password).never
23
+ eval_package
24
+ $conf.passwords.must_equal ['pa55word']
25
+ $conf.password.must_equal 'pa55word'
26
+ end
27
+
28
+ end
29
+
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/rbenv' do
4
+ before(:each) do
5
+ load_package('rbenv')
6
+ $conf.ruby = AppConf.new
7
+ $conf.ruby.version = '1.9.2'
8
+ $conf.ruby.full_version = '1.9.2-p290'
9
+ end
10
+
11
+ it 'adds the following commands' do
12
+ eval_package
13
+ $conf.commands.map(&:info).join("\n").must_equal [
14
+ 'TASK rbenv - Install ruby-build, rbenv, ruby 1.9.2 and Bundler',
15
+ "SUDO apt-get -q -y install git-core",
16
+ "SUDO apt-get -q -y install curl",
17
+ 'RUN git clone --quiet git://github.com/sstephenson/ruby-build.git',
18
+ 'SUDO cd ~/ruby-build && ./install.sh',
19
+ 'RUN git clone --quiet git://github.com/sstephenson/rbenv.git ~/.rbenv',
20
+ 'RUN grep "PATH=.bin/safe/../../.bin:\\$HOME/.rbenv/bin:\\$HOME/.rbenv/shims:\\$PATH" ~/.profile || echo "PATH=.bin/safe/../../.bin:\\$HOME/.rbenv/bin:\\$HOME/.rbenv/shims:\\$PATH" >> ~/.profile',
21
+
22
+ 'RUN $HOME/.rbenv/bin/rbenv install 1.9.2-p290',
23
+ 'RUN $HOME/.rbenv/bin/rbenv rehash',
24
+ 'RUN $HOME/.rbenv/bin/rbenv global 1.9.2-p290',
25
+
26
+ 'UPLOAD buffer from .gemrc to .gemrc',
27
+ 'RUN $HOME/.rbenv/bin/rbenv exec gem install bundler',
28
+ 'RUN $HOME/.rbenv/bin/rbenv rehash'
29
+ ].join("\n")
30
+ end
31
+ end
32
+
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/rvm' do
4
+ before(:each) do
5
+ load_package('rvm')
6
+ $conf.from_hash(:ruby => {:version => '1.9'})
7
+ $conf.from_hash(:rvm => {:url => 'rvm_url', :version => '1.0'})
8
+ end
9
+
10
+ it 'adds the following commands' do
11
+ eval_package
12
+ $conf.commands.map(&:info).must_equal [
13
+ "TASK rvm - Install RVM",
14
+ "SUDO apt-get -q -y install git-core",
15
+ 'RUN bash -s 1.0 < <(wget -q https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )',
16
+
17
+ "RUN source .bashrc",
18
+ "RUN rm -rf rvm-installer",
19
+
20
+ "TASK rvm_prompt_off - turn off trust prompting for new .rvmrc files",
21
+ "RUN grep \"export rvm_trust_rvmrcs_flag=1\" .rvmrc || echo \"export rvm_trust_rvmrcs_flag=1\" >> .rvmrc",
22
+
23
+ 'TASK ruby - Install Ruby, make 1.9@global the default and install Bundler',
24
+ 'RUN rvm install 1.9',
25
+ 'RUN rvm 1.9@global --default',
26
+ 'UPLOAD buffer from .gemrc to .gemrc',
27
+ 'RUN gem install bundler'
28
+ ]
29
+ end
30
+ end
31
+
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/save_machines' do
4
+ before(:each) do
5
+ load_package('save_machines')
6
+ $conf.machines_changed = true
7
+ $conf.from_hash({'machines' => {'a_machine' => {'hostname' => 'something', 'environment' => 'development'}}})
8
+ end
9
+
10
+ it 'loads the machines.yml file' do
11
+ File.open('machines.yml', 'w'){|f| f.puts "\n"}
12
+ eval_package
13
+ File.read('machines.yml').must_equal <<-EOF
14
+ ---
15
+ machines:
16
+ a_machine:
17
+ hostname: something
18
+ environment: development
19
+ EOF
20
+ end
21
+
22
+ it 'preserves comments' do
23
+ File.open('machines.yml', 'w'){|f| f.puts "# Some\n# comments\n---\na_machine:\n hostname:\n"}
24
+ eval_package
25
+ File.read('machines.yml').must_equal <<-EOF
26
+ # Some
27
+ # comments
28
+ ---
29
+ machines:
30
+ a_machine:
31
+ hostname: something
32
+ environment: development
33
+ EOF
34
+ end
35
+
36
+ it 'does not raise when no machines.yml' do
37
+ eval_package
38
+ end
39
+
40
+ it 'only saves when something changed' do
41
+ $conf.expects :save
42
+ eval_package
43
+ end
44
+
45
+ it 'does not save when nothing changed' do
46
+ $conf.clear :machines_changed
47
+ $conf.expects(:save).never
48
+ eval_package
49
+ end
50
+ end
51
+
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/slim' do
4
+ before(:each) do
5
+ $conf.login_theme = 'custom'
6
+ load_package('slim')
7
+ FileUtils.mkdir_p 'slim/themes'
8
+ end
9
+
10
+ it 'adds the following commands' do
11
+ eval_package
12
+ $conf.commands.map(&:info).must_equal [
13
+ "TASK slim - Install SLiM desktop manager",
14
+ "SUDO apt-get -q -y install slim",
15
+ "UPLOAD slim/themes to /tmp/themes",
16
+ "SUDO cp -rf /tmp/themes/. /usr/share/slim/themes",
17
+ "RUN rm -rf /tmp/themes",
18
+ "SUDO sed -i \"s/debian-spacefun/custom/\" /etc/slim.conf"
19
+ ]
20
+ end
21
+ end
22
+
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/sqlserver' do
4
+ before(:each) do
5
+ load_package('sqlserver')
6
+ end
7
+
8
+ it 'adds the following commands' do
9
+ eval_package
10
+ $conf.commands.map(&:info).must_equal [
11
+ "TASK sqlserver - Download and build sqlserver driver",
12
+ "RUN git clone --quiet git://github.com/rails-sqlserver/tiny_tds.git",
13
+ "RUN cd tiny_tds && rake compile && rake native gem"
14
+ ]
15
+ end
16
+ end
17
+
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/timezone' do
4
+ before(:each) do
5
+ load_package('timezone')
6
+ $conf.timezone = 'GB'
7
+ end
8
+
9
+ it 'adds the following commands' do
10
+ eval_package
11
+ $conf.commands.map(&:info).must_equal [
12
+ "TASK timezone - Set timezone from config.yml",
13
+ "SUDO ln -sf /etc/localtime /usr/share/zoneinfo/GB"
14
+ ]
15
+ end
16
+
17
+ it 'UTC set when specified' do
18
+ $conf.clock_utc = true
19
+ eval_package
20
+ $conf.commands.map(&:info).must_equal [
21
+ "TASK timezone - Set timezone from config.yml",
22
+ "SUDO ln -sf /etc/localtime /usr/share/zoneinfo/GB",
23
+ "SUDO sed -i \"s/UTC=no/UTC=yes/\" /etc/default/rcS"
24
+ ]
25
+ end
26
+ end
27
+
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/unison' do
4
+ before(:each) do
5
+ load_package('unison')
6
+ end
7
+
8
+ it 'adds the following commands' do
9
+ eval_package
10
+ $conf.commands.map(&:info).must_equal [
11
+ "TASK unison - Install unison two way file sync and set it to run hourly. Config in users/user/.unison/default.prf",
12
+ "SUDO apt-get -q -y install unison",
13
+ "RUN echo '30 18 * * * /usr/bin/unison' | crontab"
14
+ ]
15
+ end
16
+ end
17
+
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/virtualbox_guest' do
4
+ before(:each) do
5
+ load_package('virtualbox_guest')
6
+ end
7
+
8
+ it 'adds the following commands' do
9
+ eval_package
10
+ $conf.commands.map(&:info).must_equal [
11
+ "TASK virtualbox_guest - Installs VirtualBox Guest Additions and fixes piix4_smbus error",
12
+ "SUDO add-apt-repository ppa:debfx/virtualbox",
13
+ "SUDO apt-get -q -y update > /tmp/apt-update.log",
14
+ 'SUDO apt-get -q -y install virtualbox-guest-additions',
15
+ 'SUDO grep "blacklist i2c_piix4" /etc/modprobe.d/blacklist.conf || echo "blacklist i2c_piix4" >> /etc/modprobe.d/blacklist.conf'
16
+ ]
17
+ end
18
+
19
+ it 'autostart client when requested' do
20
+ $conf.confgure_vbox_client = true
21
+ eval_package
22
+ $conf.commands.map(&:info).join("\n").must_match /grep "VBoxClient-all &" .xinitrc || echo "VBoxClient-all &" >> .xinitrc/
23
+ end
24
+ end
25
+
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'packages/virtualbox' do
4
+ before(:each) do
5
+ load_package('virtualbox')
6
+ $conf.user = 'phil'
7
+ end
8
+
9
+ it 'adds the following commands' do
10
+ eval_package
11
+ $conf.commands.map(&:info).join("\n").must_equal [
12
+ "TASK virtualbox - Install VirtualBox",
13
+ "SUDO apt-get -q -y install dkms",
14
+ "SUDO add-apt-repository ppa:debfx/virtualbox",
15
+ "SUDO apt-get -q -y update > /tmp/apt-update.log",
16
+ "SUDO apt-get -q -y install virtualbox",
17
+ "SUDO usermod -a -G vboxusers phil",
18
+ "SUDO grep \"application/x-virtualbox-vbox-extpack=virtualbox.desktop\" .local/share/applications/mimeapps.list || echo \"application/x-virtualbox-vbox-extpack=virtualbox.desktop\" >> .local/share/applications/mimeapps.list",
19
+ "SUDO grep \"application/x-virtualbox-ova=virtualbox.desktop\" .local/share/applications/mimeapps.list || echo \"application/x-virtualbox-ova=virtualbox.desktop\" >> .local/share/applications/mimeapps.list"
20
+ ].join("\n")
21
+ end
22
+ end
23
+