test-kitchen 1.7.0 → 1.7.1.dev
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/.cane +8 -8
- data/.gitattributes +3 -0
- data/.github/ISSUE_TEMPLATE.md +55 -55
- data/.gitignore +28 -28
- data/.kitchen.ci.yml +23 -23
- data/.kitchen.proxy.yml +27 -27
- data/.rubocop.yml +3 -3
- data/.travis.yml +70 -70
- data/.yardopts +3 -3
- data/Berksfile +3 -3
- data/CHANGELOG.md +1090 -1083
- data/CONTRIBUTING.md +14 -14
- data/Gemfile +19 -19
- data/Gemfile.proxy_tests +4 -4
- data/Guardfile +42 -42
- data/LICENSE +15 -15
- data/MAINTAINERS.md +23 -23
- data/README.md +135 -135
- data/Rakefile +61 -61
- data/appveyor.yml +44 -44
- data/features/kitchen_action_commands.feature +164 -164
- data/features/kitchen_command.feature +16 -16
- data/features/kitchen_console_command.feature +34 -34
- data/features/kitchen_defaults.feature +38 -38
- data/features/kitchen_diagnose_command.feature +96 -96
- data/features/kitchen_driver_create_command.feature +64 -64
- data/features/kitchen_driver_discover_command.feature +25 -25
- data/features/kitchen_help_command.feature +16 -16
- data/features/kitchen_init_command.feature +274 -274
- data/features/kitchen_list_command.feature +104 -104
- data/features/kitchen_login_command.feature +62 -62
- data/features/kitchen_sink_command.feature +30 -30
- data/features/kitchen_test_command.feature +88 -88
- data/features/step_definitions/gem_steps.rb +36 -36
- data/features/step_definitions/git_steps.rb +5 -5
- data/features/step_definitions/output_steps.rb +5 -5
- data/features/support/env.rb +75 -75
- data/lib/kitchen.rb +150 -150
- data/lib/kitchen/base64_stream.rb +55 -55
- data/lib/kitchen/cli.rb +419 -419
- data/lib/kitchen/collection.rb +55 -55
- data/lib/kitchen/color.rb +65 -65
- data/lib/kitchen/command.rb +185 -185
- data/lib/kitchen/command/action.rb +45 -45
- data/lib/kitchen/command/console.rb +58 -58
- data/lib/kitchen/command/diagnose.rb +92 -92
- data/lib/kitchen/command/driver_discover.rb +105 -105
- data/lib/kitchen/command/exec.rb +41 -41
- data/lib/kitchen/command/list.rb +119 -119
- data/lib/kitchen/command/login.rb +43 -43
- data/lib/kitchen/command/sink.rb +54 -54
- data/lib/kitchen/command/test.rb +51 -51
- data/lib/kitchen/config.rb +322 -322
- data/lib/kitchen/configurable.rb +529 -529
- data/lib/kitchen/data_munger.rb +959 -959
- data/lib/kitchen/diagnostic.rb +141 -141
- data/lib/kitchen/driver.rb +56 -56
- data/lib/kitchen/driver/base.rb +134 -134
- data/lib/kitchen/driver/dummy.rb +108 -108
- data/lib/kitchen/driver/proxy.rb +72 -72
- data/lib/kitchen/driver/ssh_base.rb +357 -357
- data/lib/kitchen/errors.rb +229 -229
- data/lib/kitchen/generator/driver_create.rb +177 -177
- data/lib/kitchen/generator/init.rb +296 -296
- data/lib/kitchen/instance.rb +662 -662
- data/lib/kitchen/lazy_hash.rb +142 -142
- data/lib/kitchen/loader/yaml.rb +349 -349
- data/lib/kitchen/logger.rb +423 -423
- data/lib/kitchen/logging.rb +56 -56
- data/lib/kitchen/login_command.rb +52 -52
- data/lib/kitchen/metadata_chopper.rb +52 -52
- data/lib/kitchen/platform.rb +67 -67
- data/lib/kitchen/provisioner.rb +54 -54
- data/lib/kitchen/provisioner/base.rb +236 -236
- data/lib/kitchen/provisioner/chef/berkshelf.rb +114 -114
- data/lib/kitchen/provisioner/chef/common_sandbox.rb +322 -322
- data/lib/kitchen/provisioner/chef/librarian.rb +112 -112
- data/lib/kitchen/provisioner/chef_apply.rb +124 -124
- data/lib/kitchen/provisioner/chef_base.rb +341 -341
- data/lib/kitchen/provisioner/chef_solo.rb +88 -88
- data/lib/kitchen/provisioner/chef_zero.rb +245 -245
- data/lib/kitchen/provisioner/dummy.rb +79 -79
- data/lib/kitchen/provisioner/shell.rb +138 -138
- data/lib/kitchen/rake_tasks.rb +63 -63
- data/lib/kitchen/shell_out.rb +93 -93
- data/lib/kitchen/ssh.rb +276 -276
- data/lib/kitchen/state_file.rb +120 -120
- data/lib/kitchen/suite.rb +51 -51
- data/lib/kitchen/thor_tasks.rb +66 -66
- data/lib/kitchen/transport.rb +54 -54
- data/lib/kitchen/transport/base.rb +176 -176
- data/lib/kitchen/transport/dummy.rb +79 -79
- data/lib/kitchen/transport/ssh.rb +364 -364
- data/lib/kitchen/transport/winrm.rb +486 -486
- data/lib/kitchen/util.rb +147 -147
- data/lib/kitchen/verifier.rb +55 -55
- data/lib/kitchen/verifier/base.rb +235 -235
- data/lib/kitchen/verifier/busser.rb +277 -277
- data/lib/kitchen/verifier/dummy.rb +79 -79
- data/lib/kitchen/verifier/shell.rb +101 -101
- data/lib/kitchen/version.rb +21 -21
- data/lib/vendor/hash_recursive_merge.rb +82 -82
- data/spec/kitchen/base64_stream_spec.rb +77 -77
- data/spec/kitchen/cli_spec.rb +56 -56
- data/spec/kitchen/collection_spec.rb +80 -80
- data/spec/kitchen/color_spec.rb +54 -54
- data/spec/kitchen/config_spec.rb +408 -408
- data/spec/kitchen/configurable_spec.rb +1095 -1095
- data/spec/kitchen/data_munger_spec.rb +2694 -2694
- data/spec/kitchen/diagnostic_spec.rb +129 -129
- data/spec/kitchen/driver/base_spec.rb +121 -121
- data/spec/kitchen/driver/dummy_spec.rb +199 -199
- data/spec/kitchen/driver/proxy_spec.rb +138 -138
- data/spec/kitchen/driver/ssh_base_spec.rb +1115 -1115
- data/spec/kitchen/driver_spec.rb +112 -112
- data/spec/kitchen/errors_spec.rb +309 -309
- data/spec/kitchen/instance_spec.rb +1419 -1419
- data/spec/kitchen/lazy_hash_spec.rb +117 -117
- data/spec/kitchen/loader/yaml_spec.rb +774 -774
- data/spec/kitchen/logger_spec.rb +429 -429
- data/spec/kitchen/logging_spec.rb +59 -59
- data/spec/kitchen/login_command_spec.rb +68 -68
- data/spec/kitchen/metadata_chopper_spec.rb +82 -82
- data/spec/kitchen/platform_spec.rb +89 -89
- data/spec/kitchen/provisioner/base_spec.rb +386 -386
- data/spec/kitchen/provisioner/chef_apply_spec.rb +136 -136
- data/spec/kitchen/provisioner/chef_base_spec.rb +1161 -1161
- data/spec/kitchen/provisioner/chef_solo_spec.rb +557 -557
- data/spec/kitchen/provisioner/chef_zero_spec.rb +1001 -1001
- data/spec/kitchen/provisioner/dummy_spec.rb +99 -99
- data/spec/kitchen/provisioner/shell_spec.rb +566 -566
- data/spec/kitchen/provisioner_spec.rb +107 -107
- data/spec/kitchen/shell_out_spec.rb +150 -150
- data/spec/kitchen/ssh_spec.rb +693 -693
- data/spec/kitchen/state_file_spec.rb +129 -129
- data/spec/kitchen/suite_spec.rb +62 -62
- data/spec/kitchen/transport/base_spec.rb +89 -89
- data/spec/kitchen/transport/ssh_spec.rb +1255 -1255
- data/spec/kitchen/transport/winrm_spec.rb +1143 -1143
- data/spec/kitchen/transport_spec.rb +112 -112
- data/spec/kitchen/util_spec.rb +165 -165
- data/spec/kitchen/verifier/base_spec.rb +362 -362
- data/spec/kitchen/verifier/busser_spec.rb +610 -610
- data/spec/kitchen/verifier/dummy_spec.rb +99 -99
- data/spec/kitchen/verifier/shell_spec.rb +160 -160
- data/spec/kitchen/verifier_spec.rb +120 -120
- data/spec/kitchen_spec.rb +114 -114
- data/spec/spec_helper.rb +85 -85
- data/spec/support/powershell_max_size_spec.rb +40 -40
- data/support/busser_install_command.ps1 +14 -14
- data/support/busser_install_command.sh +14 -14
- data/support/chef-client-zero.rb +77 -77
- data/support/chef_base_init_command.ps1 +18 -18
- data/support/chef_base_init_command.sh +2 -2
- data/support/chef_base_install_command.ps1 +85 -85
- data/support/chef_base_install_command.sh +229 -229
- data/support/chef_zero_prepare_command_legacy.ps1 +9 -9
- data/support/chef_zero_prepare_command_legacy.sh +10 -10
- data/support/download_helpers.sh +109 -109
- data/support/dummy-validation.pem +27 -27
- data/templates/driver/CHANGELOG.md.erb +3 -3
- data/templates/driver/Gemfile.erb +3 -3
- data/templates/driver/README.md.erb +64 -64
- data/templates/driver/Rakefile.erb +21 -21
- data/templates/driver/driver.rb.erb +23 -23
- data/templates/driver/gemspec.erb +29 -29
- data/templates/driver/gitignore.erb +17 -17
- data/templates/driver/license_apachev2.erb +15 -15
- data/templates/driver/license_lgplv3.erb +16 -16
- data/templates/driver/license_mit.erb +22 -22
- data/templates/driver/license_reserved.erb +5 -5
- data/templates/driver/tailor.erb +4 -4
- data/templates/driver/travis.yml.erb +11 -11
- data/templates/driver/version.rb.erb +12 -12
- data/templates/init/chefignore.erb +1 -1
- data/templates/init/kitchen.yml.erb +18 -18
- data/test-kitchen.gemspec +62 -62
- data/test/integration/default/default_spec.rb +3 -3
- data/testing_windows.md +37 -37
- metadata +5 -4
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
Function Delete-AllDirs($dirs) {
|
|
2
|
-
$dirs | ForEach-Object {
|
|
3
|
-
if (Test-Path ($path = Unresolve-Path $_)) { Remove-Item $path -Recurse -Force }
|
|
4
|
-
}
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
Function Unresolve-Path($p) {
|
|
8
|
-
if ($p -eq $null) { return $null }
|
|
9
|
-
else { return $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($p) }
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
Function Make-RootPath($p) {
|
|
13
|
-
$p = Unresolve-Path $p
|
|
14
|
-
if (-Not (Test-Path $p)) { New-Item $p -ItemType directory | Out-Null }
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
Delete-AllDirs $dirs
|
|
18
|
-
Make-RootPath $root_path
|
|
1
|
+
Function Delete-AllDirs($dirs) {
|
|
2
|
+
$dirs | ForEach-Object {
|
|
3
|
+
if (Test-Path ($path = Unresolve-Path $_)) { Remove-Item $path -Recurse -Force }
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
Function Unresolve-Path($p) {
|
|
8
|
+
if ($p -eq $null) { return $null }
|
|
9
|
+
else { return $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($p) }
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
Function Make-RootPath($p) {
|
|
13
|
+
$p = Unresolve-Path $p
|
|
14
|
+
if (-Not (Test-Path $p)) { New-Item $p -ItemType directory | Out-Null }
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
Delete-AllDirs $dirs
|
|
18
|
+
Make-RootPath $root_path
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
$sudo_rm -rf $dirs
|
|
2
|
-
mkdir -p $root_path
|
|
1
|
+
$sudo_rm -rf $dirs
|
|
2
|
+
mkdir -p $root_path
|
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
$ErrorActionPreference = "stop"
|
|
2
|
-
|
|
3
|
-
Function Check-UpdateChef($root, $version) {
|
|
4
|
-
if (-Not (Test-Path $root)) { return $true }
|
|
5
|
-
elseif ("$version" -eq "true") { return $false }
|
|
6
|
-
elseif ("$version" -eq "latest") { return $true }
|
|
7
|
-
Try { $chef_version = (Get-Content $root\version-manifest.txt | select-object -first 1) }
|
|
8
|
-
Catch {
|
|
9
|
-
Try { $chef_version = (& $root\bin\chef-solo.bat -v) }
|
|
10
|
-
Catch { $chef_version = " " }
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
if ($chef_version.split(" ", 2)[1].StartsWith($version)) { return $false }
|
|
14
|
-
else { return $true }
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
Function Get-ChefMetadata($url) {
|
|
18
|
-
Try { $response = ($c = Make-WebClient).DownloadString($url) }
|
|
19
|
-
Finally { if ($c -ne $null) { $c.Dispose() } }
|
|
20
|
-
|
|
21
|
-
$md = ConvertFrom-StringData $response.Replace("`t", "=")
|
|
22
|
-
return @($md.url, $md.md5)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
Function Get-MD5Sum($src) {
|
|
26
|
-
Try {
|
|
27
|
-
$c = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
|
|
28
|
-
$bytes = $c.ComputeHash(($in = (Get-Item $src).OpenRead()))
|
|
29
|
-
return ([System.BitConverter]::ToString($bytes)).Replace("-", "").ToLower()
|
|
30
|
-
} Finally { if (($c -ne $null) -and ($c.GetType().GetMethod("Dispose") -ne $null)) { $c.Dispose() }; if ($in -ne $null) { $in.Dispose() } }
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
Function Download-Chef($md_url, $dst) {
|
|
34
|
-
$url, $md5 = Get-ChefMetadata $md_url
|
|
35
|
-
|
|
36
|
-
Try {
|
|
37
|
-
Log "Downloading package from $url"
|
|
38
|
-
($c = Make-WebClient).DownloadFile($url, $dst)
|
|
39
|
-
Log "Download complete."
|
|
40
|
-
} Finally { if ($c -ne $null) { $c.Dispose() } }
|
|
41
|
-
|
|
42
|
-
if (($dmd5 = Get-MD5Sum $dst) -eq $md5) { Log "Successfully verified $dst" }
|
|
43
|
-
else { throw "MD5 for $dst $dmd5 does not match $md5" }
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
Function Install-Chef($msi) {
|
|
47
|
-
Log "Installing Chef Omnibus package $msi"
|
|
48
|
-
$p = Start-Process -FilePath "msiexec.exe" -ArgumentList "/qn /i $msi" -Passthru -Wait
|
|
49
|
-
|
|
50
|
-
if ($p.ExitCode -ne 0) { throw "msiexec was not successful. Received exit code $($p.ExitCode)" }
|
|
51
|
-
|
|
52
|
-
Remove-Item $msi -Force
|
|
53
|
-
Log "Installation complete"
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
Function Log($m) { Write-Host " $m`n" }
|
|
57
|
-
|
|
58
|
-
Function Make-WebClient {
|
|
59
|
-
$proxy = New-Object -TypeName System.Net.WebProxy
|
|
60
|
-
$proxy.Address = $env:http_proxy
|
|
61
|
-
$client = New-Object -TypeName System.Net.WebClient
|
|
62
|
-
$client.Proxy = $proxy
|
|
63
|
-
return $client
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
Function Unresolve-Path($p) {
|
|
67
|
-
if ($p -eq $null) { return $null }
|
|
68
|
-
else { return $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($p) }
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
Try {
|
|
72
|
-
$chef_omnibus_root = Unresolve-Path $chef_omnibus_root
|
|
73
|
-
$msi = Unresolve-Path $msi
|
|
74
|
-
|
|
75
|
-
if (Check-UpdateChef $chef_omnibus_root $version) {
|
|
76
|
-
Write-Host "-----> Installing Chef Omnibus ($pretty_version)`n"
|
|
77
|
-
Download-Chef "$chef_metadata_url" $msi
|
|
78
|
-
Install-Chef $msi
|
|
79
|
-
} else {
|
|
80
|
-
Write-Host "-----> Chef Omnibus installation detected ($pretty_version)`n"
|
|
81
|
-
}
|
|
82
|
-
Catch {
|
|
83
|
-
Write-Error ($_ | ft -Property * | out-string) -ErrorAction Continue
|
|
84
|
-
exit 1
|
|
85
|
-
}
|
|
1
|
+
$ErrorActionPreference = "stop"
|
|
2
|
+
|
|
3
|
+
Function Check-UpdateChef($root, $version) {
|
|
4
|
+
if (-Not (Test-Path $root)) { return $true }
|
|
5
|
+
elseif ("$version" -eq "true") { return $false }
|
|
6
|
+
elseif ("$version" -eq "latest") { return $true }
|
|
7
|
+
Try { $chef_version = (Get-Content $root\version-manifest.txt | select-object -first 1) }
|
|
8
|
+
Catch {
|
|
9
|
+
Try { $chef_version = (& $root\bin\chef-solo.bat -v) }
|
|
10
|
+
Catch { $chef_version = " " }
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if ($chef_version.split(" ", 2)[1].StartsWith($version)) { return $false }
|
|
14
|
+
else { return $true }
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
Function Get-ChefMetadata($url) {
|
|
18
|
+
Try { $response = ($c = Make-WebClient).DownloadString($url) }
|
|
19
|
+
Finally { if ($c -ne $null) { $c.Dispose() } }
|
|
20
|
+
|
|
21
|
+
$md = ConvertFrom-StringData $response.Replace("`t", "=")
|
|
22
|
+
return @($md.url, $md.md5)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
Function Get-MD5Sum($src) {
|
|
26
|
+
Try {
|
|
27
|
+
$c = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
|
|
28
|
+
$bytes = $c.ComputeHash(($in = (Get-Item $src).OpenRead()))
|
|
29
|
+
return ([System.BitConverter]::ToString($bytes)).Replace("-", "").ToLower()
|
|
30
|
+
} Finally { if (($c -ne $null) -and ($c.GetType().GetMethod("Dispose") -ne $null)) { $c.Dispose() }; if ($in -ne $null) { $in.Dispose() } }
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
Function Download-Chef($md_url, $dst) {
|
|
34
|
+
$url, $md5 = Get-ChefMetadata $md_url
|
|
35
|
+
|
|
36
|
+
Try {
|
|
37
|
+
Log "Downloading package from $url"
|
|
38
|
+
($c = Make-WebClient).DownloadFile($url, $dst)
|
|
39
|
+
Log "Download complete."
|
|
40
|
+
} Finally { if ($c -ne $null) { $c.Dispose() } }
|
|
41
|
+
|
|
42
|
+
if (($dmd5 = Get-MD5Sum $dst) -eq $md5) { Log "Successfully verified $dst" }
|
|
43
|
+
else { throw "MD5 for $dst $dmd5 does not match $md5" }
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
Function Install-Chef($msi) {
|
|
47
|
+
Log "Installing Chef Omnibus package $msi"
|
|
48
|
+
$p = Start-Process -FilePath "msiexec.exe" -ArgumentList "/qn /i $msi" -Passthru -Wait
|
|
49
|
+
|
|
50
|
+
if ($p.ExitCode -ne 0) { throw "msiexec was not successful. Received exit code $($p.ExitCode)" }
|
|
51
|
+
|
|
52
|
+
Remove-Item $msi -Force
|
|
53
|
+
Log "Installation complete"
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
Function Log($m) { Write-Host " $m`n" }
|
|
57
|
+
|
|
58
|
+
Function Make-WebClient {
|
|
59
|
+
$proxy = New-Object -TypeName System.Net.WebProxy
|
|
60
|
+
$proxy.Address = $env:http_proxy
|
|
61
|
+
$client = New-Object -TypeName System.Net.WebClient
|
|
62
|
+
$client.Proxy = $proxy
|
|
63
|
+
return $client
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
Function Unresolve-Path($p) {
|
|
67
|
+
if ($p -eq $null) { return $null }
|
|
68
|
+
else { return $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($p) }
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
Try {
|
|
72
|
+
$chef_omnibus_root = Unresolve-Path $chef_omnibus_root
|
|
73
|
+
$msi = Unresolve-Path $msi
|
|
74
|
+
|
|
75
|
+
if (Check-UpdateChef $chef_omnibus_root $version) {
|
|
76
|
+
Write-Host "-----> Installing Chef Omnibus ($pretty_version)`n"
|
|
77
|
+
Download-Chef "$chef_metadata_url" $msi
|
|
78
|
+
Install-Chef $msi
|
|
79
|
+
} else {
|
|
80
|
+
Write-Host "-----> Chef Omnibus installation detected ($pretty_version)`n"
|
|
81
|
+
}
|
|
82
|
+
Catch {
|
|
83
|
+
Write-Error ($_ | ft -Property * | out-string) -ErrorAction Continue
|
|
84
|
+
exit 1
|
|
85
|
+
}
|
|
@@ -1,229 +1,229 @@
|
|
|
1
|
-
tmp_stderr="/tmp/stderr";
|
|
2
|
-
|
|
3
|
-
# capture_tmp_stderr SOURCE
|
|
4
|
-
capture_tmp_stderr() {
|
|
5
|
-
# spool up $tmp_stderr from all the commands we called
|
|
6
|
-
if test -f "$tmp_stderr"; then
|
|
7
|
-
output="`cat $tmp_stderr`";
|
|
8
|
-
stderr_results="${stderr_results}\nSTDERR from $1:\n\n${output}\n";
|
|
9
|
-
rm $tmp_stderr;
|
|
10
|
-
fi
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
# do_curl URL FILENAME
|
|
14
|
-
do_curl() {
|
|
15
|
-
echo "Trying curl...";
|
|
16
|
-
curl -sL -D "$tmp_stderr" "$1" > "$2";
|
|
17
|
-
ec=$?;
|
|
18
|
-
# check for 404
|
|
19
|
-
grep "404 Not Found" "$tmp_stderr" 2>&1 >/dev/null;
|
|
20
|
-
if test $? -eq 0; then
|
|
21
|
-
http_404_error "$1";
|
|
22
|
-
fi
|
|
23
|
-
|
|
24
|
-
# check for bad return status or empty output
|
|
25
|
-
if test $ec -ne 0 || test ! -s "$2"; then
|
|
26
|
-
capture_tmp_stderr "curl";
|
|
27
|
-
return 1;
|
|
28
|
-
else
|
|
29
|
-
echo "Download complete.";
|
|
30
|
-
return 0;
|
|
31
|
-
fi
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
# do_download URL FILENAME
|
|
35
|
-
do_download() {
|
|
36
|
-
echo "Downloading ${1} to file ${2}";
|
|
37
|
-
|
|
38
|
-
exists wget;
|
|
39
|
-
if test $? -eq 0; then
|
|
40
|
-
do_wget "$1" "$2" && return 0;
|
|
41
|
-
fi
|
|
42
|
-
|
|
43
|
-
exists curl;
|
|
44
|
-
if test $? -eq 0; then
|
|
45
|
-
do_curl "$1" "$2" && return 0;
|
|
46
|
-
fi
|
|
47
|
-
|
|
48
|
-
exists fetch;
|
|
49
|
-
if test $? -eq 0; then
|
|
50
|
-
do_fetch "$1" "$2" && return 0;
|
|
51
|
-
fi
|
|
52
|
-
|
|
53
|
-
exists python;
|
|
54
|
-
if test $? -eq 0; then
|
|
55
|
-
do_python "$1" "$2" && return 0;
|
|
56
|
-
fi
|
|
57
|
-
|
|
58
|
-
exists perl;
|
|
59
|
-
if test $? -eq 0; then
|
|
60
|
-
do_perl "$1" "$2" && return 0;
|
|
61
|
-
fi
|
|
62
|
-
|
|
63
|
-
unable_to_download "$1" "$2";
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
# do_fetch URL FILENAME
|
|
67
|
-
do_fetch() {
|
|
68
|
-
echo "Trying fetch...";
|
|
69
|
-
fetch -o "$2" "$1" 2>"$tmp_stderr";
|
|
70
|
-
ec=$?;
|
|
71
|
-
# check for 404
|
|
72
|
-
grep "Not Found" "$tmp_stderr" 2>&1 >/dev/null;
|
|
73
|
-
if test $? -eq 0; then
|
|
74
|
-
http_404_error "$1";
|
|
75
|
-
fi
|
|
76
|
-
|
|
77
|
-
# check for bad return status or empty output
|
|
78
|
-
if test $ec -ne 0 || test ! -s "$2"; then
|
|
79
|
-
capture_tmp_stderr "fetch";
|
|
80
|
-
return 1;
|
|
81
|
-
else
|
|
82
|
-
echo "Download complete.";
|
|
83
|
-
return 0;
|
|
84
|
-
fi
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
# do_perl URL FILENAME
|
|
88
|
-
do_perl() {
|
|
89
|
-
echo "Trying perl...";
|
|
90
|
-
perl -e "use LWP::Simple; getprint(\$ARGV[0]);" "$1" > "$2" 2>"$tmp_stderr";
|
|
91
|
-
ec=$?;
|
|
92
|
-
# check for 404
|
|
93
|
-
grep "404 Not Found" "$tmp_stderr" 2>&1 >/dev/null;
|
|
94
|
-
if test $? -eq 0; then
|
|
95
|
-
http_404_error "$1";
|
|
96
|
-
fi
|
|
97
|
-
|
|
98
|
-
# check for bad return status or empty output
|
|
99
|
-
if test $ec -ne 0 || test ! -s "$2"; then
|
|
100
|
-
capture_tmp_stderr "perl";
|
|
101
|
-
return 1;
|
|
102
|
-
else
|
|
103
|
-
echo "Download complete.";
|
|
104
|
-
return 0;
|
|
105
|
-
fi
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
# do_python URL FILENAME
|
|
109
|
-
do_python() {
|
|
110
|
-
echo "Trying python...";
|
|
111
|
-
python -c "import sys,urllib2 ; sys.stdout.write(urllib2.urlopen(sys.argv[1]).read())" "$1" > "$2" 2>"$tmp_stderr";
|
|
112
|
-
ec=$?;
|
|
113
|
-
# check for 404
|
|
114
|
-
grep "HTTP Error 404" "$tmp_stderr" 2>&1 >/dev/null;
|
|
115
|
-
if test $? -eq 0; then
|
|
116
|
-
http_404_error "$1";
|
|
117
|
-
fi
|
|
118
|
-
|
|
119
|
-
# check for bad return status or empty output
|
|
120
|
-
if test $ec -ne 0 || test ! -s "$2"; then
|
|
121
|
-
capture_tmp_stderr "python";
|
|
122
|
-
return 1;
|
|
123
|
-
else
|
|
124
|
-
echo "Download complete.";
|
|
125
|
-
return 0;
|
|
126
|
-
fi
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
# do_wget URL FILENAME
|
|
130
|
-
do_wget() {
|
|
131
|
-
echo "Trying wget...";
|
|
132
|
-
wget -O "$2" "$1" 2>"$tmp_stderr";
|
|
133
|
-
ec=$?;
|
|
134
|
-
# check for 404
|
|
135
|
-
grep "ERROR 404" "$tmp_stderr" 2>&1 >/dev/null;
|
|
136
|
-
if test $? -eq 0; then
|
|
137
|
-
http_404_error "$1";
|
|
138
|
-
fi
|
|
139
|
-
|
|
140
|
-
# check for bad return status or empty output
|
|
141
|
-
if test $ec -ne 0 || test ! -s "$2"; then
|
|
142
|
-
capture_tmp_stderr "wget";
|
|
143
|
-
return 1;
|
|
144
|
-
else
|
|
145
|
-
echo "Download complete.";
|
|
146
|
-
return 0;
|
|
147
|
-
fi
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
# exists COMMAND
|
|
151
|
-
exists() {
|
|
152
|
-
if command -v "$1" >/dev/null 2>&1; then
|
|
153
|
-
return 0;
|
|
154
|
-
else
|
|
155
|
-
return 1;
|
|
156
|
-
fi
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
# http_404_error URL
|
|
160
|
-
http_404_error() {
|
|
161
|
-
echo ">>>>>> Downloading ${1} resulted in an HTTP/404, aborting";
|
|
162
|
-
exit 40;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
# should_update_chef ROOT VERSION
|
|
166
|
-
should_update_chef() {
|
|
167
|
-
if test ! -d "$1"; then
|
|
168
|
-
return 0;
|
|
169
|
-
elif test "$2" = "true"; then
|
|
170
|
-
return 1;
|
|
171
|
-
elif test "$2" = "latest"; then
|
|
172
|
-
return 0;
|
|
173
|
-
fi
|
|
174
|
-
|
|
175
|
-
if test -f "${1}/version-manifest.txt"; then
|
|
176
|
-
chef_version="`head -n 1 ${1}/version-manifest.txt | cut -d \" \" -f 2`";
|
|
177
|
-
else
|
|
178
|
-
chef_version="`${1}/bin/chef-solo -v | cut -d \" \" -f 2`";
|
|
179
|
-
fi
|
|
180
|
-
|
|
181
|
-
echo "$chef_version" | grep "^${2}" 2>&1 >/dev/null;
|
|
182
|
-
if test $? -eq 0; then
|
|
183
|
-
return 1;
|
|
184
|
-
else
|
|
185
|
-
echo "${2}" | grep "^$chef_version" 2>&1 >/dev/null;
|
|
186
|
-
if test $? -eq 0; then
|
|
187
|
-
return 1;
|
|
188
|
-
else
|
|
189
|
-
return 0;
|
|
190
|
-
fi
|
|
191
|
-
fi
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
# unable_to_download URL FILE
|
|
195
|
-
unable_to_download() {
|
|
196
|
-
echo "Unable to download $1 to $2, aborting";
|
|
197
|
-
|
|
198
|
-
if test "x${stderr_results}" != "x"; then
|
|
199
|
-
echo "\nDEBUG OUTPUT FOLLOWS:\n${stderr_results}";
|
|
200
|
-
fi
|
|
201
|
-
|
|
202
|
-
exit 10;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
# main
|
|
206
|
-
main() {
|
|
207
|
-
should_update_chef "$chef_omnibus_root" "$version"
|
|
208
|
-
if test $? -eq 0; then
|
|
209
|
-
echo "-----> Installing Chef Omnibus (${pretty_version})";
|
|
210
|
-
|
|
211
|
-
# solaris 10 lacks recent enough credentials, so http url is used
|
|
212
|
-
platform="`/usr/bin/uname -s 2>/dev/null`";
|
|
213
|
-
platform_version="`/usr/bin/uname -r 2>/dev/null`";
|
|
214
|
-
if test "x${platform}" = "xSunOS" && test "x${platform_version}" = "x5.10"; then
|
|
215
|
-
chef_omnibus_url=`echo "$chef_omnibus_url" | sed -e "s/https/http/"`;
|
|
216
|
-
fi
|
|
217
|
-
|
|
218
|
-
do_download "$chef_omnibus_url" /tmp/install.sh;
|
|
219
|
-
$sudo_sh /tmp/install.sh $install_flags;
|
|
220
|
-
else
|
|
221
|
-
echo "-----> Chef Omnibus installation detected (${pretty_version})";
|
|
222
|
-
fi
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
# augment path in an attempt to find a download program
|
|
226
|
-
PATH="${PATH}:/opt/local/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/sfw/bin";
|
|
227
|
-
export PATH;
|
|
228
|
-
|
|
229
|
-
main
|
|
1
|
+
tmp_stderr="/tmp/stderr";
|
|
2
|
+
|
|
3
|
+
# capture_tmp_stderr SOURCE
|
|
4
|
+
capture_tmp_stderr() {
|
|
5
|
+
# spool up $tmp_stderr from all the commands we called
|
|
6
|
+
if test -f "$tmp_stderr"; then
|
|
7
|
+
output="`cat $tmp_stderr`";
|
|
8
|
+
stderr_results="${stderr_results}\nSTDERR from $1:\n\n${output}\n";
|
|
9
|
+
rm $tmp_stderr;
|
|
10
|
+
fi
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
# do_curl URL FILENAME
|
|
14
|
+
do_curl() {
|
|
15
|
+
echo "Trying curl...";
|
|
16
|
+
curl -sL -D "$tmp_stderr" "$1" > "$2";
|
|
17
|
+
ec=$?;
|
|
18
|
+
# check for 404
|
|
19
|
+
grep "404 Not Found" "$tmp_stderr" 2>&1 >/dev/null;
|
|
20
|
+
if test $? -eq 0; then
|
|
21
|
+
http_404_error "$1";
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
# check for bad return status or empty output
|
|
25
|
+
if test $ec -ne 0 || test ! -s "$2"; then
|
|
26
|
+
capture_tmp_stderr "curl";
|
|
27
|
+
return 1;
|
|
28
|
+
else
|
|
29
|
+
echo "Download complete.";
|
|
30
|
+
return 0;
|
|
31
|
+
fi
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
# do_download URL FILENAME
|
|
35
|
+
do_download() {
|
|
36
|
+
echo "Downloading ${1} to file ${2}";
|
|
37
|
+
|
|
38
|
+
exists wget;
|
|
39
|
+
if test $? -eq 0; then
|
|
40
|
+
do_wget "$1" "$2" && return 0;
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
exists curl;
|
|
44
|
+
if test $? -eq 0; then
|
|
45
|
+
do_curl "$1" "$2" && return 0;
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
exists fetch;
|
|
49
|
+
if test $? -eq 0; then
|
|
50
|
+
do_fetch "$1" "$2" && return 0;
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
exists python;
|
|
54
|
+
if test $? -eq 0; then
|
|
55
|
+
do_python "$1" "$2" && return 0;
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
exists perl;
|
|
59
|
+
if test $? -eq 0; then
|
|
60
|
+
do_perl "$1" "$2" && return 0;
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
unable_to_download "$1" "$2";
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
# do_fetch URL FILENAME
|
|
67
|
+
do_fetch() {
|
|
68
|
+
echo "Trying fetch...";
|
|
69
|
+
fetch -o "$2" "$1" 2>"$tmp_stderr";
|
|
70
|
+
ec=$?;
|
|
71
|
+
# check for 404
|
|
72
|
+
grep "Not Found" "$tmp_stderr" 2>&1 >/dev/null;
|
|
73
|
+
if test $? -eq 0; then
|
|
74
|
+
http_404_error "$1";
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
# check for bad return status or empty output
|
|
78
|
+
if test $ec -ne 0 || test ! -s "$2"; then
|
|
79
|
+
capture_tmp_stderr "fetch";
|
|
80
|
+
return 1;
|
|
81
|
+
else
|
|
82
|
+
echo "Download complete.";
|
|
83
|
+
return 0;
|
|
84
|
+
fi
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
# do_perl URL FILENAME
|
|
88
|
+
do_perl() {
|
|
89
|
+
echo "Trying perl...";
|
|
90
|
+
perl -e "use LWP::Simple; getprint(\$ARGV[0]);" "$1" > "$2" 2>"$tmp_stderr";
|
|
91
|
+
ec=$?;
|
|
92
|
+
# check for 404
|
|
93
|
+
grep "404 Not Found" "$tmp_stderr" 2>&1 >/dev/null;
|
|
94
|
+
if test $? -eq 0; then
|
|
95
|
+
http_404_error "$1";
|
|
96
|
+
fi
|
|
97
|
+
|
|
98
|
+
# check for bad return status or empty output
|
|
99
|
+
if test $ec -ne 0 || test ! -s "$2"; then
|
|
100
|
+
capture_tmp_stderr "perl";
|
|
101
|
+
return 1;
|
|
102
|
+
else
|
|
103
|
+
echo "Download complete.";
|
|
104
|
+
return 0;
|
|
105
|
+
fi
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
# do_python URL FILENAME
|
|
109
|
+
do_python() {
|
|
110
|
+
echo "Trying python...";
|
|
111
|
+
python -c "import sys,urllib2 ; sys.stdout.write(urllib2.urlopen(sys.argv[1]).read())" "$1" > "$2" 2>"$tmp_stderr";
|
|
112
|
+
ec=$?;
|
|
113
|
+
# check for 404
|
|
114
|
+
grep "HTTP Error 404" "$tmp_stderr" 2>&1 >/dev/null;
|
|
115
|
+
if test $? -eq 0; then
|
|
116
|
+
http_404_error "$1";
|
|
117
|
+
fi
|
|
118
|
+
|
|
119
|
+
# check for bad return status or empty output
|
|
120
|
+
if test $ec -ne 0 || test ! -s "$2"; then
|
|
121
|
+
capture_tmp_stderr "python";
|
|
122
|
+
return 1;
|
|
123
|
+
else
|
|
124
|
+
echo "Download complete.";
|
|
125
|
+
return 0;
|
|
126
|
+
fi
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
# do_wget URL FILENAME
|
|
130
|
+
do_wget() {
|
|
131
|
+
echo "Trying wget...";
|
|
132
|
+
wget -O "$2" "$1" 2>"$tmp_stderr";
|
|
133
|
+
ec=$?;
|
|
134
|
+
# check for 404
|
|
135
|
+
grep "ERROR 404" "$tmp_stderr" 2>&1 >/dev/null;
|
|
136
|
+
if test $? -eq 0; then
|
|
137
|
+
http_404_error "$1";
|
|
138
|
+
fi
|
|
139
|
+
|
|
140
|
+
# check for bad return status or empty output
|
|
141
|
+
if test $ec -ne 0 || test ! -s "$2"; then
|
|
142
|
+
capture_tmp_stderr "wget";
|
|
143
|
+
return 1;
|
|
144
|
+
else
|
|
145
|
+
echo "Download complete.";
|
|
146
|
+
return 0;
|
|
147
|
+
fi
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
# exists COMMAND
|
|
151
|
+
exists() {
|
|
152
|
+
if command -v "$1" >/dev/null 2>&1; then
|
|
153
|
+
return 0;
|
|
154
|
+
else
|
|
155
|
+
return 1;
|
|
156
|
+
fi
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
# http_404_error URL
|
|
160
|
+
http_404_error() {
|
|
161
|
+
echo ">>>>>> Downloading ${1} resulted in an HTTP/404, aborting";
|
|
162
|
+
exit 40;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
# should_update_chef ROOT VERSION
|
|
166
|
+
should_update_chef() {
|
|
167
|
+
if test ! -d "$1"; then
|
|
168
|
+
return 0;
|
|
169
|
+
elif test "$2" = "true"; then
|
|
170
|
+
return 1;
|
|
171
|
+
elif test "$2" = "latest"; then
|
|
172
|
+
return 0;
|
|
173
|
+
fi
|
|
174
|
+
|
|
175
|
+
if test -f "${1}/version-manifest.txt"; then
|
|
176
|
+
chef_version="`head -n 1 ${1}/version-manifest.txt | cut -d \" \" -f 2`";
|
|
177
|
+
else
|
|
178
|
+
chef_version="`${1}/bin/chef-solo -v | cut -d \" \" -f 2`";
|
|
179
|
+
fi
|
|
180
|
+
|
|
181
|
+
echo "$chef_version" | grep "^${2}" 2>&1 >/dev/null;
|
|
182
|
+
if test $? -eq 0; then
|
|
183
|
+
return 1;
|
|
184
|
+
else
|
|
185
|
+
echo "${2}" | grep "^$chef_version" 2>&1 >/dev/null;
|
|
186
|
+
if test $? -eq 0; then
|
|
187
|
+
return 1;
|
|
188
|
+
else
|
|
189
|
+
return 0;
|
|
190
|
+
fi
|
|
191
|
+
fi
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
# unable_to_download URL FILE
|
|
195
|
+
unable_to_download() {
|
|
196
|
+
echo "Unable to download $1 to $2, aborting";
|
|
197
|
+
|
|
198
|
+
if test "x${stderr_results}" != "x"; then
|
|
199
|
+
echo "\nDEBUG OUTPUT FOLLOWS:\n${stderr_results}";
|
|
200
|
+
fi
|
|
201
|
+
|
|
202
|
+
exit 10;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
# main
|
|
206
|
+
main() {
|
|
207
|
+
should_update_chef "$chef_omnibus_root" "$version"
|
|
208
|
+
if test $? -eq 0; then
|
|
209
|
+
echo "-----> Installing Chef Omnibus (${pretty_version})";
|
|
210
|
+
|
|
211
|
+
# solaris 10 lacks recent enough credentials, so http url is used
|
|
212
|
+
platform="`/usr/bin/uname -s 2>/dev/null`";
|
|
213
|
+
platform_version="`/usr/bin/uname -r 2>/dev/null`";
|
|
214
|
+
if test "x${platform}" = "xSunOS" && test "x${platform_version}" = "x5.10"; then
|
|
215
|
+
chef_omnibus_url=`echo "$chef_omnibus_url" | sed -e "s/https/http/"`;
|
|
216
|
+
fi
|
|
217
|
+
|
|
218
|
+
do_download "$chef_omnibus_url" /tmp/install.sh;
|
|
219
|
+
$sudo_sh /tmp/install.sh $install_flags;
|
|
220
|
+
else
|
|
221
|
+
echo "-----> Chef Omnibus installation detected (${pretty_version})";
|
|
222
|
+
fi
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
# augment path in an attempt to find a download program
|
|
226
|
+
PATH="${PATH}:/opt/local/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/sfw/bin";
|
|
227
|
+
export PATH;
|
|
228
|
+
|
|
229
|
+
main
|