knife-bluebox 0.7.1 → 0.8.0

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.
@@ -15,9 +15,18 @@ Set the following environmental variables
15
15
  export BLUEBOX_API_KEY="YourAPIKey" # should match /[a-f0-9]+/
16
16
  export BLUEBOX_CUSTOMER_ID="YourCustomerNumber" # should match /d+/
17
17
 
18
+ Then add the following lines to <chef-repo-root>/.chef/knife.rb
19
+
20
+ # API credentials for knife-bluebox
21
+ knife[:bluebox_customer_id] = ENV['BLUEBOX_CUSTOMER_ID']
22
+ knife[:bluebox_api_key] = ENV['BLUEBOX_API_KEY']
23
+ knife[:identity_file] = "#{ENV['HOME']}/.ssh/id_rsa"
24
+ knife[:public_identity_file] = "#{ENV['HOME']}/.ssh/id_rsa.pub"
25
+
18
26
  == Usage
19
27
  knife bluebox images list
20
28
  knife bluebox server create [RUN LIST...] (options)
21
29
  knife bluebox server delete BLOCK-HOSTNAME
22
30
  knife bluebox server list (options)
23
31
 
32
+ You will need to run knife from within your chef-repo to have the knife.rb config take effect.
@@ -0,0 +1,66 @@
1
+ #
2
+ # Author:: Jesse Proudman (<jesse.proudman@blueboxgrp.com>)
3
+ # Copyright:: Copyright (c) 2010 Blue Box Group
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/knife'
20
+
21
+ class Chef
22
+ class Knife
23
+ class BlueboxImageCreate < Knife
24
+
25
+ deps do
26
+ require 'fog'
27
+ require 'highline'
28
+ require 'chef/json_compat'
29
+ end
30
+
31
+ banner "knife bluebox image create [uuid]"
32
+
33
+ option :description,
34
+ :short => '-d DESCRIPTION',
35
+ :long => '--description DESCRIPTION',
36
+ :description => 'The description to give the created image. Defaults to Hostname and Timestamp'
37
+
38
+ option :public,
39
+ :short => '-p',
40
+ :long => '--public',
41
+ :description => 'Makes the image public so that anyone can deploy from it',
42
+ :boolean => true
43
+
44
+ def highline
45
+ @highline ||= HighLine.new
46
+ end
47
+
48
+ def run
49
+ bluebox,image,create = ARGV.shift, ARGV.shift, ARGV.shift
50
+ bluebox = Fog::Compute::Bluebox.new(
51
+ :bluebox_customer_id => Chef::Config[:knife][:bluebox_customer_id],
52
+ :bluebox_api_key => Chef::Config[:knife][:bluebox_api_key]
53
+ )
54
+
55
+ config[:public] ||= false
56
+ config[:block_id] ||= ARGV.shift
57
+
58
+ image = bluebox.images.new(config)
59
+
60
+ response = image.save
61
+
62
+ puts response
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,55 @@
1
+ #
2
+ # Author:: Jesse Proudman (<jesse.proudman@blueboxgrp.com>)
3
+ # Copyright:: Copyright (c) 2010 Blue Box Group
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/knife'
20
+
21
+ class Chef
22
+ class Knife
23
+ class BlueboxImageDelete < Knife
24
+
25
+ deps do
26
+ require 'fog'
27
+ require 'highline'
28
+ require 'chef/json_compat'
29
+ end
30
+
31
+ banner "knife bluebox image delete [UUID]"
32
+
33
+ def highline
34
+ @highline ||= HighLine.new
35
+ end
36
+
37
+ def run
38
+ bluebox,image,delete = ARGV.shift, ARGV.shift, ARGV.shift
39
+ bluebox = Fog::Compute::Bluebox.new(
40
+ :bluebox_customer_id => Chef::Config[:knife][:bluebox_customer_id],
41
+ :bluebox_api_key => Chef::Config[:knife][:bluebox_api_key]
42
+ )
43
+ image_uuid = ARGV.shift
44
+
45
+ image = bluebox.images.get( image_uuid )
46
+
47
+ if image
48
+ puts image.destroy
49
+ else
50
+ ui.error("Image: #{image_uuid} could not be found")
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -6,9 +6,9 @@
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
8
8
  # You may obtain a copy of the License at
9
- #
9
+ #
10
10
  # http://www.apache.org/licenses/LICENSE-2.0
11
- #
11
+ #
12
12
  # Unless required by applicable law or agreed to in writing, software
13
13
  # distributed under the License is distributed on an "AS IS" BASIS,
14
14
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -20,7 +20,7 @@ require 'chef/knife'
20
20
 
21
21
  class Chef
22
22
  class Knife
23
- class BlueboxImagesList < Knife
23
+ class BlueboxImageList < Knife
24
24
 
25
25
  deps do
26
26
  require 'fog'
@@ -28,7 +28,7 @@ class Chef
28
28
  require 'chef/json_compat'
29
29
  end
30
30
 
31
- banner "knife bluebox images list"
31
+ banner "knife bluebox image list"
32
32
 
33
33
  def highline
34
34
  @highline ||= HighLine.new
@@ -44,9 +44,9 @@ class Chef
44
44
 
