chefdepartie 0.0.5 → 0.0.6
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/lib/chefdepartie.rb +8 -61
- data/lib/chefdepartie/cache.rb +60 -0
- data/lib/chefdepartie/cookbook.rb +8 -2
- data/lib/chefdepartie/databag.rb +1 -0
- data/lib/chefdepartie/role.rb +1 -2
- data/lib/chefdepartie/runner.rb +34 -0
- data/lib/chefdepartie/server.rb +62 -10
- data/lib/chefdepartie/version.rb +1 -1
- metadata +64 -14
- data/.gitignore +0 -2
- data/Gemfile +0 -7
- data/Gemfile.lock +0 -153
- data/README.md +0 -56
- data/chefdepartie.gemspec +0 -25
- data/config.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26e730293bec2be0202f17b109278f8b6efc1277
|
4
|
+
data.tar.gz: 422e0da3b37f7020368887e012b0fca69e52867b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a7079ac8b938ef935af14f6468a6c8495f302e54d6046f0a9db037794f7314f921e9d976630066b2bedf3b35804209bef2aea7a154ee9e9cde34320ee39a936
|
7
|
+
data.tar.gz: 87dba1d350ddb0828cb4b852a114375d156708aaf488c50414698fe9453d4f104de48c83830df997449450c58683cf00b9bb6b54c24679ae2731eb9f1ed5d2b6
|
data/lib/chefdepartie.rb
CHANGED
@@ -1,61 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
module Chefdepartie
|
10
|
-
def self.run(**kwargs)
|
11
|
-
# Load the configuration
|
12
|
-
config_file = kwargs[:config_file] || ENV['CHEFDEPARTIE_CONFIG'] || ''
|
13
|
-
load_config(config_file, kwargs[:config])
|
14
|
-
background = kwargs[:background]
|
15
|
-
|
16
|
-
# Start the chef-zero server
|
17
|
-
self.server_thread = start_server(background)
|
18
|
-
|
19
|
-
# Upload everything
|
20
|
-
upload_all
|
21
|
-
|
22
|
-
# Notify that the chef server is ready
|
23
|
-
puts 'Ready'
|
24
|
-
|
25
|
-
# Join the chef server thread now that everything has been uploaded
|
26
|
-
self.server_thread.join unless background
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.stop
|
30
|
-
puts 'Stopping server'
|
31
|
-
server_thread.stop
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
|
-
def self.server_thread=(thread)
|
37
|
-
@@server_thread = thread
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.server_thread
|
41
|
-
@@server_thread
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.upload_all
|
45
|
-
Chefdepartie::Roles.upload_all
|
46
|
-
Chefdepartie::Databags.upload_all
|
47
|
-
Chefdepartie::Cookbooks.upload_all
|
48
|
-
end
|
49
|
-
|
50
|
-
def self.load_config(config_file, config)
|
51
|
-
# Load config from config file if provided
|
52
|
-
Chef::Config.from_file(config_file) if (!config_file.empty? && File.exist?(config_file))
|
53
|
-
|
54
|
-
# Load config from hash
|
55
|
-
if config && config.is_a?(Hash)
|
56
|
-
config.each do |k, v|
|
57
|
-
Chef::Config.send(k.to_sym, v)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../lib', __FILE__))
|
2
|
+
|
3
|
+
require 'chefdepartie/runner'
|
4
|
+
require 'chefdepartie/server'
|
5
|
+
require 'chefdepartie/role'
|
6
|
+
require 'chefdepartie/cookbook'
|
7
|
+
require 'chefdepartie/databag'
|
8
|
+
require 'chefdepartie/cache'
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'chef'
|
3
|
+
require 'cityhash'
|
4
|
+
require 'chef_zero/data_store/raw_file_store'
|
5
|
+
require 'tmpdir'
|
6
|
+
|
7
|
+
module Chefdepartie
|
8
|
+
module Cache
|
9
|
+
extend self
|
10
|
+
def setup(path)
|
11
|
+
FileUtils.mkdir_p(File.join(path, 'organizations', 'chef'))
|
12
|
+
@path = File.join(path, 'cache.dat')
|
13
|
+
if File.exist?(@path) then restore else @cache = {} end
|
14
|
+
ds = ChefZero::DataStore::RawFileStore.new(File.join(path))
|
15
|
+
ChefZero::DataStore::DefaultFacade.new(ds, false, false)
|
16
|
+
end
|
17
|
+
|
18
|
+
def cache(path)
|
19
|
+
return false unless cache?
|
20
|
+
hash = File.file?(path) ? CityHash.hash128(File.read(path)) : hashdir(path)
|
21
|
+
hit = @cache[to_key(path)] == hash
|
22
|
+
unless hit
|
23
|
+
@cache[to_key(path)] = hash
|
24
|
+
dump
|
25
|
+
end
|
26
|
+
hit
|
27
|
+
end
|
28
|
+
|
29
|
+
def cache?
|
30
|
+
!@cache.nil?
|
31
|
+
end
|
32
|
+
|
33
|
+
def flush
|
34
|
+
@cache = {}
|
35
|
+
dump
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def hashdir(path)
|
41
|
+
hash = ''
|
42
|
+
Dir["#{path}/**/*"].each do |path|
|
43
|
+
hash += CityHash.hash128(File.read(path)).to_s if File.file?(path)
|
44
|
+
end
|
45
|
+
CityHash.hash128(hash)
|
46
|
+
end
|
47
|
+
|
48
|
+
def restore
|
49
|
+
@cache = Marshal.load(File.binread(@path))
|
50
|
+
end
|
51
|
+
|
52
|
+
def dump
|
53
|
+
File.binwrite(@path, Marshal.dump(@cache))
|
54
|
+
end
|
55
|
+
|
56
|
+
def to_key(file)
|
57
|
+
file.gsub(/^#{File.dirname(Chef::Config[:cookbook_path])}/, '')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -1,8 +1,10 @@
|
|
1
1
|
require 'chef'
|
2
2
|
require 'chef/cookbook/metadata'
|
3
3
|
require 'chef/cookbook_uploader'
|
4
|
+
require "chef/cookbook/syntax_check"
|
4
5
|
require 'librarian'
|
5
6
|
require 'librarian/chef'
|
7
|
+
require 'fileutils'
|
6
8
|
|
7
9
|
module Chefdepartie
|
8
10
|
# Handle finding and uploading cookbooks
|
@@ -25,8 +27,11 @@ module Chefdepartie
|
|
25
27
|
loader = Chef::CookbookLoader.new(path)
|
26
28
|
|
27
29
|
books = books.collect do |name|
|
28
|
-
|
30
|
+
next if Cache.cache(File.join(path, name))
|
31
|
+
puts "Will upload #{name}"
|
29
32
|
cookbook = loader.load_cookbook(name)
|
33
|
+
c = Chef::Cookbook::SyntaxCheck.for_cookbook(name, path)
|
34
|
+
c.ruby_files.concat(c.template_files).each { |f| c.validated(f) }
|
30
35
|
fail "could not load cookbook #{name} " if cookbook.nil?
|
31
36
|
cookbook
|
32
37
|
end.compact
|
@@ -59,7 +64,8 @@ module Chefdepartie
|
|
59
64
|
|
60
65
|
def self.upload_cheffile
|
61
66
|
unless ENV['NO_LIBRARIAN']
|
62
|
-
|
67
|
+
FileUtils.mkdir_p('tmp/librarian/cookbooks')
|
68
|
+
system('librarian-chef install --quiet --path tmp/librarian/cookbooks')
|
63
69
|
upload_cookbooks('tmp/librarian/cookbooks', cheffile_cookbooks.map(&:name))
|
64
70
|
end
|
65
71
|
end
|
data/lib/chefdepartie/databag.rb
CHANGED
data/lib/chefdepartie/role.rb
CHANGED
@@ -7,7 +7,7 @@ module Chefdepartie
|
|
7
7
|
puts 'Uploading roles'
|
8
8
|
cookbooks = File.dirname(Chef::Config[:cookbook_path])
|
9
9
|
roles = []
|
10
|
-
Find.find(File.join(cookbooks, 'roles')) { |f| roles << f if f =~ /\.rb$/ }
|
10
|
+
Find.find(File.join(cookbooks, 'roles')) { |f| roles << f if f =~ /\.rb$/ && !Cache.cache(f) }
|
11
11
|
upload_site_roles(roles)
|
12
12
|
end
|
13
13
|
|
@@ -28,7 +28,6 @@ module Chefdepartie
|
|
28
28
|
|
29
29
|
def self.role_from_file(file)
|
30
30
|
role = Chef::Role.new
|
31
|
-
puts file
|
32
31
|
role.from_file(file)
|
33
32
|
role
|
34
33
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'chef'
|
2
|
+
require 'openssl'
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
module Chefdepartie
|
6
|
+
def self.run(**kwargs)
|
7
|
+
Runner.run(kwargs)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.stop
|
11
|
+
Server.stop
|
12
|
+
end
|
13
|
+
|
14
|
+
module Runner
|
15
|
+
extend self
|
16
|
+
|
17
|
+
def run(**kwargs)
|
18
|
+
# Load the configuration
|
19
|
+
Server.configure(kwargs)
|
20
|
+
|
21
|
+
# Start the chef-zero server
|
22
|
+
Server.start
|
23
|
+
|
24
|
+
# Upload everything
|
25
|
+
Server.upload_all
|
26
|
+
|
27
|
+
# Notify that the chef server is ready
|
28
|
+
puts 'Ready'
|
29
|
+
|
30
|
+
# Join the chef server thread now that everything has been uploaded
|
31
|
+
Server.join
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/chefdepartie/server.rb
CHANGED
@@ -1,16 +1,68 @@
|
|
1
1
|
require 'chef_zero/server'
|
2
2
|
require 'uri/generic'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
4
|
+
module Chefdepartie
|
5
|
+
module Server
|
6
|
+
extend self
|
7
|
+
|
8
|
+
def start
|
9
|
+
@server = ChefZero::Server.new(@opts)
|
10
|
+
|
11
|
+
if @background
|
12
|
+
@server.start_background
|
13
|
+
else
|
14
|
+
@server_thread = Thread.new do
|
15
|
+
server.start
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def join
|
21
|
+
@server_thread.join unless @background
|
22
|
+
end
|
23
|
+
|
24
|
+
def stop
|
25
|
+
puts 'Stopping server'
|
26
|
+
@server_thread.nil? ? @server.stop : @server_thread.stop
|
27
|
+
end
|
28
|
+
|
29
|
+
def upload_all
|
30
|
+
Chefdepartie::Roles.upload_all
|
31
|
+
Chefdepartie::Databags.upload_all
|
32
|
+
Chefdepartie::Cookbooks.upload_all
|
33
|
+
end
|
34
|
+
|
35
|
+
# Load chef config from hash or file
|
36
|
+
def configure(kwargs)
|
37
|
+
config_file = kwargs[:config_file] || ENV['CHEFDEPARTIE_CONFIG'] || ''
|
38
|
+
# Load config from config file if provided
|
39
|
+
Chef::Config.from_file(config_file) if !config_file.empty? && File.exist?(config_file)
|
40
|
+
|
41
|
+
config = kwargs[:config]
|
42
|
+
# Load config from hash
|
43
|
+
if config && config.is_a?(Hash)
|
44
|
+
config[:node_name] ||= 'chef-zero'
|
45
|
+
config[:client_key] ||= fake_key
|
46
|
+
config.each do |k, v|
|
47
|
+
Chef::Config.send(k.to_sym, v)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
@background = kwargs[:background]
|
52
|
+
@cache = kwargs[:cache]
|
53
|
+
|
54
|
+
port = URI(Chef::Config[:chef_server_url]).port
|
55
|
+
@opts = { host: '0.0.0.0', port: port } # , log_level: :debug }
|
56
|
+
@opts.merge!(data_store: Cache.setup(@cache)) if @cache
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def fake_key
|
62
|
+
client_key = Tempfile.new('chef-zero-client')
|
63
|
+
client_key.write(OpenSSL::PKey::RSA.new(2048).to_s)
|
64
|
+
client_key.close
|
65
|
+
client_key.path
|
14
66
|
end
|
15
67
|
end
|
16
68
|
end
|
data/lib/chefdepartie/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chefdepartie
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dale Hamel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef
|
@@ -16,19 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 12.
|
19
|
+
version: '12.4'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 12.4.3
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - "~>"
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: 12.
|
29
|
+
version: '12.4'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 12.4.3
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: chef-zero
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
37
|
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '4.2'
|
40
|
+
- - ">="
|
32
41
|
- !ruby/object:Gem::Version
|
33
42
|
version: 4.2.2
|
34
43
|
type: :runtime
|
@@ -36,6 +45,9 @@ dependencies:
|
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
37
46
|
requirements:
|
38
47
|
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '4.2'
|
50
|
+
- - ">="
|
39
51
|
- !ruby/object:Gem::Version
|
40
52
|
version: 4.2.2
|
41
53
|
- !ruby/object:Gem::Dependency
|
@@ -53,35 +65,73 @@ dependencies:
|
|
53
65
|
- !ruby/object:Gem::Version
|
54
66
|
version: 0.0.4
|
55
67
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
68
|
+
name: cityhash
|
57
69
|
requirement: !ruby/object:Gem::Requirement
|
58
70
|
requirements:
|
59
71
|
- - "~>"
|
60
72
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
-
type: :
|
73
|
+
version: 0.8.1
|
74
|
+
type: :runtime
|
63
75
|
prerelease: false
|
64
76
|
version_requirements: !ruby/object:Gem::Requirement
|
65
77
|
requirements:
|
66
78
|
- - "~>"
|
67
79
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
80
|
+
version: 0.8.1
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: rake
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - '='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 10.4.2
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - '='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: 10.4.2
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: simplecov
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - '='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 0.10.0
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - '='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: 0.10.0
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: rspec
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - '='
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: 3.4.0
|
116
|
+
type: :development
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - '='
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: 3.4.0
|
69
123
|
description: chefdepartie uses chef-zero to provide a local, testing chef server
|
70
124
|
email: dale.hamel@srvthe.net
|
71
125
|
executables: []
|
72
126
|
extensions: []
|
73
127
|
extra_rdoc_files: []
|
74
128
|
files:
|
75
|
-
- ".gitignore"
|
76
|
-
- Gemfile
|
77
|
-
- Gemfile.lock
|
78
|
-
- README.md
|
79
|
-
- chefdepartie.gemspec
|
80
|
-
- config.rb
|
81
129
|
- lib/chefdepartie.rb
|
130
|
+
- lib/chefdepartie/cache.rb
|
82
131
|
- lib/chefdepartie/cookbook.rb
|
83
132
|
- lib/chefdepartie/databag.rb
|
84
133
|
- lib/chefdepartie/role.rb
|
134
|
+
- lib/chefdepartie/runner.rb
|
85
135
|
- lib/chefdepartie/server.rb
|
86
136
|
- lib/chefdepartie/version.rb
|
87
137
|
homepage: https://rubygems.org/gems/chefdepartie
|
data/.gitignore
DELETED
data/Gemfile
DELETED
data/Gemfile.lock
DELETED
@@ -1,153 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
chefdepartie (0.0.5)
|
5
|
-
chef (~> 12.3.0)
|
6
|
-
chef-zero (~> 4.2.2)
|
7
|
-
librarian-chef (~> 0.0.4)
|
8
|
-
|
9
|
-
GEM
|
10
|
-
remote: https://rubygems.org/
|
11
|
-
specs:
|
12
|
-
builder (3.2.2)
|
13
|
-
chef (12.3.0)
|
14
|
-
chef-zero (~> 4.1)
|
15
|
-
diff-lcs (~> 1.2, >= 1.2.4)
|
16
|
-
erubis (~> 2.7)
|
17
|
-
ffi-yajl (>= 1.2, < 3.0)
|
18
|
-
highline (~> 1.6, >= 1.6.9)
|
19
|
-
mixlib-authentication (~> 1.3)
|
20
|
-
mixlib-cli (~> 1.4)
|
21
|
-
mixlib-config (~> 2.0)
|
22
|
-
mixlib-log (~> 1.3)
|
23
|
-
mixlib-shellout (>= 2.0.0.rc.0, < 3.0)
|
24
|
-
net-ssh (~> 2.6)
|
25
|
-
net-ssh-multi (~> 1.1)
|
26
|
-
ohai (~> 8.0)
|
27
|
-
plist (~> 3.1.0)
|
28
|
-
pry (~> 0.9)
|
29
|
-
rspec-core (~> 3.2)
|
30
|
-
rspec-expectations (~> 3.2)
|
31
|
-
rspec-mocks (~> 3.2)
|
32
|
-
rspec_junit_formatter (~> 0.2.0)
|
33
|
-
serverspec (~> 2.7)
|
34
|
-
specinfra (~> 2.10)
|
35
|
-
chef-config (12.5.1)
|
36
|
-
mixlib-config (~> 2.0)
|
37
|
-
mixlib-shellout (~> 2.0)
|
38
|
-
chef-zero (4.2.3)
|
39
|
-
ffi-yajl (>= 1.1, < 3.0)
|
40
|
-
hashie (~> 2.0)
|
41
|
-
mixlib-log (~> 1.3)
|
42
|
-
rack
|
43
|
-
uuidtools (~> 2.1)
|
44
|
-
coderay (1.1.0)
|
45
|
-
diff-lcs (1.2.5)
|
46
|
-
docile (1.1.5)
|
47
|
-
erubis (2.7.0)
|
48
|
-
ffi (1.9.10)
|
49
|
-
ffi-yajl (2.2.2)
|
50
|
-
libyajl2 (~> 1.2)
|
51
|
-
hashie (2.1.2)
|
52
|
-
highline (1.7.8)
|
53
|
-
ipaddress (0.8.0)
|
54
|
-
json (1.8.2)
|
55
|
-
librarian (0.1.2)
|
56
|
-
highline
|
57
|
-
thor (~> 0.15)
|
58
|
-
librarian-chef (0.0.4)
|
59
|
-
chef (>= 0.10)
|
60
|
-
librarian (~> 0.1.0)
|
61
|
-
minitar (>= 0.5.2)
|
62
|
-
libyajl2 (1.2.0)
|
63
|
-
method_source (0.8.2)
|
64
|
-
mime-types (2.99)
|
65
|
-
minitar (0.5.4)
|
66
|
-
minitest (5.6.1)
|
67
|
-
mixlib-authentication (1.3.0)
|
68
|
-
mixlib-log
|
69
|
-
mixlib-cli (1.5.0)
|
70
|
-
mixlib-config (2.2.1)
|
71
|
-
mixlib-log (1.6.0)
|
72
|
-
mixlib-shellout (2.2.3)
|
73
|
-
multi_json (1.11.2)
|
74
|
-
net-scp (1.2.1)
|
75
|
-
net-ssh (>= 2.6.5)
|
76
|
-
net-ssh (2.9.2)
|
77
|
-
net-ssh-gateway (1.2.0)
|
78
|
-
net-ssh (>= 2.6.5)
|
79
|
-
net-ssh-multi (1.2.1)
|
80
|
-
net-ssh (>= 2.6.5)
|
81
|
-
net-ssh-gateway (>= 1.2.0)
|
82
|
-
net-telnet (0.1.1)
|
83
|
-
ohai (8.7.0)
|
84
|
-
chef-config (>= 12.5.0.alpha.1, < 13)
|
85
|
-
ffi (~> 1.9)
|
86
|
-
ffi-yajl (~> 2.2)
|
87
|
-
ipaddress
|
88
|
-
mime-types (~> 2.0)
|
89
|
-
mixlib-cli
|
90
|
-
mixlib-config (~> 2.0)
|
91
|
-
mixlib-log
|
92
|
-
mixlib-shellout (~> 2.0)
|
93
|
-
rake (~> 10.1)
|
94
|
-
systemu (~> 2.6.4)
|
95
|
-
wmi-lite (~> 1.0)
|
96
|
-
plist (3.1.0)
|
97
|
-
pry (0.10.3)
|
98
|
-
coderay (~> 1.1.0)
|
99
|
-
method_source (~> 0.8.1)
|
100
|
-
slop (~> 3.4)
|
101
|
-
rack (1.6.4)
|
102
|
-
rake (10.4.2)
|
103
|
-
rspec (3.4.0)
|
104
|
-
rspec-core (~> 3.4.0)
|
105
|
-
rspec-expectations (~> 3.4.0)
|
106
|
-
rspec-mocks (~> 3.4.0)
|
107
|
-
rspec-core (3.4.1)
|
108
|
-
rspec-support (~> 3.4.0)
|
109
|
-
rspec-expectations (3.4.0)
|
110
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
111
|
-
rspec-support (~> 3.4.0)
|
112
|
-
rspec-its (1.2.0)
|
113
|
-
rspec-core (>= 3.0.0)
|
114
|
-
rspec-expectations (>= 3.0.0)
|
115
|
-
rspec-mocks (3.4.0)
|
116
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
117
|
-
rspec-support (~> 3.4.0)
|
118
|
-
rspec-support (3.4.1)
|
119
|
-
rspec_junit_formatter (0.2.3)
|
120
|
-
builder (< 4)
|
121
|
-
rspec-core (>= 2, < 4, != 2.12.0)
|
122
|
-
serverspec (2.24.3)
|
123
|
-
multi_json
|
124
|
-
rspec (~> 3.0)
|
125
|
-
rspec-its
|
126
|
-
specinfra (~> 2.43)
|
127
|
-
sfl (2.2)
|
128
|
-
simplecov (0.10.0)
|
129
|
-
docile (~> 1.1.0)
|
130
|
-
json (~> 1.8)
|
131
|
-
simplecov-html (~> 0.10.0)
|
132
|
-
simplecov-html (0.10.0)
|
133
|
-
slop (3.6.0)
|
134
|
-
specinfra (2.44.3)
|
135
|
-
net-scp
|
136
|
-
net-ssh (~> 2.7)
|
137
|
-
net-telnet
|
138
|
-
sfl
|
139
|
-
systemu (2.6.5)
|
140
|
-
thor (0.19.1)
|
141
|
-
uuidtools (2.1.5)
|
142
|
-
wmi-lite (1.0.0)
|
143
|
-
|
144
|
-
PLATFORMS
|
145
|
-
ruby
|
146
|
-
|
147
|
-
DEPENDENCIES
|
148
|
-
chefdepartie!
|
149
|
-
minitest (~> 5.6)
|
150
|
-
simplecov (= 0.10.0)
|
151
|
-
|
152
|
-
BUNDLED WITH
|
153
|
-
1.10.6
|
data/README.md
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
# A quick little helper
|
2
|
-
|
3
|
-
In a kitchen, a chef de partie is a line cook who helps prepare the ingredients the real chef will use.
|
4
|
-
|
5
|
-
Chefdepartie is a wrapper around a chef-zero server, allowing you to easily upload all of your:
|
6
|
-
|
7
|
-
* Cookbooks (site)
|
8
|
-
* Librarian cookbooks
|
9
|
-
* Roles
|
10
|
-
* Data bags
|
11
|
-
|
12
|
-
This allows you to test out all of your cookbooks together without putting them on your actual chef server.
|
13
|
-
|
14
|
-
## Chefdepartie vs chef-solo
|
15
|
-
|
16
|
-
Since chef-zero provides the same interface as **a real chef server**, you can actually use knife with it!
|
17
|
-
|
18
|
-
This gives you a full chef sandbox, and can be useful for things like CI or packer image provisioning.
|
19
|
-
|
20
|
-
* View and edit data bags, without an internet connection
|
21
|
-
* Bootstrap test nodes (vagrant images, cloud servers, etc)
|
22
|
-
|
23
|
-
## Limitations
|
24
|
-
|
25
|
-
Since chefdepartie is just a wrapper around chef-zero, it runs entirely in memory and has no persistence. This makes it a useful sandbox, but it shouldn't be relied on for anything non-ephemeral.
|
26
|
-
|
27
|
-
chefdepartie really doesn't work with environments. Everything is assumed to be on the default environment.
|
28
|
-
|
29
|
-
# Configuration
|
30
|
-
|
31
|
-
create a normal chef config file, but you only need to specify the following values:
|
32
|
-
|
33
|
-
```
|
34
|
-
chef_server_url 'http://localhost:4000'
|
35
|
-
client_key 'path_to_any_pemfile'
|
36
|
-
encrypted_data_bag_secret 'path_to_your_real_databag_secret'
|
37
|
-
cookbook_path 'path_to_your_cookbooks'
|
38
|
-
node_name 'any_name'
|
39
|
-
```
|
40
|
-
|
41
|
-
Then, provide this file to chefdepartie as an environment variable (yeah, this needs some tweaking)
|
42
|
-
|
43
|
-
|
44
|
-
# Invocation
|
45
|
-
|
46
|
-
Currently a little rough around the edges. You specify the chef config file to use, and then just run chefdepartie.
|
47
|
-
|
48
|
-
```
|
49
|
-
CHEFDEPARTIE_CONFIG=~/workspace/shopify/chefdepartie/config.rb be ruby lib/chefdepartie.rb
|
50
|
-
```
|
51
|
-
|
52
|
-
# To do:
|
53
|
-
|
54
|
-
* Wrap launching server with something like thor
|
55
|
-
* Tests to ensure all uploads are working as expected
|
56
|
-
* CI for tests
|
data/chefdepartie.gemspec
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
lib = File.expand_path('../lib', __FILE__)
|
2
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
-
require 'chefdepartie/version'
|
4
|
-
|
5
|
-
Gem::Specification.new do |spec|
|
6
|
-
spec.name = 'chefdepartie'
|
7
|
-
spec.version = Chefdepartie::VERSION
|
8
|
-
spec.summary = 'chefdepartie helps you test you cookbooks locally'
|
9
|
-
spec.description = 'chefdepartie uses chef-zero to provide a local, testing chef server'
|
10
|
-
spec.authors = ['Dale Hamel']
|
11
|
-
spec.email = 'dale.hamel@srvthe.net'
|
12
|
-
spec.files = Dir['lib/**/*']
|
13
|
-
spec.homepage = 'https://rubygems.org/gems/chefdepartie'
|
14
|
-
spec.license = 'MIT'
|
15
|
-
|
16
|
-
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
17
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = ['lib']
|
20
|
-
|
21
|
-
spec.add_runtime_dependency 'chef', '~> 12.3.0'
|
22
|
-
spec.add_runtime_dependency 'chef-zero', '~> 4.2.2'
|
23
|
-
spec.add_runtime_dependency 'librarian-chef', '~> 0.0.4'
|
24
|
-
spec.add_development_dependency 'minitest', '~> 5.6'
|
25
|
-
end
|
data/config.rb
DELETED
@@ -1,5 +0,0 @@
|
|
1
|
-
chef_server_url 'http://localhost:4000'
|
2
|
-
client_key '/home/dale.hamel/.chef/configs/shopify/client.pem'
|
3
|
-
encrypted_data_bag_secret '/home/dale.hamel/.chef/configs/shopify/encrypted_data_bag_secret'
|
4
|
-
cookbook_path '/home/dale.hamel/workspace/shopify/cookbooks/cookbooks'
|
5
|
-
node_name 'foo'
|