vanagon 0.6.0 → 0.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bd91238696bb5b6eded5bff5caaa11367bdb9a72
4
- data.tar.gz: 2b06dab33a59ae1230dadfa8a7173a76f0ae6779
3
+ metadata.gz: 0e69b827c87e42df5740b868926ede94d03ffe23
4
+ data.tar.gz: 48063c4f0fff9db3c8c40b8eaf55930d930ff516
5
5
  SHA512:
6
- metadata.gz: 69e00da92f02f69ff0033d860c8f4a597963eafe1a23d207d2db12467090c5ac2cb90e02a28687d21a82cdd6fcaec206b017ab8c24e04398d49bda85837c7991
7
- data.tar.gz: ca04ff31f4265f13886605a00402b86955b13468dd42e17284c8020670a971ab1bd8673d2a8255fdef5aaa99799f8fc0c2faeca03dcccb02289c49c042c1c56f
6
+ metadata.gz: ba1e2146ea55742e934e53b59807042e569a048d9a8f215f7ee3acbeb9026772659d836cefb0ffb15924c13085c2a676cfe25b3d41200c92826d34cda7b46b70
7
+ data.tar.gz: dc76822ffe4ea4bcf888ead30e16de669ea021211a6b0fe9d11bbda772f2f35887947a4e3e932f994ffd97e0ec8d62bc00eded1fe02362c852bf5cb0fc2566b1
@@ -30,7 +30,7 @@ class Vanagon
30
30
  # Download the source from the url specified. Sets the full path to the
31
31
  # file as @file and the @extension for the file as a side effect.
32
32
  def fetch
33
- @file = download
33
+ @file = download(@url)
34
34
  @extension = get_extension
35
35
  end
36
36
 
@@ -46,26 +46,30 @@ class Vanagon
46
46
  end
47
47
 
48
48
  # Downloads the file from @url into the @workdir
49
- #
49
+ # @param target_url [String, URI, Addressable::URI] url of an http source to retrieve with GET
50
50
  # @raise [RuntimeError, Vanagon::Error] an exception is raised if the URI scheme cannot be handled
51
- def download
52
- uri = URI.parse(@url)
53
- target_file = File.basename(uri.path)
54
- puts "Downloading file '#{target_file}' from url '#{@url}'"
55
- case uri.scheme
56
- when 'http', 'https'
57
- Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
58
- request = Net::HTTP::Get.new(uri)
51
+ def download(target_url, target_file = nil)
52
+ uri = URI.parse(target_url.to_s)
53
+ target_file ||= File.basename(uri.path)
59
54
 
60
- http.request request do |response|
61
- unless response.is_a? Net::HTTPSuccess
62
- fail "Error: #{response.code.to_s}. Unable to get source from #{@url}"
63
- end
55
+ puts "Downloading file '#{target_file}' from url '#{target_url}'"
56
+
57
+ Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
58
+ http.request(Net::HTTP::Get.new(uri)) do |response|
59
+ case response
60
+ when Net::HTTPRedirection
61
+ # By parsing the location header, we get either an absolute
62
+ # URI or a URI with a relative `path`. Adding it to `uri`
63
+ # should correctly update the relative `path` or overwrite
64
+ # the entire URI if it's absolute.
65
+ location = URI.parse(response.header['location'])
66
+ download(uri + location, target_file)
67
+ when Net::HTTPSuccess
64
68
  open(File.join(@workdir, target_file), 'w') do |io|
65
- response.read_body do |chunk|
66
- io.write(chunk)
67
- end
69
+ response.read_body { |chunk| io.write(chunk) }
68
70
  end
71
+ else
72
+ fail "Error: #{response.code.to_s}. Unable to get source from #{target_url}"
69
73
  end
70
74
  end
71
75
  end
@@ -27,17 +27,27 @@ class Vanagon
27
27
  @project.settings[:skipcheck] = options[:skipcheck]
28
28
  loginit('vanagon_hosts.log')
29
29
 
30
- # If a target has been given, we don't want to make any assumptions about how to tear it down.
31
- engine = 'base' if target
32
- # Hardware has explicit teardown to unlock the node
33
- engine = 'hardware' if @platform.build_hosts
34
- require "vanagon/engine/#{engine}"
35
- @engine = Object.const_get("Vanagon::Engine::#{engine.capitalize}").new(@platform, target)
36
-
30
+ load_engine(engine, @platform, target)
37
31
  rescue LoadError => e
