ucloudstack 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES.rdoc CHANGED
@@ -1,5 +1,12 @@
1
1
  = Changes
2
2
 
3
+ == 2012-09-20
4
+ * change name ucloudstack because original modified for adopting KT ucloud
5
+ * https support added
6
+ * template list command added
7
+ * server create modified
8
+
9
+
3
10
  == 2012-05-17 (0.0.12)
4
11
  * Adding option to disable public IP allocation on server create
5
12
  https://github.com/CloudStack/knife-cloudstack/pull/8
@@ -58,7 +58,8 @@ module KnifeCloudstack
58
58
  product_list << product['zoneid']
59
59
  product_list << product['zonedesc']
60
60
  end
61
- puts ui.list(product_list, :columns_across, 9)
61
+ #puts ui.list(product_list, :columns_across, 9)
62
+ puts products.to_json
62
63
  end
63
64
 
64
65
  def locate_config_value(key)
@@ -23,7 +23,7 @@ module KnifeCloudstack
23
23
  class CsServerCreate < Chef::Knife
24
24
 
25
25
  # Seconds to delay between detecting ssh and initiating the bootstrap
26
- BOOTSTRAP_DELAY = 3
26
+ BOOTSTRAP_DELAY = 5.0
27
27
 
28
28
  # Seconds to wait between ssh pings
29
29
  SSH_POLL_INTERVAL = 2
@@ -57,6 +57,12 @@ module KnifeCloudstack
57
57
  :long => "--zone ZONE",
58
58
  :description => "The CloudStack zone for the server",
59
59
  :proc => Proc.new { |z| Chef::Config[:knife][:cloudstack_zone] = z }
60
+
61
+ option :cloudstack_disk,
62
+ :short => "-D DISK",
63
+ :long => "--disk DISK",
64
+ :description => "The CloudStack disk for the server",
65
+ :proc => Proc.new { |i| Chef::Config[:knife][:cloudstack_disk] = i }
60
66
 
61
67
  option :cloudstack_networks,
62
68
  :short => "-W NETWORKS",
@@ -68,7 +74,6 @@ module KnifeCloudstack
68
74
  option :public_ip,
69
75
  :long => "--[no-]public-ip",
70
76
  :description => "Allocate a public IP for this server",
71
- :boolean => true,
72
77
  :default => true
73
78
 
74
79
  option :chef_node_name,
@@ -145,10 +150,9 @@ module KnifeCloudstack
145
150
  :default => false
146
151
 
147
152
  option :no_bootstrap,
148
- :long => "--no-bootstrap",
153
+ :long => "--[no-]bootstrap",
149
154
  :description => "Disable Chef bootstrap",
150
- :boolean => true,
151
- :default => false
155
+ :default => true
152
156
 
153
157
  option :port_rules,
154
158
  :short => "-p PORT_RULES",
@@ -182,34 +186,43 @@ module KnifeCloudstack
182
186
  locate_config_value(:cloudstack_service),
183
187
  locate_config_value(:cloudstack_template),
184
188
  locate_config_value(:cloudstack_zone),
189
+ locate_config_value(:cloudstack_disk),
185
190
  locate_config_value(:cloudstack_networks)
186
191
  )
192
+
193
+ #puts "#"*100
194
+ #puts server
195
+ #puts "#"*100
187
196
 
188
- public_ip = find_or_create_public_ip(server, connection)
197
+ private_ip = find_or_create_public_ip(server, connection)
189
198
 
190
199
  puts "\n\n"
191
200
  puts "#{ui.color("Name", :cyan)}: #{server['name']}"
192
- puts "#{ui.color("Public IP", :cyan)}: #{public_ip}"
201
+ puts "#{ui.color("Private IP", :cyan)}: #{private_ip}"
193
202
 
194
- return if config[:no_bootstrap]
195
203
 
196
204
  print "\n#{ui.color("Waiting for sshd", :magenta)}"
197
205
 
