bosh_cli 0.19 → 0.19.1

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.
@@ -37,7 +37,8 @@ module Bosh::Cli::Command
37
37
  "Would you like the new version copied to '%s'? [yn]"
38
38
 
39
39
  # Accessor for testing purposes.
40
- attr_accessor :ip_helper, :template_output
40
+ attr_accessor :ip_helper
41
+ attr_accessor :template_output
41
42
 
42
43
  # Deletes the temporary files that were used.
43
44
  def delete_temp_diff_files
@@ -208,12 +209,26 @@ module Bosh::Cli::Command
208
209
  # from.
209
210
  # @return [String] The network/mask.
210
211
  def get_network_and_mask(netw_name)
211
- netw_cidr = @ip_helper[netw_name]
212
+ netw_cidr = get_helper(netw_name)
212
213
  "#{netw_cidr.network}#{netw_cidr.netmask}"
213
214
  end
214
215
 
216
+ # Helper function for getting the first and last number from a range, but
217
+ # also taking into account negative ranges and the network size.
218
+ # @param [Range] range The range.
219
+ # @param [String] netw_name The cidr network object.
220
+ # @return [Array] The first and last number.
221
+ def get_first_last_from_range(range, netw_cidr)
222
+ first = (range.first >= 0) ? range.first :
223
+ netw_cidr.size + range.first
224
+ last = (range.last >= 0) ? range.last :
225
+ netw_cidr.size + range.last
226
+ return [first, last]
227
+ end
228
+
215
229
  # Used by the template to specify IPs for jobs. It uses the CIDR tool to get
216
- # them.
230
+ # them. Netw_name can include .range or .static, such as default.static to
231
+ # choose what range the IPs are based on.
217
232
  # @param [Integer] ip_num The nth IP number to get.
218
233
  # @param [String] netw_name The name of the network to get the IP from.
219
234
  # @return [String] An IP in the network.
@@ -227,14 +242,58 @@ module Bosh::Cli::Command
227
242
  # @param [String] netw_name The name of the network to get the IPs from.
228
243
  # @return [String] An IP return in the network.
229
244
  def ip_range(range, netw_name)
230
- netw_cidr = @ip_helper[netw_name]
231
- first = (range.first >= 0) ? range.first :
232
- netw_cidr.size + range.first
233
- last = (range.last >= 0) ? range.last :
234
- netw_cidr.size + range.last
245
+ netw_cidr = get_helper(netw_name)
246
+ first, last = get_first_last_from_range(range, netw_cidr)
247
+ unless netw_cidr[first] and netw_cidr[last]
248
+ raise "Ip range '#{range}' not in #{netw_name}."
249
+ end
250
+ first == last ? "#{netw_cidr[first].ip}" :
251
+ "#{netw_cidr[first].ip} - #{netw_cidr[last].ip}"
252
+ end
253
+
254
+ # Returns the array of IPs for a network name.
255
+ # @param [String] netw_name The name of the network, such as default.static.
256
+ # @return [Array|CIDR] An array or CIDR object that behaves like an array.
257
+ def get_helper(netw_name)
258
+ netw_name, type = netw_name.split(".")
259
+ type ||= "range"
260
+ @ip_helper[netw_name][type]
261
+ end
262
+
263
+ # Gets the range section out of the user's deployment config and creates a
264
+ # CIDR object. This is used for calculating IPs in the .erb template that
265
+ # uses the ip and ip_range methods.
266
+ # @param [Array] subnets The subnets in a network configuration.
267
+ # @return [CIDR] A CIDR object.
268
+ def get_range(subnets)
269
+ NetAddr::CIDR.create(subnets.first["range"])
270
+ end
235
271
 
236
- first == last ? "#{netw_cidr.nth(first)}" :
237
- "#{netw_cidr.nth(first)} - #{netw_cidr.nth(last)}"
272
+ # Gets the static ranges out of the user's deployment config and creates an
273
+ # array of CIDR objects. This is used for calculating IPs in the .erb
274
+ # template that uses the ip and ip_range methods.
275
+ # @param [Array] subnets The subnets in a network configuration.
276
+ # @return [Array] An array of CIDR objects.
277
+ def get_static_ranges(subnets)
278
+ static_ranges = subnets.first["static"]
279
+ if !static_ranges || static_ranges.empty?
280
+ return nil
281
+ end
282
+ static_ips = []
283
+ static_ranges.each do |static_range|
284
+ range_split = static_range.split("-")
285
+ if range_split.size == 1
286
+ static_ips.push(range_split[0])
287
+ next
288
+ end
289
+
290
+ start_range = NetAddr::CIDR.create(range_split[0].strip)
291
+ end_range = NetAddr::CIDR.create(range_split[1].strip)
292
+ (start_range..end_range).each do |ip_entry|
293
+ static_ips.push(ip_entry)
294
+ end
295
+ end
296
+ static_ips
238
297
  end
239
298
 
240
299
  # Creates the helper hash. Keys are the network name, values are the CIDR
@@ -249,7 +308,9 @@ module Bosh::Cli::Command
249
308
  netw_arr.each do |netw|
