test-kitchen 1.6.0 → 1.7.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.
Files changed (180) hide show
  1. checksums.yaml +4 -4
  2. data/.cane +8 -7
  3. data/.github/ISSUE_TEMPLATE.md +56 -0
  4. data/.gitignore +28 -27
  5. data/.kitchen.ci.yml +23 -0
  6. data/.kitchen.proxy.yml +27 -0
  7. data/.rubocop.yml +3 -3
  8. data/.travis.yml +70 -53
  9. data/.yardopts +3 -3
  10. data/Berksfile +3 -0
  11. data/CHANGELOG.md +1083 -1051
  12. data/CONTRIBUTING.md +14 -14
  13. data/Gemfile +19 -14
  14. data/Gemfile.proxy_tests +4 -5
  15. data/Guardfile +42 -42
  16. data/LICENSE +15 -15
  17. data/MAINTAINERS.md +23 -24
  18. data/README.md +135 -135
  19. data/Rakefile +61 -76
  20. data/appveyor.yml +44 -34
  21. data/features/kitchen_action_commands.feature +164 -164
  22. data/features/kitchen_command.feature +16 -16
  23. data/features/kitchen_console_command.feature +34 -34
  24. data/features/kitchen_defaults.feature +38 -38
  25. data/features/kitchen_diagnose_command.feature +96 -96
  26. data/features/kitchen_driver_create_command.feature +64 -64
  27. data/features/kitchen_driver_discover_command.feature +25 -25
  28. data/features/kitchen_help_command.feature +16 -16
  29. data/features/kitchen_init_command.feature +274 -274
  30. data/features/kitchen_list_command.feature +104 -104
  31. data/features/kitchen_login_command.feature +62 -62
  32. data/features/kitchen_sink_command.feature +30 -30
  33. data/features/kitchen_test_command.feature +88 -88
  34. data/features/step_definitions/gem_steps.rb +36 -36
  35. data/features/step_definitions/git_steps.rb +5 -5
  36. data/features/step_definitions/output_steps.rb +5 -5
  37. data/features/support/env.rb +75 -75
  38. data/lib/kitchen.rb +150 -150
  39. data/lib/kitchen/base64_stream.rb +55 -55
  40. data/lib/kitchen/cli.rb +419 -419
  41. data/lib/kitchen/collection.rb +55 -55
  42. data/lib/kitchen/color.rb +65 -65
  43. data/lib/kitchen/command.rb +185 -185
  44. data/lib/kitchen/command/action.rb +45 -45
  45. data/lib/kitchen/command/console.rb +58 -58
  46. data/lib/kitchen/command/diagnose.rb +92 -92
  47. data/lib/kitchen/command/driver_discover.rb +105 -105
  48. data/lib/kitchen/command/exec.rb +41 -41
  49. data/lib/kitchen/command/list.rb +119 -119
  50. data/lib/kitchen/command/login.rb +43 -43
  51. data/lib/kitchen/command/sink.rb +54 -54
  52. data/lib/kitchen/command/test.rb +51 -51
  53. data/lib/kitchen/config.rb +322 -322
  54. data/lib/kitchen/configurable.rb +529 -529
  55. data/lib/kitchen/data_munger.rb +959 -960
  56. data/lib/kitchen/diagnostic.rb +141 -141
  57. data/lib/kitchen/driver.rb +56 -56
  58. data/lib/kitchen/driver/base.rb +134 -134
  59. data/lib/kitchen/driver/dummy.rb +108 -108
  60. data/lib/kitchen/driver/proxy.rb +72 -72
  61. data/lib/kitchen/driver/ssh_base.rb +357 -357
  62. data/lib/kitchen/errors.rb +229 -229
  63. data/lib/kitchen/generator/driver_create.rb +177 -177
  64. data/lib/kitchen/generator/init.rb +296 -296
  65. data/lib/kitchen/instance.rb +662 -662
  66. data/lib/kitchen/lazy_hash.rb +142 -142
  67. data/lib/kitchen/loader/yaml.rb +349 -349
  68. data/lib/kitchen/logger.rb +423 -423
  69. data/lib/kitchen/logging.rb +56 -56
  70. data/lib/kitchen/login_command.rb +52 -52
  71. data/lib/kitchen/metadata_chopper.rb +52 -52
  72. data/lib/kitchen/platform.rb +67 -67
  73. data/lib/kitchen/provisioner.rb +54 -54
  74. data/lib/kitchen/provisioner/base.rb +236 -236
  75. data/lib/kitchen/provisioner/chef/berkshelf.rb +114 -114
  76. data/lib/kitchen/provisioner/chef/common_sandbox.rb +322 -322
  77. data/lib/kitchen/provisioner/chef/librarian.rb +112 -112
  78. data/lib/kitchen/provisioner/chef_apply.rb +124 -125
  79. data/lib/kitchen/provisioner/chef_base.rb +341 -294
  80. data/lib/kitchen/provisioner/chef_solo.rb +88 -89
  81. data/lib/kitchen/provisioner/chef_zero.rb +245 -245
  82. data/lib/kitchen/provisioner/dummy.rb +79 -79
  83. data/lib/kitchen/provisioner/shell.rb +138 -138
  84. data/lib/kitchen/rake_tasks.rb +63 -63
  85. data/lib/kitchen/shell_out.rb +93 -93
  86. data/lib/kitchen/ssh.rb +276 -276
  87. data/lib/kitchen/state_file.rb +120 -120
  88. data/lib/kitchen/suite.rb +51 -51
  89. data/lib/kitchen/thor_tasks.rb +66 -66
  90. data/lib/kitchen/transport.rb +54 -54
  91. data/lib/kitchen/transport/base.rb +176 -176
  92. data/lib/kitchen/transport/dummy.rb +79 -79
  93. data/lib/kitchen/transport/ssh.rb +364 -364
  94. data/lib/kitchen/transport/winrm.rb +486 -486
  95. data/lib/kitchen/util.rb +147 -147
  96. data/lib/kitchen/verifier.rb +55 -55
  97. data/lib/kitchen/verifier/base.rb +235 -235
  98. data/lib/kitchen/verifier/busser.rb +277 -277
  99. data/lib/kitchen/verifier/dummy.rb +79 -79
  100. data/lib/kitchen/verifier/shell.rb +101 -101
  101. data/lib/kitchen/version.rb +21 -21
  102. data/lib/vendor/hash_recursive_merge.rb +82 -82
  103. data/spec/kitchen/base64_stream_spec.rb +77 -77
  104. data/spec/kitchen/cli_spec.rb +56 -56
  105. data/spec/kitchen/collection_spec.rb +80 -80
  106. data/spec/kitchen/color_spec.rb +54 -54
  107. data/spec/kitchen/config_spec.rb +408 -408
  108. data/spec/kitchen/configurable_spec.rb +1095 -1062
  109. data/spec/kitchen/data_munger_spec.rb +2694 -2383
  110. data/spec/kitchen/diagnostic_spec.rb +129 -129
  111. data/spec/kitchen/driver/base_spec.rb +121 -121
  112. data/spec/kitchen/driver/dummy_spec.rb +199 -199
  113. data/spec/kitchen/driver/proxy_spec.rb +138 -138
  114. data/spec/kitchen/driver/ssh_base_spec.rb +1115 -1115
  115. data/spec/kitchen/driver_spec.rb +112 -112
  116. data/spec/kitchen/errors_spec.rb +309 -309
  117. data/spec/kitchen/instance_spec.rb +1419 -1419
  118. data/spec/kitchen/lazy_hash_spec.rb +117 -117
  119. data/spec/kitchen/loader/yaml_spec.rb +774 -774
  120. data/spec/kitchen/logger_spec.rb +429 -429
  121. data/spec/kitchen/logging_spec.rb +59 -59
  122. data/spec/kitchen/login_command_spec.rb +68 -68
  123. data/spec/kitchen/metadata_chopper_spec.rb +82 -82
  124. data/spec/kitchen/platform_spec.rb +89 -89
  125. data/spec/kitchen/provisioner/base_spec.rb +386 -386
  126. data/spec/kitchen/provisioner/chef_apply_spec.rb +136 -136
  127. data/spec/kitchen/provisioner/chef_base_spec.rb +1161 -1067
  128. data/spec/kitchen/provisioner/chef_solo_spec.rb +557 -557
  129. data/spec/kitchen/provisioner/chef_zero_spec.rb +1001 -1001
  130. data/spec/kitchen/provisioner/dummy_spec.rb +99 -99
  131. data/spec/kitchen/provisioner/shell_spec.rb +566 -566
  132. data/spec/kitchen/provisioner_spec.rb +107 -107
  133. data/spec/kitchen/shell_out_spec.rb +150 -150
  134. data/spec/kitchen/ssh_spec.rb +693 -693
  135. data/spec/kitchen/state_file_spec.rb +129 -129
  136. data/spec/kitchen/suite_spec.rb +62 -62
  137. data/spec/kitchen/transport/base_spec.rb +89 -89
  138. data/spec/kitchen/transport/ssh_spec.rb +1255 -1255
  139. data/spec/kitchen/transport/winrm_spec.rb +1143 -1143
  140. data/spec/kitchen/transport_spec.rb +112 -112
  141. data/spec/kitchen/util_spec.rb +165 -165
  142. data/spec/kitchen/verifier/base_spec.rb +362 -362
  143. data/spec/kitchen/verifier/busser_spec.rb +610 -610
  144. data/spec/kitchen/verifier/dummy_spec.rb +99 -99
  145. data/spec/kitchen/verifier/shell_spec.rb +160 -158
  146. data/spec/kitchen/verifier_spec.rb +120 -120
  147. data/spec/kitchen_spec.rb +114 -114
  148. data/spec/spec_helper.rb +85 -85
  149. data/spec/support/powershell_max_size_spec.rb +40 -40
  150. data/support/busser_install_command.ps1 +14 -14
  151. data/support/busser_install_command.sh +14 -14
  152. data/support/chef-client-zero.rb +77 -77
  153. data/support/chef_base_init_command.ps1 +18 -18
  154. data/support/chef_base_init_command.sh +2 -2
  155. data/support/chef_base_install_command.ps1 +85 -85
  156. data/support/chef_base_install_command.sh +229 -229
  157. data/support/chef_zero_prepare_command_legacy.ps1 +9 -9
  158. data/support/chef_zero_prepare_command_legacy.sh +10 -10
  159. data/support/download_helpers.sh +109 -109
  160. data/support/dummy-validation.pem +27 -27
  161. data/templates/driver/CHANGELOG.md.erb +3 -3
  162. data/templates/driver/Gemfile.erb +3 -3
  163. data/templates/driver/README.md.erb +64 -64
  164. data/templates/driver/Rakefile.erb +21 -21
  165. data/templates/driver/driver.rb.erb +23 -23
  166. data/templates/driver/gemspec.erb +29 -29
  167. data/templates/driver/gitignore.erb +17 -17
  168. data/templates/driver/license_apachev2.erb +15 -15
  169. data/templates/driver/license_lgplv3.erb +16 -16
  170. data/templates/driver/license_mit.erb +22 -22
  171. data/templates/driver/license_reserved.erb +5 -5
  172. data/templates/driver/tailor.erb +4 -4
  173. data/templates/driver/travis.yml.erb +11 -11
  174. data/templates/driver/version.rb.erb +12 -12
  175. data/templates/init/chefignore.erb +1 -1
  176. data/templates/init/kitchen.yml.erb +18 -18
  177. data/test-kitchen.gemspec +62 -62
  178. data/test/integration/default/default_spec.rb +3 -0
  179. data/testing_windows.md +37 -37
  180. metadata +23 -11
@@ -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