chef 12.17.44-universal-mingw32 → 12.18.31-universal-mingw32

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 (178) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -1
  3. data/README.md +3 -2
  4. data/Rakefile +9 -0
  5. data/VERSION +1 -1
  6. data/acceptance/Gemfile.lock +17 -17
  7. data/distro/common/html/knife_environment.html +4 -8
  8. data/distro/common/man/man1/knife-environment.1 +4 -16
  9. data/distro/powershell/chef/chef.psm1 +139 -24
  10. data/lib/chef/application.rb +5 -4
  11. data/lib/chef/application/windows_service_manager.rb +6 -4
  12. data/lib/chef/chef_fs/chef_fs_data_store.rb +1 -1
  13. data/lib/chef/chef_fs/command_line.rb +1 -1
  14. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +8 -1
  15. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +1 -1
  16. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +1 -1
  17. data/lib/chef/cookbook/chefignore.rb +1 -1
  18. data/lib/chef/cookbook/cookbook_version_loader.rb +4 -4
  19. data/lib/chef/cookbook/metadata.rb +2 -2
  20. data/lib/chef/cookbook_loader.rb +1 -1
  21. data/lib/chef/data_collector.rb +24 -13
  22. data/lib/chef/data_collector/messages.rb +8 -6
  23. data/lib/chef/data_collector/messages/helpers.rb +1 -1
  24. data/lib/chef/deprecated.rb +30 -0
  25. data/lib/chef/dsl/platform_introspection.rb +2 -2
  26. data/lib/chef/encrypted_data_bag_item.rb +1 -1
  27. data/lib/chef/encrypted_data_bag_item/decryptor.rb +2 -2
  28. data/lib/chef/environment.rb +1 -1
  29. data/lib/chef/exceptions.rb +5 -5
  30. data/lib/chef/file_access_control/unix.rb +5 -5
  31. data/lib/chef/formatters/error_description.rb +1 -1
  32. data/lib/chef/http/basic_client.rb +1 -1
  33. data/lib/chef/http/json_input.rb +2 -2
  34. data/lib/chef/knife.rb +1 -1
  35. data/lib/chef/knife/cookbook_site_install.rb +1 -1
  36. data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
  37. data/lib/chef/knife/core/ui.rb +1 -1
  38. data/lib/chef/mixin/command.rb +1 -0
  39. data/lib/chef/mixin/deep_merge.rb +1 -1
  40. data/lib/chef/mixin/shell_out.rb +58 -3
  41. data/lib/chef/mixin/which.rb +5 -9
  42. data/lib/chef/mixin/wide_string.rb +1 -1
  43. data/lib/chef/node.rb +1 -1
  44. data/lib/chef/node/attribute.rb +4 -5
  45. data/lib/chef/node_map.rb +18 -2
  46. data/lib/chef/platform/provider_handler_map.rb +2 -2
  47. data/lib/chef/platform/provider_mapping.rb +5 -0
  48. data/lib/chef/platform/resource_handler_map.rb +2 -2
  49. data/lib/chef/provider/env/windows.rb +1 -1
  50. data/lib/chef/provider/git.rb +1 -1
  51. data/lib/chef/provider/group.rb +41 -46
  52. data/lib/chef/provider/group/aix.rb +12 -19
  53. data/lib/chef/provider/group/dscl.rb +46 -43
  54. data/lib/chef/provider/group/gpasswd.rb +7 -7
  55. data/lib/chef/provider/group/groupadd.rb +29 -34
  56. data/lib/chef/provider/group/groupmod.rb +26 -31
  57. data/lib/chef/provider/group/pw.rb +28 -31
  58. data/lib/chef/provider/group/suse.rb +9 -9
  59. data/lib/chef/provider/group/usermod.rb +10 -11
  60. data/lib/chef/provider/group/windows.rb +18 -20
  61. data/lib/chef/provider/ifconfig.rb +52 -63
  62. data/lib/chef/provider/ifconfig/aix.rb +23 -28
  63. data/lib/chef/provider/ifconfig/debian.rb +23 -22
  64. data/lib/chef/provider/ifconfig/redhat.rb +12 -12
  65. data/lib/chef/provider/mount/mount.rb +1 -1
  66. data/lib/chef/provider/osx_profile.rb +4 -2
  67. data/lib/chef/provider/package.rb +16 -7
  68. data/lib/chef/provider/package/chocolatey.rb +3 -1
  69. data/lib/chef/provider/package/dnf.rb +183 -0
  70. data/lib/chef/provider/package/dnf/dnf_helper.py +91 -0
  71. data/lib/chef/provider/package/dnf/python_helper.rb +120 -0
  72. data/lib/chef/provider/package/dnf/version.rb +56 -0
  73. data/lib/chef/provider/package/easy_install.rb +1 -1
  74. data/lib/chef/provider/package/freebsd/base.rb +1 -1
  75. data/lib/chef/provider/package/freebsd/pkgng.rb +1 -1
  76. data/lib/chef/provider/package/powershell.rb +3 -3
  77. data/lib/chef/provider/package/windows.rb +1 -1
  78. data/lib/chef/provider/package/zypper.rb +1 -1
  79. data/lib/chef/provider/route.rb +186 -184
  80. data/lib/chef/provider/service/arch.rb +2 -2
  81. data/lib/chef/provider/service/freebsd.rb +1 -1
  82. data/lib/chef/provider/service/gentoo.rb +2 -2
  83. data/lib/chef/provider/service/insserv.rb +2 -2
  84. data/lib/chef/provider/service/macosx.rb +2 -2
  85. data/lib/chef/provider/service/openbsd.rb +1 -1
  86. data/lib/chef/provider/service/redhat.rb +2 -2
  87. data/lib/chef/provider/support/yum_repo.erb +10 -3
  88. data/lib/chef/provider/user.rb +17 -20
  89. data/lib/chef/provider/user/aix.rb +23 -24
  90. data/lib/chef/provider/user/dscl.rb +56 -53
  91. data/lib/chef/provider/user/linux.rb +13 -16
  92. data/lib/chef/provider/user/pw.rb +26 -30
  93. data/lib/chef/provider/user/solaris.rb +11 -12
  94. data/lib/chef/provider/user/useradd.rb +20 -22
  95. data/lib/chef/provider/user/windows.rb +19 -22
  96. data/lib/chef/provider_resolver.rb +4 -2
  97. data/lib/chef/providers.rb +1 -0
  98. data/lib/chef/resource.rb +7 -0
  99. data/lib/chef/resource/chocolatey_package.rb +1 -0
  100. data/lib/chef/resource/dnf_package.rb +64 -0
  101. data/lib/chef/resource/file/verification.rb +6 -4
  102. data/lib/chef/resource/yum_package.rb +18 -14
  103. data/lib/chef/resource/yum_repository.rb +1 -1
  104. data/lib/chef/resource_reporter.rb +11 -0
  105. data/lib/chef/resources.rb +1 -0
  106. data/lib/chef/scan_access_control.rb +4 -4
  107. data/lib/chef/util/dsc/resource_store.rb +1 -1
  108. data/lib/chef/version.rb +1 -1
  109. data/lib/chef/win32/memory.rb +1 -1
  110. data/lib/chef/win32/security.rb +2 -2
  111. data/lib/chef/win32/security/sid.rb +2 -2
  112. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.i686.rpm +0 -0
  113. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.src.rpm +0 -0
  114. data/spec/functional/assets/yumrepo/chef_rpm-1.10-1.fc24.x86_64.rpm +0 -0
  115. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.i686.rpm +0 -0
  116. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.src.rpm +0 -0
  117. data/spec/functional/assets/yumrepo/chef_rpm-1.2-1.fc24.x86_64.rpm +0 -0
  118. data/spec/functional/assets/yumrepo/repodata/313329137b55fd333b2dc66394a6661a2befa6cc535d8460d92a4a78a9c581f0-primary.sqlite.bz2 +0 -0
  119. data/spec/functional/assets/yumrepo/repodata/31ac4db5d5ac593728fcc26aef82b7b93c4cc4dbec843786b1845b939b658553-other.xml.gz +0 -0
  120. data/spec/functional/assets/yumrepo/repodata/4ac40fa3c6728c1401318e2e20a997436624e83dcf7a5f952b851ef422637773-filelists.sqlite.bz2 +0 -0
  121. data/spec/functional/assets/yumrepo/repodata/66391e53f0510b98b3f0b79f40ba1048026d9a1ef20905d9c40ba6f5411f3243-primary.xml.gz +0 -0
  122. data/spec/functional/assets/yumrepo/repodata/8b34697595fcc87928e12d24644dda9462c3857bd932861e28bc77ae1f31be16-filelists.xml.gz +0 -0
  123. data/spec/functional/assets/yumrepo/repodata/b97cca3fe14bcf06c52be4449b6108f7731239ff221111dcce8aada5467f60dc-other.sqlite.bz2 +0 -0
  124. data/spec/functional/assets/yumrepo/repodata/repomd.xml +55 -0
  125. data/spec/functional/resource/dnf_package_spec.rb +686 -0
  126. data/spec/functional/resource/dsc_script_spec.rb +1 -0
  127. data/spec/functional/resource/user/useradd_spec.rb +10 -1
  128. data/spec/integration/knife/chef_repo_path_spec.rb +2 -2
  129. data/spec/integration/recipes/recipe_dsl_spec.rb +3 -0
  130. data/spec/integration/recipes/resource_load_spec.rb +3 -3
  131. data/spec/spec_helper.rb +5 -3
  132. data/spec/support/lib/chef/provider/snakeoil.rb +1 -0
  133. data/spec/support/lib/chef/resource/cat.rb +1 -0
  134. data/spec/support/lib/chef/resource/one_two_three_four.rb +1 -0
  135. data/spec/support/lib/chef/resource/openldap_includer.rb +2 -0
  136. data/spec/support/lib/chef/resource/with_state.rb +2 -0
  137. data/spec/support/lib/chef/resource/zen_master.rb +1 -0
  138. data/spec/unit/cookbook/metadata_spec.rb +3 -3
  139. data/spec/unit/data_collector/messages/helpers_spec.rb +7 -0
  140. data/spec/unit/data_collector_spec.rb +56 -0
  141. data/spec/unit/decorator/lazy_spec.rb +1 -1
  142. data/spec/unit/environment_spec.rb +1 -1
  143. data/spec/unit/lwrp_spec.rb +3 -4
  144. data/spec/unit/node_spec.rb +23 -2
  145. data/spec/unit/platform_spec.rb +1 -0
  146. data/spec/unit/provider/group/dscl_spec.rb +29 -29
  147. data/spec/unit/provider/group/gpasswd_spec.rb +10 -10
  148. data/spec/unit/provider/group/groupadd_spec.rb +31 -30
  149. data/spec/unit/provider/group/groupmod_spec.rb +16 -16
  150. data/spec/unit/provider/group/pw_spec.rb +11 -11
  151. data/spec/unit/provider/group/suse_spec.rb +5 -5
  152. data/spec/unit/provider/group/usermod_spec.rb +15 -15
  153. data/spec/unit/provider/ifconfig/aix_spec.rb +14 -14
  154. data/spec/unit/provider/ifconfig/debian_spec.rb +10 -22
  155. data/spec/unit/provider/ifconfig/redhat_spec.rb +4 -4
  156. data/spec/unit/provider/ifconfig_spec.rb +18 -19
  157. data/spec/unit/provider/package/chocolatey_spec.rb +21 -21
  158. data/spec/unit/provider/package/msu_spec.rb +1 -1
  159. data/spec/unit/provider/route_spec.rb +21 -21
  160. data/spec/unit/provider/user/dscl_spec.rb +54 -57
  161. data/spec/unit/provider/user/linux_spec.rb +5 -5
  162. data/spec/unit/provider/user/pw_spec.rb +26 -22
  163. data/spec/unit/provider/user/windows_spec.rb +4 -4
  164. data/spec/unit/provider/user_spec.rb +19 -21
  165. data/spec/unit/provider_resolver_spec.rb +1 -0
  166. data/spec/unit/resource/chocolatey_package_spec.rb +12 -0
  167. data/spec/unit/resource/dnf_package_spec.rb +99 -0
  168. data/spec/unit/resource/remote_file_spec.rb +2 -2
  169. data/spec/unit/resource/yum_package_spec.rb +20 -0
  170. data/spec/unit/resource_reporter_spec.rb +24 -0
  171. data/spec/unit/resource_spec.rb +2 -0
  172. data/spec/unit/runner_spec.rb +1 -0
  173. data/tasks/bin/bundle-platform +1 -1
  174. data/tasks/gemfile_util.rb +2 -2
  175. data/tasks/templates/prerelease.md.erb +1 -10
  176. data/tasks/templates/release.md.erb +1 -9
  177. metadata +24 -5
  178. data/lib/chef/platform/handler_map.rb +0 -40
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 62200be93ca6b5ae38241cf1f521245c3e8de987
4
- data.tar.gz: 8ce7662f10f8ee5003de838760abeab111fdf089
3
+ metadata.gz: 992b87745c1060469c6a54686c029ca4ead5c183
4
+ data.tar.gz: 21a1bacb10c0d80ac8361bf2aa414a857d317e4b
5
5
  SHA512:
