toft 0.0.4 → 0.0.5

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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- toft (0.0.3)
4
+ toft (0.0.4)
5
5
  net-ssh
6
6
 
7
7
  GEM
data/Rakefile CHANGED
@@ -16,16 +16,16 @@ task :package_deb do
16
16
  src_dir = "#{PROJECT_ROOT}/scripts"
17
17
  content_dir = "#{PROJECT_ROOT}/pkg/#{LXC_PACKAGE_NAME}"
18
18
  mkdir_p content_dir
19
- mkdir_p "#{content_dir}/usr/local/bin"
19
+ mkdir_p "#{content_dir}/usr/bin"
20
20
  mkdir_p "#{content_dir}/var/cache/lxc"
21
21
  mkdir_p "#{content_dir}/usr/lib/lxc/templates"
22
- cp_r Dir.glob("#{src_dir}/bin/share/*"), "#{content_dir}/usr/local/bin"
23
- cp_r Dir.glob("#{src_dir}/bin/ubuntu/*"), "#{content_dir}/usr/local/bin"
22
+ cp_r Dir.glob("#{src_dir}/bin/share/*"), "#{content_dir}/usr/bin"
23
+ cp_r Dir.glob("#{src_dir}/bin/ubuntu/*"), "#{content_dir}/usr/bin"
24
24
  cp_r Dir.glob("#{src_dir}/lxc-templates/*"), "#{content_dir}/usr/lib/lxc/templates"
25
25
 
26
26
  post_install_script = <<-eos
27
27
  #!/bin/sh -e
28
- /usr/local/bin/lxc-prepare-host
28
+ /usr/bin/lxc-prepare-host
29
29
  eos
30
30
  File.open("#{PROJECT_ROOT}/pkg/toft-lxc-post-install.sh", 'w') { |f| f.write(post_install_script) }
31
31
 
@@ -60,17 +60,17 @@ task :package_rpm do
60
60
  src_dir = "#{PROJECT_ROOT}/scripts"
61
61
  content_dir = "#{PROJECT_ROOT}/pkg/#{LXC_PACKAGE_NAME}"
62
62
  mkdir_p content_dir
63
- mkdir_p "#{content_dir}/usr/local/bin"
64
- mkdir_p "#{content_dir}/usr/var/lib/lxc"
63
+ mkdir_p "#{content_dir}/usr/bin"
64
+ mkdir_p "#{content_dir}/var/lib/lxc"
65
65
  mkdir_p "#{content_dir}/var/cache/lxc"
66
66
  mkdir_p "#{content_dir}/usr/lib/lxc/templates"
67
- cp_r Dir.glob("#{src_dir}/bin/share/*"), "#{content_dir}/usr/local/bin"
68
- cp_r Dir.glob("#{src_dir}/bin/centos/*"), "#{content_dir}/usr/local/bin"
67
+ cp_r Dir.glob("#{src_dir}/bin/share/*"), "#{content_dir}/usr/bin"
68
+ cp_r Dir.glob("#{src_dir}/bin/centos/*"), "#{content_dir}/usr/bin"
69
69
  cp_r Dir.glob("#{src_dir}/lxc-templates/*"), "#{content_dir}/usr/lib/lxc/templates"
70
70
 
71
71
  post_install_script = <<-eos
72
72
  #!/bin/sh -e
73
- /usr/local/bin/lxc-prepare-host
73
+ /usr/bin/lxc-prepare-host
74
74
  eos
75
75
  File.open("#{PROJECT_ROOT}/pkg/toft-lxc-post-install.sh", 'w') { |f| f.write(post_install_script) }
76
76
 
@@ -16,5 +16,5 @@ Scenario: Test rm
16
16
  Scenario: Check ssh command result
17
17
  Given I have a clean running node n1
18
18
  Then the result of running ssh command "ps" on "n1" should contain "sshd"
19
- Then the result of running ssh command "chef-solo" on "n1" should contain "No cookbook found"
19
+ Then the result of running ssh command "chef-solo" on "n1" should fail because of "No cookbook found"
20
20
 
@@ -15,5 +15,14 @@ Then /^Rm "([^"]*)" on "([^"]*)" should succeed$/ do |dir, node|
15
15
  end
16
16
 
17
17
  Then /^the result of running ssh command "([^"]*)" on "([^"]*)" should contain "([^"]*)"$/ do |cmd, node, s|
18
- find(node).get_ssh_result(cmd).should include(s)
19
- end
18
+ r = find(node).run_ssh(cmd)
19
+ r.stdout.should include(s)
20
+ end
21
+
22
+ Then /^the result of running ssh command "([^"]*)" on "([^"]*)" should fail because of "([^"]*)"$/ do |cmd, node, s|
23
+ begin
24
+ r = find(node).run_ssh(cmd)
25
+ rescue CommandExecutionError => e
26
+ e.stdout.should include(s)
27
+ end
28
+ end
@@ -42,7 +42,7 @@ end
42
42
 
43
43
  Then /^Node "([^"]*)" should have ip address same with that obtained from inside it through ssh$/ do |node|
44
44
  n = find(node)
45
- n.get_ssh_result("ifconfig eth0 | grep 'inet addr:'").should include(n.ip)
45
+ n.run_ssh("ifconfig eth0 | grep 'inet addr:'").stdout.should include(n.ip)
46
46
  end
47
47
 
