knife-linode 0.3.2 → 0.3.3

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/Rakefile CHANGED
@@ -1,56 +1,35 @@
1
- #
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Author:: Daniel DeLeo (<dan@opscode.com>)
4
- # Author:: Seth Chisamore (<schisamo@opscode.com>)
5
- # Copyright:: Copyright (c) 2008, 2010 Opscode, Inc.
6
- # License:: Apache License, Version 2.0
7
- #
8
- # Licensed under the Apache License, Version 2.0 (the "License");
9
- # you may not use this file except in compliance with the License.
10
- # You may obtain a copy of the License at
11
- #
12
- # http://www.apache.org/licenses/LICENSE-2.0
13
- #
14
- # Unless required by applicable law or agreed to in writing, software
15
- # distributed under the License is distributed on an "AS IS" BASIS,
16
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
- # See the License for the specific language governing permissions and
18
- # limitations under the License.
19
- #
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ task default: %i{style spec}
20
5
 
21
- require 'bundler'
22
6
  Bundler::GemHelper.install_tasks
23
7
 
24
- # require 'rubygems'
25
- # require 'rake/gempackagetask'
26
- require 'rake/rdoctask'
8
+ desc "Run specs"
9
+ RSpec::Core::RakeTask.new(:spec) do |spec|
10
+ spec.pattern = "spec/**/*_spec.rb"
11
+ end
27
12
 
28
13
  begin
29
- require 'sdoc'
30
-
31
- Rake::RDocTask.new do |rdoc|
32
- rdoc.title = "Chef Ruby API Documentation"
33
- rdoc.main = "README.rdoc"
34
- rdoc.options << '--fmt' << 'shtml' # explictly set shtml generator
35
- rdoc.template = 'direct' # lighter template
36
- rdoc.rdoc_files.include("README.rdoc", "LICENSE", "spec/tiny_server.rb", "lib/**/*.rb")
37
- rdoc.rdoc_dir = "rdoc"
14
+ require "chefstyle"
15
+ require "rubocop/rake_task"
16
+ RuboCop::RakeTask.new(:style) do |task|
17
+ task.options += ["--display-cop-names", "--no-color"]
38
18
  end
39
19
  rescue LoadError
40
- puts "sdoc is not available. (sudo) gem install sdoc to generate rdoc documentation."
20
+ puts "chefstyle/rubocop is not available. bundle install first to make sure all dependencies are installed."
41
21
  end
42
22
 
43
23
  begin
44
- require 'rspec/core/rake_task'
45
-
46
- task :default => :spec
47
-
48
- desc "Run all specs in spec directory"
49
- RSpec::Core::RakeTask.new(:spec) do |t|
50
- t.pattern = 'spec/unit/**/*_spec.rb'
51
- end
52
-
24
+ require "yard"
25
+ YARD::Rake::YardocTask.new(:docs)
53
26
  rescue LoadError
54
- STDERR.puts "\n*** RSpec not available. (sudo) gem install rspec to run unit tests. ***\n\n"
27
+ puts "yard is not available. bundle install first to make sure all dependencies are installed."
55
28
  end
56
29
 
30
+ task :console do
31
+ require "irb"
32
+ require "irb/completion"
33
+ ARGV.clear
34
+ IRB.start
35
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.3.3
@@ -5,21 +5,19 @@ require "knife-linode/version"
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "knife-linode"
7
7
  s.version = Knife::Linode::VERSION
8
- s.authors = ['Adam Jacob', 'Seth Chisamore', 'Lamont Granquist', 'Jesse R. Adams']
9
- s.email = ['adam@opscode.com', 'schisamo@opscode.com', 'lamont@opscode.com', 'jesse@techno-geeks.org']
10
- s.homepage = 'http://wiki.opscode.com/display/chef'
8
+ s.authors = ["Adam Jacob", "Seth Chisamore", "Lamont Granquist", "Jesse R. Adams"]
9
+ s.email = ["adam@chef.io", "schisamo@chef.io", "lamont@chef.io", "jesse@techno-geeks.org"]
10
+ s.license = "Apache-2.0"
11
+ s.homepage = "https://github.com/chef/knife-linode"
11
12
  s.summary = "Linode Support for Chef's Knife Command"
12
13
  s.description = s.summary
13
- s.extra_rdoc_files = ['README.md', 'LICENSE']
14
+ s.extra_rdoc_files = ["README.md", "LICENSE"]
14
15
 
16
+ s.required_ruby_version = ">= 2.2.2"
15
17
  s.files = `git ls-files`.split("\n")