6
- metadata.gz: c55c490b062b0376d33f4a0ddbaa9cea9ffed118973d376e99e6b9a12d4239a7836ae253a986bfea612a5f909b2b3d8ff155c21c1d9cb55f7e9e409555293918
7
- data.tar.gz: 17948692e8795adc3ff159feb30f6a00ea95b0a7edb82281228a513903196b6de95703b1e24dbb1f3bb63656624453b62275b86120b19225be05bd5176c9e339
6
+ metadata.gz: 7d76a7a1608dae36122f5e23637a0df00de903765b2b660ad0f59aa57fb4b5b4a3dcb974f33253fb11748bbedfc08d2aa7e33a9c8dde5d3f514c08d0bcbe8066
7
+ data.tar.gz: 78401b4813e3104a9e098ca5c48717b311c19cd96bf15c3925d4e4b33c06df1572953a459e4ac5cf27d3be7ca91da544cde312c7f8949375831eb3c0e2234a3c
data/Gemfile CHANGED
@@ -32,7 +32,6 @@ end
32
32
  # These are used for external tests
33
33
  group(:integration) do
34
34
  gem "chef-provisioning"
35
- gem "chef-provisioning-aws"
36
35
  gem "chef-sugar"
37
36
  gem "chefspec"
38
37
  gem "halite"