38
32
  raise Vanagon::Error.wrap(e, "Could not load the desired engine '#{engine}'")
39
33
  end
40
34
 
35
+ def load_engine(engine_type, platform, target)
36
+ if platform.build_hosts
37
+ engine_type = 'hardware'
38
+ elsif target
39
+ engine_type = 'base'
40
+ end
41
+ load_engine_object(engine_type, platform, target)
42
+ end
43
+
44
+ def load_engine_object(engine_type, platform, target)
45
+ require "vanagon/engine/#{engine_type}"
46
+ @engine = Object::const_get("Vanagon::Engine::#{engine_type.capitalize}").new(platform, target)
47
+ rescue
48
+ fail "No such engine '#{engine_type.capitalize}'"
49
+ end
50
+
41
51
  def cleanup_workdir
42
52
  FileUtils.rm_rf(@workdir)
43
53
  end
@@ -6,7 +6,7 @@ class Vanagon
6
6
  attr_accessor :build_dependencies, :name, :vmpooler_template, :cflags, :ldflags, :settings
7
7
  attr_accessor :servicetype, :patch, :architecture, :codename, :os_name, :os_version
8
8
  attr_accessor :docker_image, :ssh_port, :rpmbuild, :install, :platform_triple
9
- attr_accessor :target_user, :package_type, :find, :sort, :build_hosts, :copy
9
+ attr_accessor :target_user, :package_type, :find, :sort, :build_hosts, :copy, :cross_compiled
10
10
 
11
11
  # Platform names currently contain some information about the platform. Fields
12
12
  # within the name are delimited by the '-' character, and this regex can be used to
@@ -105,6 +105,7 @@ class Vanagon
105
105
  @find ||= "find"
106
106
  @sort ||= "sort"
107
107
  @copy ||= "cp"
108
+ @cross_compiled ||= false
108
109
  end
109
110
 
110
111
  # This allows instance variables to be accessed using the hash lookup syntax
@@ -239,5 +240,21 @@ class Vanagon
239
240
  def is_linux?
240
241
  return (!is_windows? && !is_unix?)
241
242
  end
243
+
244
+ # Utility matcher to determine if the platform is a cross-compiled variety
245
+ #
246
+ # @return [true, false] true if it is a cross-compiled variety, false otherwise
247
+ def is_cross_compiled?
248
+ return @cross_compiled
249
+ end
250
+
251
+ # Utility matcher to determine if the platform is a cross-compiled Linux variety.
252
+ # Many of the customizations needed to cross-compile for Linux are similar, so it's
253
+ # useful to group them together vs. other cross-compiled OSes.
254
+ #
255
+ # @return [true, false] true if it is a cross-compiled Linux variety, false otherwise
256
+ def is_cross_compiled_linux?
257
+ return (is_cross_compiled? && is_linux?)
258
+ end
242
259
  end
243
260
  end
@@ -121,6 +121,13 @@ class Vanagon
121
121
  @platform.copy = copy_cmd
122
122
  end
123
123
 
124
+ # Set the cross_compiled flag for the platform
125
+ #
126
+ # @param cxx_flag [Boolean] True if this is a cross-compiled platform
127
+ def cross_compiled(cxx_flag)
128
+ @platform.cross_compiled = cxx_flag
129
+ end
130
+
124
131
  # Set the path to rpmbuild for the platform
125
132
  #
126
133
  # @param rpmbuild_cmd [String] Full path to rpmbuild with arguments to be used by default
@@ -85,6 +85,13 @@ class Vanagon
85
85
  @project.homepage = page
86
86
  end
87
87
 
88
+ # Sets the timeout for the project retry logic
89
+ #
90
+ # @param page [Integer] timeout in seconds
91
+ def timeout(to)
92
+ @project.timeout = to
93
+ end
94
+
88
95
  # Sets the run time requirements for the project. Mainly for use in packaging.
89
96
  #
90
97
  # @param req [String] of requirements of the project
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vanagon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet Labs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-15 00:00:00.000000000 Z
11
+ date: 2016-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -203,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
203
  version: '0'
204
204
  requirements: []
205
205
  rubyforge_project:
206
- rubygems_version: 2.2.5
206
+ rubygems_version: 2.4.6
207
207
  signing_key:
208
208
  specification_version: 3
209
209
  summary: All of your packages will fit into this van with this one simple trick.