16
18
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
18
20
  s.require_paths = ["lib"]
19
21
 
20
- s.add_runtime_dependency "fog", "~> 1.0"
21
- s.add_runtime_dependency "chef", ">= 11.8"
22
-
23
- s.add_development_dependency "rspec", "~> 3.0"
24
- s.add_development_dependency "rubocop", "~> 0.24"
22
+ s.add_runtime_dependency "fog", "~> 1.0"
25
23
  end
@@ -1,7 +1,7 @@
1
1
  #
2
- # Author:: Seth Chisamore (<schisamo@opscode.com>)
3
- # Author:: Lamont Granquist (<lamont@opscode.com>)
4
- # Copyright:: Copyright (c) 2011 Opscode, Inc.
2
+ # Author:: Seth Chisamore (<schisamo@chef.io>)
3
+ # Author:: Lamont Granquist (<lamont@chef.io>)
4
+ # Copyright:: Copyright (c) 2011-2016 Chef Software, Inc.
5
5
  # License:: Apache License, Version 2.0
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,7 +17,7 @@
17
17
  # limitations under the License.
18
18
  #
19
19
 
20
- require 'chef/knife'
20
+ require "chef/knife"
21
21
 
22
22
  class Chef
23
23
  class Knife
@@ -30,9 +30,9 @@ class Chef
30
30
  includer.class_eval do
31
31
 
32
32
  deps do
33
- require 'fog'
34
- require 'readline'
35
- require 'chef/json_compat'
33
+ require "fog"
34
+ require "readline"
35
+ require "chef/json_compat"
36
36
  end
37
37
 
38
38
  option :linode_api_key,
@@ -47,7 +47,7 @@ class Chef
47
47
  def connection
48
48
  @connection ||= begin
49
49
  connection = Fog::Compute.new(
50
- :provider => 'Linode',
50
+ :provider => "Linode",
51
51
  :linode_api_key => Chef::Config[:knife][:linode_api_key]
52
52
  )
53
53
  end
@@ -58,23 +58,23 @@ class Chef
58
58
  config[key] || Chef::Config[:knife][key]
59
59
  end
60
60
 
61
- def msg_pair(label, value, color=:cyan)
61
+ def msg_pair(label, value, color = :cyan)
62
62
  if value && !value.empty?
63
63
  puts "#{ui.color(label, color)}: #{value}"
64
64
  end
65
65
  end
66
66
 
67
- def validate!(keys=[:linode_api_key])
67
+ def validate!(keys = [:linode_api_key])
68
68
  errors = []
69
69
 
70
70
  keys.each do |k|
71
- pretty_key = k.to_s.gsub(/_/, ' ').gsub(/\w+/){ |w| (w =~ /(api)/i) ? w.upcase : w.capitalize }
71
+ pretty_key = k.to_s.tr("_", " ").gsub(/\w+/) { |w| (w =~ /(api)/i) ? w.upcase : w.capitalize }
72
72
  if Chef::Config[:knife][k].nil?
73
- errors << "You did not provide a valid '#{pretty_key}' value."
73
+ errors << "You did not provide a valid '#{pretty_key}' value in your knife as #{k}."
74
74
  end
75
75
  end
76
76
 
77
- if errors.each{|e| ui.error(e)}.any?
77
+ if errors.each { |e| ui.error(e) }.any?
78
78
  exit 1
79
79
  end
80
80
  end
@@ -101,4 +101,3 @@ class Chef
101
101
  end
102
102
  end
103
103
  end
104
-
@@ -1,8 +1,8 @@
1
1
 
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Author:: Seth Chisamore (<schisamo@opscode.com>)
4
- # Author:: Lamont Granquist (<lamont@opscode.com>)
5
- # Copyright:: Copyright (c) 2010-2011 Opscode, Inc.
2
+ # Author:: Adam Jacob (<adam@chef.io>)
3
+ # Author:: Seth Chisamore (<schisamo@chef.io>)
4
+ # Author:: Lamont Granquist (<lamont@chef.io>)
5
+ # Copyright:: Copyright (c) 2010-2016 Chef Software, Inc.
6
6
  # License:: Apache License, Version 2.0
7
7
  #
8
8
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,7 +18,7 @@
18
18
  # limitations under the License.
19
19
  #
20
20
 
21
- require 'chef/knife/linode_base'
21
+ require "chef/knife/linode_base"
22
22
 
23
23
  class Chef
24
24
  class Knife
@@ -29,11 +29,10 @@ class Chef
29
29
  banner "knife linode datacenter list (options)"
