knife-solo 0.0.12 → 0.0.13
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/lib/chef/knife/cook.rb +16 -1
- data/lib/chef/knife/prepare.rb +2 -4
- data/lib/knife-solo/bootstraps.rb +15 -4
- data/lib/knife-solo/bootstraps/darwin.rb +1 -6
- data/lib/knife-solo/bootstraps/freebsd.rb +57 -0
- data/lib/knife-solo/bootstraps/linux.rb +0 -4
- data/lib/knife-solo/info.rb +1 -1
- data/lib/knife-solo/kitchen_command.rb +18 -10
- metadata +5 -4
data/lib/chef/knife/cook.rb
CHANGED
@@ -20,6 +20,8 @@ class Chef
|
|
20
20
|
include KnifeSolo::KitchenCommand
|
21
21
|
include KnifeSolo::Tools
|
22
22
|
|
23
|
+
class WrongCookError < KnifeSolo::KnifeSoloError; end
|
24
|
+
|
23
25
|
banner "knife cook [user@]hostname [json] (options)"
|
24
26
|
|
25
27
|
option :skip_chef_check,
|
@@ -37,9 +39,16 @@ class Chef
|
|
37
39
|
:boolean => true,
|
38
40
|
:description => "Skip Ruby syntax checks"
|
39
41
|
|
42
|
+
option :syntax_check_only,
|
43
|
+
:long => '--syntax-check-only',
|
44
|
+
:boolean => true,
|
45
|
+
:description => "Only run syntax checks - do not run Chef"
|
46
|
+
|
40
47
|
def run
|
48
|
+
validate_params!
|
41
49
|
super
|
42
50
|
check_syntax unless config[:skip_syntax_check]
|
51
|
+
return if config[:syntax_check_only]
|
43
52
|
Chef::Config.from_file('solo.rb')
|
44
53
|
check_chef_version unless config[:skip_chef_check]
|
45
54
|
rsync_kitchen
|
@@ -63,6 +72,7 @@ class Chef
|
|
63
72
|
raise "Syntax error in #{json}: #{error.message}"
|
64
73
|
end
|
65
74
|
end
|
75
|
+
Chef::Log.info "cookbook and json syntax is ok"
|
66
76
|
end
|
67
77
|
|
68
78
|
def node_config
|
@@ -109,7 +119,7 @@ class Chef
|
|
109
119
|
BASH
|
110
120
|
raise "Couldn't find Chef #{CHEF_VERSION_CONSTRAINT} on #{host}. Please run `#{$0} prepare #{ssh_args}` to ensure Chef is installed and up to date." unless result.success?
|
111
121
|
end
|
112
|
-
|
122
|
+
|
113
123
|
def cook
|
114
124
|
logging_arg = "-l debug" if config[:verbosity] > 0
|
115
125
|
|
@@ -119,6 +129,11 @@ class Chef
|
|
119
129
|
#{logging_arg}
|
120
130
|
BASH
|
121
131
|
end
|
132
|
+
|
133
|
+
def validate_params!
|
134
|
+
validate_first_cli_arg_is_a_hostname!(WrongCookError)
|
135
|
+
end
|
136
|
+
|
122
137
|
end
|
123
138
|
end
|
124
139
|
end
|
data/lib/chef/knife/prepare.rb
CHANGED
@@ -15,7 +15,7 @@ class Chef
|
|
15
15
|
class WrongPrepareError < KnifeSolo::KnifeSoloError
|
16
16
|
alias :message :to_s
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
banner "knife prepare [user@]hostname (options)"
|
20
20
|
|
21
21
|
option :omnibus_version,
|
@@ -46,9 +46,7 @@ class Chef
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def validate_params!
|
49
|
-
|
50
|
-
raise WrongPrepareError.new "need to pass a [user@]hostname as the first argument"
|
51
|
-
end
|
49
|
+
validate_first_cli_arg_is_a_hostname!(WrongPrepareError)
|
52
50
|
end
|
53
51
|
end
|
54
52
|
end
|
@@ -23,6 +23,10 @@ module KnifeSolo
|
|
23
23
|
end
|
24
24
|
|
25
25
|
module Delegates
|
26
|
+
def stream_command(cmd)
|
27
|
+
prepare.stream_command(cmd)
|
28
|
+
end
|
29
|
+
|
26
30
|
def run_command(cmd)
|
27
31
|
prepare.run_command(cmd)
|
28
32
|
end
|
@@ -52,18 +56,25 @@ module KnifeSolo
|
|
52
56
|
end
|
53
57
|
|
54
58
|
def http_client_get_url(url)
|
55
|
-
|
59
|
+
file = File.basename(url)
|
60
|
+
stream_command <<-BASH
|
61
|
+
if which curl 2>/dev/null; then
|
62
|
+
curl -L -o #{file} #{url}
|
63
|
+
else
|
64
|
+
wget -O #{file} #{url}
|
65
|
+
fi
|
66
|
+
BASH
|
56
67
|
end
|
57
68
|
|
58
69
|
def omnibus_install
|
59
|
-
|
70
|
+
http_client_get_url("http://opscode.com/chef/install.sh")
|
60
71
|
|
61
72
|
# `release_version` within install.sh will be installed if
|
62
73
|
# `omnibus_version` is not provided.
|
63
74
|
install_command = "sudo bash install.sh"
|
64
75
|
install_command << " -v #{prepare.config[:omnibus_version]}" if prepare.config[:omnibus_version]
|
65
76
|
|
66
|
-
|
77
|
+
stream_command(install_command)
|
67
78
|
end
|
68
79
|
|
69
80
|
def ubuntu_omnibus_install
|
@@ -80,7 +91,7 @@ module KnifeSolo
|
|
80
91
|
release = "rubygems-1.8.10"
|
81
92
|
file = "#{release}.tgz"
|
82
93
|
url = "http://production.cf.rubygems.org/rubygems/#{file}"
|
83
|
-
|
94
|
+
http_client_get_url(url)
|
84
95
|
run_command("tar zxf #{file}")
|
85
96
|
run_command("cd #{release} && sudo ruby setup.rb --no-format-executable")
|
86
97
|
run_command("sudo rm -rf #{release} #{file}")
|
@@ -8,7 +8,7 @@ module KnifeSolo::Bootstraps
|
|
8
8
|
def gem_packages
|
9
9
|
['chef']
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def distro
|
13
13
|
case issue
|
14
14
|
when %r{10.5}
|
@@ -25,11 +25,6 @@ module KnifeSolo::Bootstraps
|
|
25
25
|
result.success?
|
26
26
|
end
|
27
27
|
|
28
|
-
def http_client_get_url(url)
|
29
|
-
filename = url.split("/").last
|
30
|
-
"curl '#{url}' >> #{filename}"
|
31
|
-
end
|
32
|
-
|
33
28
|
def run_pre_bootstrap_checks
|
34
29
|
raise 'xcode not installed, which is required to do anything. please install and run again.' unless has_xcode_installed?
|
35
30
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module KnifeSolo::Bootstraps
|
2
|
+
class FreeBSD < Base
|
3
|
+
def issue
|
4
|
+
run_command("uname -sr").stdout.strip
|
5
|
+
end
|
6
|
+
|
7
|
+
def gem_packages
|
8
|
+
['chef']
|
9
|
+
end
|
10
|
+
|
11
|
+
def prepare_make_conf
|
12
|
+
ui.msg "Preparing make.conf"
|
13
|
+
run_command <<-EOF
|
14
|
+
echo 'RUBY_DEFAULT_VER=1.9' >> /etc/make.conf
|
15
|
+
EOF
|
16
|
+
end
|
17
|
+
|
18
|
+
def freebsd_port_install
|
19
|
+
ui.msg "Updating ports tree..."
|
20
|
+
|
21
|
+
if Dir["/usr/ports/*"].empty?
|
22
|
+
run_command("portsnap fetch extract")
|
23
|
+
else
|
24
|
+
run_command("portsnap update")
|
25
|
+
end
|
26
|
+
|
27
|
+
prepare_make_conf
|
28
|
+
|
29
|
+
ui.msg "Installing required ports..."
|
30
|
+
packages = %w(net/rsync ftp/curl lang/ruby19 devel/ruby-gems
|
31
|
+
converters/ruby-iconv devel/rubygem-rake
|
32
|
+
shells/bash)
|
33
|
+
|
34
|
+
packages.each do |p|
|
35
|
+
ui.msg "Installing #{p}..."
|
36
|
+
result = run_command <<-SH
|
37
|
+
cd /usr/ports/#{p} && make -DBATCH -DFORCE_PKG_REGISTER install clean
|
38
|
+
SH
|
39
|
+
raise "Couldn't install #{p} from ports." unless result.success?
|
40
|
+
end
|
41
|
+
|
42
|
+
ui.msg "...done installing ports."
|
43
|
+
|
44
|
+
gem_install # chef
|
45
|
+
end
|
46
|
+
|
47
|
+
def distro
|
48
|
+
return @distro if @distro
|
49
|
+
case issue
|
50
|
+
when %r{FreeBSD 9.0-RELEASE}
|
51
|
+
{:type => 'freebsd_port'}
|
52
|
+
else
|
53
|
+
raise "#{issue} not supported"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -13,10 +13,6 @@ module KnifeSolo::Bootstraps
|
|
13
13
|
['ruby-shadow','chef']
|
14
14
|
end
|
15
15
|
|
16
|
-
def http_client_get_url(url)
|
17
|
-
"curl -LO #{url}"
|
18
|
-
end
|
19
|
-
|
20
16
|
def zypper_gem_install
|
21
17
|
ui.msg("Installing required packages...")
|
22
18
|
run_command("sudo zypper --non-interactive install ruby-devel make gcc rsync")
|
data/lib/knife-solo/info.rb
CHANGED
@@ -8,28 +8,36 @@ module KnifeSolo
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
def self.required_directories
|
12
|
-
%w(nodes roles cookbooks data_bags site-cookbooks)
|
13
|
-
end
|
14
|
-
|
15
11
|
def self.required_files
|
16
12
|
%w(solo.rb)
|
17
13
|
end
|
18
14
|
|
19
|
-
def self.all_requirements
|
20
|
-
required_files + required_directories
|
21
|
-
end
|
22
|
-
|
23
15
|
def run
|
24
16
|
raise OutOfKitchenError.new unless required_files_present?
|
25
17
|
end
|
26
18
|
|
27
19
|
def required_files_present?
|
28
|
-
KitchenCommand.
|
20
|
+
KitchenCommand.required_files.inject(true) do |m, f|
|
29
21
|
check = File.exists?(f)
|
30
|
-
|
22
|
+
warn_for_required_file(f) unless check
|
31
23
|
m && check
|
32
24
|
end
|
33
25
|
end
|
26
|
+
|
27
|
+
def warn_for_required_file(file)
|
28
|
+
Chef::Log.warn "#{file} is a required file/directory"
|
29
|
+
end
|
30
|
+
|
31
|
+
def first_cli_arg_is_a_hostname?
|
32
|
+
@name_args.first =~ /\A.+\@.+\z/
|
33
|
+
end
|
34
|
+
|
35
|
+
def validate_first_cli_arg_is_a_hostname!(error_class)
|
36
|
+
unless first_cli_arg_is_a_hostname?
|
37
|
+
ui.msg opt_parser.help
|
38
|
+
raise error_class.new "need to pass atleast a [user@]hostname as the first argument"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
34
42
|
end
|
35
43
|
end
|
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.
|
4
|
+
version: 0.0.13
|
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-
|
12
|
+
date: 2012-08-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -110,6 +110,7 @@ files:
|
|
110
110
|
- lib/chef/knife/prepare.rb
|
111
111
|
- lib/chef/knife/wash_up.rb
|
112
112
|
- lib/knife-solo/bootstraps/darwin.rb
|
113
|
+
- lib/knife-solo/bootstraps/freebsd.rb
|
113
114
|
- lib/knife-solo/bootstraps/linux.rb
|
114
115
|
- lib/knife-solo/bootstraps.rb
|
115
116
|
- lib/knife-solo/info.rb
|
@@ -132,7 +133,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
132
133
|
version: '0'
|
133
134
|
segments:
|
134
135
|
- 0
|
135
|
-
hash:
|
136
|
+
hash: 2696735894055258276
|
136
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
138
|
none: false
|
138
139
|
requirements:
|
@@ -141,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
142
|
version: '0'
|
142
143
|
segments:
|
143
144
|
- 0
|
144
|
-
hash:
|
145
|
+
hash: 2696735894055258276
|
145
146
|
requirements: []
|
146
147
|
rubyforge_project: nowarning
|
147
148
|
rubygems_version: 1.8.24
|