data/README.md CHANGED
@@ -20,13 +20,14 @@ If you just want to use Chef, check out these resources:
20
20
 
21
21
  * [learnchef](https://learn.chef.io): Getting started guide
22
22
  * [docs.chef.io](https://docs.chef.io): Comprehensive User Docs
23
- * [Installer Downloads](https://downloads.chef.io/chef-client/): Install Chef as a complete package
23
+ * [Installer Downloads](https://downloads.chef.io/chef/): Install Chef as a complete package
24
+ * [chef/chef](https://hub.docker.com/r/chef/chef): Docker image for use with [kitchen-dokken](https://github.com/someara/kitchen-dokken)
24
25
 
25
26
  ## Installing From Git
26
27
 
27
28
  **NOTE:** Unless you have a specific reason to install from source (to
28
29
  try a new feature, contribute a patch, or run chef on an OS for which no
29
- package is available), you should head to the [downloads page](https://downloads.chef.io/chef-client/)
30
+ package is available), you should head to the [downloads page](https://downloads.chef.io/chef/)
30
31
  to get a prebuilt package.
31
32
 
32
33
  ### Prerequisites
data/Rakefile CHANGED
@@ -68,6 +68,15 @@ task :register_eventlog do
68
68
  end
69
69
  end
70
70
 
71
+ desc "Keep the Dockerfile up-to-date"
72
+ task :update_dockerfile do
73
+ require "mixlib/install"
74
+ latest_stable_version = Mixlib::Install.available_versions("chef", "stable").last
75
+ text = File.read("Dockerfile")
76
+ new_text = text.gsub(/^ARG VERSION=[\d\.]+$/, "ARG VERSION=#{latest_stable_version}")
77
+ File.open("Dockerfile", "w+") { |f| f.write(new_text) }
78
+ end
79
+
71
80
  begin
72
81
  require "chefstyle"
73
82
  require "rubocop/rake_task"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 12.17.44
1
+ 12.18.31
@@ -12,13 +12,13 @@ GEM
12
12
  addressable (2.5.0)
13
13
  public_suffix (~> 2.0, >= 2.0.2)
14
14
  artifactory (2.5.1)
15
- aws-sdk (2.6.32)
16
- aws-sdk-resources (= 2.6.32)
17
- aws-sdk-core (2.6.32)
15
+ aws-sdk (2.6.44)
16
+ aws-sdk-resources (= 2.6.44)
17
+ aws-sdk-core (2.6.44)
18
18
  aws-sigv4 (~> 1.0)
19
19
  jmespath (~> 1.0)
20
- aws-sdk-resources (2.6.32)
21
- aws-sdk-core (= 2.6.32)
20
+ aws-sdk-resources (2.6.44)
21
+ aws-sdk-core (= 2.6.44)
22
22
  aws-sigv4 (1.0.0)
23
23
  berkshelf (4.3.5)
24
24
  addressable (~> 2.3, >= 2.3.4)
@@ -56,7 +56,7 @@ GEM
56
56
  celluloid-io (0.16.2)
57
57
  celluloid (>= 0.16.0)
58
58
  nio4r (>= 1.1.0)
59
- chef-config (12.16.42)
59
+ chef-config (12.17.44)
60
60
  addressable
61
61
  fuzzyurl
62
62
  mixlib-config (~> 2.0)
@@ -64,7 +64,7 @@ GEM
64
64
  cleanroom (1.0.0)
65
65
  coderay (1.1.1)
66
66
  diff-lcs (1.2.5)
67
- docker-api (1.33.0)
67
+ docker-api (1.33.1)
68
68
  excon (>= 0.38.0)
69
69
  json
70
70
  erubis (2.7.0)
@@ -80,7 +80,7 @@ GEM
80
80
  hashie (3.4.6)
81
81
  hitimes (1.2.4)
82
82
  httpclient (2.7.2)
83
- inspec (1.7.0)
83
+ inspec (1.8.0)
84
84
  hashie (~> 3.4)
85
85
  json (>= 1.8, < 3.0)
86
86
  method_source (~> 0.8)
@@ -94,7 +94,7 @@ GEM
94
94
  rubyzip (~> 1.1)
95
95
  sslshake (~> 1)
96
96
  thor (~> 0.19)
97
- train (>= 0.20.1, < 1.0)
97
+ train (>= 0.22.0, < 1.0)
98
98
  jmespath (1.3.1)
99
99
  json (2.0.2)
100
100
  kitchen-ec2 (1.2.0)
@@ -103,11 +103,11 @@ GEM
103
103
  multi_json
104
104
  retryable (~> 2.0)
105
105
  test-kitchen (~> 1.4, >= 1.4.1)
106
- kitchen-inspec (0.16.1)
106
+ kitchen-inspec (0.17.0)
107
107
  hashie (~> 3.4)
108
108
  inspec (>= 0.34.0, < 2.0.0)
109
109
  test-kitchen (~> 1.6)
110
- kitchen-vagrant (0.21.0)
110
+ kitchen-vagrant (0.21.1)
111
111
  test-kitchen (~> 1.4)
112
112
  little-plugger (1.1.4)
113
113
  logging (2.1.0)
@@ -144,8 +144,8 @@ GEM
144
144
  coderay (~> 1.1.0)
145
145
  method_source (~> 0.8.1)
146
146
  slop (~> 3.4)
147
- public_suffix (2.0.4)
148
- rainbow (2.1.0)
147
+ public_suffix (2.0.5)
148
+ rainbow (2.2.1)
149
149
  retryable (2.0.4)
150
150
  ridley (4.6.1)
151
151
  addressable
@@ -196,7 +196,7 @@ GEM
196
196
  molinillo (~> 0.4.2)
197
197
  semverse (~> 1.1)
198
198
  sslshake (1.0.13)
199
- test-kitchen (1.14.0)
199
+ test-kitchen (1.14.2)
200
200
  mixlib-install (>= 1.2, < 3.0)
201
201
  mixlib-shellout (>= 1.2, < 3.0)
202
202
  net-scp (~> 1.1)
@@ -220,7 +220,7 @@ GEM
220
220
  hashie (>= 2.0.2, < 4.0.0)
221
221
  windows_chef_zero (2.0.0)
222
222
  test-kitchen (>= 1.2.1)
223
- winrm (2.1.0)
223
+ winrm (2.1.1)
224
224
  builder (>= 2.1.2)
225
225
  erubis (~> 2.7)
226
226
  gssapi (~> 1.2)
@@ -229,10 +229,10 @@ GEM
229
229
  logging (>= 1.6.1, < 3.0)
230
230
  nori (~> 2.0)
231
231
  rubyntlm (~> 0.6.0, >= 0.6.1)
232
- winrm-elevated (1.0.1)
232
+ winrm-elevated (1.1.0)
233
233
  winrm (~> 2.0)
234
234
  winrm-fs (~> 1.0)
235
- winrm-fs (1.0.0)
235
+ winrm-fs (1.0.1)
236
236
  erubis (~> 2.7)
237
237
  logging (>= 1.6.1, < 3.0)
238
238
  rubyzip (~> 1.1)
@@ -200,11 +200,11 @@ windows 1.0.0 4.1.2
200
200
  </div>
201
201
  <div class="section" id="from-file">
202
202
  <h2>from file<a class="headerlink" href="#from-file" title="Permalink to this headline">¶</a></h2>
203
- <p>The <tt class="docutils literal"><span class="pre">from</span> <span class="pre">file</span></tt> argument is used to add or update an environment using a JSON or Ruby DSL description. It must be run with the <tt class="docutils literal"><span class="pre">create</span></tt> or <tt class="docutils literal"><span class="pre">edit</span></tt> arguments.</p>
203
+ <p>The <tt class="docutils literal"><span class="pre">from</span> <span class="pre">file</span></tt> argument is used to add or update an environment using a JSON or Ruby DSL description.</p>
204
204
  <div class="section" id="id7">
205
205
  <h3>Syntax<a class="headerlink" href="#id7" title="Permalink to this headline">¶</a></h3>
206
206
  <p>This argument has the following syntax:</p>
207
- <div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>knife environment <span class="o">[</span>create | edit<span class="o">]</span> from file FILE <span class="o">(</span>options<span class="o">)</span>
207
+ <div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>knife environment from file FILE <span class="o">(</span>options<span class="o">)</span>
208
208
  </pre></div>
209
209
  </div>
210
210
  </div>
@@ -221,11 +221,7 @@ windows 1.0.0 4.1.2
221
221
  <p>The following examples show how to use this knife subcommand:</p>
222
222
  <p><strong>Create an environment from a JSON file</strong></p>
223
223
  <p>To add an environment using data contained in a JSON file:</p>
224
- <div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>knife environment create devops from file <span class="s2">&quot;path to JSON file&quot;</span>
225
- </pre></div>
226
- </div>
227
- <p>or:</p>
228
- <div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>knife environment edit devops from file <span class="s2">&quot;path to JSON file&quot;</span>
224
+ <div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>knife environment from file <span class="s2">&quot;path to JSON file&quot;</span>
229
225
  </pre></div>
230
226
  </div>
231
227
  </div>
@@ -323,4 +319,4 @@ override_attributes:
323
319
 
324
320
 
325
321
  </body>
326
- </html>
322
+ </html>
@@ -339,7 +339,7 @@ $ knife environment edit devops
339
339
  .UNINDENT
340
340
  .SH FROM FILE
341
341
  .sp
342
- The \fBfrom file\fP argument is used to add or update an environment using a JSON or Ruby DSL description. It must be run with the \fBcreate\fP or \fBedit\fP arguments.
342
+ The \fBfrom file\fP argument is used to add or update an environment using a JSON or Ruby DSL description.
343
343
  .sp
344
344
  \fBSyntax\fP
345
345
  .sp
@@ -349,7 +349,7 @@ This argument has the following syntax:
349
349
  .sp
350
350
  .nf
351
351
  .ft C
352
- $ knife environment [create | edit] from file FILE (options)
352
+ $ knife environment from file FILE (options)
353
353
  .ft P
354
354
  .fi
355
355
  .UNINDENT
@@ -366,25 +366,13 @@ Use to upload all environments found at the specified path.
366
366
  .sp
367
367
  \fBExamples\fP
368
368
  .sp
369
- To add an environment using data contained in a JSON file:
369
+ To add or update an environment using data contained in a JSON file:
370
370
  .INDENT 0.0
371
371
  .INDENT 3.5
372
372
  .sp
373
373
  .nf
374
374
  .ft C
375
- $ knife environment create devops from file "path to JSON file"
376
- .ft P
377
- .fi
378
- .UNINDENT
379
- .UNINDENT
380
- .sp
381
- or:
382
- .INDENT 0.0
383
- .INDENT 3.5
384
- .sp
385
- .nf
386
- .ft C
387
- $ knife environment edit devops from file "path to JSON file"
375
+ $ knife environment from file "path to JSON file"
388
376
  .ft P
389
377
  .fi
390
378
  .UNINDENT
@@ -109,6 +109,12 @@ public enum StandardHandle : int
109
109
  Error = -12
110
110
  }
111
111
 
112
+ public enum HandleFlags : int
113
+ {
114
+ HANDLE_FLAG_INHERIT = 0x00000001,
115
+ HANDLE_FLAG_PROTECT_FROM_CLOSE = 0x00000002
116
+ }
117
+
112
118
  public static class Kernel32
113
119
  {
114
120
  [DllImport("kernel32.dll", SetLastError=true)]
@@ -128,11 +134,12 @@ public static class Kernel32
128
134
  [DllImport("kernel32.dll", SetLastError=true)]
129
135
  public static extern IntPtr GetStdHandle(
130
136
  StandardHandle nStdHandle);
131
-
132
- [DllImport("kernel32", SetLastError=true)]
133
- public static extern int WaitForSingleObject(
134
- IntPtr hHandle,
135
- int dwMilliseconds);
137
+
138
+ [DllImport("kernel32.dll")]
139
+ public static extern bool SetHandleInformation(
140
+ IntPtr hObject,
141
+ int dwMask,
142
+ uint dwFlags);
136
143
 
137
144
  [DllImport("kernel32", SetLastError=true)]
138
145
  [return: MarshalAs(UnmanagedType.Bool)]
@@ -144,6 +151,32 @@ public static class Kernel32
144
151
  public static extern bool GetExitCodeProcess(
145
152
  IntPtr hProcess,
146
153
  out int lpExitCode);
154
+
155
+ [DllImport("kernel32.dll", SetLastError = true)]
156
+ public static extern bool CreatePipe(
157
+ out IntPtr phReadPipe,
158
+ out IntPtr phWritePipe,
159
+ IntPtr lpPipeAttributes,
160
+ uint nSize);
161
+
162
+ [DllImport("kernel32.dll", SetLastError = true)]
163
+ public static extern bool ReadFile(
164
+ IntPtr hFile,
165
+ [Out] byte[] lpBuffer,
166
+ uint nNumberOfBytesToRead,
167
+ ref int lpNumberOfBytesRead,
168
+ IntPtr lpOverlapped);
169
+
170
+ [DllImport("kernel32.dll", SetLastError = true)]
171
+ public static extern bool PeekNamedPipe(
172
+ IntPtr handle,
173
+ byte[] buffer,
174
+ uint nBufferSize,
175
+ ref uint bytesRead,
176
+ ref uint bytesAvail,
177
+ ref uint BytesLeftThisMessage);
178
+
179
+ public const int STILL_ACTIVE = 259;
147
180
  }
148
181
  }
149
182
  "@
@@ -156,13 +189,6 @@ function Run-ExecutableAndWait($AppPath, $ArgumentString) {
156
189
  $si = New-Object Chef.STARTUPINFO
157
190
  $pi = New-Object Chef.PROCESS_INFORMATION
158
191
 
159
- $si.cb = [System.Runtime.InteropServices.Marshal]::SizeOf($si)
160
- $si.wShowWindow = [Chef.ShowWindow]::SW_SHOW
161
- $si.dwFlags = [Chef.STARTF]::STARTF_USESTDHANDLES
162
- $si.hStdError = [Chef.Kernel32]::GetStdHandle([Chef.StandardHandle]::Error)
163
- $si.hStdOutput = [Chef.Kernel32]::GetStdHandle([Chef.StandardHandle]::Output)
164
- $si.hStdInput = [Chef.Kernel32]::GetStdHandle([Chef.StandardHandle]::Input)
165
-
166
192
  $pSec = New-Object Chef.SECURITY_ATTRIBUTES
167
193
  $pSec.Length = [System.Runtime.InteropServices.Marshal]::SizeOf($pSec)
168
194
  $pSec.bInheritHandle = $true
@@ -170,25 +196,103 @@ function Run-ExecutableAndWait($AppPath, $ArgumentString) {
170
196
  $tSec.Length = [System.Runtime.InteropServices.Marshal]::SizeOf($tSec)
171
197
  $tSec.bInheritHandle = $true
172
198
 
173
- $success = [Chef.Kernel32]::CreateProcess($AppPath, $ArgumentString, [ref] $pSec, [ref] $tSec, $true, [Chef.CreationFlags]::NONE, [IntPtr]::Zero, $pwd, [ref] $si, [ref] $pi)
199
+ # Create pipe for process stdout
200
+ $ptr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal([System.Runtime.InteropServices.Marshal]::SizeOf($si))
201
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($pSec, $ptr, $true)
202
+ $hReadOut = [IntPtr]::Zero
203
+ $hWriteOut = [IntPtr]::Zero
204
+ $success = [Chef.Kernel32]::CreatePipe([ref] $hReadOut, [ref] $hWriteOut, $ptr, 0)
174
205
  if (-Not $success) {
175
206
  $reason = [System.Runtime.InteropServices.Marshal]::GetLastWin32Error()
176
- throw "Unable to create process [$ArgumentString]. Error code $reason."
207
+ throw "Unable to create output pipe. Error code $reason."
177
208
  }
178
- $waitReason = [Chef.Kernel32]::WaitForSingleObject($pi.hProcess, -1)
179
- if ($waitReason -ne 0) {
180
- if ($waitReason -eq -1) {
181
- $reason = [System.Runtime.InteropServices.Marshal]::GetLastWin32Error()
182
- throw "Could not wait for process to terminate. Error code $reason."
183
- } else {
184
- throw "WaitForSingleObject failed with return code $waitReason - it's impossible!"
185
- }
209
+ $success = [Chef.Kernel32]::SetHandleInformation($hReadOut, [Chef.HandleFlags]::HANDLE_FLAG_INHERIT, 0)
210
+ if (-Not $success) {
211
+ $reason = [System.Runtime.InteropServices.Marshal]::GetLastWin32Error()
212
+ throw "Unable to set output pipe handle information. Error code $reason."
186
213
  }
187
- $success = [Chef.Kernel32]::GetExitCodeProcess($pi.hProcess, [ref] $global:LASTEXITCODE)
214
+
215
+ $si.cb = [System.Runtime.InteropServices.Marshal]::SizeOf($si)
216
+ $si.wShowWindow = [Chef.ShowWindow]::SW_SHOW
217
+ $si.dwFlags = [Chef.STARTF]::STARTF_USESTDHANDLES
218
+ $si.hStdOutput = $hWriteOut
219
+ $si.hStdError = $hWriteOut
220
+ $si.hStdInput = [Chef.Kernel32]::GetStdHandle([Chef.StandardHandle]::Input)
221
+
222
+ $success = [Chef.Kernel32]::CreateProcess(
223
+ $AppPath,
224
+ $ArgumentString,
225
+ [ref] $pSec,
226
+ [ref] $tSec,
227
+ $true,
228
+ [Chef.CreationFlags]::NONE,
229
+ [IntPtr]::Zero,
230
+ $pwd,
231
+ [ref] $si,
232
+ [ref] $pi
233
+ )
188
234
  if (-Not $success) {
189
235
  $reason = [System.Runtime.InteropServices.Marshal]::GetLastWin32Error()
190
- throw "Process exit code unavailable. Error code $reason."
236
+ throw "Unable to create process [$ArgumentString]. Error code $reason."
191
237
  }
238
+
239
+ $sb = New-Object System.Text.StringBuilder
240
+ $buffer = New-Object byte[] 1024
241
+
242
+ # Initialize reference variables
243
+ $bytesRead = 0
244
+ $bytesAvailable = 0
245
+ $bytesLeftThisMsg = 0
246
+ $global:LASTEXITCODE = [Chef.Kernel32]::STILL_ACTIVE
247
+
248
+ $isActive = $true
249
+ while ($isActive) {
250
+ $success = [Chef.Kernel32]::GetExitCodeProcess($pi.hProcess, [ref] $global:LASTEXITCODE)
251
+ if (-Not $success) {
252
+ $reason = [System.Runtime.InteropServices.Marshal]::GetLastWin32Error()
253
+ throw "Process exit code unavailable. Error code $reason."
254
+ }
255
+
256
+ $success = [Chef.Kernel32]::PeekNamedPipe(
257
+ $hReadOut,
258
+ $null,
259
+ $buffer.Length,
260
+ [ref] $bytesRead,
261
+ [ref] $bytesAvailable,
262
+ [ref] $bytesLeftThisMsg
263
+ )
264
+ if (-Not $success) {
265
+ $reason = [System.Runtime.InteropServices.Marshal]::GetLastWin32Error()
266
+ throw "Output pipe unavailable for peeking. Error code $reason."
267
+ }
268
+
269
+ if ($bytesRead -gt 0) {
270
+ while ([Chef.Kernel32]::ReadFile($hReadOut, $buffer, $buffer.Length, [ref] $bytesRead, 0)) {
271
+ $output = [Text.Encoding]::UTF8.GetString($buffer, 0, $bytesRead)
272
+ if ($output) {
273
+ [void]$sb.Append($output)
274
+ }
275
+ if ($bytesRead -lt $buffer.Length) {
276
+ # Partial buffer indicating the end of stream, break out of ReadFile loop
277
+ # ReadFile will block until:
278
+ # The number of bytes requested is read.
279
+ # A write operation completes on the write end of the pipe.
280
+ # An asynchronous handle is being used and the read is occurring asynchronously.
281
+ # An error occurs.
282
+ break
283
+ }
284
+ }
285
+ }
286
+
287
+ if ($global:LASTEXITCODE -ne [Chef.Kernel32]::STILL_ACTIVE) {
288
+ $isActive = $false
289
+ }
290
+ }
291
+
292
+ # Return output obtained from child process stdout/stderr
293
+ $sb.ToString()
294
+
295
+ # Cleanup handles
192
296
  $success = [Chef.Kernel32]::CloseHandle($pi.hProcess)
193
297
  if (-Not $success) {
194
298
  $reason = [System.Runtime.InteropServices.Marshal]::GetLastWin32Error()
@@ -199,6 +303,17 @@ function Run-ExecutableAndWait($AppPath, $ArgumentString) {
199
303
  $reason = [System.Runtime.InteropServices.Marshal]::GetLastWin32Error()
200
304
  throw "Unable to release thread handle. Error code $reason."
201
305
  }
306
+ $success = [Chef.Kernel32]::CloseHandle($hWriteOut)
307
+ if (-Not $success) {
308
+ $reason = [System.Runtime.InteropServices.Marshal]::GetLastWin32Error()
309
+ throw "Unable to release output write handle. Error code $reason."
310
+ }
311
+ $success = [Chef.Kernel32]::CloseHandle($hReadOut)
312
+ if (-Not $success) {
313
+ $reason = [System.Runtime.InteropServices.Marshal]::GetLastWin32Error()
314
+ throw "Unable to release output read handle. Error code $reason."
315
+ }
316
+ [System.Runtime.InteropServices.Marshal]::FreeHGlobal($ptr)
202
317
  }
203
318
 
204
319
  function Get-ScriptDirectory {