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