gluez 0.1.5 → 0.2

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.
@@ -2,22 +2,30 @@ module Gluez
2
2
  class Formatter
3
3
  def self.format(lines)
4
4
  indent = 0
5
+ num_line = 0
5
6
 
6
7
  prev_line = nil
7
8
  lines.split("\n").collect do |line|
8
- line = line.strip
9
+ num_line += 1
10
+ begin
11
+ line = line.strip
9
12
 
10
- indent -= 2 if ['}', 'fi', 'else'].include?(line)
13
+ indent -= 2 if ['}', 'fi', 'else'].include?(line)
11
14
 
12
- l = (' ' * indent) + line
13
- indent += 2 if [/^function /, /^if /, /^else/].any?{|e| line =~ e}
15
+ l = (' ' * indent) + line
16
+ indent += 2 if [/^function /, /^if /, /^else/].any?{|e| line =~ e}
14
17
 
15
- indent -= 2 if line =~ /^data=/
16
- indent += 2 if line == ')' && prev_line == 'DATA'
18
+ # indent -= 2 if line =~ /^data=/
19
+ indent -= 2 if line.index('cat >~/.gluez_transfer <<\DATA')
20
+ indent += 2 if line == '"' && prev_line == 'DATA'
17
21
 
18
- prev_line = line
22
+ prev_line = line
19
23
 
20
- l
24
+ l
25
+ rescue Exception => e
26
+ puts "error on line: #{num_line}"
27
+ raise e
28
+ end
21
29
  end.join("\n")
22
30
  end
23
31
  end
@@ -9,12 +9,10 @@ module Gluez
9
9
  case task
10
10
  when :gem
11
11
  steps << {
12
- :check => "$(su -l #{opts[:user]} -c \"gem list | awk '{print \\$1}' | grep ^#{name}$ | wc -l\") -eq 1",
13
- :code => "su -l #{opts[:user]} -c \"gem install #{name} --version #{opts[:version]} --user-install --no-rdoc --no-ri\""
12
+ :check => "\\$(gem list | awk '{print \\$1}' | grep ^#{name}$ | wc -l) -eq 1",
13
+ :code => "gem install #{name} --version #{opts[:version]} --user-install --no-rdoc --no-ri"
14
14
  }
15
15
 
16
- name = "#{name}@#{opts[:user]}"
17
-
18
16
  when :file
19
17
  steps << {
20
18
  :check => "-f #{name}",
@@ -22,15 +20,10 @@ module Gluez
22
20
  }
23
21
 
24
22
  steps << {
25
- :check => "\"$(stat -L --format=%a #{name})\" = \"#{opts[:chmod, "644"]}\"",
23
+ :check => %Q("\\$(stat -L --format=%a #{name})" = "#{opts[:chmod, "644"]}"),
26
24
  :code => "chmod #{opts[:chmod, "644"]} #{name}"
27
25
  }
28
26
 
29
- steps << {
30
- :check => "\"$(stat -L --format=%G:%U #{name})\" = \"#{opts[:chown, "root:root"]}\"",
31
- :code => "chown --no-dereference #{opts[:chown, "root:root"]} #{name}"
32
- }
33
-
34
27
  when :dir
35
28
  steps << {
36
29
  :check => "-d #{name}",
@@ -38,18 +31,16 @@ module Gluez
38
31
  }
39
32
 
40
33
  steps << {
41
- :check => "\"$(stat -L --format=%a #{name})\" = \"#{opts[:chmod, "755"]}\"",
34
+ :check => %Q("\\$(stat -L --format=%a #{name})" = "#{opts[:chmod, "755"]}"),
42
35
  :code => "chmod #{opts[:chmod, "755"]} #{name}"
43
36
  }
44
37
 
45
- steps << {
46
- :check => "\"$(stat -L --format=%G:%U #{name})\" = \"#{opts[:chown, "root:root"]}\"",
47
- :code => "chown --no-dereference #{opts[:chown, "root:root"]} #{name}"
48
- }
49
-
50
38
  when :package
51
39
  steps << {
52
- :check => "$(apt-cache policy #{name} | grep Installed | wc -l) -eq 1 && $(apt-cache policy #{name} | grep Installed | grep '(none)' | wc -l) -eq 0",
40
+ :check => [
41
+ "\\$(apt-cache policy #{name} | grep Installed | wc -l) -eq 1",
42
+ "\\$(apt-cache policy #{name} | grep Installed | grep '(none)' | wc -l) -eq 0"
43
+ ],
53
44
  :code => "apt-get install #{name} --yes"
54
45
  }
