vanagon 0.18.1 → 0.21.0
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 +4 -4
- data/README.md +2 -2
- data/bin/build +3 -1
- data/bin/build_host_info +3 -1
- data/bin/build_requirements +3 -1
- data/bin/inspect +3 -1
- data/bin/render +3 -1
- data/bin/repo +3 -1
- data/bin/ship +3 -1
- data/bin/sign +3 -1
- data/lib/vanagon/cli.rb +4 -2
- data/lib/vanagon/cli/build.rb +2 -1
- data/lib/vanagon/cli/build_host_info.rb +3 -2
- data/lib/vanagon/cli/build_requirements.rb +4 -4
- data/lib/vanagon/cli/completion.rb +4 -3
- data/lib/vanagon/cli/inspect.rb +3 -2
- data/lib/vanagon/cli/list.rb +16 -6
- data/lib/vanagon/cli/render.rb +2 -1
- data/lib/vanagon/cli/ship.rb +4 -19
- data/lib/vanagon/cli/sign.rb +3 -2
- data/lib/vanagon/component.rb +13 -10
- data/lib/vanagon/component/dsl.rb +27 -20
- data/lib/vanagon/component/source.rb +2 -1
- data/lib/vanagon/component/source/git.rb +35 -10
- data/lib/vanagon/component/source/http.rb +3 -2
- data/lib/vanagon/component/source/local.rb +2 -1
- data/lib/vanagon/component/source/rewrite.rb +3 -2
- data/lib/vanagon/driver.rb +20 -23
- data/lib/vanagon/engine/always_be_scheduling.rb +12 -11
- data/lib/vanagon/engine/docker.rb +2 -1
- data/lib/vanagon/engine/ec2.rb +5 -4
- data/lib/vanagon/engine/hardware.rb +4 -3
- data/lib/vanagon/engine/pooler.rb +6 -5
- data/lib/vanagon/environment.rb +3 -2
- data/lib/vanagon/logger.rb +31 -0
- data/lib/vanagon/platform.rb +38 -5
- data/lib/vanagon/platform/defaults/debian-10-amd64.rb +11 -0
- data/lib/vanagon/platform/defaults/debian-8-amd64.rb +12 -0
- data/lib/vanagon/platform/defaults/debian-8-i386.rb +12 -0
- data/lib/vanagon/platform/defaults/debian-9-amd64.rb +12 -0
- data/lib/vanagon/platform/defaults/debian-9-i386.rb +12 -0
- data/lib/vanagon/platform/defaults/el-6-i386.rb +11 -0
- data/lib/vanagon/platform/defaults/el-6-x86_64.rb +11 -0
- data/lib/vanagon/platform/defaults/el-7-aarch64.rb +13 -0
- data/lib/vanagon/platform/defaults/el-7-x86_64.rb +11 -0
- data/lib/vanagon/platform/defaults/el-8-aarch64.rb +10 -0
- data/lib/vanagon/platform/defaults/el-8-x86_64.rb +10 -0
- data/lib/vanagon/platform/defaults/fedora-30-x86_64.rb +11 -0
- data/lib/vanagon/platform/defaults/fedora-31-x86_64.rb +11 -0
- data/lib/vanagon/platform/defaults/fedora-32-x86_64.rb +11 -0
- data/lib/vanagon/platform/defaults/osx-10.14-x86_64.rb +22 -0
- data/lib/vanagon/platform/defaults/osx-10.15-x86_64.rb +21 -0
- data/lib/vanagon/platform/defaults/redhatfips-7-x86_64.rb +11 -0
- data/lib/vanagon/platform/defaults/sles-12-x86_64.rb +11 -0
- data/lib/vanagon/platform/defaults/sles-15-x86_64.rb +10 -0
- data/lib/vanagon/platform/defaults/solaris-11-i386.rb +9 -0
- data/lib/vanagon/platform/defaults/solaris-11-sparc.rb +10 -0
- data/lib/vanagon/platform/defaults/ubuntu-16.04-amd64.rb +12 -0
- data/lib/vanagon/platform/defaults/ubuntu-16.04-i386.rb +12 -0
- data/lib/vanagon/platform/defaults/ubuntu-18.04-amd64.rb +12 -0
- data/lib/vanagon/platform/defaults/ubuntu-20.04-aarch64.rb +11 -0
- data/lib/vanagon/platform/defaults/ubuntu-20.04-amd64.rb +11 -0
- data/lib/vanagon/platform/dsl.rb +30 -6
- data/lib/vanagon/platform/windows.rb +3 -1
- data/lib/vanagon/project.rb +25 -15
- data/lib/vanagon/project/dsl.rb +6 -5
- data/lib/vanagon/utilities.rb +5 -4
- data/resources/deb/control.erb +1 -1
- data/resources/deb/postinst.erb +24 -13
- data/resources/deb/postrm.erb +9 -6
- data/resources/deb/prerm.erb +18 -8
- data/resources/osx/postinstall.erb +6 -2
- data/resources/rpm/project.spec.erb +12 -12
- data/resources/solaris/10/depend.erb +2 -2
- data/resources/solaris/10/postinstall.erb +11 -3
- data/resources/solaris/11/p5m.erb +2 -2
- data/spec/lib/vanagon/cli_spec.rb +57 -9
- data/spec/lib/vanagon/component/dsl_spec.rb +54 -10
- data/spec/lib/vanagon/component/source/git_spec.rb +4 -4
- data/spec/lib/vanagon/component_spec.rb +15 -2
- data/spec/lib/vanagon/engine/always_be_scheduling_spec.rb +4 -4
- data/spec/lib/vanagon/platform_spec.rb +80 -0
- data/spec/lib/vanagon/utilities_spec.rb +4 -1
- metadata +58 -31
@@ -0,0 +1,22 @@
|
|
1
|
+
platform "osx-10.14-x86_64" do |plat|
|
2
|
+
plat.servicetype "launchd"
|
3
|
+
plat.servicedir "/Library/LaunchDaemons"
|
4
|
+
plat.codename "mojave"
|
5
|
+
|
6
|
+
plat.provision_with "export HOMEBREW_NO_EMOJI=true"
|
7
|
+
plat.provision_with "export HOMEBREW_VERBOSE=true"
|
8
|
+
plat.provision_with "sudo dscl . -create /Users/test"
|
9
|
+
plat.provision_with "sudo dscl . -create /Users/test UserShell /bin/bash"
|
10
|
+
plat.provision_with "sudo dscl . -create /Users/test UniqueID 1001"
|
11
|
+
plat.provision_with "sudo dscl . -create /Users/test PrimaryGroupID 1000"
|
12
|
+
plat.provision_with "sudo dscl . -create /Users/test NFSHomeDirectory /Users/test"
|
13
|
+
plat.provision_with "sudo dscl . -passwd /Users/test password"
|
14
|
+
plat.provision_with "sudo dscl . -merge /Groups/admin GroupMembership test"
|
15
|
+
plat.provision_with "echo 'test ALL=(ALL:ALL) NOPASSWD: ALL' > /etc/sudoers.d/username"
|
16
|
+
plat.provision_with "mkdir -p /etc/homebrew"
|
17
|
+
plat.provision_with "cd /etc/homebrew"
|
18
|
+
plat.provision_with %Q(su test -c 'echo | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"')
|
19
|
+
plat.provision_with "sudo chown -R test:admin /Users/test/"
|
20
|
+
plat.vmpooler_template "osx-1014-x86_64"
|
21
|
+
plat.output_dir File.join("apple", "10.14", "puppet6", "x86_64")
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
platform "osx-10.15-x86_64" do |plat|
|
2
|
+
plat.servicetype "launchd"
|
3
|
+
plat.servicedir "/Library/LaunchDaemons"
|
4
|
+
plat.codename "catalina"
|
5
|
+
|
6
|
+
plat.provision_with "export HOMEBREW_NO_EMOJI=true"
|
7
|
+
plat.provision_with "export HOMEBREW_VERBOSE=true"
|
8
|
+
plat.provision_with "sudo dscl . -create /Users/test"
|
9
|
+
plat.provision_with "sudo dscl . -create /Users/test UserShell /bin/bash"
|
10
|
+
plat.provision_with "sudo dscl . -create /Users/test UniqueID 1001"
|
11
|
+
plat.provision_with "sudo dscl . -create /Users/test PrimaryGroupID 1000"
|
12
|
+
plat.provision_with "sudo dscl . -create /Users/test NFSHomeDirectory /Users/test"
|
13
|
+
plat.provision_with "sudo dscl . -passwd /Users/test password"
|
14
|
+
plat.provision_with "sudo dscl . -merge /Groups/admin GroupMembership test"
|
15
|
+
plat.provision_with "echo 'test ALL=(ALL:ALL) NOPASSWD: ALL' > /etc/sudoers.d/username"
|
16
|
+
plat.provision_with "mkdir -p /etc/homebrew"
|
17
|
+
plat.provision_with "cd /etc/homebrew"
|
18
|
+
plat.provision_with %Q(su test -c 'echo | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"')
|
19
|
+
plat.provision_with "sudo chown -R test:admin /Users/test/"
|
20
|
+
plat.vmpooler_template "osx-1015-x86_64"
|
21
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
platform "redhatfips-7-x86_64" do |plat|
|
2
|
+
plat.servicedir "/usr/lib/systemd/system"
|
3
|
+
plat.defaultdir "/etc/sysconfig"
|
4
|
+
plat.servicetype "systemd"
|
5
|
+
|
6
|
+
plat.add_build_repository "http://pl-build-tools.delivery.puppetlabs.net/yum/pl-build-tools-release-el-7.noarch.rpm"
|
7
|
+
packages = %w(autoconf automake createrepo rsync gcc make rpmdevtools rpm-libs yum-utils rpm-sign)
|
8
|
+
plat.provision_with "yum install --assumeyes #{packages.join(' ')}"
|
9
|
+
plat.install_build_dependencies_with "yum install --assumeyes"
|
10
|
+
plat.vmpooler_template "redhat-fips-7-x86_64"
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
platform "sles-12-x86_64" do |plat|
|
2
|
+
plat.servicedir "/usr/lib/systemd/system"
|
3
|
+
plat.defaultdir "/etc/sysconfig"
|
4
|
+
plat.servicetype "systemd"
|
5
|
+
|
6
|
+
plat.add_build_repository "http://pl-build-tools.delivery.puppetlabs.net/yum/pl-build-tools-release-#{plat.get_os_name}-#{plat.get_os_version}.noarch.rpm"
|
7
|
+
packages = %w(aaa_base autoconf automake rsync gcc make rpm-build)
|
8
|
+
plat.provision_with "zypper -n --no-gpg-checks install -y #{packages.join(' ')}"
|
9
|
+
plat.install_build_dependencies_with "zypper -n --no-gpg-checks install -y"
|
10
|
+
plat.vmpooler_template "sles-12-x86_64"
|
11
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
platform "sles-15-x86_64" do |plat|
|
2
|
+
plat.servicedir "/usr/lib/systemd/system"
|
3
|
+
plat.defaultdir "/etc/sysconfig"
|
4
|
+
plat.servicetype "systemd"
|
5
|
+
|
6
|
+
packages = %w(aaa_base autoconf automake rsync gcc gcc-c++ make rpm-build gettext-tools cmake)
|
7
|
+
plat.provision_with "zypper -n --no-gpg-checks install -y #{packages.join(' ')}"
|
8
|
+
plat.install_build_dependencies_with "zypper -n --no-gpg-checks install -y"
|
9
|
+
plat.vmpooler_template "sles-15-x86_64"
|
10
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
platform "solaris-11-i386" do |plat|
|
2
|
+
plat.servicedir "/lib/svc/manifest"
|
3
|
+
plat.defaultdir "/lib/svc/method"
|
4
|
+
plat.servicetype "smf"
|
5
|
+
|
6
|
+
plat.vmpooler_template "solaris-11-x86_64"
|
7
|
+
plat.add_build_repository "http://solaris-11-reposync.delivery.puppetlabs.net:81", "puppetlabs.com"
|
8
|
+
plat.install_build_dependencies_with "pkg install ", " || [[ $? -eq 4 ]]"
|
9
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
platform "solaris-11-sparc" do |plat|
|
2
|
+
plat.servicedir "/lib/svc/manifest"
|
3
|
+
plat.defaultdir "/lib/svc/method"
|
4
|
+
plat.servicetype "smf"
|
5
|
+
|
6
|
+
plat.cross_compiled true
|
7
|
+
plat.vmpooler_template "solaris-11-x86_64"
|
8
|
+
plat.add_build_repository "http://solaris-11-reposync.delivery.puppetlabs.net:81", "puppetlabs.com"
|
9
|
+
plat.install_build_dependencies_with "pkg install ", " || [[ $? -eq 4 ]]"
|
10
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
platform "ubuntu-16.04-amd64" do |plat|
|
2
|
+
plat.servicedir "/lib/systemd/system"
|
3
|
+
plat.defaultdir "/etc/default"
|
4
|
+
plat.servicetype "systemd"
|
5
|
+
plat.codename "xenial"
|
6
|
+
|
7
|
+
plat.add_build_repository "http://pl-build-tools.delivery.puppetlabs.net/debian/pl-build-tools-release-#{plat.get_codename}.deb"
|
8
|
+
packages = %w(build-essential devscripts make quilt pkg-config debhelper rsync fakeroot)
|
9
|
+
plat.provision_with "export DEBIAN_FRONTEND=noninteractive; apt-get update -qq; apt-get install -qy --no-install-recommends #{packages.join(' ')}"
|
10
|
+
plat.install_build_dependencies_with "DEBIAN_FRONTEND=noninteractive; apt-get install -qy --no-install-recommends "
|
11
|
+
plat.vmpooler_template "ubuntu-1604-x86_64"
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
platform "ubuntu-16.04-i386" do |plat|
|
2
|
+
plat.servicedir "/lib/systemd/system"
|
3
|
+
plat.defaultdir "/etc/default"
|
4
|
+
plat.servicetype "systemd"
|
5
|
+
plat.codename "xenial"
|
6
|
+
|
7
|
+
plat.add_build_repository "http://pl-build-tools.delivery.puppetlabs.net/debian/pl-build-tools-release-#{plat.get_codename}.deb"
|
8
|
+
packages = %w(build-essential devscripts make quilt pkg-config debhelper rsync fakeroot)
|
9
|
+
plat.provision_with "export DEBIAN_FRONTEND=noninteractive; apt-get update -qq; apt-get install -qy --no-install-recommends #{packages.join(' ')}"
|
10
|
+
plat.install_build_dependencies_with "DEBIAN_FRONTEND=noninteractive; apt-get install -qy --no-install-recommends "
|
11
|
+
plat.vmpooler_template "ubuntu-1604-i386"
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
platform "ubuntu-18.04-amd64" do |plat|
|
2
|
+
plat.servicedir "/lib/systemd/system"
|
3
|
+
plat.defaultdir "/etc/default"
|
4
|
+
plat.servicetype "systemd"
|
5
|
+
plat.codename "bionic"
|
6
|
+
|
7
|
+
plat.add_build_repository "http://pl-build-tools.delivery.puppetlabs.net/debian/pl-build-tools-release-#{plat.get_codename}.deb"
|
8
|
+
packages = %w(build-essential devscripts make quilt pkg-config debhelper rsync fakeroot)
|
9
|
+
plat.provision_with "export DEBIAN_FRONTEND=noninteractive; apt-get update -qq; apt-get install -qy --no-install-recommends #{packages.join(' ')}"
|
10
|
+
plat.install_build_dependencies_with "export DEBIAN_FRONTEND=noninteractive; apt-get install -qy --no-install-recommends "
|
11
|
+
plat.vmpooler_template "ubuntu-1804-x86_64"
|
12
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
platform "ubuntu-20.04-aarch64" do |plat|
|
2
|
+
plat.servicedir "/lib/systemd/system"
|
3
|
+
plat.defaultdir "/etc/default"
|
4
|
+
plat.servicetype "systemd"
|
5
|
+
plat.codename "focal"
|
6
|
+
|
7
|
+
packages = %w(build-essential devscripts make quilt pkg-config debhelper rsync fakeroot cmake)
|
8
|
+
plat.provision_with "export DEBIAN_FRONTEND=noninteractive; apt-get update -qq; apt-get install -qy --no-install-recommends #{packages.join(' ')}"
|
9
|
+
plat.install_build_dependencies_with "DEBIAN_FRONTEND=noninteractive; apt-get install -qy --no-install-recommends "
|
10
|
+
plat.vmpooler_template "ubuntu-2004-arm64"
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
platform "ubuntu-20.04-amd64" do |plat|
|
2
|
+
plat.servicedir "/lib/systemd/system"
|
3
|
+
plat.defaultdir "/etc/default"
|
4
|
+
plat.servicetype "systemd"
|
5
|
+
plat.codename "focal"
|
6
|
+
|
7
|
+
packages = %w(build-essential devscripts make quilt pkg-config debhelper rsync fakeroot cmake)
|
8
|
+
plat.provision_with "export DEBIAN_FRONTEND=noninteractive; apt-get update -qq; apt-get install -qy --no-install-recommends #{packages.join(' ')}"
|
9
|
+
plat.install_build_dependencies_with "DEBIAN_FRONTEND=noninteractive; apt-get install -qy --no-install-recommends "
|
10
|
+
plat.vmpooler_template "ubuntu-2004-x86_64"
|
11
|
+
end
|
data/lib/vanagon/platform/dsl.rb
CHANGED
@@ -8,7 +8,9 @@ require 'vanagon/platform/osx'
|
|
8
8
|
require 'vanagon/platform/solaris_10'
|
9
9
|
require 'vanagon/platform/solaris_11'
|
10
10
|
require 'vanagon/platform/windows'
|
11
|
+
require 'vanagon/logger'
|
11
12
|
require 'securerandom'
|
13
|
+
require 'ostruct'
|
12
14
|
require 'uri'
|
13
15
|
|
14
16
|
class Vanagon
|
@@ -83,6 +85,13 @@ class Vanagon
|
|
83
85
|
method_name.to_s.start_with?('get_') || super
|
84
86
|
end
|
85
87
|
|
88
|
+
def inherit_from_default(name = @name)
|
89
|
+
default_file = File.join(__dir__, 'defaults', "#{name}.rb")
|
90
|
+
default_object = Vanagon::Platform::DSL.new(name)
|
91
|
+
|
92
|
+
@platform = default_object.instance_eval(File.read(default_file), default_file, 1)
|
93
|
+
end
|
94
|
+
|
86
95
|
# Adds an arbitrary environment variable to a Platform, which will be
|
87
96
|
# merged with any environment variables defined by the Project into the
|
88
97
|
# rendered Makefile
|
@@ -218,6 +227,11 @@ class Vanagon
|
|
218
227
|
# @param dir [String] Directory where service files live on the platform
|
219
228
|
def servicedir(dir)
|
220
229
|
@platform.servicedir = dir
|
230
|
+
|
231
|
+
# Add to the servicetypes array if we haven't already
|
232
|
+
if @platform.servicetype && @platform.servicedir && @platform.servicetypes.select { |s| s.servicetype == @platform.servicetype }.empty?
|
233
|
+
@platform.servicetypes << OpenStruct.new(:servicetype => @platform.servicetype, :servicedir => @platform.servicedir)
|
234
|
+
end
|
221
235
|
end
|
222
236
|
|
223
237
|
# Set the directory where default or sysconfig files live for the platform
|
@@ -230,8 +244,18 @@ class Vanagon
|
|
230
244
|
# Set the servicetype for the platform so that services can be installed correctly.
|
231
245
|
#
|
232
246
|
# @param type [String] service type for the platform ('sysv' for example)
|
233
|
-
|
234
|
-
|
247
|
+
# @param servicedir [String] service dir for this platform and service type ('/etc/init.d' for example). Optional.
|
248
|
+
def servicetype(type, servicedir: nil) # rubocop:disable Metrics/AbcSize
|
249
|
+
if servicedir
|
250
|
+
@platform.servicetypes << OpenStruct.new(:servicetype => type, :servicedir => servicedir)
|
251
|
+
else
|
252
|
+
@platform.servicetype = type
|
253
|
+
end
|
254
|
+
|
255
|
+
# Add to the servicetypes array if we haven't already
|
256
|
+
if @platform.servicetype && @platform.servicedir && @platform.servicetypes.select { |s| s.servicetype == @platform.servicetype }.empty?
|
257
|
+
@platform.servicetypes << OpenStruct.new(:servicetype => @platform.servicetype, :servicedir => @platform.servicedir)
|
258
|
+
end
|
235
259
|
end
|
236
260
|
|
237
261
|
# Set the list of possible host to perform a build on (when not using
|
@@ -259,7 +283,7 @@ class Vanagon
|
|
259
283
|
# @param name [String] name that the pooler uses for this platform
|
260
284
|
# @deprecated Please use vmpooler_template instead, this will be removed in a future vanagon release.
|
261
285
|
def vcloud_name(cloud_name)
|
262
|
-
|
286
|
+
VanagonLogger.info "vcloud_name is a deprecated platform DSL method, and will be removed in a future vanagon release. Please use vmpooler_template instead."
|
263
287
|
self.vmpooler_template(cloud_name)
|
264
288
|
end
|
265
289
|
|
@@ -394,7 +418,7 @@ class Vanagon
|
|
394
418
|
# @param gpg_key [String] optional gpg key to be fetched via curl and installed
|
395
419
|
# @deprecated Please use the add_build_repository DSL method instead. apt_repo will be removed in a future vanagon release.
|
396
420
|
def apt_repo(definition, gpg_key = nil)
|
397
|
-
|
421
|
+
VanagonLogger.info "Please use the add_build_repository DSL method instead. apt_repo will be removed in a future vanagon release."
|
398
422
|
self.add_build_repository(definition, gpg_key)
|
399
423
|
end
|
400
424
|
|
@@ -403,7 +427,7 @@ class Vanagon
|
|
403
427
|
# @param definition [String] the repo setup URI or RPM file
|
404
428
|
# @deprecated Please use the add_build_repository DSL method instead. yum_repo will be removed in a future vanagon release.
|
405
429
|
def yum_repo(definition)
|
406
|
-
|
430
|
+
VanagonLogger.info "Please use the add_build_repository DSL method instead. yum_repo will be removed in a future vanagon release."
|
407
431
|
self.add_build_repository(definition)
|
408
432
|
end
|
409
433
|
|
@@ -412,7 +436,7 @@ class Vanagon
|
|
412
436
|
# @param definition [String] the repo setup URI or RPM file
|
413
437
|
# @deprecated Please use the add_build_repository DSL method instead. zypper_repo will be removed in a future vanagon release.
|
414
438
|
def zypper_repo(definition)
|
415
|
-
|
439
|
+
VanagonLogger.info "Please use the add_build_repository DSL method instead. zypper_repo will be removed in a future vanagon release."
|
416
440
|
self.add_build_repository(definition)
|
417
441
|
end
|
418
442
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'vanagon/logger'
|
2
|
+
|
1
3
|
class Vanagon
|
2
4
|
class Platform
|
3
5
|
class Windows < Vanagon::Platform
|
@@ -231,7 +233,7 @@ class Vanagon
|
|
231
233
|
]
|
232
234
|
end
|
233
235
|
rescue RuntimeError
|
234
|
-
|
236
|
+
VanagonLogger.error "Unable to connect to #{project.signing_username}@#{project.signing_hostname}, skipping signing extra files: #{project.extra_files_to_sign.join(',')}"
|
235
237
|
end
|
236
238
|
end
|
237
239
|
make_commands << [
|
data/lib/vanagon/project.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'vanagon/component'
|
2
2
|
require 'vanagon/environment'
|
3
|
+
require 'vanagon/logger'
|
3
4
|
require 'vanagon/platform'
|
4
5
|
require 'vanagon/project/dsl'
|
5
6
|
require 'vanagon/utilities'
|
@@ -130,9 +131,9 @@ class Vanagon
|
|
130
131
|
dsl.instance_eval(File.read(projfile), projfile, 1)
|
131
132
|
dsl._project
|
132
133
|
rescue StandardError => e
|
133
|
-
|
134
|
-
|
135
|
-
|
134
|
+
VanagonLogger.error "Error loading project '#{name}' using '#{projfile}':"
|
135
|
+
VanagonLogger.error(e)
|
136
|
+
VanagonLogger.error e.backtrace.join("\n")
|
136
137
|
raise e
|
137
138
|
end
|
138
139
|
|
@@ -296,10 +297,14 @@ class Vanagon
|
|
296
297
|
#
|
297
298
|
# @return [Array] array of runtime requirements for the project
|
298
299
|
def get_requires
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
300
|
+
requires = []
|
301
|
+
requires << @requires.flatten
|
302
|
+
requires << components.flat_map(&:requires)
|
303
|
+
requires.flatten!
|
304
|
+
requires.each do |requirement|
|
305
|
+
requirement.version = @platform.version_munger(requirement.version, default: '<') if requirement.version
|
306
|
+
end
|
307
|
+
requires.uniq
|
303
308
|
end
|
304
309
|
|
305
310
|
# Collects all of the replacements for the project and its components
|
@@ -307,8 +312,8 @@ class Vanagon
|
|
307
312
|
# @return [Array] array of package level replacements for the project
|
308
313
|
def get_replaces
|
309
314
|
replaces = []
|
310
|
-
replaces
|
311
|
-
replaces
|
315
|
+
replaces << @replaces.flatten
|
316
|
+
replaces << components.flat_map(&:replaces)
|
312
317
|
replaces.flatten!
|
313
318
|
replaces.each do |replace|
|
314
319
|
# TODO: Make this a more reasonable default before 1.0.0
|
@@ -324,8 +329,9 @@ class Vanagon
|
|
324
329
|
|
325
330
|
# Collects all of the conflicts for the project and its components
|
326
331
|
def get_conflicts
|
327
|
-
conflicts =
|
328
|
-
|
332
|
+
conflicts = []
|
333
|
+
conflicts << @conflicts.flatten
|
334
|
+
conflicts << components.flat_map(&:conflicts)
|
329
335
|
conflicts.flatten!
|
330
336
|
conflicts.each do |conflict|
|
331
337
|
# TODO: Make this a more reasonable default before 1.0.0
|
@@ -345,10 +351,14 @@ class Vanagon
|
|
345
351
|
# will return nil
|
346
352
|
#
|
347
353
|
# @param [string] name of service to grab
|
348
|
-
# @return [@component.service obj] specific service
|
354
|
+
# @return [@component.service obj] specific service, or array of services
|
355
|
+
# if there's more than one
|
349
356
|
def get_service(name)
|
350
357
|
components.each do |component|
|
351
358
|
if component.name == name
|
359
|
+
if component.service.size == 1
|
360
|
+
return component.service.first
|
361
|
+
end
|
352
362
|
return component.service
|
353
363
|
end
|
354
364
|
end
|
@@ -360,8 +370,8 @@ class Vanagon
|
|
360
370
|
# @return [Array] array of package level provides for the project
|
361
371
|
def get_provides
|
362
372
|
provides = []
|
363
|
-
provides
|
364
|
-
provides
|
373
|
+
provides << @provides.flatten
|
374
|
+
provides << components.flat_map(&:provides)
|
365
375
|
provides.flatten!
|
366
376
|
provides.each do |provide|
|
367
377
|
# TODO: Make this a more reasonable default before 1.0.0
|
@@ -841,7 +851,7 @@ class Vanagon
|
|
841
851
|
end
|
842
852
|
|
843
853
|
def load_upstream_metadata(metadata_uri)
|
844
|
-
|
854
|
+
VanagonLogger.info "Loading metadata from #{metadata_uri}"
|
845
855
|
case metadata_uri
|
846
856
|
when /^http/
|
847
857
|
@upstream_metadata = JSON.parse(Net::HTTP.get(URI(metadata_uri)))
|
data/lib/vanagon/project/dsl.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'vanagon/errors'
|
2
|
+
require 'vanagon/logger'
|
2
3
|
require 'vanagon/project'
|
3
4
|
require 'vanagon/utilities'
|
4
5
|
require 'vanagon/component/source'
|
@@ -109,8 +110,8 @@ class Vanagon
|
|
109
110
|
# Sets the run time requirements for the project. Mainly for use in packaging.
|
110
111
|
#
|
111
112
|
# @param req [String] of requirements of the project
|
112
|
-
def requires(
|
113
|
-
@project.requires <<
|
113
|
+
def requires(requirement, version = nil)
|
114
|
+
@project.requires << OpenStruct.new(:requirement => requirement, :version => version)
|
114
115
|
end
|
115
116
|
|
116
117
|
# Indicates that this component replaces a system level package. Replaces can be collected and used by the project and package.
|
@@ -185,7 +186,7 @@ class Vanagon
|
|
185
186
|
last_tag = repo_object.describe('HEAD', { :abbrev => 0 })
|
186
187
|
release(repo_object.rev_list("#{last_tag}..HEAD", { :count => true }))
|
187
188
|
rescue Git::GitExecuteError
|
188
|
-
|
189
|
+
VanagonLogger.error "Directory '#{File.expand_path('..', @configdir)}' cannot be versioned by git. Maybe it hasn't been tagged yet?"
|
189
190
|
end
|
190
191
|
|
191
192
|
# Sets the version for the project based on a git describe of the
|
@@ -196,7 +197,7 @@ class Vanagon
|
|
196
197
|
git_version = Git.open(File.expand_path("..", @configdir)).describe('HEAD', tags: true)
|
197
198
|
version(git_version.split('-').reject(&:empty?).join('.'))
|
198
199
|
rescue Git::GitExecuteError
|
199
|
-
|
200
|
+
VanagonLogger.error "Directory '#{File.expand_path('..', @configdir)}' cannot be versioned by git. Maybe it hasn't been tagged yet?"
|
200
201
|
end
|
201
202
|
|
202
203
|
# Get the version string from a git branch name. This will look for a '.'
|
@@ -268,7 +269,7 @@ class Vanagon
|
|
268
269
|
#
|
269
270
|
# @param name [String] name of component to add. must be present in configdir/components and named $name.rb currently
|
270
271
|
def component(name)
|
271
|
-
|
272
|
+
VanagonLogger.info "Loading #{name}" if @project.settings[:verbose]
|
272
273
|
if @include_components.empty? or @include_components.include?(name)
|
273
274
|
component = Vanagon::Component.load_component(name, File.join(@configdir, "components"), @project.settings, @project.platform)
|
274
275
|
@project.components << component
|
data/lib/vanagon/utilities.rb
CHANGED
@@ -9,6 +9,7 @@ require 'timeout'
|
|
9
9
|
# but it provides a wealth of useful constants
|
10
10
|
require 'English'
|
11
11
|
require 'vanagon/extensions/string'
|
12
|
+
require 'vanagon/logger'
|
12
13
|
|
13
14
|
class Vanagon
|
14
15
|
module Utilities
|
@@ -165,7 +166,7 @@ class Vanagon
|
|
165
166
|
yield
|
166
167
|
return true
|
167
168
|
rescue StandardError => e
|
168
|
-
|
169
|
+
VanagonLogger.error 'An error was encountered evaluating block. Retrying..'
|
169
170
|
error = e
|
170
171
|
end
|
171
172
|
end
|
@@ -238,7 +239,7 @@ class Vanagon
|
|
238
239
|
# output of the command if return_command_output is true
|
239
240
|
# @raise [RuntimeError] If there is no target given or the command fails an exception is raised
|
240
241
|
def remote_ssh_command(target, command, port = 22, return_command_output: false)
|
241
|
-
|
242
|
+
VanagonLogger.info "Executing '#{command}' on '#{target}'"
|
242
243
|
if return_command_output
|
243
244
|
ret = %x(#{ssh_command(port)} -T #{target} '#{command.gsub("'", "'\\\\''")}').chomp
|
244
245
|
if $CHILD_STATUS.success?
|
@@ -261,7 +262,7 @@ class Vanagon
|
|
261
262
|
# @raise [RuntimeError] If the command fails an exception is raised
|
262
263
|
def local_command(command, return_command_output: false)
|
263
264
|
clean_environment do
|
264
|
-
|
265
|
+
VanagonLogger.info "Executing '#{command}' locally"
|
265
266
|
if return_command_output
|
266
267
|
ret = %x(#{command}).chomp
|
267
268
|
if $CHILD_STATUS.success?
|
@@ -305,7 +306,7 @@ class Vanagon
|
|
305
306
|
outfile ||= File.join(Dir.mktmpdir, File.basename(erbfile).sub(File.extname(erbfile), ""))
|
306
307
|
output = erb_string(erbfile, opts[:binding])
|
307
308
|
File.open(outfile, 'w') { |f| f.write output }
|
308
|
-
|
309
|
+
VanagonLogger.info "Generated: #{outfile}"
|
309
310
|
FileUtils.rm_rf erbfile if remove_orig
|
310
311
|
outfile
|
311
312
|
end
|