30
30
 
31
31
  def run
32
-
33
32
  validate!
34
33
  server_list = [
35
- ui.color('ID', :bold),
36
- ui.color('Location', :bold),
34
+ ui.color("ID", :bold),
35
+ ui.color("Location", :bold),
37
36
  ]
38
37
 
39
38
  connection.data_centers.each do |datacenter|
@@ -42,7 +41,6 @@ class Chef
42
41
  end
43
42
 
44
43
  puts ui.list(server_list, :columns_across, 2)
45
-
46
44
  end
47
45
  end
48
46
  end
@@ -1,8 +1,8 @@
1
1
 
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Author:: Seth Chisamore (<schisamo@opscode.com>)
4
- # Author:: Lamont Granquist (<lamont@opscode.com>)
5
- # Copyright:: Copyright (c) 2010-2011 Opscode, Inc.
2
+ # Author:: Adam Jacob (<adam@chef.io>)
3
+ # Author:: Seth Chisamore (<schisamo@chef.io>)
4
+ # Author:: Lamont Granquist (<lamont@chef.io>)
5
+ # Copyright:: Copyright (c) 2010-2016 Chef Software, Inc.
6
6
  # License:: Apache License, Version 2.0
7
7
  #
8
8
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,7 +18,7 @@
18
18
  # limitations under the License.
19
19
  #
20
20
 
21
- require 'chef/knife/linode_base'
21
+ require "chef/knife/linode_base"
22
22
 
23
23
  class Chef
24
24
  class Knife
@@ -29,15 +29,14 @@ class Chef
29
29
  banner "knife linode flavor list (options)"
30
30
 
31
31
  def run
32
-
33
32
  validate!
34
33
 
35
34
  server_list = [
36
- ui.color('ID', :bold),
37
- ui.color('Name', :bold),
38
- ui.color('RAM', :bold),
39
- ui.color('Disk', :bold),
40
- ui.color('Price', :bold),
35
+ ui.color("ID", :bold),
36
+ ui.color("Name", :bold),
37
+ ui.color("RAM", :bold),
38
+ ui.color("Disk", :bold),
39
+ ui.color("Price", :bold),
41
40
  ]
42
41
 
43
42
  connection.flavors.each do |flavor|
@@ -49,7 +48,6 @@ class Chef
49
48
  end
50
49
 
51
50
  puts ui.list(server_list, :columns_across, 5)
52
-
53
51
  end
54
52
  end
55
53
  end
@@ -1,8 +1,8 @@
1
1
 
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Author:: Seth Chisamore (<schisamo@opscode.com>)
4
- # Author:: Lamont Granquist (<lamont@opscode.com>)
5
- # Copyright:: Copyright (c) 2010-2011 Opscode, Inc.
2
+ # Author:: Adam Jacob (<adam@chef.io>)
3
+ # Author:: Seth Chisamore (<schisamo@chef.io>)
4
+ # Author:: Lamont Granquist (<lamont@chef.io>)
5
+ # Copyright:: Copyright (c) 2010-2016 Chef Software, Inc.
6
6
  # License:: Apache License, Version 2.0
7
7
  #
8
8
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,7 +18,7 @@
18
18
  # limitations under the License.
19
19
  #
20
20
 
21
- require 'chef/knife/linode_base'
21
+ require "chef/knife/linode_base"
22
22
 
23
23
  class Chef
24
24
  class Knife
@@ -29,14 +29,13 @@ class Chef
29
29
  banner "knife linode image list (options)"
30
30
 
31
31
  def run
32
-
33
32
  validate!
34
33
 
35
34
  server_list = [
36
- ui.color('ID', :bold),
37
- ui.color('Name', :bold),
38
- ui.color('Bits', :bold),
39
- ui.color('Image Size', :bold),
35
+ ui.color("ID", :bold),
36
+ ui.color("Name", :bold),
37
+ ui.color("Bits", :bold),
38
+ ui.color("Image Size", :bold),
40
39
  ]
41
40
 
42
41
  connection.images.each do |image|
@@ -47,7 +46,6 @@ class Chef
47
46
  end
48
47
 
49
48
  puts ui.list(server_list, :columns_across, 4)
50
-
51
49
  end
52
50
  end
53
51
  end