198
- print(".") until is_ssh_open?(public_ip) {
206
+ print(".") until is_ssh_open?(private_ip) {
199
207
  sleep BOOTSTRAP_DELAY
200
208
  puts "\n"
201
209
  }
202
210
 
203
- config[:ssh_password] = server['password']
211
+ server_info = { 'hostname' => hostname, 'private_ip' => private_ip, 'password' => server['password'] }
212
+ puts "\n"
213
+
214
+ puts "server_info :"+server_info.to_json+"\n"
204
215
 
205
- bootstrap_for_node(public_ip).run
216
+ return unless config[:no_bootstrap]
217
+
218
+ config[:ssh_password] = server['password']
219
+ bootstrap_for_node(private_ip).run
206
220
 
207
221
  puts "\n"
208
222
  puts "#{ui.color("Name", :cyan)}: #{server['name']}"
209
- puts "#{ui.color("Public IP", :cyan)}: #{public_ip}"
223
+ puts "#{ui.color("Public IP", :cyan)}: #{private_ip}"
210
224
  puts "#{ui.color("Environment", :cyan)}: #{config[:environment] || '_default'}"
211
225
  puts "#{ui.color("Run List", :cyan)}: #{config[:run_list].join(', ')}"
212
-
213
226
  end
214
227
 
215
228
  def validate_options
@@ -227,10 +240,10 @@ config[:ssh_password] = server['password']
227
240
  identity_file = locate_config_value :identity_file
228
241
  ssh_user = locate_config_value :ssh_user
229
242
  ssh_password = locate_config_value :ssh_password
230
- unless identity_file || (ssh_user && ssh_password)
231
- ui.error("You must specify either an ssh identity file or an ssh user and password")
243
+ #unless identity_file || (ssh_user && ssh_password)
244
+ # ui.error("You must specify either an ssh identity file or an ssh user and password")
232
245
  #exit 1
233
- end
246
+ #end
234
247
  end
235
248
 
236
249
 
@@ -71,7 +71,9 @@ module KnifeCloudstack
71
71
 
72
72
  filter = config[:filter]
73
73
  templates = connection.list_templates(filter)
74
+
74
75
  templates.each do |t|
76
+ puts t
75
77
  template_list << t['name']
76
78
  template_list << (human_file_size(t['size']) || 'Unknown')
77
79
  template_list << t['zonename']
@@ -110,8 +110,8 @@ module CloudstackClient
110
110
  ##
111
111
  # Deploys a new server using the specified parameters.
112
112
 
113
- def create_server(host_name, service_name, template_name, zone_name=nil, network_names=[])
114
-
113
+ def create_server(host_name, service_name, template_name, zone_name, disk_name, network_names=[])
114
+
115
115
  if host_name then
116
116
  if get_server(host_name) then
117
117
  puts "Error: Server '#{host_name}' already exists."
@@ -164,8 +164,9 @@ module CloudstackClient
164
164
  #'serviceOfferingId' => service['id'],
165
165
  'templateId' => template_name,
166
166
  #'templateId' => template['id'],
167
- 'zoneId' => zone_name
167
+ 'zoneId' => zone_name,
168
168
  #'zoneId' => zone['id'],
169
+ 'diskofferingid' => disk_name
169
170
  #'networkids' => network_ids.join(',')
170
171
  }
171
172
  params['name'] = host_name if host_name
@@ -555,7 +556,7 @@ module CloudstackClient
555
556
  def send_request(params)
556
557
  params['response'] = 'json'
557
558
  params['apiKey'] = @api_key
558
-
559
+
559
560
  params_arr = []
560
561
  params.sort.each { |elem|
561
562
  params_arr << elem[0].to_s + '=' + elem[1].to_s
@@ -598,17 +599,18 @@ module CloudstackClient
598
599
  def send_async_request(params)
599
600
 
600
601
  json = send_request(params)
601
- #puts json
602
+
602
603
  params = {
603
604
  'command' => 'queryAsyncJobResult',
604
605
  'jobId' => json['jobid']
605
606
  }
606
607
 
607
608
  max_tries = (ASYNC_TIMEOUT / ASYNC_POLL_INTERVAL).round
609
+ sleep 5
608
610
  max_tries.times do
609
611
  json = send_request(params)
610
612
  status = json['jobstatus']
611
- #puts json
613
+
612
614
  print "."
613
615
 
614
616
  if status == 1 then
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: ucloudstack
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ryan Holmes
@@ -13,7 +13,7 @@ autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
15
 
16
- date: 2012-08-20 00:00:00 Z
16
+ date: 2012-09-20 00:00:00 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: chef
@@ -88,3 +88,4 @@ specification_version: 3
88
88
  summary: A knife plugin for the ucloud API
89
89
  test_files: []
90
90
 
91
+ has_rdoc: true