45
45
  image_list = [ highline.color('ID', :bold), highline.color('Name', :bold) ]
46
46
 
47
- bluebox.images.each do |server|
48
- image_list << server.id.to_s
49
- image_list << server.description
47
+ bluebox.images.each do |image|
48
+ image_list << image.id.to_s
49
+ image_list << image.description
50
50
  end
51
51
  puts highline.list(image_list, :columns_across, 2)
52
52
 
@@ -60,8 +60,7 @@ class Chef
60
60
  option :password,
61
61
  :short => "-P password",
62
62
  :long => "--password password",
63
- :description => "User password on new server.",
64
- :default => ""
63
+ :description => "User password on new server."
65
64
 
66
65
  option :disable_bootstrap,
67
66
  :long => "--disable-bootstrap",
@@ -76,8 +75,13 @@ class Chef
76
75
 
77
76
  option :identity_file,
78
77
  :short => "-I IDENTITY_FILE",
79
- :long => "--identity-file IDENTITY_FILE",
80
- :description => "The SSH identity file used for authentication"
78
+ :long => "--identity-file PRIVATE_IDENTITY_FILE",
79
+ :description => "The private SSH identity file used for authentication to the new server"
80
+
81
+ option :public_identity_file,
82
+ :short => "-B PUBLIC_IDENTITY_FILE",
83
+ :long => "--public-identity-file PUBLIC_IDENTITY_FILE",
84
+ :description => "The public SSH identity file used for authentication to new server"
81
85
 
82
86
  option :load_balancer,
83
87
  :short => "-b LB",
@@ -96,12 +100,20 @@ class Chef
96
100
  def run
97
101
  $stdout.sync = true
98
102
 
99
- if Chef::Config[:knife][:identity_file].nil? && config[:identity_file].nil?
100
- ui.error('You have not provided a SSH identity file. This is required to create a Blue Box server.')
101
- exit 1
102
- elsif Chef::Config[:knife][:identity_file]
103
- public_key = File.read(Chef::Config[:knife][:identity_file]).chomp
104
- else public_key = File.read(config[:identity_file]).chomp
103
+ public_key = config[:public_identity_file] || Chef::Config[:knife][:public_identity_file]
104
+ identity_file = config[:identity_file] || Chef::Config[:knife][:identity_file]
105
+
106
+ if config[:password].nil?
107
+
108
+ if !public_key
109
+ ui.error('Since no password was provided a public_identity_file needs to be set.')
110
+ exit 1
111
+ end
112
+
113
+ if !identity_file
114
+ ui.error('Since no password was provided an identity_file needs to be set.')
115
+ exit 1
116
+ end
105
117
  end
106
118
 
107
119
  bluebox = Fog::Compute::Bluebox.new(
@@ -120,7 +132,7 @@ class Chef
120
132
  :hostname => config[:chef_node_name],
121
133
  :username => Chef::Config[:knife][:username] || config[:username],
122
134
  :password => config[:password],
123
- :public_key => public_key,
135
+ :public_key => File.read(public_key),
124
136
  :lb_applications => Chef::Config[:knife][:load_balancer] || config[:load_balancer]
125
137
  )
126
138
 
@@ -166,13 +178,14 @@ class Chef
166
178
  bootstrap = Chef::Knife::Bootstrap.new
167
179
  bootstrap.name_args = [ server.ips[0]['address'] ]
168
180
  bootstrap.config[:run_list] = run_list
169
- bootstrap.config[:password] = password unless config[:password].empty?
181
+ bootstrap.config[:ssh_password] = config[:password]
170
182
  bootstrap.config[:ssh_user] = config[:username]
171
- bootstrap.config[:identity_file] = config[:identity_file]
183
+ bootstrap.config[:identity_file] = identity_file
172
184
  bootstrap.config[:chef_node_name] = config[:chef_node_name] || server.hostname
173
185
  bootstrap.config[:use_sudo] = true
174
186
  bootstrap.config[:distro] = config[:distro]
175
187
  bootstrap.run
188
+ print "\n#{h.color("Finished bootstrapping #{server.hostname}\n\n", :green)}"
176
189
  rescue Errno::ECONNREFUSED
177
190
  puts h.color("Connection refused on SSH, retrying - CTRL-C to abort")
178
191
  sleep 1
@@ -1,3 +1,3 @@
1
1
  module KnifeBlueBox
2
- VERSION = "0.7.1"
2
+ VERSION = "0.8.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-bluebox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.8.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-11-30 00:00:00.000000000 Z
13
+ date: 2013-02-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: chef
@@ -54,7 +54,9 @@ extra_rdoc_files:
54
54
  files:
55
55
  - LICENSE
56
56
  - README.rdoc
57
- - lib/chef/knife/bluebox_images_list.rb
57
+ - lib/chef/knife/bluebox_image_create.rb
58
+ - lib/chef/knife/bluebox_image_delete.rb
59
+ - lib/chef/knife/bluebox_image_list.rb
58
60
  - lib/chef/knife/bluebox_server_create.rb
59
61
  - lib/chef/knife/bluebox_server_delete.rb
60
62
  - lib/chef/knife/bluebox_server_list.rb