dolphin 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 12547564e16718ea3e9836ba2235379f7e7911e2
4
- data.tar.gz: 56d227a850dc4aa2002e61b0c04a7037250962b0
3
+ metadata.gz: 1f9f3b9fb1215ac9b545eaa9867df9279430e6ca
4
+ data.tar.gz: 213425f42e5a6b40cf386cf1f160a85f2ddd3264
5
5
  SHA512:
6
- metadata.gz: c5d4394fbd05a7f634721d1155f77e0daf7b83c339e423cac74f049ba415e6272fa0452c4fee2462d974d7fa862954716b8fb5297ca08d8d18fa9ba565ceecb0
7
- data.tar.gz: f00a9af78d0b52c85eb7ab296908c7f0a088c1e31f6eca739e86b12b6da9c3563b116fc474bc492392666d0f90db0ca7e88853877467e7439694b39e72b548ad
6
+ metadata.gz: 4ac99c14dc64a47fd0207cf19c8212ff1d592483dd5ec5ac85a4358f86d060bc86af015cb1d1134a027f5e10272aa5a70feb26b290a40409c695c6fdffed0dc8
7
+ data.tar.gz: 3f376724b4f8fc15e73e2f6d72dda1359a1596670dd92016f2b4cc7929f6129d527121d38c90f442d3d1732ed1d76ec2897febe40a1aec2a1c0f07eb52aa0211
data/README.md CHANGED
@@ -253,7 +253,7 @@ Relevant settings in bin/dolphin are:
253
253
 
254
254
  Sometimes we need to take some actions on only one specific group, which may contains arbitrary number of servers. Just pass the --group (or -g for short) option when issue command. Notice that in @group_hash, we difine a key-value pair for each group. So we only need to pass the key for that specific group as the -g option.
255
255
 
256
- bin/dolphin nginx conf -t q2
256
+ bin/dolphin mongo install -g mongo
257
257
 
258
258
  Relevant settings in bin/dolphin are:
259
259
 
@@ -268,6 +268,11 @@ Relevant settings in bin/dolphin are:
268
268
  @servers = @group_hash[options[:group].to_sym].map {|item| @server_hash[item]}
269
269
  end
270
270
 
271
+ ### Dry-run mode
272
+ Passing the --dry (or -d for short) option to enter dry-run mode.
273
+
274
+ bin/dolphin deploy go -d
275
+
271
276
  ## Extend with custom modules
272
277
 
273
278
  To extend dolphin's functionality with your custom modules is easy. It is Ruby anyway. For example, to add Centos related functions:
@@ -306,6 +311,15 @@ To extend dolphin's functionality with your custom modules is easy. It is Ruby a
306
311
  register(Dolphin::Centos, 'centos', 'centos', 'Adjust Centos config')
307
312
  end
308
313
 
314
+ ## Select Linux distribution specific modules
315
+ Dolphin contains some modules that are Linux distribution specific. For example, if you are using Ubuntu, you can include an Ubuntu specific module by adding the following to bin/dolphin:
316
+
317
+ require "dolphin/ubuntu/mongodb"
318
+
319
+ class Dolphin::CLI < Thor
320
+ register(Dolphin::Mongodb, 'mongodb', 'mongodb', 'MongoDB related tasks')
321
+ end
322
+
309
323
  ## Related gems
310
324
 
311
325
  * [capistrano]
@@ -18,6 +18,8 @@ class Dolphin::Base < Thor
18
18
  class_option :group, aliases: '-g', type: :string, default: nil
19
19
  # deploy to localhost
20
20
  class_option :local, aliases: '-l', type: :boolean, default: false
21
+ # dry-run
22
+ class_option :dry, aliases: '-d', type: :boolean, default: false
21
23
 
22
24
  def initialize(args=[], options={}, config={})
23
25
  super(args, options, config)
@@ -65,6 +67,12 @@ class Dolphin::Base < Thor
65
67
  end
66
68
 
67
69
  def capture(command, server)
70
+ # dry-run
71
+ if options[:dry]
72
+ puts "Capture on #{server}: #{command}"
73
+ return '' # empty string for default unix return result
74
+ end
75
+
68
76
  # capture output from one target server
69
77
  output = ''
70
78
  session = ssh_connection(server)
@@ -107,6 +115,13 @@ class Dolphin::Base < Thor
107
115
  target = @servers
108
116
  end
109
117
 
118
+ # dry-run
119
+ if options[:dry]
120
+ puts "Running on: #{target}"
121
+ puts "#{'='*60}\n"
122
+ return
123
+ end
124
+
110
125
  # record output to display at the end
111
126
  output = {}
112
127
 
@@ -186,7 +201,11 @@ class Dolphin::Base < Thor
186
201
  Parallel.map(target, in_threads: tracks) do |server|
