hq-mongodb-installer 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 80cd8c8bb9b00573cd2553a18083243cc75bfe6e
4
+ data.tar.gz: 5de8f053adeb736af5f474686ed61b7fef9a3709
5
+ SHA512:
6
+ metadata.gz: 1434c4a1713046b5f901f522bd274a6b776155ea168ae93300f2168cbef8c7e578e5574258e6e1a4b9a54e29443ecb15fc76b0500ff9e2d142ff205a6b8239aa
7
+ data.tar.gz: 6fa912c022e830272a37554b49cb46f045a665fda6f10ac76ff5c331159db85f9815895fe9deeb6a91868a02eb1d187b4fe777510220e68b78ea8a3c40f4f22f
@@ -0,0 +1,189 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "shellwords"
4
+ require "yaml"
5
+
6
+ config = YAML.load_file ARGV[0]
7
+
8
+ # download mongo
9
+
10
+ downloaded = false
11
+
12
+ config["install"]["urls"].each do
13
+ |url|
14
+
15
+ # delete the file if it exists already
16
+
17
+ system "rm -f #{config["install"]["filename"]}"
18
+
19
+ # try and download file
20
+
21
+ next unless system "wget --quiet #{url}"
22
+
23
+ # check file exists
24
+
25
+ next unless File.exist? "#{config["install"]["filename"]}"
26
+
27
+ # check it's sha1
28
+
29
+ file_sha1 = `sha1sum #{config["install"]["filename"]}`.split.first
30
+
31
+ next unless file_sha1 == config["install"]["sha1"]
32
+
33
+ # we got it
34
+
35
+ downloaded = true
36
+ break
37
+
38
+ end
39
+
40
+ # error if the download failed
41
+
42
+ unless downloaded
43
+ puts "Download failed"
44
+ exit 1
45
+ end
46
+
47
+ # extract file
48
+
49
+ unless system "sudo tar xzf #{config["install"]["filename"]}"
50
+ puts "Extract failed"
51
+ exit 1
52
+ end
53
+
54
+ # move to install location
55
+
56
+ unless system "sudo mkdir -p #{File.dirname config["install"]["target"]}"
57
+ puts "Install failed"
58
+ exit 1
59
+ end
60
+
61
+ system "sudo rm -rf #{config["install"]["target"]}"
62
+
63
+ unless system "sudo mv #{config["install"]["dirname"]} #{config["install"]["target"]}"
64
+ puts "Install failed"
65
+ exit 1
66
+ end
67
+
68
+ puts "Install successful"
69
+
70
+ # create user
71
+
72
+ if config["user"]["create"] \
73
+ && ! system("getent passwd #{config["user"]["name"]}")
74
+
75
+ unless system [
76
+ "sudo",
77
+ "useradd",
78
+ "-r",
79
+ config["user"]["name"],
80
+ ].shelljoin
81
+ puts "Create user failed"
82
+ exit 1
83
+ end
84
+
85
+ end
86
+
87
+ # create directories
88
+
89
+ config["dirs"].each do
90
+ |path|
91
+
92
+ unless system "sudo mkdir -p #{path}"
93
+ puts "Error creating #{path}"
94
+ exit 1
95
+ end
96
+
97
+ unless system "sudo chown #{config["user"]["name"]}:#{config["user"]["name"]} #{path}"
98
+ puts "Error setting ownership of #{path}"
99
+ exit 1
100
+ end
101
+
102
+ end
103
+
104
+ unless system "sudo mkdir -p /etc/mongodb"
105
+ puts "Error creating config dir"
106
+ exit 1
107
+ end
108
+
109
+ # iterate servers
110
+
111
+ (config["servers"] || []).each do
112
+ |server_name, server|
113
+
114
+ # write upstart config
115
+
116
+ File.open "mongodb-#{server_name}.conf", "w" do
117
+ |file_io|
118
+
119
+ file_io.puts "limit nofile 20000 20000"
120
+ file_io.puts "kill timeout 300"
121
+
122
+ file_io.puts "start on runlevel [#{server["runlevels"]}]"
123
+ file_io.puts "stop on runlevel [!#{server["runlevels"]}]"
124
+
125
+ file_io.puts "script"
126
+
127
+ file_io.puts "\t" + [
128
+
129
+ "exec",
130
+ "start-stop-daemon",
131
+
132
+ "--start",
133
+
134
+ "--quiet",
135
+
136
+ "--chuid",
137
+ config["user"]["name"],
138
+
139
+ "--exec",
140
+ "#{config["install"]["target"]}/bin/#{server["exec"]}",
141
+
142
+ "--",
143
+
144
+ "--config",
145
+ "/etc/mongodb/#{server_name}.conf"
146
+
147
+ ].shelljoin
148
+
149
+ file_io.puts "end script"
150
+
151
+ end
152
+
153
+ unless system "sudo mv mongodb-#{server_name}.conf /etc/init"
154
+ puts "Write upstart config #{server_name} failed"
155
+ exit 1
156
+ end
157
+
158
+ # reload upstart config
159
+
160
+ unless system "sudo initctl reload-configuration"
161
+ puts "Reload upstart config #{server_name} failed"
162
+ exit 1
163
+ end
164
+
165
+ # write config
166
+
167
+ File.open "#{server_name}.conf", "w" do
168
+ |file_io|
169
+
170
+ file_io.puts server["config"]
171
+
172
+ end
173
+
174
+ unless system "sudo mv #{server_name}.conf /etc/mongodb"
175
+ puts "Error writing config file #{server_name}.conf"
176
+ exit 1
177
+ end
178
+
179
+ # start service
180
+
181
+ unless system "sudo initctl start mongodb-#{server_name}"
182
+ puts "Start mongodb #{server_name} failed"
183
+ exit 1
184
+ end
185
+
186
+ end
187
+
188
+ exit 0
189
+
@@ -0,0 +1,18 @@
1
+ Feature: Download and install is reliable
2
+
3
+ Background:
4
+
5
+ Given I start vagrant box "data"
6
+
7
+ Scenario: Download checksum fails
8
+
9
+ When I install mongo on "data" with "checksum.yml"
10
+
11
+ Then the command stdout should include:
12
+ """
13
+ Download failed
14
+ """
15
+
16
+ And the command exit status should be non-zero
17
+
18
+ # vim: et ts=2
@@ -0,0 +1,19 @@
1
+ Feature: Setup a mongodb cluster
2
+
3
+ Background:
4
+
5
+ Given I start vagrant box "config"
6
+ And I start vagrant box "data"
7
+ And I start vagrant box "shard"
8
+
9
+ Scenario: Setup cluster
10
+
11
+ When I install mongo on "config" with "cluster-config.yml"
12
+ And I install mongo on "data" with "cluster-data.yml"
13
+ And I install mongo on "shard" with "cluster-shard.yml"
14
+
15
+ And I run mongo "2.4.3" script "cluster-setup.js" on "shard"
16
+
17
+ Then mongo "2.4.3" test script "cluster-test.js" should work on "shard"
18
+
19
+ # vim: et ts=2
@@ -0,0 +1,13 @@
1
+ Feature: Setup a standalone mongo server
2
+
3
+ Background:
4
+
5
+ Given I start vagrant box "data"
6
+
7
+ Scenario: Setup standalone
8
+
9
+ When I install mongo on "data" with "standalone.yml"
10
+
11
+ Then mongo "2.4.3" works on "data"
12
+
13
+ # vim: et ts=2
@@ -0,0 +1,8 @@
1
+ require "hq/cucumber/command"
2
+ require "hq/cucumber/temp-dir"
3
+
4
+ ENV["VAGRANT_DEFAULT_PROVIDER"] = "lxc"
5
+
6
+ $temp_dir_use_sudo = true
7
+
8
+ $project_dir = Dir.pwd
@@ -0,0 +1,86 @@
1
+ require "shellwords"
2
+
3
+ Before do
4
+ @vagrant_boxes = []
5
+ end
6
+
7
+ When /^I start vagrant box "(.*?)"$/ do
8
+ |box_name|
9
+ @vagrant_boxes << box_name
10
+ system "vagrant up #{box_name}"
11
+ end
12
+
13
+ After do
14
+ @vagrant_boxes.each do
15
+ |box_name|
16
+ system "vagrant destroy #{box_name} --force"
17
+ end
18
+ end
19
+
20
+ When /^I install mongo on "(.*?)" with "(.*?)"$/ do
21
+ |server, config|
22
+ command_run [
23
+ "vagrant", "ssh",
24
+ server,
25
+ "--command", [
26
+ "/vagrant/bin/hq-mongodb-installer",
27
+ "/vagrant/test/#{config}",
28
+ ].shelljoin
29
+ ].shelljoin
30
+ end
31
+
32
+ When /^I run mongo "(.*?)" script "(.*?)" on "(.*?)"$/ do
33
+ |version, script, server|
34
+
35
+ command_run [
36
+ "vagrant", "ssh",
37
+ server,
38
+ "--command", [
39
+ "/opt/mongodb-#{version}/bin/mongo",
40
+ "/vagrant/test/#{script}",
41
+ ].shelljoin
42
+ ].shelljoin
43
+
44
+ end
45
+
46
+ Then /^mongo "(.*?)" test script "(.*?)" should work on "(.*?)"$/ do
47
+ |version, script, server|
48
+
49
+ command_run [
50
+ "vagrant", "ssh",
51
+ server,
52
+ "--command", [
53
+ "/opt/mongodb-#{version}/bin/mongo",
54
+ "/vagrant/test/#{script}",
55
+ ].shelljoin
56
+ ].shelljoin
57
+
58
+ @command_stdout.should include "hello world"
59
+
60
+ end
61
+
62
+ Then /^it should return non-zero$/ do
63
+ @command_exit_status.should_not == 0
64
+ end
65
+
66
+ Then /^mongo "(.*?)" works on "(.*?)"$/ do
67
+ |version, server|
68
+
69
+ # run the hello script in the mongo shell
70
+
71
+ command_run [
72
+ "vagrant", "ssh",
73
+ server,
74
+ "--command", [
75
+ "/opt/mongodb-#{version}/bin/mongo",
76
+ "/vagrant/test/hello.js",
77
+ ].shelljoin
78
+ ].shelljoin
79
+
80
+ # check the output includes "hello world"
81
+
82
+ @command_stdout.should include "hello world"
83
+
84
+ end
85
+
86
+
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hq-mongodb-installer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - James Pharaoh
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cucumber
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.3.1
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.3.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: hq-dev
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.1.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: json
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: 1.7.7
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.7.7
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 10.0.4
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: 10.0.4
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: 2.13.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: 2.13.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec_junit_formatter
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: 0.1.6
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: 0.1.6
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: 0.7.1
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: 0.7.1
111
+ description: HQ standalone MongoDB installation and configuration script
112
+ email:
113
+ - james@phsys.co.uk
114
+ executables:
115
+ - hq-mongodb-installer
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - features/checksum.feature
120
+ - features/cluster.feature
121
+ - features/standalone.feature
122
+ - features/support/steps.rb
123
+ - features/support/env.rb
124
+ - bin/hq-mongodb-installer
125
+ homepage: https://github.com/jamespharaoh/hq-mongodb-installer
126
+ licenses: []
127
+ metadata: {}
128
+ post_install_message:
129
+ rdoc_options: []
130
+ require_paths:
131
+ - lib
132
+ required_ruby_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - '>='
140
+ - !ruby/object:Gem::Version
141
+ version: 1.3.6
142
+ requirements: []
143
+ rubyforge_project: hq-mongodb-installer
144
+ rubygems_version: 2.0.3
145
+ signing_key:
146
+ specification_version: 4
147
+ summary: HQ MongoDB installer
148
+ test_files:
149
+ - features/checksum.feature
150
+ - features/cluster.feature
151
+ - features/standalone.feature
152
+ - features/support/steps.rb
153
+ - features/support/env.rb