knife-rackspace 0.5.1 → 0.5.2
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/rackspace_flavor_list.rb +7 -9
- data/lib/chef/knife/rackspace_image_list.rb +7 -10
- data/lib/chef/knife/rackspace_server_create.rb +24 -33
- data/lib/chef/knife/rackspace_server_delete.rb +17 -17
- data/lib/chef/knife/rackspace_server_list.rb +17 -13
- data/lib/knife-rackspace/version.rb +1 -1
- metadata +2 -13
@@ -16,14 +16,17 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require 'fog'
|
20
19
|
require 'chef/knife'
|
21
|
-
require 'chef/json_compat'
|
22
20
|
|
23
21
|
class Chef
|
24
22
|
class Knife
|
25
23
|
class RackspaceFlavorList < Knife
|
26
24
|
|
25
|
+
deps do
|
26
|
+
require 'fog'
|
27
|
+
require 'chef/json_compat'
|
28
|
+
end
|
29
|
+
|
27
30
|
banner "knife rackspace flavor list (options)"
|
28
31
|
|
29
32
|
option :rackspace_api_key,
|
@@ -44,12 +47,7 @@ class Chef
|
|
44
47
|
:default => "auth.api.rackspacecloud.com",
|
45
48
|
:proc => Proc.new { |url| Chef::Config[:knife][:rackspace_api_auth_url] = url }
|
46
49
|
|
47
|
-
def h
|
48
|
-
@highline ||= HighLine.new
|
49
|
-
end
|
50
|
-
|
51
50
|
def run
|
52
|
-
require 'fog'
|
53
51
|
|
54
52
|
connection = Fog::Compute.new(
|
55
53
|
:provider => 'Rackspace',
|
@@ -58,7 +56,7 @@ class Chef
|
|
58
56
|
:rackspace_auth_url => Chef::Config[:knife][:rackspace_api_auth_url] || config[:rackspace_api_auth_url]
|
59
57
|
)
|
60
58
|
|
61
|
-
flavor_list = [
|
59
|
+
flavor_list = [ ui.color('ID', :bold), ui.color('Name', :bold), ui.color('Architecture', :bold), ui.color('RAM', :bold), ui.color('Disk', :bold) , ui.color('Cores', :bold) ]
|
62
60
|
connection.flavors.sort_by(&:id).each do |flavor|
|
63
61
|
flavor_list << flavor.id.to_s
|
64
62
|
flavor_list << flavor.name
|
@@ -67,7 +65,7 @@ class Chef
|
|
67
65
|
flavor_list << "#{flavor.disk.to_s} GB"
|
68
66
|
flavor_list << flavor.cores.to_s
|
69
67
|
end
|
70
|
-
puts
|
68
|
+
puts ui.list(flavor_list, :columns_across, 6)
|
71
69
|
end
|
72
70
|
end
|
73
71
|
end
|
@@ -16,14 +16,17 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require 'fog'
|
20
19
|
require 'chef/knife'
|
21
|
-
require 'chef/json_compat'
|
22
20
|
|
23
21
|
class Chef
|
24
22
|
class Knife
|
25
23
|
class RackspaceImageList < Knife
|
26
24
|
|
25
|
+
deps do
|
26
|
+
require 'fog'
|
27
|
+
require 'chef/json_compat'
|
28
|
+
end
|
29
|
+
|
27
30
|
banner "knife rackspace image list (options)"
|
28
31
|
|
29
32
|
option :rackspace_api_key,
|
@@ -44,13 +47,7 @@ class Chef
|
|
44
47
|
:default => "auth.api.rackspacecloud.com",
|
45
48
|
:proc => Proc.new { |url| Chef::Config[:knife][:rackspace_api_auth_url] = url }
|
46
49
|
|
47
|
-
def h
|
48
|
-
@highline ||= HighLine.new
|
49
|
-
end
|
50
|
-
|
51
50
|
def run
|
52
|
-
require 'fog'
|
53
|
-
|
54
51
|
connection = Fog::Compute.new(
|
55
52
|
:provider => 'Rackspace',
|
56
53
|
:rackspace_api_key => Chef::Config[:knife][:rackspace_api_key],
|
@@ -58,12 +55,12 @@ class Chef
|
|
58
55
|
:rackspace_auth_url => Chef::Config[:knife][:rackspace_api_auth_url] || config[:rackspace_api_auth_url]
|
59
56
|
)
|
60
57
|
|
61
|
-
image_list = [
|
58
|
+
image_list = [ ui.color('ID', :bold), ui.color('Name', :bold) ]
|
62
59
|
connection.images.sort_by(&:name).each do |image|
|
63
60
|
image_list << image.id.to_s
|
64
61
|
image_list << image.name
|
65
62
|
end
|
66
|
-
puts
|
63
|
+
puts ui.list(image_list, :columns_across, 2)
|
67
64
|
end
|
68
65
|
end
|
69
66
|
end
|
@@ -16,22 +16,21 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require 'fog'
|
20
19
|
require 'chef/knife'
|
21
|
-
require 'chef/knife/bootstrap'
|
22
|
-
require 'chef/json_compat'
|
23
|
-
require 'resolv'
|
24
20
|
|
25
21
|
class Chef
|
26
22
|
class Knife
|
27
23
|
class RackspaceServerCreate < Knife
|
28
24
|
|
29
25
|
deps do
|
26
|
+
require 'chef/knife/bootstrap'
|
30
27
|
Chef::Knife::Bootstrap.load_deps
|
31
28
|
require 'fog'
|
32
29
|
require 'highline'
|
33
30
|
require 'net/ssh/multi'
|
34
31
|
require 'readline'
|
32
|
+
require 'resolv'
|
33
|
+
require 'chef/json_compat'
|
35
34
|
end
|
36
35
|
|
37
36
|
banner "knife rackspace server create (options)"
|
@@ -116,10 +115,6 @@ class Chef
|
|
116
115
|
:proc => lambda { |o| o.split(/[\s,]+/) },
|
117
116
|
:default => []
|
118
117
|
|
119
|
-
def h
|
120
|
-
@highline ||= HighLine.new
|
121
|
-
end
|
122
|
-
|
123
118
|
def tcp_test_ssh(hostname)
|
124
119
|
tcp_socket = TCPSocket.new(hostname, 22)
|
125
120
|
readable = IO.select([tcp_socket], nil, nil, 5)
|
@@ -140,10 +135,6 @@ class Chef
|
|
140
135
|
end
|
141
136
|
|
142
137
|
def run
|
143
|
-
require 'fog'
|
144
|
-
require 'highline'
|
145
|
-
require 'net/ssh/multi'
|
146
|
-
require 'readline'
|
147
138
|
|
148
139
|
$stdout.sync = true
|
149
140
|
|
@@ -160,41 +151,41 @@ class Chef
|
|
160
151
|
:flavor_id => Chef::Config[:knife][:flavor]
|
161
152
|
)
|
162
153
|
|
163
|
-
puts "#{
|
164
|
-
puts "#{
|
165
|
-
puts "#{
|
166
|
-
puts "#{
|
167
|
-
puts "#{
|
154
|
+
puts "#{ui.color("Instance ID", :cyan)}: #{server.id}"
|
155
|
+
puts "#{ui.color("Host ID", :cyan)}: #{server.host_id}"
|
156
|
+
puts "#{ui.color("Name", :cyan)}: #{server.name}"
|
157
|
+
puts "#{ui.color("Flavor", :cyan)}: #{server.flavor.name}"
|
158
|
+
puts "#{ui.color("Image", :cyan)}: #{server.image.name}"
|
168
159
|
|
169
|
-
print "\n#{
|
160
|
+
print "\n#{ui.color("Waiting server", :magenta)}"
|
170
161
|
|
171
162
|
# wait for it to be ready to do stuff
|
172
163
|
server.wait_for { print "."; ready? }
|
173
164
|
|
174
165
|
puts("\n")
|
175
166
|
|
176
|
-
puts "#{
|
177
|
-
puts "#{
|
178
|
-
puts "#{
|
179
|
-
puts "#{
|
167
|
+
puts "#{ui.color("Public DNS Name", :cyan)}: #{public_dns_name(server)}"
|
168
|
+
puts "#{ui.color("Public IP Address", :cyan)}: #{server.addresses["public"][0]}"
|
169
|
+
puts "#{ui.color("Private IP Address", :cyan)}: #{server.addresses["private"][0]}"
|
170
|
+
puts "#{ui.color("Password", :cyan)}: #{server.password}"
|
180
171
|
|
181
|
-
print "\n#{
|
172
|
+
print "\n#{ui.color("Waiting for sshd", :magenta)}"
|
182
173
|
|
183
174
|
print(".") until tcp_test_ssh(server.addresses["public"][0]) { sleep @initial_sleep_delay ||= 10; puts("done") }
|
184
175
|
|
185
176
|
bootstrap_for_node(server).run
|
186
177
|
|
187
178
|
puts "\n"
|
188
|
-
puts "#{
|
189
|
-
puts "#{
|
190
|
-
puts "#{
|
191
|
-
puts "#{
|
192
|
-
puts "#{
|
193
|
-
puts "#{
|
194
|
-
puts "#{
|
195
|
-
puts "#{
|
196
|
-
puts "#{
|
197
|
-
puts "#{
|
179
|
+
puts "#{ui.color("Instance ID", :cyan)}: #{server.id}"
|
180
|
+
puts "#{ui.color("Host ID", :cyan)}: #{server.host_id}"
|
181
|
+
puts "#{ui.color("Name", :cyan)}: #{server.name}"
|
182
|
+
puts "#{ui.color("Flavor", :cyan)}: #{server.flavor.name}"
|
183
|
+
puts "#{ui.color("Image", :cyan)}: #{server.image.name}"
|
184
|
+
puts "#{ui.color("Public DNS Name", :cyan)}: #{public_dns_name(server)}"
|
185
|
+
puts "#{ui.color("Public IP Address", :cyan)}: #{server.addresses["public"][0]}"
|
186
|
+
puts "#{ui.color("Private IP Address", :cyan)}: #{server.addresses["private"][0]}"
|
187
|
+
puts "#{ui.color("Password", :cyan)}: #{server.password}"
|
188
|
+
puts "#{ui.color("Run List", :cyan)}: #{config[:run_list].join(', ')}"
|
198
189
|
end
|
199
190
|
|
200
191
|
def bootstrap_for_node(server)
|
@@ -16,15 +16,19 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require 'fog'
|
20
19
|
require 'chef/knife'
|
21
|
-
require 'chef/json_compat'
|
22
|
-
require 'resolv'
|
23
20
|
|
24
21
|
class Chef
|
25
22
|
class Knife
|
26
23
|
class RackspaceServerDelete < Knife
|
27
|
-
|
24
|
+
|
25
|
+
deps do
|
26
|
+
require 'fog'
|
27
|
+
require 'chef/knife'
|
28
|
+
require 'chef/json_compat'
|
29
|
+
require 'resolv'
|
30
|
+
end
|
31
|
+
|
28
32
|
banner "knife rackspace server delete SERVER (options)"
|
29
33
|
|
30
34
|
option :rackspace_api_key,
|
@@ -45,10 +49,6 @@ class Chef
|
|
45
49
|
:default => "auth.api.rackspacecloud.com",
|
46
50
|
:proc => Proc.new { |url| Chef::Config[:knife][:rackspace_api_auth_url] = url }
|
47
51
|
|
48
|
-
def h
|
49
|
-
@highline ||= HighLine.new
|
50
|
-
end
|
51
|
-
|
52
52
|
def run
|
53
53
|
require 'fog'
|
54
54
|
require 'highline'
|
@@ -64,21 +64,21 @@ class Chef
|
|
64
64
|
|
65
65
|
server = connection.servers.get(@name_args[0])
|
66
66
|
|
67
|
-
puts "#{
|
68
|
-
puts "#{
|
69
|
-
puts "#{
|
70
|
-
puts "#{
|
71
|
-
puts "#{
|
72
|
-
puts "#{
|
73
|
-
puts "#{
|
74
|
-
puts "#{
|
67
|
+
puts "#{ui.color("Instance ID", :cyan)}: #{server.id}"
|
68
|
+
puts "#{ui.color("Host ID", :cyan)}: #{server.host_id}"
|
69
|
+
puts "#{ui.color("Name", :cyan)}: #{server.name}"
|
70
|
+
puts "#{ui.color("Flavor", :cyan)}: #{server.flavor.name}"
|
71
|
+
puts "#{ui.color("Image", :cyan)}: #{server.image.name}"
|
72
|
+
puts "#{ui.color("Public DNS Name", :cyan)}: #{public_dns_name(server)}"
|
73
|
+
puts "#{ui.color("Public IP Address", :cyan)}: #{server.addresses["public"][0]}"
|
74
|
+
puts "#{ui.color("Private IP Address", :cyan)}: #{server.addresses["private"][0]}"
|
75
75
|
|
76
76
|
puts "\n"
|
77
77
|
confirm("Do you really want to delete this server")
|
78
78
|
|
79
79
|
server.destroy
|
80
80
|
|
81
|
-
|
81
|
+
ui.warn("Deleted server #{server.id} named #{server.name}")
|
82
82
|
end
|
83
83
|
|
84
84
|
def public_dns_name(server)
|
@@ -16,14 +16,17 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require 'fog'
|
20
19
|
require 'chef/knife'
|
21
|
-
require 'chef/json_compat'
|
22
20
|
|
23
21
|
class Chef
|
24
22
|
class Knife
|
25
23
|
class RackspaceServerList < Knife
|
26
24
|
|
25
|
+
deps do
|
26
|
+
require 'fog'
|
27
|
+
require 'chef/json_compat'
|
28
|
+
end
|
29
|
+
|
27
30
|
banner "knife rackspace server list (options)"
|
28
31
|
|
29
32
|
option :rackspace_api_key,
|
@@ -44,16 +47,9 @@ class Chef
|
|
44
47
|
:default => "auth.api.rackspacecloud.com",
|
45
48
|
:proc => Proc.new { |url| Chef::Config[:knife][:rackspace_api_auth_url] = url }
|
46
49
|
|
47
|
-
def h
|
48
|
-
@highline ||= HighLine.new
|
49
|
-
end
|
50
|
-
|
51
50
|
def run
|
52
|
-
|
53
|
-
|
54
|
-
require 'net/ssh/multi'
|
55
|
-
require 'readline'
|
56
|
-
|
51
|
+
$stdout.sync = true
|
52
|
+
|
57
53
|
connection = Fog::Compute.new(
|
58
54
|
:provider => 'Rackspace',
|
59
55
|
:rackspace_api_key => Chef::Config[:knife][:rackspace_api_key],
|
@@ -61,7 +57,15 @@ class Chef
|
|
61
57
|
:rackspace_auth_url => Chef::Config[:knife][:rackspace_api_auth_url] || config[:rackspace_api_auth_url]
|
62
58
|
)
|
63
59
|
|
64
|
-
server_list = [
|
60
|
+
server_list = [
|
61
|
+
ui.color('ID', :bold),
|
62
|
+
ui.color('Name', :bold),
|
63
|
+
ui.color('Public IP', :bold),
|
64
|
+
ui.color('Private IP', :bold),
|
65
|
+
ui.color('Flavor', :bold),
|
66
|
+
ui.color('Image', :bold),
|
67
|
+
ui.color('State', :bold)
|
68
|
+
]
|
65
69
|
connection.servers.all.each do |server|
|
66
70
|
server_list << server.id.to_s
|
67
71
|
server_list << server.name
|
@@ -71,7 +75,7 @@ class Chef
|
|
71
75
|
server_list << server.image.name
|
72
76
|
server_list << server.status.downcase
|
73
77
|
end
|
74
|
-
puts
|
78
|
+
puts ui.list(server_list, :columns_across, 7)
|
75
79
|
|
76
80
|
end
|
77
81
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: knife-rackspace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.5.
|
5
|
+
version: 0.5.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Adam Jacob
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-04-
|
13
|
+
date: 2011-04-05 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -57,17 +57,6 @@ dependencies:
|
|
57
57
|
version: 1.0.1
|
58
58
|
type: :runtime
|
59
59
|
version_requirements: *id004
|
60
|
-
- !ruby/object:Gem::Dependency
|
61
|
-
name: highline
|
62
|
-
prerelease: false
|
63
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
-
none: false
|
65
|
-
requirements:
|
66
|
-
- - ~>
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 1.6.1
|
69
|
-
type: :runtime
|
70
|
-
version_requirements: *id005
|
71
60
|
description: Rackspace Support for Chef's Knife Command
|
72
61
|
email: adam@opscode.com
|
73
62
|
executables: []
|