55
46
 
@@ -68,7 +59,7 @@ DATA
68
59
  CMD
69
60
 
70
61
  steps << {
71
- :check => "\"$(echo -n $data | base64 -i -d | md5sum - | awk '{print $1}')\" = \"$(crontab -u #{name} -l | md5sum - | awk '{print $1}')\"",
62
+ :check => %Q("\\$(echo -n $data | base64 -i -d | md5sum - | awk '{print $1}')" = "\\$(crontab -u #{name} -l | md5sum - | awk '{print $1}')"),
72
63
  :code => "echo -n $data | base64 -i -d | crontab -u #{name} -"
73
64
  }
74
65
 
@@ -80,10 +71,10 @@ CMD
80
71
  content = Gluez::Erb::Engine.parse(raw, opts[:vars, {}])
81
72
 
82
73
  setup = <<-CMD
83
- data=$(cat <<\\DATA
74
+ su -l #{opts[:user, 'root']} -c "cat >~/.gluez_transfer <<\\DATA
84
75
  #{content.strip}
85
76
  DATA
86
- )
77
+ "
87
78
  CMD
88
79
 
89
80
  steps << {
@@ -92,18 +83,13 @@ CMD
92
83
  }
93
84
 
94
85
  steps << {
95
- :check => "\"$(stat -L --format=%a #{name})\" = \"#{opts[:chmod, "644"]}\"",
86
+ :check => %Q("\\$(stat -L --format=%a #{name})" = "#{opts[:chmod, "644"]}"),
96
87
  :code => "chmod #{opts[:chmod, "644"]} #{name}"
97
88
  }
98
89
 
99
90
  steps << {
100
- :check => "\"$(stat -L --format=%G:%U #{name})\" = \"#{opts[:chown, "root:root"]}\"",
101
- :code => "chown --no-dereference #{opts[:chown, "root:root"]} #{name}"
102
- }
103
-
104
- steps << {
105
- :check => "\"$(echo -n $data | base64 -i -d | md5sum - | awk '{print $1}')\" = \"$(md5sum #{name} | awk '{print $1}')\"",
106
- :code => "echo -n ${data} | base64 -i -d > #{name}"
91
+ :check => %Q("\\$(cat ~/.gluez_transfer | base64 -i -d - | md5sum - | awk '{print \\$1}')" = "\\$(md5sum #{name} | awk '{print \\$1}')"),
92
+ :code => "chmod +w #{name} && cat ~/.gluez_transfer | base64 -i -d - > #{name} && chmod #{opts[:chmod, "644"]} #{name}"
107
93
  }
108
94
 
109
95
  when :group
@@ -122,14 +108,21 @@ CMD
122
108
  setup = "service --status-all 1>/tmp/gluez.tmp 2>&1"
123
109
 
124
110
  steps << {
125
- :check => "\"$(grep #{name} /tmp/gluez.tmp | wc -l)\" = \"1\" && \"$(service #{name} status | grep -E 'is running|start/running' | wc -l)\" = \"1\"",
111
+ :check => [
112
+ %Q("\\$(grep #{name} /tmp/gluez.tmp | wc -l)" = "1"),
113
+ %Q("\\$(service #{name} status | grep -E 'is running|start/running' | wc -l)" = "1")
114
+ ],
115
+
126
116
  :code => "service #{name} start"
127
117
  }
128
118
 
129
119
  when :stop
130
120
  setup = "service --status-all 1>/tmp/gluez.tmp 2>&1"
131
121
  steps << {
132
- :check => "\"$(grep #{name} /tmp/gluez.tmp | wc -l)\" = \"1\" && \"$(service #{name} status | grep -E 'is running|start/running' | wc -l)\" = \"0\"",
122
+ :check => [
123
+ %Q("\\$(grep #{name} /tmp/gluez.tmp | wc -l)" = "1"),
124
+ %Q("\\$(service #{name} status | grep -E 'is running|start/running' | wc -l)" = "0"),
125
+ ],
133
126
  :code => "service #{name} stop"
134
127
  }
135
128
 
