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.
- data/lib/cli/commands/biff.rb +73 -12
- data/lib/cli/commands/stemcell.rb +6 -3
- data/lib/cli/runner.rb +1 -0
- data/lib/cli/version.rb +1 -1
- data/spec/unit/biff_spec.rb +23 -1
- metadata +4 -4
    
        data/lib/cli/commands/biff.rb
    CHANGED
    
    | @@ -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 | 
| 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 =  | 
| 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 =  | 
| 231 | 
            -
                  first = (range | 
| 232 | 
            -
             | 
| 233 | 
            -
             | 
| 234 | 
            -
             | 
| 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 | 
            -
             | 
| 237 | 
            -
             | 
| 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"]] =  | 
| 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 | 
            -
                         | 
| 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.
         | 
    
        data/lib/cli/runner.rb
    CHANGED
    
    
    
        data/lib/cli/version.rb
    CHANGED
    
    
    
        data/spec/unit/biff_spec.rb
    CHANGED
    
    | @@ -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:  | 
| 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- | 
| 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: - | 
| 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: - | 
| 329 | 
            +
                  hash: -854955838650099269
         | 
| 330 330 | 
             
            requirements: []
         | 
| 331 331 | 
             
            rubyforge_project: 
         | 
| 332 332 | 
             
            rubygems_version: 1.8.23
         |