@@ -1,8 +1,8 @@
1
1
 
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Author:: Seth Chisamore (<schisamo@opscode.com>)
4
- # Author:: Lamont Granquist (<lamont@opscode.com>)
5
- # Copyright:: Copyright (c) 2010-2011 Opscode, Inc.
2
+ # Author:: Adam Jacob (<adam@chef.io>)
3
+ # Author:: Seth Chisamore (<schisamo@chef.io>)
4
+ # Author:: Lamont Granquist (<lamont@chef.io>)
5
+ # Copyright:: Copyright (c) 2010-2016 Chef Software, Inc.
6
6
  # License:: Apache License, Version 2.0
7
7
  #
8
8
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,7 +18,7 @@
18
18
  # limitations under the License.
19
19
  #
20
20
 
21
- require 'chef/knife/linode_base'
21
+ require "chef/knife/linode_base"
22
22
 
23
23
  class Chef
24
24
  class Knife
@@ -29,12 +29,11 @@ class Chef
29
29
  banner "knife linode kernel list (options)"
30
30
 
31
31
  def run
32
-
33
32
  validate!
34
33
 
35
34
  server_list = [
36
- ui.color('ID', :bold),
37
- ui.color('Name', :bold),
35
+ ui.color("ID", :bold),
36
+ ui.color("Name", :bold),
38
37
  ]
39
38
 
40
39
  connection.kernels.each do |kernel|
@@ -43,7 +42,6 @@ class Chef
43
42
  end
44
43
 
45
44
  puts ui.list(server_list, :columns_across, 2)
46
-
47
45
  end
48
46
  end
49
47
  end
@@ -1,8 +1,8 @@
1
1
 
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Author:: Seth Chisamore (<schisamo@opscode.com>)
4
- # Author:: Lamont Granquist (<lamont@opscode.com>)
5
- # Copyright:: Copyright (c) 2010-2011 Opscode, Inc.
2
+ # Author:: Adam Jacob (<adam@chef.io>)
3
+ # Author:: Seth Chisamore (<schisamo@chef.io>)
4
+ # Author:: Lamont Granquist (<lamont@chef.io>)
5
+ # Copyright:: Copyright (c) 2010-2016 Chef Software, Inc.
6
6
  # License:: Apache License, Version 2.0
7
7
  #
8
8
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,7 +18,7 @@
18
18
  # limitations under the License.
19
19
  #
20
20
 
21
- require 'chef/knife/linode_base'
21
+ require "chef/knife/linode_base"
22
22
 
23
23
  class Chef
24
24
  class Knife
@@ -26,13 +26,13 @@ class Chef
26
26
 
27
27
  include Knife::LinodeBase
28
28
 
29
- deps do
30
- require 'fog'
31
- require 'readline'
32
- require 'chef/json_compat'
33
- require 'chef/knife/bootstrap'
34
- Chef::Knife::Bootstrap.load_deps
35
- end
29
+ deps do
30
+ require "fog"
31
+ require "readline"
32
+ require "chef/json_compat"
33
+ require "chef/knife/bootstrap"
34
+ Chef::Knife::Bootstrap.load_deps
35
+ end
36
36
 
37
37
  banner "knife linode server create (options)"
38
38
 
@@ -83,7 +83,7 @@ class Chef
83
83
  :default => "root"
84
84
 
85
85
  chars = ("a".."z").to_a + ("1".."9").to_a + ("A".."Z").to_a
86
- @@defpass = Array.new(20, '').collect{chars[rand(chars.size)]}.push('A').push('a').join
86
+ @@defpass = Array.new(20, "").collect { chars[rand(chars.size)] }.push("A").push("a").join
87
87
 
88
88
  option :ssh_password,
89
89
  :short => "-P PASSWORD",
@@ -138,13 +138,13 @@ class Chef
138
138
  :boolean => true,
139
139
  :default => true
140
140
 
141
- Chef::Config[:knife][:hints] ||= {"linode" => {}}
141
+ Chef::Config[:knife][:hints] ||= { "linode" => {} }
142
142
  option :hint,
143
143
  :long => "--hint HINT_NAME[=HINT_FILE]",
144
- :description => "Specify Ohai Hint to be set on the bootstrap target. Use multiple --hint options to specify multiple hints.",
144
+ :description => "Specify Ohai Hint to be set on the bootstrap target. Use multiple --hint options to specify multiple hints.",
145
145
  :proc => Proc.new { |h|
146
- name, path = h.split("=")
147
- Chef::Config[:knife][:hints][name] = path ? JSON.parse(::File.read(path)) : Hash.new
146
+ name, path = h.split("=")
147
+ Chef::Config[:knife][:hints][name] = path ? JSON.parse(::File.read(path)) : Hash.new
148
148
  }
