vanagon 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/lib/vanagon/common/pathname.rb +3 -1
- data/lib/vanagon/component.rb +5 -2
- data/lib/vanagon/component/dsl.rb +10 -3
- data/lib/vanagon/component/source/git.rb +3 -3
- data/lib/vanagon/component/source/http.rb +11 -19
- data/lib/vanagon/driver.rb +1 -1
- data/lib/vanagon/engine/base.rb +4 -3
- data/lib/vanagon/engine/docker.rb +1 -0
- data/lib/vanagon/engine/hardware.rb +1 -0
- data/lib/vanagon/engine/local.rb +1 -0
- data/lib/vanagon/engine/pooler.rb +1 -0
- data/lib/vanagon/platform.rb +6 -2
- data/lib/vanagon/platform/deb.rb +1 -1
- data/lib/vanagon/platform/dsl.rb +24 -0
- data/lib/vanagon/platform/osx.rb +2 -2
- data/lib/vanagon/platform/rpm.rb +1 -1
- data/lib/vanagon/platform/solaris_10.rb +1 -1
- data/lib/vanagon/platform/solaris_11.rb +1 -1
- data/lib/vanagon/platform/windows.rb +241 -0
- data/lib/vanagon/project.rb +7 -2
- data/lib/vanagon/utilities.rb +14 -5
- data/{templates → resources}/Makefile.erb +3 -3
- data/{templates → resources}/deb/changelog.erb +0 -0
- data/{templates → resources}/deb/conffiles.erb +0 -0
- data/{templates → resources}/deb/control.erb +0 -0
- data/{templates → resources}/deb/dirs.erb +0 -0
- data/{templates → resources}/deb/docs.erb +0 -0
- data/{templates → resources}/deb/install.erb +0 -0
- data/{templates → resources}/deb/postinst.erb +0 -0
- data/{templates → resources}/deb/postrm.erb +0 -0
- data/{templates → resources}/deb/preinst.erb +0 -0
- data/{templates → resources}/deb/prerm.erb +0 -0
- data/{templates → resources}/deb/rules.erb +2 -0
- data/{templates → resources}/osx/postinstall.erb +0 -0
- data/{templates → resources}/osx/preinstall.erb +0 -0
- data/{templates → resources}/osx/project-installer.xml.erb +0 -0
- data/{templates → resources}/rpm/project.spec.erb +2 -1
- data/{templates → resources}/solaris/10/depend.erb +0 -0
- data/{templates → resources}/solaris/10/pkginfo.erb +0 -0
- data/{templates → resources}/solaris/10/postinstall.erb +0 -0
- data/{templates → resources}/solaris/10/preinstall.erb +0 -0
- data/{templates → resources}/solaris/10/preremove.erb +0 -0
- data/{templates → resources}/solaris/10/proto.erb +0 -0
- data/{templates → resources}/solaris/11/p5m.erb +0 -0
- data/resources/windows/nuget/chocolateyInstall.ps1 +28 -0
- data/resources/windows/nuget/chocolateyUninstall.ps1 +24 -0
- data/resources/windows/nuget/project.nuspec.erb +31 -0
- data/resources/windows/wix/service.component.wxs.erb +55 -0
- data/spec/lib/vanagon/component/dsl_spec.rb +31 -1
- data/spec/lib/vanagon/component/source/git_spec.rb +14 -0
- data/spec/lib/vanagon/component/source/http_spec.rb +10 -1
- data/spec/lib/vanagon/engine/pooler_spec.rb +1 -1
- data/spec/lib/vanagon/platform/windows_spec.rb +43 -0
- data/spec/lib/vanagon/utilities_spec.rb +7 -0
- metadata +32 -25
data/lib/vanagon/project.rb
CHANGED
@@ -232,6 +232,11 @@ class Vanagon
|
|
232
232
|
files = ['file-list', 'bill-of-materials']
|
233
233
|
files.push get_files.map(&:path)
|
234
234
|
files.push get_configfiles.map(&:path)
|
235
|
+
if @platform.is_windows?
|
236
|
+
files.flatten.map { |f| "$$(cygpath --mixed --long-name '#{f}')" }
|
237
|
+
else
|
238
|
+
files.flatten
|
239
|
+
end
|
235
240
|
end
|
236
241
|
|
237
242
|
# Generate a bill-of-materials: a listing of the components and their
|
@@ -248,7 +253,7 @@ class Vanagon
|
|
248
253
|
def pack_tarball_command
|
249
254
|
tar_root = "#{@name}-#{@version}"
|
250
255
|
["mkdir -p '#{tar_root}'",
|
251
|
-
%('#{@platform.tar}' -cf - -T #{get_tarball_files.join(" ")} | ( cd '#{tar_root}/'; '#{@platform.tar}' xfp -)),
|
256
|
+
%('#{@platform.tar}' -cf - -T "#{get_tarball_files.join('" "')}" | ( cd '#{tar_root}/'; '#{@platform.tar}' xfp -)),
|
252
257
|
%('#{@platform.tar}' -cf - #{tar_root}/ | gzip -9c > #{tar_root}.tar.gz)].join("\n\t")
|
253
258
|
end
|
254
259
|
|
@@ -258,7 +263,7 @@ class Vanagon
|
|
258
263
|
# @param workdir [String] full path to the workdir to send the evaluated template
|
259
264
|
# @return [String] full path to the generated Makefile
|
260
265
|
def make_makefile(workdir)
|
261
|
-
erb_file(File.join(VANAGON_ROOT, "
|
266
|
+
erb_file(File.join(VANAGON_ROOT, "resources/Makefile.erb"), File.join(workdir, "Makefile"))
|
262
267
|
end
|
263
268
|
|
264
269
|
# Generates a bill-of-materials and writes the contents to the workdir for use in
|
data/lib/vanagon/utilities.rb
CHANGED
@@ -146,11 +146,19 @@ class Vanagon
|
|
146
146
|
# Simple wrapper around git command line executes the given commands and
|
147
147
|
# returns the results.
|
148
148
|
#
|
149
|
-
# @param
|
149
|
+
# @param command_string [String] The commands to be run
|
150
|
+
# @param raise_error [boolean] if this function should raise an error
|
151
|
+
# on a git failure
|
150
152
|
# @return [String] The output of the command
|
151
|
-
def git(
|
153
|
+
def git(command_string, raise_error = false)
|
152
154
|
git_bin = find_program_on_path('git')
|
153
|
-
%x(#{git_bin} #{
|
155
|
+
output = %x(#{git_bin} #{command_string})
|
156
|
+
if raise_error
|
157
|
+
unless $?.success?
|
158
|
+
raise %(git #{command_string} failed)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
return output
|
154
162
|
end
|
155
163
|
|
156
164
|
# Determines if the given directory is a git repo or not
|
@@ -159,7 +167,7 @@ class Vanagon
|
|
159
167
|
# @return [true, false] True if the directory is a git repo, false otherwise
|
160
168
|
def is_git_repo?(directory = Dir.pwd)
|
161
169
|
Dir.chdir(directory) do
|
162
|
-
git('rev-parse
|
170
|
+
git('rev-parse --git-dir > /dev/null 2>&1')
|
163
171
|
$?.success?
|
164
172
|
end
|
165
173
|
end
|
@@ -173,7 +181,7 @@ class Vanagon
|
|
173
181
|
def git_version(directory = Dir.pwd)
|
174
182
|
if is_git_repo?(directory)
|
175
183
|
Dir.chdir(directory) do
|
176
|
-
version = git('describe
|
184
|
+
version = git('describe --tags 2> /dev/null').chomp
|
177
185
|
if version.empty?
|
178
186
|
warn "Directory '#{directory}' cannot be versioned by git. Maybe it hasn't been tagged yet?"
|
179
187
|
end
|
@@ -211,6 +219,7 @@ class Vanagon
|
|
211
219
|
args << " -p #{port} "
|
212
220
|
args << " -o UserKnownHostsFile=/dev/null"
|
213
221
|
args << " -o StrictHostKeyChecking=no"
|
222
|
+
args << " -o ForwardAgent=yes" if ENV['VANAGON_SSH_AGENT']
|
214
223
|
return ssh + args
|
215
224
|
end
|
216
225
|
|
@@ -13,14 +13,14 @@ file-list-before-build:
|
|
13
13
|
<%- if dirnames.empty? -%>
|
14
14
|
touch file-list-before-build
|
15
15
|
<%- else -%>
|
16
|
-
(find -L <%= dirnames.join(' ') %> 2>/dev/null || find <%= dirnames.join(' ') %> -follow 2>/dev/null) | sort | uniq > file-list-before-build
|
16
|
+
(<%= @platform.find %> -L "<%= dirnames.join('" "') %>" 2>/dev/null || <%= @platform.find %> "<%= dirnames.join('" "') %>" -follow 2>/dev/null) | <%= "xargs -I[] cygpath --mixed --long-name --absolute [] |" if @platform.is_windows? %> <%= @platform.sort %> | uniq > file-list-before-build
|
17
17
|
<%- end -%>
|
18
18
|
|
19
19
|
file-list-after-build: <%= @components.map {|comp| comp.name }.join(" ") %>
|
20
20
|
<%- if dirnames.empty? -%>
|
21
21
|
touch file-list-after-build
|
22
22
|
<%- else -%>
|
23
|
-
(find -L <%= dirnames.join(' ') %>
|
23
|
+
(<%= @platform.find %> -L "<%= dirnames.join('" "') %>" 2>/dev/null || <%= @platform.find %> "<%= dirnames.join('" "') %>" -follow 2>/dev/null) | <%= "xargs -I[] cygpath --mixed --long-name --absolute [] |" if @platform.is_windows? %> <%= @platform.sort %> | uniq > file-list-after-build
|
24
24
|
<%- end -%>
|
25
25
|
|
26
26
|
<%= @name %>-<%= @version %>.tar.gz: file-list <%= @cleanup ? 'cleanup-components' : '' %>
|
@@ -43,7 +43,7 @@ file-list: file-list-before-build <%= @name %>-project
|
|
43
43
|
|
44
44
|
<%- dirnames.each do |dir| -%>
|
45
45
|
<%= dir %>: file-list-before-build
|
46
|
-
mkdir -p <%= dir %>
|
46
|
+
mkdir -p '<%= dir %>'
|
47
47
|
<%- end %>
|
48
48
|
|
49
49
|
<%- if @cleanup -%>
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -253,7 +253,8 @@ if [ -e %{_localstatedir}/lib/rpm-state/%{name}/upgrade ] ; then
|
|
253
253
|
fi
|
254
254
|
<%- end -%>
|
255
255
|
|
256
|
-
%files
|
256
|
+
%files <%- unless get_directories.empty? -%>-f %{SOURCE1}<%- end -%>
|
257
|
+
|
257
258
|
<%- unless @bill_of_materials -%>
|
258
259
|
%doc bill-of-materials
|
259
260
|
<%- end -%>
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,28 @@
|
|
1
|
+
$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
|
2
|
+
$fileList = Join-Path -path $toolsDir -childpath "file-list.txt"
|
3
|
+
|
4
|
+
if (!(Test-Path -path "$fileList")) {
|
5
|
+
Throw "Unable to find file '$fileList', cannot proceed with install"
|
6
|
+
}
|
7
|
+
|
8
|
+
$lines = Get-Content "$fileList"
|
9
|
+
foreach ($destination in $lines) {
|
10
|
+
$originFile = "$destination" -replace '^[a-zA-Z]:/',''
|
11
|
+
$origin = Join-Path -path "$toolsDir" -childpath "$originFile"
|
12
|
+
if (Test-Path -path "$origin") {
|
13
|
+
$parent = Split-Path -path "$destination" -parent
|
14
|
+
if (!(Test-Path -path "$parent")) {
|
15
|
+
New-Item -ItemType directory -Path "$parent"
|
16
|
+
}
|
17
|
+
if (Test-Path -path "$destination") {
|
18
|
+
Write-Debug "Overwriting '$destination'"
|
19
|
+
}
|
20
|
+
Copy-Item -path "$origin" -destination "$destination" -Force
|
21
|
+
} else {
|
22
|
+
# If the item we are trying to copy over does not exist in our source directory,
|
23
|
+
# we assume it is an empty directory and simply create one in its place. There is
|
24
|
+
# a possibility that this will hide an error where there is actually a missing
|
25
|
+
# file. However, this is such a slim possibity, this action was deemed safe.
|
26
|
+
New-Item -ItemType directory -Path "$destination"
|
27
|
+
}
|
28
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
|
2
|
+
$fileList = Join-Path -path $toolsDir -childpath "file-list.txt"
|
3
|
+
|
4
|
+
if (!(Test-Path -path "$fileList")) {
|
5
|
+
Throw "Unable to find file '$fileList', cannot proceed with uninstall"
|
6
|
+
}
|
7
|
+
|
8
|
+
$lines = Get-Content "$fileList"
|
9
|
+
foreach ($file in $lines) {
|
10
|
+
if (Test-Path -path "$file") {
|
11
|
+
# We cannot guarentee a directory is only populated with files from
|
12
|
+
# this package, so we cannot whole-sale remove directories. We could
|
13
|
+
# check to see if a directory is empty after we remove all the files,
|
14
|
+
# but that would still end up with some reminantes of our skeletal
|
15
|
+
# directory structure. It doesn't seem worth it ATM. As is, only remove
|
16
|
+
# things that are files, and do not remove any directories.
|
17
|
+
if (!((Get-Item "$file") -is [System.IO.DirectoryInfo])) {
|
18
|
+
Write-Debug "Removing '$file'"
|
19
|
+
remove-item -Path "$file" -Force
|
20
|
+
}
|
21
|
+
} else {
|
22
|
+
Write-Debug "Skipping missing file '$file'"
|
23
|
+
}
|
24
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
|
3
|
+
<metadata>
|
4
|
+
<id><%= "#{@name}-#{@platform.architecture}" %></id>
|
5
|
+
<version><%= @platform.nuget_package_version(@version, @release) %></version>
|
6
|
+
<title><%= @name %></title>
|
7
|
+
<authors><%= @vendor.match(/^(.*) <.*>$/)[1] %></authors>
|
8
|
+
<owners><%= @vendor.match(/^(.*) <.*>$/)[1] %></owners>
|
9
|
+
<projectUrl><%= @homepage %></projectUrl>
|
10
|
+
<packageSourceUrl><%= "https://github.com/puppetlabs/#{project}-vanagon" %></packageSourceUrl>
|
11
|
+
<projectSourceUrl><%= "https://github.com/puppetlabs/#{project}" %></projectSourceUrl>
|
12
|
+
<docsUrl><%= @homepage %></docsUrl>
|
13
|
+
<mailingListUrl><%= @homepage %></mailingListUrl>
|
14
|
+
<bugTrackerUrl><%= @homepage %></bugTrackerUrl>
|
15
|
+
<licenseUrl><%= @homepage %></licenseUrl>
|
16
|
+
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
17
|
+
<description>
|
18
|
+
<%= @description %>
|
19
|
+
</description>
|
20
|
+
<summary><%= @description.lines.first.chomp %></summary>
|
21
|
+
<releaseNotes><%= @homepage %></releaseNotes>
|
22
|
+
<copyright><%= @vendor.match(/^(.*) <.*>$/)[1] %></copyright>
|
23
|
+
<tags>puppet configuration management infrastructure automation facter hiera mco mcollective marionette collective</tags>
|
24
|
+
<provides><%= get_replaces.map { |replace| "#{replace.replacement}" }.join(" ") %></provides>
|
25
|
+
<replaces><%= get_replaces.map { |replace| "#{replace.replacement}" }.join(" ") %></replaces>
|
26
|
+
</metadata>
|
27
|
+
<files>
|
28
|
+
<file src="tools\**" target="tools" />
|
29
|
+
</files>
|
30
|
+
</package>
|
31
|
+
<!-- character encoding: “UTF-8” -->
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<?xml version='1.0' encoding='windows-1252'?>
|
2
|
+
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi' xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
|
3
|
+
<Fragment>
|
4
|
+
<%- get_services.each do |service| -%>
|
5
|
+
<%- service.options.each do |component| -%>
|
6
|
+
<DirectoryRef Id="<%= component[:directory_ref] %>">
|
7
|
+
<Component Id='<%= component[:id] %>' Guid="<%= component[:guid] %>" <%= "Win64=\"#{component[:win64]}\"" unless component[:win64].nil? %>>
|
8
|
+
<%- unless component[:conditions].nil? -%>
|
9
|
+
<%- component[:conditions].each do |condition| -%>
|
10
|
+
<Condition>
|
11
|
+
<%= condition %>
|
12
|
+
</Condition>
|
13
|
+
<%- end -%>
|
14
|
+
<%- end -%>
|
15
|
+
<File Id="<%= component[:file][:id] %>" KeyPath="yes" Source="<%= component[:file][:source] %>" />
|
16
|
+
<ServiceInstall Id="<%= component[:serviceinstall][:id] %>"
|
17
|
+
Account="[PUPPET_AGENT_ACCOUNT_DOMAIN]\[PUPPET_AGENT_ACCOUNT_USER]"
|
18
|
+
Password="[PUPPET_AGENT_ACCOUNT_PASSWORD]"
|
19
|
+
Description="<%= component[:serviceinstall][:description] %>"
|
20
|
+
DisplayName="<%= component[:serviceinstall][:displayname] %>"
|
21
|
+
Interactive="no"
|
22
|
+
Name="<%= component[:serviceinstall][:name] %>"
|
23
|
+
Start="<%= component[:serviceinstall][:start] %>"
|
24
|
+
Type="ownProcess"
|
25
|
+
ErrorControl="normal"
|
26
|
+
Vital="yes"
|
27
|
+
<%- unless component[:serviceinstall][:arguments].nil? -%>
|
28
|
+
Arguments="<%= component[:serviceinstall][:arguments] %>"
|
29
|
+
<%- end -%>
|
30
|
+
/>
|
31
|
+
<%- unless component[:registries].nil? -%>
|
32
|
+
<RegistryKey Root="<%= component[:registries][:root] %>" Key="<%= component[:registries][:key] %>">
|
33
|
+
<%- unless component[:registries][:values].nil? -%>
|
34
|
+
<%- component[:registries][:values].each do |value| -%>
|
35
|
+
<RegistryValue Name="<%= value[:name] %>" Value="<%= value[:value] %>" Type="<%= value[:type] %>" <%= "Action=\"#{value[:action]}\"" unless value[:action].nil? %> />
|
36
|
+
<%- end -%>
|
37
|
+
<%- end -%>
|
38
|
+
<%- unless component[:registries][:keys].nil? -%>
|
39
|
+
<%- component[:registries][:keys].each do |key| -%>
|
40
|
+
<RegistryKey Key="<%= key[:name] %>">
|
41
|
+
<%- key[:values].each do |value| -%>
|
42
|
+
<RegistryValue <%= "Name=\"#{value[:name]}\"" unless value[:name].nil? %> Value="<%= value[:value] %>" Type="<%= value[:type] %>" />
|
43
|
+
<%- end -%>
|
44
|
+
</RegistryKey>
|
45
|
+
<%- end -%>
|
46
|
+
<%- end -%>
|
47
|
+
</RegistryKey>
|
48
|
+
<%- end -%>
|
49
|
+
<ServiceControl Id="<%= component[:servicecontrol][:id] %>" <%= "Start=\"#{component[:servicecontrol][:start]}\"" unless component[:servicecontrol][:start].nil? %> Stop="both" Remove="uninstall" Name="<%= component[:servicecontrol][:name] %>" Wait="yes" />
|
50
|
+
</Component>
|
51
|
+
</DirectoryRef>
|
52
|
+
<%- end -%>
|
53
|
+
<%- end -%>
|
54
|
+
</Fragment>
|
55
|
+
</Wix>
|
@@ -59,6 +59,7 @@ end" }
|
|
59
59
|
|
60
60
|
before do
|
61
61
|
allow(platform).to receive(:install).and_return('install')
|
62
|
+
allow(platform).to receive(:copy).and_return('cp')
|
62
63
|
end
|
63
64
|
|
64
65
|
describe '#load_from_json' do
|
@@ -183,6 +184,35 @@ end" }
|
|
183
184
|
comp = Vanagon::Component::DSL.new('patch-test', {}, {})
|
184
185
|
expect { comp.apply_patch('patch_file1', after: 'delivery') }.to raise_error(Vanagon::Error)
|
185
186
|
end
|
187
|
+
|
188
|
+
it 'can specify a directory where the patch should be applied' do
|
189
|
+
comp = Vanagon::Component::DSL.new('patch-test', {}, {})
|
190
|
+
comp.apply_patch('patch_file1', destination: 'random/install/directory')
|
191
|
+
expect(comp._component.patches.count).to eq 1
|
192
|
+
expect(comp._component.patches.first.path).to eq 'patch_file1'
|
193
|
+
expect(comp._component.patches.first.destination).to eq 'random/install/directory'
|
194
|
+
end
|
195
|
+
|
196
|
+
it 'can specify when to try to apply the patch' do
|
197
|
+
comp = Vanagon::Component::DSL.new('patch-test', {}, {})
|
198
|
+
comp.apply_patch('patch_file1', after: 'install')
|
199
|
+
expect(comp._component.patches.count).to eq 1
|
200
|
+
expect(comp._component.patches.first.path).to eq 'patch_file1'
|
201
|
+
expect(comp._component.patches.first.after).to eq 'install'
|
202
|
+
end
|
203
|
+
|
204
|
+
it 'will default the patch timing to after the source is unpacked' do
|
205
|
+
comp = Vanagon::Component::DSL.new('patch-test', {}, {})
|
206
|
+
comp.apply_patch('patch_file1')
|
207
|
+
expect(comp._component.patches.count).to eq 1
|
208
|
+
expect(comp._component.patches.first.path).to eq 'patch_file1'
|
209
|
+
expect(comp._component.patches.first.after).to eq 'unpack'
|
210
|
+
end
|
211
|
+
|
212
|
+
it 'will fail if the user wants to install the patch at an unsupported step' do
|
213
|
+
comp = Vanagon::Component::DSL.new('patch-test', {}, {})
|
214
|
+
expect { comp.apply_patch('patch_file1', after: 'delivery') }.to raise_error(Vanagon::Error)
|
215
|
+
end
|
186
216
|
end
|
187
217
|
|
188
218
|
describe '#build_requires' do
|
@@ -548,7 +578,7 @@ end" }
|
|
548
578
|
comp = Vanagon::Component::DSL.new('link-test', {}, platform)
|
549
579
|
comp.link('link-source', '/place/to/put/things')
|
550
580
|
expect(comp._component.install).to include("install -d '/place/to/put'")
|
551
|
-
expect(comp._component.install).to include("ln -s 'link-source' '/place/to/put/things'")
|
581
|
+
expect(comp._component.install).to include("([[ '/place/to/put/things' -ef 'link-source' ]] || ln -s 'link-source' '/place/to/put/things')")
|
552
582
|
end
|
553
583
|
end
|
554
584
|
|
@@ -6,6 +6,7 @@ describe "Vanagon::Component::Source::Git" do
|
|
6
6
|
let (:workdir) { "/tmp" }
|
7
7
|
|
8
8
|
describe "#dirname" do
|
9
|
+
after(:each) { %x(rm -rf #{workdir}/facter) }
|
9
10
|
it "returns the name of the repo" do
|
10
11
|
git_source = Vanagon::Component::Source::Git.new(url, ref, workdir)
|
11
12
|
expect(git_source.dirname).to eq('facter')
|
@@ -16,4 +17,17 @@ describe "Vanagon::Component::Source::Git" do
|
|
16
17
|
expect(git_source.dirname).to eq('facter')
|
17
18
|
end
|
18
19
|
end
|
20
|
+
|
21
|
+
describe "#fetch" do
|
22
|
+
after(:each) { %x(rm -rf #{workdir}/facter) }
|
23
|
+
it "raises error on clone failure" do
|
24
|
+
#this test has a spelling error for the git repo V this is on purpose
|
25
|
+
git_source = Vanagon::Component::Source::Git.new("#{url}l.git", ref, workdir)
|
26
|
+
expect { git_source.fetch }.to raise_error(RuntimeError, "git clone #{url}l.git failed")
|
27
|
+
end
|
28
|
+
it "raises error on checkout failure" do
|
29
|
+
git_source = Vanagon::Component::Source::Git.new("#{url}", "999.9.9", workdir)
|
30
|
+
expect { git_source.fetch }.to raise_error(RuntimeError, "git checkout 999.9.9 failed")
|
31
|
+
end
|
32
|
+
end
|
19
33
|
end
|
@@ -30,7 +30,7 @@ describe "Vanagon::Component::Source::Http" do
|
|
30
30
|
|
31
31
|
describe "#get_extension" do
|
32
32
|
it "returns the extension for valid extensions" do
|
33
|
-
|
33
|
+
Vanagon::Component::Source::Http::ARCHIVE_EXTENSIONS.each do |ext|
|
34
34
|
filename = "#{file_base}#{ext}"
|
35
35
|
url = File.join(base_url, filename)
|
36
36
|
http_source = Vanagon::Component::Source::Http.new(url, md5sum, workdir)
|
@@ -39,5 +39,14 @@ describe "Vanagon::Component::Source::Http" do
|
|
39
39
|
expect(http_source.get_extension).to eq(ext)
|
40
40
|
end
|
41
41
|
end
|
42
|
+
|
43
|
+
it "is able to download non archive extensions" do
|
44
|
+
["gpg.txt", "foo.service", "configi.json", "config.repo.txt", "noextensionfile"].each do |filename|
|
45
|
+
url = File.join(base_url, filename)
|
46
|
+
http_source = Vanagon::Component::Source::Http.new(url, md5sum, workdir)
|
47
|
+
expect(http_source).to receive(:download).and_return(filename)
|
48
|
+
http_source.fetch
|
49
|
+
end
|
50
|
+
end
|
42
51
|
end
|
43
52
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'vanagon/engine/pooler'
|
2
2
|
|
3
3
|
describe 'Vanagon::Engine::Pooler' do
|
4
|
-
let (:platform) { double(Vanagon::Platform) }
|
4
|
+
let (:platform) { double(Vanagon::Platform, :target_user => 'root') }
|
5
5
|
let (:platform_with_vcloud_name) {
|
6
6
|
plat = Vanagon::Platform::DSL.new('debian-6-i386')
|
7
7
|
plat.instance_eval("platform 'debian-6-i386' do |plat|
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'vanagon/platform'
|
2
|
+
|
3
|
+
describe "Vanagon::Platform::Windows" do
|
4
|
+
platforms =[
|
5
|
+
{
|
6
|
+
:name => "windows-2012r2-x64",
|
7
|
+
:os_name => "windows",
|
8
|
+
:os_version => "2012r2",
|
9
|
+
:architecture => "x64",
|
10
|
+
:output_dir => "windows/x64",
|
11
|
+
:output_dir_with_target => "windows/thing/x64",
|
12
|
+
:target_user => "Administrator",
|
13
|
+
:block => %Q[ platform "windows-2012r2-x64" do |plat| end ]
|
14
|
+
},
|
15
|
+
]
|
16
|
+
|
17
|
+
platforms.each do |plat|
|
18
|
+
context "on #{plat[:name]} we should behave ourselves" do
|
19
|
+
let(:platform) { plat }
|
20
|
+
let(:cur_plat) { Vanagon::Platform::DSL.new(plat[:name]) }
|
21
|
+
|
22
|
+
before do
|
23
|
+
cur_plat.instance_eval(plat[:block])
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "#output_dir" do
|
27
|
+
it "returns an output dir consistent with the packaging repo" do
|
28
|
+
expect(cur_plat._platform.output_dir).to eq(plat[:output_dir])
|
29
|
+
end
|
30
|
+
|
31
|
+
it "adds the target repo in the right way" do
|
32
|
+
expect(cur_plat._platform.output_dir('thing')).to eq(plat[:output_dir_with_target])
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#target_user' do
|
37
|
+
it "sets the target_user to 'Administrator'" do
|
38
|
+
expect(cur_plat._platform.target_user).to eq(plat[:target_user])
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|