48
48
  When /^I add cname "([^"]*)" to "([^"]*)"$/ do |cname, node|
@@ -18,5 +18,5 @@ Before do
18
18
  end
19
19
 
20
20
  at_exit do
21
- n1.destroy
21
+ # n1.destroy
22
22
  end
data/lib/toft/node.rb CHANGED
@@ -90,28 +90,36 @@ CQWv13UgQjiHgQILXSb7xdzpWK1wpDoqIEWQugRyPQDeZhPWVbB4Lg==
90
90
 
91
91
  def run_ssh(command)
92
92
  raise ArgumentError, "Trying to run empty command on node #{@hostname}", caller if command.blank?
93
- error = false
93
+ stdout = ""
94
+ stderr = ""
94
95
  Net::SSH.start(fqdn, "root", :key_data => [PRIVATE_KEY]) do |ssh|
95
- ssh.exec! command do |ch, stream, data|
96
- if stream == :stderr
97
- error = true
96
+ ssh.open_channel do |channel|
97
+ channel.exec(command) do |ch, success|
98
+ raise RuntimeError, "Could not execute command: [#{command}]", caller unless success
99
+
100
+ channel.on_data do |c, data|
101
+ puts data
102
+ stdout << data
103
+ yield data if block_given?
104
+ end
105
+ channel.on_extended_data do |c, type, data|
106
+ puts data
107
+ stderr << data
108
+ yield data if block_given?
109
+ end
110
+ channel.on_request("exit-status") do |c, data|
111
+ exit_code = data.read_long
112
+ raise CommandExecutionError.new "Remote command [#{command}] exited with status #{exit_code}", stdout, stderr unless exit_code.zero?
113
+ end
114
+ channel.on_request("exit-signal") do |c, data|
115
+ raise CommandExecutionError.new "Remote command [#{command}] terminated with signal", stdout, stderr
116
+ end
98
117
  end
99
- yield data if block_given?
100
- puts data
101
- end
118
+ end.wait
102
119
  end
103
- raise RuntimeError, "Error happened while executing command [#{command}]!", caller if error
104
- return true
120
+ return CommandResult.new stdout, stderr
105
121
  end
106
122
 
107
- def get_ssh_result(cmd)
108
- output = ""
109
- run_ssh(cmd) do |data|
110
- output += data
111
- end
112
- return output
113
- end
114
-
115
123
  def rm(dir)
116
124
  raise ArgumentError, "Illegal dir path: [#{dir}]", caller if dir.blank? || dir[0] != ?/
117
125
  system "rm -rf #{rootfs}#{dir}"
@@ -182,4 +190,23 @@ lxc.network.ipv4 = #{full_ip}
182
190
  "#{@hostname}.#{Toft::DOMAIN}"
183
191
  end
184
192
  end
193
+
194
+ class CommandResult
195
+ attr_reader :stdout, :stderr
196
+
197
+ def initialize(stdout, stderr)
198
+ @stdout = stdout
199
+ @stderr = stderr
200
+ end
201
+ end
202
+
203
+ class CommandExecutionError < RuntimeError
204
+ attr_reader :message, :stdout, :stderr
205
+
206
+ def initialize(message, stdout, stderr)
207
+ @message = message
208
+ @stdout = stdout
209
+ @stderr = stderr
210
+ end
211
+ end
185
212
  end
data/lib/toft/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Toft
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -19,7 +19,7 @@ if [[ ! -f /usr/bin/lxc-ls ]]; then
19
19
  wget http://lxc.sourceforge.net/download/lxc/lxc-0.7.4.tar.gz && \
20
20
  tar zxf lxc-0.7.4.tar.gz && \
21
21
  cd lxc-0.7.4 && \
22
- ./configure --prefix=/usr && \
22
+ ./configure --prefix=/usr --with-config-path=/var/lib/lxc && \
23
23
  make && \
24
24
  make install)
25
25
  fi
@@ -38,14 +38,14 @@ BOOTPROTO=static
38
38
  DELAY=0
39
39
  TYPE=Bridge
40
40
  IPADDR=$gateway_ip
41
- NETWORK=$subnet
42
41
  NETMASK=$netmask
43
- GATEWAY=$gateway_ip
44
42
  MTU=1500
45
43
  IPV6INIT=no
46
44
  USERCTL=no
47
45
  EOF
48
46
 
47
+ sudo sed -i "s/#*[ ^I]*net\.ipv4\.ip_forward[ ^I]*=[ ^I]*[01]/net\.ipv4\.ip_forward = 1/" /etc/sysctl.conf
48
+
49
49
  # reset iptables
50
50
  cat <<EOF > /etc/sysconfig/iptables
51
51
  *nat
@@ -36,6 +36,8 @@ post-up /usr/sbin/brctl setfd br0 0
36
36
  EOF
37
37
  fi
38
38
 
39
+ sudo sed -i "s/#*[ ^I]*net\.ipv4\.ip_forward[ ^I]*=[ ^I]*[01]/net\.ipv4\.ip_forward = 1/" /etc/sysctl.conf
40
+
39
41
  iptables-save > /etc/firewall.conf
40
42
  echo "#!/bin/sh" > /etc/network/if-up.d/iptables
41
43
  echo "iptables-restore < /etc/firewall.conf" >> /etc/network/if-up.d/iptables
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toft
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 4
10
- version: 0.0.4
9
+ - 5
10
+ version: 0.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Huang Liang
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-10-19 00:00:00 Z
18
+ date: 2011-10-20 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rspec