@@ -137,38 +130,32 @@ CMD
137
130
  setup = "service --status-all 1>/tmp/gluez.tmp 2>&1"
138
131
 
139
132
  steps << {
140
- :check => :false,
141
- :code => <<-CODE
142
- if [[ "$(grep #{name} /tmp/gluez.tmp | wc -l)" = "1" && "$(service #{name} status | grep -E 'is running|start/running' | wc -l)" = "1" ]]; then
143
- service #{name} restart
144
- else
145
- service #{name} start
146
- fi
147
- CODE
133
+ :check => '1 -eq 0',
134
+ :code => "service #{name} restart"
148
135
  }
149
136
 
150
137
  when :bash
151
138
  steps << {
152
139
  :check => opts[:not_if],
153
- :code => "su -l #{opts[:user, 'root']} -c '#{opts[:code]}'"
140
+ :code => opts[:code]
154
141
  }
155
142
 
156
143
  when :bash_once
157
144
  home_dir = (opts[:user, 'root'] == 'root') ? "/root" : "/home/#{opts[:user, 'root']}"
158
145
  steps << {
159
146
  :check => "-f #{home_dir}/.gluez/#{name}",
160
- :code => "su -l #{opts[:user, 'root']} -c '#{opts[:code]}\ntouch #{home_dir}/.gluez/#{name}'"
147
+ :code => opts[:code] + "\n" + "touch #{home_dir}/.gluez/#{name}"
161
148
  }
162
149
 
163
150
  when :bundler
164
151
  steps << {
165
- :check => "\"$(su -l #{opts[:user]} -c 'cd #{name} && bundle check > /dev/null' && echo 'up2date')\" = \"up2date\"",
166
- :code => "su -l #{opts[:user]} -c \"cd #{name} && bundle install\""
152
+ :check => "\"\\$(cd #{name} && bundle check > /dev/null && echo 'up2date')\" = \"up2date\"",
153
+ :code => "cd #{name} && bundle install"
167
154
  }
168
155
 
169
156
  when :umount
170
157
  steps << {
171
- :check => "$(mount | grep \"on #{name} type\" | wc -l) -eq 0",
158
+ :check => "\\$(mount | grep \"on #{name} type\" | wc -l) -eq 0",
172
159
  :code => "umount #{name}"
173
160
  }
174
161
 
@@ -179,30 +166,28 @@ CMD
179
166
  cmd = "#{cmd} #{opts[:device]} #{name}"
180
167
 
181
168
  steps << {
182
- :check => "$(mount | grep \"on #{name} type\" | wc -l) -eq 1",
169
+ :check => "\\$(mount | grep \"on #{name} type\" | wc -l) -eq 1",
183
170
  :code => cmd
184
171
  }
185
172
 
186
173
  when :link
187
174
  steps << {
188
- :check => "-L #{name} && $(file #{name} | grep \"#{name}: symbolic link to \\`#{opts[:target]}'\" | wc -l) -eq 1",
175
+ :check => [
176
+ "-L #{name}",
177
+ "\\$(file #{name} | grep \"#{name.gsub('~', '\$HOME')}: symbolic link to \\\\\\`#{opts[:target].gsub('~', '\$HOME')}'\" | wc -l) -eq 1"
178
+ ],
189
179
  :code => "ln -f -s #{opts[:target]} #{name}"
190
180
  }
191
181
 
192
- steps << {
193
- :check => "\"$(stat --format=%G:%U #{name})\" = \"#{opts[:chown]}\"",
194
- :code => "chown --no-dereference #{opts[:chown]} #{name}"
195
- }
196
-
197
182
  when :enable
198
183
  steps << {
199
- :check => "$(update-rc.d -n -f #{name} remove | grep '/etc/rc' | wc -l) -gt 0",
184
+ :check => "\\$(update-rc.d -n -f #{name} remove | grep '/etc/rc' | wc -l) -gt 0",
200
185
  :code => "/usr/sbin/update-rc.d #{name} defaults"
201
186
  }
202
187
 
203
188
  when :disable
204
189
  steps << {
205
- :check => "$(update-rc.d -n -f #{name} remove | grep '/etc/rc' | wc -l) -eq 0",
190
+ :check => "\\$(update-rc.d -n -f #{name} remove | grep '/etc/rc' | wc -l) -eq 0",
206
191
  :code => "/usr/sbin/update-rc.d -f #{name} remove"
207
192
  }