149
149
 
150
150
  option :secret,
@@ -201,6 +201,8 @@ class Chef
201
201
 
202
202
  validate!
203
203
 
204
+ raise "You must provide linode_node_name via the CLI or knife.rb config. See help for details" if locate_config_value(:linode_node_name).nil?
205
+
204
206
  datacenter_id = locate_config_value(:linode_datacenter).to_i
205
207
  datacenter = connection.data_centers.select { |dc| dc.id == datacenter_id }.first
206
208
 
@@ -226,7 +228,7 @@ class Chef
226
228
  :password => locate_config_value(:ssh_password)
227
229
  )
228
230
 
229
- connection.linode_update(server.id, {:lpm_displaygroup => config[:display_group]}) if config[:display_group]
231
+ connection.linode_update(server.id, { :lpm_displaygroup => config[:display_group] }) if config[:display_group]
230
232
 
231
233
  fqdn = server.ips.select { |lip| !( lip.ip =~ /^192\.168\./ || lip.ip =~ /^10\./ || lip.ip =~ /^172\.(1[6-9]|2[0-9]|3[0-1])\./ ) }.first.ip
232
234
 
@@ -243,25 +245,25 @@ class Chef
243
245
 
244
246
  print "\n#{ui.color("Waiting for sshd", :magenta)}"
245
247
 
246
- print(".") until tcp_test_ssh(fqdn) {
248
+ print(".") until tcp_test_ssh(fqdn) do
247
249
  sleep @initial_sleep_delay ||= 10
248
250
  puts("done")
249
- }
251
+ end
250
252
 
251
- Chef::Config[:knife][:hints]['linode'] ||= Hash.new
252
- Chef::Config[:knife][:hints]['linode'].merge!({
253
- 'server_id' => server.id.to_s,
254
- 'datacenter_id' => locate_config_value(:linode_datacenter),
255
- 'flavor_id' => locate_config_value(:linode_flavor),
256
- 'image_id' => locate_config_value(:linode_image),
257
- 'kernel_id' => locate_config_value(:linode_kernel),
258
- 'ip_addresses' => server.ips.map(&:ip)})
253
+ Chef::Config[:knife][:hints]["linode"] ||= Hash.new
254
+ Chef::Config[:knife][:hints]["linode"].merge!({
255
+ "server_id" => server.id.to_s,
256
+ "datacenter_id" => locate_config_value(:linode_datacenter),
257
+ "flavor_id" => locate_config_value(:linode_flavor),
258
+ "image_id" => locate_config_value(:linode_image),
259
+ "kernel_id" => locate_config_value(:linode_kernel),
260
+ "ip_addresses" => server.ips.map(&:ip) })
259
261
 
260
262
  msg_pair("JSON Attributes", config[:json_attributes]) unless !config[:json_attributes] || config[:json_attributes].empty?
261
- bootstrap_for_node(server,fqdn).run
263
+ bootstrap_for_node(server, fqdn).run
262
264
  end
263
265
 
264
- def bootstrap_for_node(server,fqdn)
266
+ def bootstrap_for_node(server, fqdn)
265
267
  bootstrap = Chef::Knife::Bootstrap.new
266
268
  bootstrap.name_args = [fqdn]
267
269
  bootstrap.config[:run_list] = config[:run_list]
@@ -273,13 +275,13 @@ class Chef
273
275
  bootstrap.config[:bootstrap_version] = locate_config_value(:bootstrap_version)
274
276
  bootstrap.config[:first_boot_attributes] = locate_config_value(:json_attributes) || {}
275
277
  bootstrap.config[:distro] = locate_config_value(:distro)
276
- bootstrap.config[:use_sudo] = true unless config[:ssh_user] == 'root'
278
+ bootstrap.config[:use_sudo] = true unless config[:ssh_user] == "root"
277
279
  bootstrap.config[:template_file] = locate_config_value(:template_file)
278
280
  bootstrap.config[:environment] = config[:environment]
279
281
  bootstrap.config[:host_key_verify] = config[:host_key_verify]
280
282
  bootstrap.config[:secret] = locate_config_value(:secret)
281
283
  bootstrap.config[:secret_file] = locate_config_value(:secret_file)
282
- bootstrap.config[:private_ip] = server.ips.reject{ |ip| ip.public }.first.ip
284
+ bootstrap.config[:private_ip] = server.ips.reject { |ip| ip.public }.first.ip
283
285
  bootstrap.config[:public_ip] = server.public_ip_address
284
286
  bootstrap
285
287
  end