187
202
  command = "scp #{source} #{@user}@#{server}:#{dest}"
188
203
  puts command
189
- raise unless system(command, out: $stdout, err: :out)
204
+
205
+ # dry-run
206
+ unless options[:dry]
207
+ raise unless system(command, out: $stdout, err: :out)
208
+ end
190
209
  end
191
210
  end
192
211
 
@@ -0,0 +1,96 @@
1
+ # Mongodb related tasks
2
+ class Dolphin::Mongodb < Dolphin::Base
3
+
4
+ desc "install", "install mongodb"
5
+ def install
6
+ menu = [
7
+ "
8
+ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
9
+ sudo echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/10gen.list
10
+ sudo apt-get update
11
+ sudo apt-get -y install mongodb-10gen
12
+ ",
13
+ ]
14
+
15
+ execute menu
16
+ end
17
+
18
+ desc "disable", "disable mongodb"
19
+ def disable
20
+ menu = [
21
+ "
22
+ sudo stop mongodb
23
+ sudo sh -c 'echo manual > /etc/init/mongodb.override'
24
+ ",
25
+ ]
26
+
27
+ execute menu
28
+ end
29
+
30
+ desc "enable", "enable mongodb"
31
+ def enable
32
+ menu = [
33
+ "
34
+ sudo rm -f /etc/init/mongodb.override
35
+ sudo start mongodb
36
+ ",
37
+ ]
38
+
39
+ execute menu
40
+ end
41
+
42
+ desc "config", "config mongodb"
43
+ def config
44
+ # upload files
45
+ upload("#{@config_root}/mongo/*", "/tmp")
46
+
47
+ # allow access from peers
48
+ ufw = [
49
+ '# ufw',
50
+ 'sudo ufw allow from 192.168.0.0/16 to any port 27017',
51
+ 'sudo ufw allow from 192.168.0.0/16 to any port 28017',
52
+ ]
53
+ @group_hash[:mg].each do |item|
54
+ ufw << "sudo ufw allow from #{@server_hash[item]}/32 to any port 27017"
55
+ ufw << "sudo ufw allow from #{@server_hash[item]}/32 to any port 28017"
56
+ end
57
+ ufw << "sudo ufw status numbered"
58
+
59
+ menu = [
60
+ ufw.join("\n"),
61
+
62
+ # config files
63
+ %{
64
+ sudo mv /tmp/mongodb.conf /etc/
65
+ sudo chown root:root /etc/mongodb.conf
66
+ sudo mv /tmp/keyfile.txt /etc/
67
+ sudo chown mongodb:mongodb /etc/keyfile.txt
68
+ sudo chmod go-r /etc/keyfile.txt
69
+ sudo restart mongodb
70
+ },
71
+
72
+ ]
73
+
74
+ execute menu
75
+
76
+ end
77
+
78
+ desc "backup", "backup mongodb"
79
+ def backup
80
+ # upload files
81
+ upload("#{@config_root}/mongo/*", "/tmp")
82
+
83
+ menu = [
84
+ %{
85
+ mkdir -p ~/backups/mongodb
86
+ mv /tmp/mg* ~/backups/mongodb
87
+ # # add cron job to /var/spool/cron/crontabs/user
88
+ crontab /tmp/cron.txt
89
+ },
90
+
91
+ ]
92
+
93
+ execute menu
94
+ end
95
+
96
+ end
@@ -0,0 +1,160 @@
1
+ # postgres related tasks
2
+ class Dolphin::Postgres < Dolphin::Base
3
+
4
+ desc "install", "install postgres"
5
+ def install
6
+ menu = [
7
+ %{
8
+ sudo echo 'deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main' | sudo tee /etc/apt/sources.list.d/pgdg.list
9
+ wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
10
+ sudo apt-get update
11
+ sudo apt-get -y install postgresql postgresql-contrib libpq-dev
12
+ },
13
+
14
+ ]
15
+
16
+ execute menu
17
+ end
18
+
19
+ desc "disable", "disable postgresql"
20
+ def disable
21
+ menu = [
22
+ "
23
+ sudo service postgresql stop
24
+ sudo update-rc.d postgresql disable
25
+ ",
26
+ ]
27
+
28
+ execute menu
29
+ end
30
+
31
+ desc "enable", "enable postgresql"
32
+ def enable
33
+ menu = [
34
+ "
35
+ sudo update-rc.d postgresql enable
36
+ sudo service postgresql start
37
+ ",
38
+ ]
39
+
40
+ execute menu
41
+ end
42
+
43
+ desc "config", "config postgres"
44
+ def config
45
+ # upload files
46
+ upload("#{@config_root}/postgres/shared/*", "/tmp")
47
+
48
+ master = @server_hash[:pgm]
49
+ slave = @server_hash[:pgs]
50
+ menu = [
51
+ # set kernel sysctl
52
+ %{
53
+ cp /etc/sysctl.conf /tmp/
54
+ echo kernel.shmmax = 2147483648 >> /tmp/sysctl.conf
55
+ echo kernel.shmall = 2097152 >> /tmp/sysctl.conf
56
+ echo kernel.shmmni = 4096 >> /tmp/sysctl.conf
57
+ sudo mv /tmp/sysctl.conf /etc/
58
+ sudo sysctl -p
59
+ },
60
+
61
+ # conf
62
+ %{
63
+ sudo mv /tmp/postgresql.conf /etc/postgresql/9.2/main/
64
+ sudo chown postgres:postgres /etc/postgresql/9.2/main/postgresql.conf
65
+ },
66
+
67
+ # auth for replication
68
+ %{
69
+ echo hostssl replication replicator #{master}/32 trust >> /tmp/pg_hba.conf
70
+ echo hostssl replication replicator #{slave}/32 trust >> /tmp/pg_hba.conf
71
+ sudo mv /tmp/pg_hba.conf /etc/postgresql/9.2/main/
72
+ sudo chown postgres:postgres /etc/postgresql/9.2/main/pg_hba.conf
73
+ },
74
+
75
+ # firewall
76
+ %{
77
+ sudo ufw allow from 192.168.0.0/16 to any port 5432
78
+ # only for replicator
79
+ sudo ufw allow from #{master}/32 to any port 5432
80
+ sudo ufw allow from #{slave}/32 to any port 5432
81
+ },
82
+ ]
83
+
84
+ execute menu
85
+ end
86
+
87
+ desc "master", "config pgmaster"
88
+ def master(user, password)
89
+ menu = [
90
+ %{
91
+ # plugin for pgadmin
92
+ sudo -u postgres psql -c 'CREATE EXTENSION adminpack;'
93
+
94
+ # create replicator user
95
+ sudo -u postgres psql -c "CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD '#{password}';"
96
+
97
+ # create application user
98
+ sudo -u postgres psql -c "CREATE USER #{user} LOGIN ENCRYPTED PASSWORD '#{password}' NOSUPERUSER INHERIT CREATEDB CREATEROLE;"
99
+
100
+ sudo service postgresql restart
101
+ },
102
+ ]
103
+
104
+ execute menu
105
+ end
106
+
107
+ desc "slave", "config pgslave"
108
+ def slave
109
+ # upload files
110
+ upload("#{@config_root}/postgres/slave/*", "/tmp")
111
+
112
+ master = @server_hash[:pgm]
113
+ menu = [
114
+ %{
115
+ sudo service postgresql stop
116
+ sudo -u postgres rm -rf /var/lib/postgresql/9.2/main
117
+ sudo -u postgres pg_basebackup -h #{master} -D /var/lib/postgresql/9.2/main -U replicator -v -P
118
+
119
+ sed -i 's/MASTER/#{master}/' /tmp/recovery.conf
120
+ sudo mv /tmp/recovery.conf /var/lib/postgresql/9.2/main/
121
+ sudo chown postgres:postgres /var/lib/postgresql/9.2/main/recovery.conf
122
+
123
+ sudo service postgresql start
124
+
125
+ },
126
+ ]
127
+
128
+ execute menu
129
+ end
130
+
131
+ desc "createdb", "postgres createdb"
132
+ def createdb(dbname)
133
+ menu = [
134
+ %{
135
+ psql -d postgres -c 'CREATE DATABASE #{dbname}'
136
+ },
137
+ ]
138
+
139
+ execute menu
140
+ end
141
+
142
+ desc "backup", "backup postgres"
143
+ def backup
144
+ # upload files
145
+ upload("#{@config_root}/postgres/slave/*", "/tmp")
146
+
147
+ menu = [
148
+ %{
149
+ mkdir -p ~/backups/postgresql
150
+ mv /tmp/pg_backup.* ~/backups/postgresql
151
+ # # add cron job to /var/spool/cron/crontabs/user
152
+ crontab /tmp/cron.txt
153
+ },
154
+
155
+ ]
156
+
157
+ execute menu
158
+ end
159
+
160
+ end
@@ -1,3 +1,3 @@
1
1
  module Dolphin
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dolphin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neng Xu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-24 00:00:00.000000000 Z
11
+ date: 2013-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -102,6 +102,8 @@ files:
102
102
  - lib/dolphin/nginx.rb
103
103
  - lib/dolphin/puma.rb
104
104
  - lib/dolphin/setup.rb
105
+ - lib/dolphin/ubuntu/mongodb.rb
106
+ - lib/dolphin/ubuntu/postgres.rb
105
107
  - lib/dolphin/version.rb
106
108
  - lib/generators/dolphin/install_generator.rb
107
109
  - lib/generators/dolphin/puma_generator.rb