208
193
 
@@ -211,34 +196,27 @@ CMD
211
196
  home_dir = (user != "root") ? "/home/#{opts[:user]}" : "/root"
212
197
 
213
198
  steps << {
214
- :check => "-d #{home_dir}/tmp",
215
- :code => "mkdir #{home_dir}/tmp && chown #{user}:#{user} #{home_dir}/tmp"
199
+ :check => "-d ~/tmp",
200
+ :code => "mkdir ~/tmp"
216
201
  }
217
202
 
218
203
  steps << {
219
204
  :check => opts[:test],
220
205
  :code => <<-CODE
221
- [ -f #{home_dir}/tmp/#{opts[:filename]} ] && rm #{home_dir}/tmp/#{opts[:filename]}
222
- [ -d #{home_dir}/tmp/#{opts[:folder]} ] && rm -rf #{home_dir}/tmp/#{opts[:folder]}
223
-
224
- wget --no-check-certificate -O #{home_dir}/tmp/#{opts[:filename]} #{name}
206
+ [ -f ~/tmp/#{opts[:filename]} ] && rm ~/tmp/#{opts[:filename]}
207
+ [ -d ~/tmp/#{opts[:folder]} ] && rm -rf ~/tmp/#{opts[:folder]}
225
208
 
226
- chown #{user}:#{user} #{home_dir}/tmp/#{opts[:filename]}
227
-
228
- tar -C #{home_dir}/tmp/ -x#{opts[:filename] =~ /\.tar\.bz2/ ? "j" : "z"}f #{home_dir}/tmp/#{opts[:filename]}
229
-
230
- chown -R #{user}:#{user} #{home_dir}/tmp/#{opts[:folder]}
231
-
232
- su -l #{user} -c 'cd #{home_dir}/tmp/#{opts[:folder]} && #{opts[:steps].join(' && ')}'
233
-
234
- chown -R #{user}:#{user} #{home_dir}/tmp/#{opts[:folder].split('/').first}
209
+ wget --no-check-certificate -O ~/tmp/#{opts[:filename]} #{name}
210
+ tar -C ~/tmp/ -x#{opts[:filename] =~ /\.tar\.bz2/ ? "j" : "z"}f ~/tmp/#{opts[:filename]}
211
+ cd ~/tmp/#{opts[:folder]} && #{opts[:steps].join(' && ')}
235
212
  CODE
236
213
  }
237
214
 
238
215
  else
239
216
  raise "unsupported task: #{task}, name: #{name}, opts: #{opts.inspect}"
240
217
  end
241
-
218
+
219
+ name = "#{name}@#{opts[:user]}" if opts.key?(:user)
242
220
 
243
221
  [name, setup, steps]
244
222
  end
data/lib/gluez.rb CHANGED
@@ -17,7 +17,7 @@ module Gluez
17
17
 
18
18
  lines = []
19
19
  lines << "#!/bin/bash"
20
- lines << "set -e"
20
+ # lines << "set -e"
21
21
 
22
22
  entries.each do |entry|
23
23
 
@@ -27,6 +27,18 @@ module Gluez
27
27
  opts = OptionWrapper.new(opts)
28
28
 
29
29
  name, setup, steps = Gluez::Impl::Linux.steps(cfg, task, name, opts)
30
+
31
+ steps.each do |step|
32
+ if step[:check].is_a?(Array)
33
+ step[:check].each_with_index do |check, idx|
34
+ step[:check][idx] = step[:check][idx].gsub("\"", "\\\"")
35
+ end
36
+ else
37
+ step[:check] = step[:check].gsub("\"", "\\\"")
38
+ end
39
+ step[:code] = step[:code].gsub("\"", "\\\"")
40
+ end
41
+
30
42
  entry[1] = name
31
43
 
32
44
  fun = function_name(task, name)
@@ -47,9 +59,9 @@ module Gluez
47
59
  end
48
60
 
49
61
  if cfg[:simulate]
50
- generate_simulate(lines, fun, steps, notifies)
62
+ generate_simulate(lines, opts[:user, 'root'], fun, steps, notifies)
51
63
  else
52
- generate_execute(lines, fun, steps, notifies)
64
+ generate_execute(lines, opts[:user, 'root'], fun, steps, notifies)
53
65
  end
54
66
 
55
67
  lines << "}"
@@ -72,9 +84,11 @@ module Gluez
72
84
  "#{task}_#{name}".gsub('/', '_').gsub(':', '_').gsub("@", "_").gsub("~", "_").gsub(".", "_")
73
85
  end
74
86
 
75
- def self.generate_simulate(lines, fun, steps, notifies)
87
+ def self.generate_simulate(lines, user, fun, steps, notifies)
76
88
 
77
- lines << "if [[ #{steps.collect{|s| s[:check] == :false ? '1 -eq 0' : s[:check]}.join(' && ')} ]]; then"
89
+ lines << code_check(steps, user, true)
90
+
91
+ lines << "if [[ $? -eq 0 ]]; then"
78
92
  lines << " echo \"[ up2date ] #{fun}\""
79
93
  lines << "else"
80
94
  lines << " echo \"[ not up2date ] #{fun}\""
@@ -85,20 +99,45 @@ module Gluez
85
99
 
86
100
  lines << "fi"
87
101
  end
88
-
89
- def self.generate_execute(lines, fun, steps, notifies)
102
+
103
+ def self.code_check(steps, user, applied)
104
+ steps.collect do |step|
105
+
106
+ if step[:check].is_a?(Array)
107
+
108
+ step[:check].collect do |check|
109
+ "su -l #{user} -c \"test " + check + "\""
110
+ end.join(" && ")
111
+
112
+ else
113
+ "su -l #{user} -c \"test " + step[:check] + "\"" unless (applied && step[:check] == '1 -eq 0')
114
+ end
115
+
116
+ end.join(" && ")
117
+ end
118
+
119
+ def self.generate_execute(lines, user, fun, steps, notifies)
120
+
121
+ lines << code_check(steps, user, false)
90
122
 
91
- lines << "if [[ #{steps.collect{|s| s[:check] == :false ? '1 -eq 0' : s[:check]}.join(' && ')} ]]; then"
123
+ lines << "if [[ $? -eq 0 ]]; then"
92
124
  lines << " echo \"[ up2date ] #{fun}\""
93
125
  lines << "else"
94
126
 
95
127
  if steps.length > 1
96
128
  (0..steps.length-1).to_a.each do |limit|
97
- lines << "if [[ #{steps[0..limit].collect{|s| s[:check] == :false ? '1 -eq 0' : s[:check]}.join(' && ')} ]]; then"
129
+
130
+ lines << code_check(steps[0..limit], user, false)
131
+
132
+ lines << "if [[ $? -eq 0 ]]; then"
98
133
  lines << " echo \"[ up2date ] #{fun}\""
99
134
  lines << "else"
100
- lines << " #{steps[limit][:code]}"
101
- lines << " if [[ #{steps[0..limit].collect{|s| s[:check] == :false ? '1 -eq 0' : s[:check]}.join(' && ')} ]]; then"
135
+
136
+ lines << " su -l #{user} -c \"#{steps[limit][:code]}\""
137
+
138
+ lines << code_check(steps[0..limit], user, true)
139
+
140
+ lines << " if [[ $? -eq 0 ]]; then"
102
141
  lines << " echo \"[ applied ] #{fun}\""
103
142
  lines << " else"
104
143
  lines << " echo \"[ not applied ] #{fun}\""
@@ -107,8 +146,11 @@ module Gluez
107
146
  lines << "fi"
108
147
  end
109
148
  else
110
- lines << " #{steps[0][:code]}"
111
- lines << " if [[ #{steps[0][:check] == :false ? '1 -eq 1' : steps[0][:check]} ]]; then"
149
+ lines << " su -l #{user} -c \"#{steps[0][:code]}\""
150
+
151
+ lines << code_check([steps[0]], user, true)
152
+
153
+ lines << " if [[ $? -eq 0 ]]; then"
112
154
  lines << " echo \"[ applied ] #{fun}\""
113
155
  lines << " else"
114
156
  lines << " echo \"[ not applied ] #{fun}\""
@@ -122,5 +164,5 @@ module Gluez
122
164
 
123
165
  lines << "fi"
124
166
  end
125
-
167
+
126
168
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: gluez
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.5
5
+ version: "0.2"
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jan Zimmek
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-16 00:00:00 +02:00
13
+ date: 2011-06-05 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies: []
16
16