knife-solo 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
@@ -45,15 +45,17 @@ class Chef
45
45
  :description => "Only run syntax checks - do not run Chef"
46
46
 
47
47
  def run
48
- validate_params!
49
- super
50
- check_syntax unless config[:skip_syntax_check]
51
- return if config[:syntax_check_only]
52
- Chef::Config.from_file('solo.rb')
53
- check_chef_version unless config[:skip_chef_check]
54
- rsync_kitchen
55
- add_patches
56
- cook unless config[:sync_only]
48
+ time('Run') do
49
+ validate_params!
50
+ super
51
+ check_syntax unless config[:skip_syntax_check]
52
+ return if config[:syntax_check_only]
53
+ Chef::Config.from_file('solo.rb')
54
+ check_chef_version unless config[:skip_chef_check]
55
+ rsync_kitchen
56
+ add_patches
57
+ cook unless config[:sync_only]
58
+ end
57
59
  end
58
60
 
59
61
  def check_syntax
@@ -101,18 +103,34 @@ class Chef
101
103
  (%w{revision-deploys tmp '.*'} + chefignore.ignores).uniq
102
104
  end
103
105
 
106
+ # Time a command
107
+ def time(msg)
108
+ return yield if config[:verbosity] == 0
109
+ puts "Starting #{msg}"
110
+ start = Time.now
111
+ yield
112
+ puts "#{msg} finished in #{Time.now - start} seconds"
113
+ end
114
+
104
115
  def rsync_kitchen
105
- system! %Q{rsync -rl --rsh="ssh #{ssh_args}" --delete #{rsync_exclude.collect{ |ignore| "--exclude #{ignore} " }.join} ./ :#{adjust_rsync_path(chef_path)}}
116
+ time('Rsync kitchen') do
117
+ cmd = %Q{rsync -rl --rsh="ssh #{ssh_args}" --delete #{rsync_exclude.collect{ |ignore| "--exclude #{ignore} " }.join} ./ :#{adjust_rsync_path(chef_path)}}
118
+ puts cmd unless config[:verbosity] == 0
119
+ system! cmd
120
+ end
106
121
  end
107
122
 
108
123
  def add_patches
109
124
  run_portable_mkdir_p(patch_path)
110
125
  Dir[Pathname.new(__FILE__).dirname.join("patches", "*.rb")].each do |patch|
111
- system! %Q{rsync -rl --rsh="ssh #{ssh_args}" #{patch} :#{adjust_rsync_path(patch_path)}}
126
+ time(patch) do
127
+ system! %Q{rsync -rl --rsh="ssh #{ssh_args}" #{patch} :#{adjust_rsync_path(patch_path)}}
128
+ end
112
129
  end
113
130
  end
114
131
 
115
132
  def check_chef_version
133
+ ui.msg('Checking Chef version')
116
134
  result = run_command <<-BASH
117
135
  export PATH="#{OMNIBUS_EMBEDDED_PATHS.join(":")}:$PATH"
118
136
  ruby -rubygems -e "gem 'chef', '#{CHEF_VERSION_CONSTRAINT}'"
@@ -22,6 +22,14 @@ class Chef
22
22
  :long => "--omnibus-version VERSION",
23
23
  :description => "The version of Omnibus to install"
24
24
 
25
+ option :omnibus_url,
26
+ :long => "--omnibus-url URL",
27
+ :description => "URL to download install.sh from"
28
+
29
+ option :omnibus_options,
30
+ :long => "--omnibus-options \"-r -n\"",
31
+ :description => "Pass options to the install.sh script"
32
+
25
33
  def run
26
34
  validate_params!
27
35
  super
@@ -55,8 +55,7 @@ module KnifeSolo
55
55
  raise "implement gem packages for #{self.class.name}"
56
56
  end
57
57
 
58
- def http_client_get_url(url)
59
- file = File.basename(url)
58
+ def http_client_get_url(url, file)
60
59
  stream_command <<-BASH
61
60
  if which curl 2>/dev/null; then
62
61
  curl -L -o #{file} #{url}
@@ -67,12 +66,14 @@ module KnifeSolo
67
66
  end
68
67
 
69
68
  def omnibus_install
70
- http_client_get_url("http://opscode.com/chef/install.sh")
71
-
69
+ url = prepare.config[:omnibus_url] || "http://opscode.com/chef/install.sh"
70
+ file = File.basename(url)
71
+ http_client_get_url(url, file)
72
72
  # `release_version` within install.sh will be installed if
73
73
  # `omnibus_version` is not provided.
74
- install_command = "sudo bash install.sh"
74
+ install_command = "sudo bash #{file}"
75
75
  install_command << " -v #{prepare.config[:omnibus_version]}" if prepare.config[:omnibus_version]
76
+ install_command << " #{prepare.config[:options]}" if prepare.config[:options]
76
77
 
77
78
  stream_command(install_command)
78
79
  end
@@ -91,7 +92,7 @@ module KnifeSolo
91
92
  release = "rubygems-1.8.10"
92
93
  file = "#{release}.tgz"
93
94
  url = "http://production.cf.rubygems.org/rubygems/#{file}"
94
- http_client_get_url(url)
95
+ http_client_get_url(url, file)
95
96
  run_command("tar zxf #{file}")
96
97
  run_command("cd #{release} && sudo ruby setup.rb --no-format-executable")
97
98
  run_command("sudo rm -rf #{release} #{file}")
@@ -1,5 +1,5 @@
1
1
  module KnifeSolo
2
2
  def self.version
3
- '0.0.13'
3
+ '0.0.14'
4
4
  end
5
5
  end
@@ -29,7 +29,7 @@ module KnifeSolo
29
29
  end
30
30
 
31
31
  def first_cli_arg_is_a_hostname?
32
- @name_args.first =~ /\A.+\@.+\z/
32
+ @name_args.first =~ /\A([^@]+(?>@)[^@]+|[^@]+?(?!@))\z/
33
33
  end
34
34
 
35
35
  def validate_first_cli_arg_is_a_hostname!(error_class)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-solo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-16 00:00:00.000000000 Z
12
+ date: 2012-09-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -133,7 +133,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
133
  version: '0'
134
134
  segments:
135
135
  - 0
136
- hash: 2696735894055258276
136
+ hash: 3414347062334937427
137
137
  required_rubygems_version: !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
@@ -142,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
142
  version: '0'
143
143
  segments:
144
144
  - 0
145
- hash: 2696735894055258276
145
+ hash: 3414347062334937427
146
146
  requirements: []
147
147
  rubyforge_project: nowarning
148
148
  rubygems_version: 1.8.24