test-kitchen 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
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