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.
- checksums.yaml +7 -0
- data/bin/hq-mongodb-installer +189 -0
- data/features/checksum.feature +18 -0
- data/features/cluster.feature +19 -0
- data/features/standalone.feature +13 -0
- data/features/support/env.rb +8 -0
- data/features/support/steps.rb +86 -0
- metadata +153 -0
checksums.yaml
ADDED
@@ -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,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
|