chef-provisioning 1.2.1 → 1.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -1
- data/README.md +27 -29
- data/lib/chef/provider/machine.rb +1 -0
- data/lib/chef/provisioning.rb +3 -0
- data/lib/chef/provisioning/convergence_strategy/install_msi.rb +10 -29
- data/lib/chef/provisioning/convergence_strategy/install_sh.rb +9 -47
- data/lib/chef/provisioning/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1d0e8bd93eb76771d1303941bb28915e896fcc0
|
4
|
+
data.tar.gz: 51efa93be19879302fb8667c019083c0e361ab6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab0789c2693c7ec113fdf2382359a802f3d47d9fc4b17b2baf366d4baffca4eada93bae2a4269b80db08e01e7c55ff2e482f61066a53e53ba16272355e5bbbd2
|
7
|
+
data.tar.gz: 36288cf508696c26b97962be8d548780ec0575705c5e0b5b9bac5e55fdb679c7fb9ca9cd81234f9c70fe4a1981b4d604db8d51647aaa4e21e3d4690b0373f9f6
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# Chef Provisioning Changelog
|
2
2
|
|
3
|
+
## 1.3.0 (8/5/2015)
|
4
|
+
|
5
|
+
- Expose machine_spec.from_image to allocate_machine ([#366][], [@mwrock][])
|
6
|
+
- Use mixlib-install to install from omnitruck ([#389][], [@thommay][])
|
7
|
+
|
3
8
|
## 1.2.1 (7/17/2015)
|
4
9
|
|
5
10
|
- Added support for `options[:scp_temp_dir]` to permit specifying a directory other than `/tmp` to copy files to via SCP. ([#339][])
|
@@ -314,7 +319,9 @@
|
|
314
319
|
[#352]: https://github.com/chef/chef-provisioning/issues/352
|
315
320
|
[#363]: https://github.com/chef/chef-provisioning/issues/363
|
316
321
|
[#364]: https://github.com/chef/chef-provisioning/issues/364
|
322
|
+
[#366]: https://github.com/chef/chef-provisioning/issues/366
|
317
323
|
[#369]: https://github.com/chef/chef-provisioning/issues/369
|
324
|
+
[#389]: https://github.com/chef/chef-provisioning/issues/389
|
318
325
|
[@MrMMorris]: https://github.com/MrMMorris
|
319
326
|
[@causton1]: https://github.com/causton1
|
320
327
|
[@chef]: https://github.com/chef
|
@@ -330,6 +337,7 @@
|
|
330
337
|
[@mivok]: https://github.com/mivok
|
331
338
|
[@mwrock]: https://github.com/mwrock
|
332
339
|
[@segv]: https://github.com/segv
|
340
|
+
[@thommay]: https://github.com/thommay
|
333
341
|
[@tyler-ball]: https://github.com/tyler-ball
|
334
342
|
[@xeon22]: https://github.com/xeon22
|
335
|
-
[@xorl]: https://github.com/xorl
|
343
|
+
[@xorl]: https://github.com/xorl
|
data/README.md
CHANGED
@@ -1,10 +1,31 @@
|
|
1
|
-
[](https://waffle.io/chef/chef-provisioning)
|
2
1
|
Chef Provisioning
|
3
2
|
==========
|
4
3
|
[](https://gitter.im/chef/chef-provisioning?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
4
|
+
[](https://waffle.io/chef/chef-provisioning)
|
5
|
+
[](https://travis-ci.org/chef/chef-provisioning)
|
6
|
+
|
7
|
+
Driver build status:
|
8
|
+
|
9
|
+
AWS | Azure | Docker | Fog | Hanlon | LXC | ssh | Vagrant
|
10
|
+
---- | ---- | ---- | ---- | ---- | ---- | ---- | ----
|
11
|
+
[](https://travis-ci.org/chef/chef-provisioning-aws)| [](https://travis-ci.org/chef/chef-provisioning-azure) | [](https://travis-ci.org/chef/chef-provisioning-docker) | [](https://travis-ci.org/chef/chef-provisioning-fog) | [](https://travis-ci.org/chef/chef-provisioning-hanlon) | [](https://travis-ci.org/chef/chef-provisioning-lxc) | [](https://travis-ci.org/chef/chef-provisioning-ssh) | [](https://travis-ci.org/chef/chef-provisioning-vagrant)
|
5
12
|
|
6
13
|
This library solves the problem of repeatably creating machines and infrastructures in Chef. It has a plugin model that lets you write bootstrappers for your favorite infrastructures, including VirtualBox, EC2, LXC, bare metal, and many more!
|
7
14
|
|
15
|
+
Documentation
|
16
|
+
-------------
|
17
|
+
|
18
|
+
These are the primary documents to help learn about using Provisioning and creating Provisioning drivers:
|
19
|
+
|
20
|
+
* [Chef Docs](https://docs.chef.io/provisioning.html)
|
21
|
+
* [Frequently Asked Questions](https://github.com/chef/chef-provisioning/blob/master/docs/faq.md)
|
22
|
+
* [Configuration](https://github.com/chef/chef-provisioning/blob/master/docs/configuration.md#configuring-and-using-provisioning-drivers)
|
23
|
+
* [Writing Drivers](https://github.com/chef/chef-provisioning/blob/master/docs/building_drivers.md#writing-drivers)
|
24
|
+
* [Embedding](https://github.com/chef/chef-provisioning/blob/master/docs/embedding.md)
|
25
|
+
* [Providers](https://github.com/chef/chef-provisioning/blob/master/docs/providers)
|
26
|
+
|
27
|
+
Media
|
28
|
+
-----
|
8
29
|
[This video](https://www.youtube.com/watch?v=Yb8QdL30WgM) explains the basics of chef-provisioning (though provisioners are now called drivers). Slides (more up to date) are [here](http://slides.com/jkeiser/chef-metal).
|
9
30
|
|
10
31
|
Date | Blog
|
@@ -17,15 +38,6 @@ Date | Blog
|
|
17
38
|
2014-03-04 | [Chef Metal 0.2: Overview](http://www.chef.io/blog/2014/03/04/chef-metal-0-2-release/) - this is a pretty good overview (though dated).
|
18
39
|
2013-12-20 | [Chef Metal Alpha](http://www.chef.io/blog/2013/12/20/chef-metal-alpha/)
|
19
40
|
|
20
|
-
Documentation
|
21
|
-
-------------
|
22
|
-
* [Chef Docs](https://docs.chef.io/provisioning.html)
|
23
|
-
* [Frequently Asked Questions](https://github.com/chef/chef-provisioning/blob/master/docs/faq.md)
|
24
|
-
* [Configuration](https://github.com/chef/chef-provisioning/blob/master/docs/configuration.md#configuring-and-using-provisioning-drivers)
|
25
|
-
* [Writing Drivers](https://github.com/chef/chef-provisioning/blob/master/docs/building_drivers.md#writing-drivers)
|
26
|
-
* [Embedding](https://github.com/chef/chef-provisioning/blob/master/docs/embedding.md)
|
27
|
-
* [Providers](https://github.com/chef/chef-provisioning/blob/master/docs/providers)
|
28
|
-
|
29
41
|
Try It Out
|
30
42
|
----------
|
31
43
|
|
@@ -239,28 +251,14 @@ with_chef_server "https://chef-server.example.org",
|
|
239
251
|
:signing_key_filename => Chef::Config[:client_key]
|
240
252
|
```
|
241
253
|
|
242
|
-
|
254
|
+
Finally, you can specify a Chef Server for an individual machine by using the `chef_server` attribute. This attribute takes the same additional options (`:client_name`, `:signing_key_filename`) that `with_chef_server` does.
|
243
255
|
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
```
|
249
|
-
Then add:
|
250
|
-
```
|
251
|
-
{
|
252
|
-
"users": [
|
253
|
-
"pivotal" # This is an internal superuser for Hosted/Enterprise Chef
|
254
|
-
],
|
255
|
-
"groups": [
|
256
|
-
"clients" # This is what you need to add
|
257
|
-
]
|
258
|
-
}
|
256
|
+
```ruby
|
257
|
+
machine 'mario' do
|
258
|
+
chef_server :chef_server_url => "https://chef-server.example.org"
|
259
|
+
end
|
259
260
|
```
|
260
261
|
|
261
|
-
This can also be done through the Chef Server web UI (Administration tab > Groups > select admins Group > Add 'clients'
|
262
|
-
|
263
|
-
|
264
262
|
Kitchen
|
265
263
|
-------
|
266
264
|
|
@@ -146,6 +146,7 @@ class Machine < Chef::Provider::LWRPBase
|
|
146
146
|
end
|
147
147
|
}
|
148
148
|
|
149
|
+
configs << { from_image: new_resource.from_image } if new_resource.from_image
|
149
150
|
configs << new_resource.machine_options if new_resource.machine_options
|
150
151
|
configs << driver.config[:machine_options] if driver.config[:machine_options]
|
151
152
|
Cheffish::MergedConfig.new(*configs)
|
data/lib/chef/provisioning.rb
CHANGED
@@ -50,6 +50,9 @@ module Provisioning
|
|
50
50
|
begin
|
51
51
|
require "chef_metal/driver_init/#{scheme}"
|
52
52
|
rescue LoadError
|
53
|
+
# try the doomed require again so the stack trace shows the first LoadError and not the second (which
|
54
|
+
# would throw a confusing "chef_metal" into the error output of what is now chef-provisioning). one
|
55
|
+
# could also experiment with saving the first LoadError and re-raising it.
|
53
56
|
require "chef/provisioning/driver_init/#{scheme}"
|
54
57
|
end
|
55
58
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'chef/provisioning/convergence_strategy/precreate_chef_objects'
|
2
|
+
require 'mixlib/install'
|
2
3
|
require 'pathname'
|
3
4
|
|
4
5
|
class Chef
|
@@ -9,8 +10,6 @@ module Provisioning
|
|
9
10
|
super
|
10
11
|
@chef_version ||= convergence_options[:chef_version]
|
11
12
|
@prerelease ||= convergence_options[:prerelease]
|
12
|
-
@install_msi_url = convergence_options[:install_msi_url] || 'https://www.chef.io/chef/install.msi'
|
13
|
-
@install_msi_path = convergence_options[:install_msi_path] || "$env:TEMP\\#{File.basename(@install_msi_url)}"
|
14
13
|
@chef_client_timeout = convergence_options.has_key?(:chef_client_timeout) ? convergence_options[:chef_client_timeout] : 120*60 # Default: 2 hours
|
15
14
|
end
|
16
15
|
|
@@ -28,35 +27,16 @@ module Provisioning
|
|
28
27
|
})
|
29
28
|
end
|
30
29
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
# Don't do install/upgrade if a chef client exists and
|
37
|
-
# no chef version is defined by user configs or
|
38
|
-
# the chef client's version already matches user config
|
39
|
-
if version.exitstatus == 0
|
40
|
-
version = version.stdout.strip
|
41
|
-
if !chef_version
|
42
|
-
return
|
43
|
-
elsif version =~ /Chef: #{chef_version}$/
|
44
|
-
Chef::Log.debug "Already installed chef version #{version}"
|
45
|
-
return
|
46
|
-
elsif version.include?(chef_version)
|
47
|
-
Chef::Log.warn "Installed chef version #{version} contains desired version #{chef_version}. " +
|
48
|
-
"If you see this message on consecutive chef runs tighten your desired version constraint to prevent " +
|
49
|
-
"multiple convergence."
|
50
|
-
end
|
30
|
+
opts = {"prerelease" => prerelease}
|
31
|
+
if convergence_options[:bootstrap_proxy]
|
32
|
+
opts["http_proxy"] = convergence_options[:bootstrap_proxy]
|
33
|
+
opts["https_proxy"] = convergence_options[:bootstrap_proxy]
|
51
34
|
end
|
35
|
+
opts["install_msi_url"] = convergence_options[:install_msi_url] if convergence_options[:install_msi_url]
|
36
|
+
super
|
52
37
|
|
53
|
-
|
54
|
-
|
55
|
-
# TODO find a way to cache this on the host like with the Unix stuff.
|
56
|
-
# Limiter is we don't know how to efficiently upload large files to
|
57
|
-
# the remote machine with WMI.
|
58
|
-
machine.execute(action_handler, "(New-Object System.Net.WebClient).DownloadFile(#{machine.escape(install_msi_url)}, #{machine.escape(install_msi_path)})")
|
59
|
-
machine.execute(action_handler, "msiexec /qn /i #{machine.escape(install_msi_path)}")
|
38
|
+
install_command = Mixlib::Install.new(chef_version, true, opts).install_command
|
39
|
+
machine.execute(action_handler, install_command)
|
60
40
|
end
|
61
41
|
|
62
42
|
def converge(action_handler, machine)
|
@@ -73,6 +53,7 @@ module Provisioning
|
|
73
53
|
end
|
74
54
|
end
|
75
55
|
end
|
56
|
+
|
76
57
|
end
|
77
58
|
end
|
78
59
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'chef/provisioning/convergence_strategy/precreate_chef_objects'
|
2
2
|
require 'pathname'
|
3
|
+
require 'mixlib/install'
|
3
4
|
|
4
5
|
class Chef
|
5
6
|
module Provisioning
|
@@ -29,58 +30,19 @@ module Provisioning
|
|
29
30
|
attr_reader :install_sh_arguments
|
30
31
|
attr_reader :bootstrap_env
|
31
32
|
|
32
|
-
def install_sh_command_line
|
33
|
-
arguments = install_sh_arguments ? " #{install_sh_arguments}" : ""
|
34
|
-
arguments << " -v #{chef_version}" if chef_version
|
35
|
-
arguments << " -p" if prerelease
|
36
|
-
"bash -c '#{bootstrap_env} bash #{install_sh_path}#{arguments}'"
|
37
|
-
end
|
38
|
-
|
39
33
|
def setup_convergence(action_handler, machine)
|
40
34
|
super
|
41
35
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
# no chef version is defined by user configs or
|
47
|
-
# the chef client's version already matches user config
|
48
|
-
if version.exitstatus == 0
|
49
|
-
version = version.stdout.strip
|
50
|
-
if !chef_version
|
51
|
-
return
|
52
|
-
# This logic doesn't cover the case for a client with 12.0.1.dev.0 => 12.0.1
|
53
|
-
# so we decided to just use exact version for the time being (see comments in PR 303)
|
54
|
-
#elsif version.stdout.strip =~ /Chef: #{chef_version}([^0-9]|$)/
|
55
|
-
elsif version =~ /Chef: #{chef_version}$/
|
56
|
-
Chef::Log.debug "Already installed chef version #{version}"
|
57
|
-
return
|
58
|
-
elsif version.include?(chef_version)
|
59
|
-
Chef::Log.warn "Installed chef version #{version} contains desired version #{chef_version}. " +
|
60
|
-
"If you see this message on consecutive chef runs tighten your desired version constraint to prevent " +
|
61
|
-
"multiple convergence."
|
62
|
-
end
|
36
|
+
opts = {"prerelease" => prerelease}
|
37
|
+
if convergence_options[:bootstrap_proxy]
|
38
|
+
opts["http_proxy"] = convergence_options[:bootstrap_proxy]
|
39
|
+
opts["https_proxy"] = convergence_options[:bootstrap_proxy]
|
63
40
|
end
|
64
41
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
else
|
70
|
-
@@install_sh_cache[install_sh_url] ||= begin
|
71
|
-
proxy_uri = URI.parse(convergence_options[:bootstrap_proxy])
|
72
|
-
chef_uri = URI.parse(@install_sh_url)
|
73
|
-
proxy = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port, proxy_uri.user, proxy_uri.password)
|
74
|
-
req = Net::HTTP::Get.new(chef_uri.path)
|
75
|
-
script = proxy.start(chef_uri.host, :use_ssl => proxy_uri.scheme == 'https') do |http|
|
76
|
-
http.request(req)
|
77
|
-
end
|
78
|
-
script.body
|
79
|
-
end
|
80
|
-
end
|
81
|
-
machine.write_file(action_handler, install_sh_path, @@install_sh_cache[install_sh_url], :ensure_dir => true)
|
82
|
-
# TODO handle bad version case better
|
83
|
-
machine.execute(action_handler, install_sh_command_line)
|
42
|
+
install_command = Mixlib::Install.new(chef_version, false, opts).install_command
|
43
|
+
machine.write_file(action_handler, install_sh_path, install_command, :ensure_dir => true)
|
44
|
+
machine.set_attributes(action_handler, install_sh_path, :mode => '0755')
|
45
|
+
machine.execute(action_handler, "sh -c #{install_sh_path}")
|
84
46
|
end
|
85
47
|
|
86
48
|
def converge(action_handler, machine)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-provisioning
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Keiser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '1.3'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: mixlib-install
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.4'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.4'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: rspec
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|