250
309
  subnets = netw["subnets"]
251
310
  check_valid_network_config(netw, subnets)
252
- helper[netw["name"]] = NetAddr::CIDR.create(subnets.first["range"])
311
+ helper[netw["name"]] = {}
312
+ helper[netw["name"]]["range"] = get_range(subnets)
313
+ helper[netw["name"]]["static"] = get_static_ranges(subnets)
253
314
  end
254
315
  helper
255
316
  end
@@ -282,7 +343,7 @@ module Bosh::Cli::Command
282
343
  copy_to_file = @diff_works ? @deployment_file : @deployment_file + ".new"
283
344
  agree_text = @diff_works ?
284
345
  KEEP_NEW_VERSION_TEXT : (DIFF_FAILED_KEEP_NEW_TEXT % copy_to_file)
285
- if agree(agree_text)
346
+ if non_interactive? or agree(agree_text)
286
347
  say("New version copied to '#{copy_to_file}'")
287
348
  FileUtils.cp(@temp_file_path_2, copy_to_file)
288
349
  end
@@ -110,18 +110,21 @@ module Bosh::Cli::Command
110
110
  end
111
111
 
112
112
  # Prints out the publicly available stemcells.
113
- def list_public
113
+ def list_public(*args)
114
+ full = args.include?("--full")
114
115
  yaml = get_public_stemcell_list
115
116
  stemcells_table = table do |t|
116
117
  t.headings = "Name", "Url"
117
118
  yaml.keys.sort.each do |key|
118
119
  if key != PUBLIC_STEMCELL_INDEX
119
- t << [key, yaml[key]["url"]]
120
+ url = full ? yaml[key]["url"] : "#{yaml[key]["url"][0..49]}..."
121
+ t << [key, url]
120
122
  end
121
123
  end
122
124
  end
123
125
  puts(stemcells_table)
124
- puts("To download use 'bosh download public stemcell <stemcell_name>'.")
126
+ puts("To download use 'bosh download public stemcell <stemcell_name>'." +
127
+ "For full url use --full.")
125
128
  end
126
129
 
127
130
  # Downloads one of the publicly available stemcells.
@@ -454,6 +454,7 @@ module Bosh::Cli
454
454
  usage "public stemcells"
455
455
  desc "Show the list of publicly available stemcells for download."
456
456
  route :stemcell, :list_public
457
+ option "--full", "show the full download url"
457
458
  end
458
459
 
459
460
  command :download_public_stemcell do
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Bosh
4
4
  module Cli
5
- VERSION = "0.19"
5
+ VERSION = "0.19.1"
6
6
  end
7
7
  end
@@ -122,7 +122,7 @@ describe Bosh::Cli::Command::Biff do
122
122
 
123
123
  it "allows ip_range to take negative ranges" do
124
124
  @biff.ip_helper = {
125
- "default" => NetAddr::CIDR.create("192.168.1.0/22")
125
+ "default" => { "range" => NetAddr::CIDR.create("192.168.1.0/22") }
126
126
  }
127
127
  @biff.ip_range(-11..-2, "default").should == "192.168.3.245 - 192.168.3.254"
128
128
  end
@@ -137,4 +137,26 @@ describe Bosh::Cli::Command::Biff do
137
137
  @biff.delete_all_except(obj, "b").should == [ {"name" => "b"} ]
138
138
  end
139
139
 
140
+ it "gets a range from a static ip list correctly" do
141
+ @biff.ip_helper = {
142
+ "default" => {
143
+ "static" => [
144
+ NetAddr::CIDR.create("192.168.1.1"),
145
+ NetAddr::CIDR.create("192.168.1.2"),
146
+ NetAddr::CIDR.create("192.168.1.3") ]
147
+ }}
148
+ @biff.ip_range((1..2), "default.static").should ==
149
+ "192.168.1.2 - 192.168.1.3"
150
+ end
151
+
152
+ it "gets an IP from a static ip list correctly" do
153
+ @biff.ip_helper = {
154
+ "default" => {
155
+ "static" => [
156
+ NetAddr::CIDR.create("192.168.1.1"),
157
+ NetAddr::CIDR.create("192.168.1.2"),
158
+ NetAddr::CIDR.create("192.168.1.3") ]
159
+ }}
160
+ @biff.ip(0, "default.static").should == "192.168.1.1"
161
+ end
140
162
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.19'
4
+ version: 0.19.1
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-05-25 00:00:00.000000000 Z
12
+ date: 2012-06-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json_pure
@@ -317,7 +317,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
317
317
  version: '0'
318
318
  segments:
319
319
  - 0
320
- hash: -2317006899427919460
320
+ hash: -854955838650099269
321
321
  required_rubygems_version: !ruby/object:Gem::Requirement
322
322
  none: false
323
323
  requirements:
@@ -326,7 +326,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
326
326
  version: '0'
327
327
  segments:
328
328
  - 0
329
- hash: -2317006899427919460
329
+ hash: -854955838650099269
330
330
  requirements: []
331
331
  rubyforge_project:
332
332
  rubygems_version: 1.8.23