chefdepartie 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +0 -1
- data/Gemfile.lock +15 -11
- data/chefdepartie.gemspec +2 -2
- data/lib/chefdepartie.rb +36 -10
- data/lib/chefdepartie/cookbook.rb +9 -9
- data/lib/chefdepartie/databag.rb +8 -8
- data/lib/chefdepartie/role.rb +3 -4
- data/lib/chefdepartie/server.rb +9 -4
- data/lib/chefdepartie/version.rb +2 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4798d0d48e4fa238966cc55491e6febb0fe5db10
|
4
|
+
data.tar.gz: 0ccc4bc0eb60298ba3c32c4910dff89a24c823f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6244d41cd09e6ddb218c0c04019fc5cc817becf94805cce27f7f280fe062c914242902bacd2614835e7c66465ed005ac9bdadeeed15ab289ea65f8a11a0ab9bd
|
7
|
+
data.tar.gz: 9f51599b27ca12a0783bc3f37398e9e08054bd90b8b33c45641a289e25ea58d1e9aae0f2a1bda87cf30eb13658e51ece493f24517b947c67638ff277c5732b0e
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
chefdepartie (0.0.
|
4
|
+
chefdepartie (0.0.4)
|
5
5
|
chef (~> 12.3.0)
|
6
6
|
chef-zero (~> 4.2.2)
|
7
7
|
librarian-chef (~> 0.0.4)
|
@@ -42,7 +42,7 @@ GEM
|
|
42
42
|
diff-lcs (1.2.5)
|
43
43
|
docile (1.1.5)
|
44
44
|
erubis (2.7.0)
|
45
|
-
ffi (1.9.
|
45
|
+
ffi (1.9.10)
|
46
46
|
ffi-yajl (2.2.0)
|
47
47
|
libyajl2 (~> 1.2)
|
48
48
|
hashie (2.1.2)
|
@@ -67,7 +67,7 @@ GEM
|
|
67
67
|
mixlib-config (2.2.1)
|
68
68
|
mixlib-log (1.6.0)
|
69
69
|
mixlib-shellout (2.1.0)
|
70
|
-
multi_json (1.11.
|
70
|
+
multi_json (1.11.2)
|
71
71
|
net-scp (1.2.1)
|
72
72
|
net-ssh (>= 2.6.5)
|
73
73
|
net-ssh (2.9.2)
|
@@ -76,9 +76,10 @@ GEM
|
|
76
76
|
net-ssh-multi (1.2.1)
|
77
77
|
net-ssh (>= 2.6.5)
|
78
78
|
net-ssh-gateway (>= 1.2.0)
|
79
|
-
|
79
|
+
net-telnet (0.1.1)
|
80
|
+
ohai (8.5.0)
|
80
81
|
ffi (~> 1.9)
|
81
|
-
ffi-yajl (
|
82
|
+
ffi-yajl (~> 2.2)
|
82
83
|
ipaddress
|
83
84
|
mime-types (~> 2.0)
|
84
85
|
mixlib-cli
|
@@ -93,13 +94,13 @@ GEM
|
|
93
94
|
coderay (~> 1.1.0)
|
94
95
|
method_source (~> 0.8.1)
|
95
96
|
slop (~> 3.4)
|
96
|
-
rack (1.6.
|
97
|
+
rack (1.6.4)
|
97
98
|
rake (10.4.2)
|
98
99
|
rspec (3.3.0)
|
99
100
|
rspec-core (~> 3.3.0)
|
100
101
|
rspec-expectations (~> 3.3.0)
|
101
102
|
rspec-mocks (~> 3.3.0)
|
102
|
-
rspec-core (3.3.
|
103
|
+
rspec-core (3.3.1)
|
103
104
|
rspec-support (~> 3.3.0)
|
104
105
|
rspec-expectations (3.3.0)
|
105
106
|
diff-lcs (>= 1.2.0, < 2.0)
|
@@ -107,27 +108,30 @@ GEM
|
|
107
108
|
rspec-its (1.2.0)
|
108
109
|
rspec-core (>= 3.0.0)
|
109
110
|
rspec-expectations (>= 3.0.0)
|
110
|
-
rspec-mocks (3.3.
|
111
|
+
rspec-mocks (3.3.1)
|
111
112
|
diff-lcs (>= 1.2.0, < 2.0)
|
112
113
|
rspec-support (~> 3.3.0)
|
113
114
|
rspec-support (3.3.0)
|
114
115
|
rspec_junit_formatter (0.2.3)
|
115
116
|
builder (< 4)
|
116
117
|
rspec-core (>= 2, < 4, != 2.12.0)
|
117
|
-
serverspec (2.
|
118
|
+
serverspec (2.19.0)
|
118
119
|
multi_json
|
119
120
|
rspec (~> 3.0)
|
120
121
|
rspec-its
|
121
122
|
specinfra (~> 2.35)
|
123
|
+
sfl (2.2)
|
122
124
|
simplecov (0.10.0)
|
123
125
|
docile (~> 1.1.0)
|
124
126
|
json (~> 1.8)
|
125
127
|
simplecov-html (~> 0.10.0)
|
126
128
|
simplecov-html (0.10.0)
|
127
129
|
slop (3.6.0)
|
128
|
-
specinfra (2.
|
130
|
+
specinfra (2.37.1)
|
129
131
|
net-scp
|
130
|
-
net-ssh
|
132
|
+
net-ssh (~> 2.7)
|
133
|
+
net-telnet
|
134
|
+
sfl
|
131
135
|
systemu (2.6.5)
|
132
136
|
thor (0.19.1)
|
133
137
|
uuidtools (2.1.5)
|
data/chefdepartie.gemspec
CHANGED
@@ -13,10 +13,10 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = 'https://rubygems.org/gems/chefdepartie'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
|
-
spec.files = `git ls-files`.split(
|
16
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_runtime_dependency 'chef', '~> 12.3.0'
|
22
22
|
spec.add_runtime_dependency 'chef-zero', '~> 4.2.2'
|
data/lib/chefdepartie.rb
CHANGED
@@ -5,31 +5,57 @@ require_relative 'chefdepartie/role'
|
|
5
5
|
require_relative 'chefdepartie/cookbook'
|
6
6
|
require_relative 'chefdepartie/databag'
|
7
7
|
|
8
|
+
# Chefdepartie root namespace for core module commands
|
8
9
|
module Chefdepartie
|
9
10
|
def self.run(**kwargs)
|
10
|
-
|
11
11
|
# Load the configuration
|
12
|
-
|
13
|
-
|
12
|
+
config_file = kwargs[:config_file] || ENV['CHEFDEPARTIE_CONFIG']
|
13
|
+
load_config(config_file, kwargs[:config])
|
14
|
+
background = kwargs[:background]
|
14
15
|
|
15
16
|
# Start the chef-zero server
|
16
|
-
server_thread = start_server
|
17
|
+
self.server_thread = start_server(background)
|
17
18
|
|
18
19
|
# Upload everything
|
19
20
|
upload_all
|
20
21
|
|
21
|
-
#
|
22
|
-
puts
|
23
|
-
|
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
|
24
38
|
end
|
25
39
|
|
26
|
-
|
40
|
+
def self.server_thread
|
41
|
+
@@server_thread
|
42
|
+
end
|
27
43
|
|
28
44
|
def self.upload_all
|
29
45
|
Chefdepartie::Roles.upload_all
|
30
46
|
Chefdepartie::Databags.upload_all
|
31
47
|
Chefdepartie::Cookbooks.upload_all
|
32
48
|
end
|
33
|
-
end
|
34
49
|
|
35
|
-
|
50
|
+
def self.load_config(config_file, config)
|
51
|
+
# Load config from config file if provided
|
52
|
+
Chef::Config.from_file(config_file) if 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
|
@@ -5,21 +5,21 @@ require 'librarian'
|
|
5
5
|
require 'librarian/chef'
|
6
6
|
|
7
7
|
module Chefdepartie
|
8
|
+
# Handle finding and uploading cookbooks
|
8
9
|
module Cookbooks
|
9
|
-
|
10
10
|
def self.upload_all
|
11
11
|
cookbooks = File.dirname(Chef::Config[:cookbook_path])
|
12
12
|
Dir.chdir(cookbooks) do
|
13
|
-
puts
|
13
|
+
puts 'Uploading librarian cookbooks'
|
14
14
|
upload_cheffile
|
15
15
|
|
16
|
-
puts
|
17
|
-
books = Dir[
|
16
|
+
puts 'Uploading site cookbooks'
|
17
|
+
books = Dir['cookbooks/*']
|
18
18
|
upload_site_cookbooks(books)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
|
22
|
+
private
|
23
23
|
|
24
24
|
def self.upload_cookbooks(path, books)
|
25
25
|
loader = Chef::CookbookLoader.new(path)
|
@@ -27,14 +27,14 @@ module Chefdepartie
|
|
27
27
|
books = books.collect do |name|
|
28
28
|
status = :new
|
29
29
|
cookbook = loader.load_cookbook(name)
|
30
|
-
|
30
|
+
fail "could not load cookbook #{name} " if cookbook.nil?
|
31
31
|
cookbook
|
32
32
|
end.compact
|
33
33
|
|
34
34
|
rest = Chef::REST.new(Chef::Config[:chef_server_url])
|
35
35
|
|
36
36
|
begin
|
37
|
-
Chef::CookbookUploader.new(books,
|
37
|
+
Chef::CookbookUploader.new(books, force: true, rest: rest).upload_cookbooks
|
38
38
|
rescue SystemExit => e
|
39
39
|
raise "Cookbook upload exited with status #{e.status}"
|
40
40
|
end
|
@@ -59,8 +59,8 @@ module Chefdepartie
|
|
59
59
|
|
60
60
|
def self.upload_cheffile
|
61
61
|
unless ENV['NO_LIBRARIAN']
|
62
|
-
system(
|
63
|
-
upload_cookbooks(
|
62
|
+
system('librarian-chef install')
|
63
|
+
upload_cookbooks('tmp/librarian/cookbooks', cheffile_cookbooks.map(&:name))
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
data/lib/chefdepartie/databag.rb
CHANGED
@@ -13,7 +13,7 @@ module ChefZero
|
|
13
13
|
def self.normalize_data_bag_item(data_bag_item, data_bag_name, id, method)
|
14
14
|
if method == 'DELETE'
|
15
15
|
# TODO SERIOUSLY, WHO DOES THIS MANY EXCEPTIONS IN THEIR INTERFACE
|
16
|
-
|
16
|
+
unless data_bag_item['json_class'] == 'Chef::DataBagItem' && data_bag_item['raw_data']
|
17
17
|
data_bag_item['id'] ||= id
|
18
18
|
data_bag_item = { 'raw_data' => data_bag_item }
|
19
19
|
data_bag_item['chef_type'] ||= 'data_bag_item'
|
@@ -24,7 +24,7 @@ module ChefZero
|
|
24
24
|
else
|
25
25
|
# If it's not already wrapped with raw_data, wrap it.
|
26
26
|
if data_bag_item['json_class'] == 'Chef::DataBagItem' && data_bag_item['raw_data']
|
27
|
-
#data_bag_item = data_bag_item['raw_data']
|
27
|
+
# data_bag_item = data_bag_item['raw_data']
|
28
28
|
end
|
29
29
|
# Argh. We don't do this on GET, but we do on PUT and POST????
|
30
30
|
if %w(PUT POST).include?(method)
|
@@ -42,13 +42,13 @@ end
|
|
42
42
|
module Chefdepartie
|
43
43
|
module Databags
|
44
44
|
def self.upload_all
|
45
|
-
puts
|
45
|
+
puts 'Uploading databags'
|
46
46
|
cookbooks = File.dirname(Chef::Config[:cookbook_path])
|
47
|
-
bags = Dir[File.join(cookbooks,'data_bags','/*')]
|
47
|
+
bags = Dir[File.join(cookbooks, 'data_bags', '/*')]
|
48
48
|
upload_all_data_bags(bags)
|
49
49
|
end
|
50
50
|
|
51
|
-
|
51
|
+
private
|
52
52
|
|
53
53
|
def self.upload_data_bag_items(items)
|
54
54
|
current_bags = Chef::DataBag.list.keys.to_set
|
@@ -75,7 +75,7 @@ module Chefdepartie
|
|
75
75
|
|
76
76
|
data_bags.each do |data_bag|
|
77
77
|
bag_name = File.basename(data_bag)
|
78
|
-
files = Dir.glob(File.join(data_bag,
|
78
|
+
files = Dir.glob(File.join(data_bag, '*.json')).flatten
|
79
79
|
|
80
80
|
files.each do |item_file|
|
81
81
|
raw_data = Chef::JSONCompat.from_json(IO.read(item_file))
|
@@ -96,8 +96,8 @@ module Chefdepartie
|
|
96
96
|
|
97
97
|
def self.is_encrypted_data_bag?(raw_data)
|
98
98
|
# TODO: use Chef::EncryptedDataBagItem::CheckEncrypted when we move to Chef 12
|
99
|
-
first_sub_item = Array(raw_data.find { |k,
|
100
|
-
!!(first_sub_item.
|
99
|
+
first_sub_item = Array(raw_data.find { |k, _v| k != 'id' }).last
|
100
|
+
!!(first_sub_item.is_a?(Hash) && first_sub_item['encrypted_data'] && first_sub_item['cipher'])
|
101
101
|
end
|
102
102
|
end
|
103
103
|
end
|
data/lib/chefdepartie/role.rb
CHANGED
@@ -3,16 +3,15 @@ require 'chef/role'
|
|
3
3
|
|
4
4
|
module Chefdepartie
|
5
5
|
module Roles
|
6
|
-
|
7
6
|
def self.upload_all
|
8
|
-
puts
|
7
|
+
puts 'Uploading roles'
|
9
8
|
cookbooks = File.dirname(Chef::Config[:cookbook_path])
|
10
9
|
roles = []
|
11
|
-
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$/ }
|
12
11
|
upload_site_roles(roles)
|
13
12
|
end
|
14
13
|
|
15
|
-
|
14
|
+
private
|
16
15
|
|
17
16
|
def self.upload_site_roles(files)
|
18
17
|
roles = {}
|
data/lib/chefdepartie/server.rb
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
require 'chef_zero/server'
|
2
2
|
require 'uri/generic'
|
3
3
|
|
4
|
-
def start_server
|
4
|
+
def start_server(background)
|
5
5
|
port = URI(Chef::Config[:chef_server_url]).port
|
6
6
|
server = ChefZero::Server.new(host: '0.0.0.0', port: port)
|
7
|
-
|
8
|
-
|
7
|
+
|
8
|
+
if background
|
9
|
+
server.start_background
|
10
|
+
server
|
11
|
+
else
|
12
|
+
Thread.new do
|
13
|
+
server.start
|
14
|
+
end
|
9
15
|
end
|
10
16
|
end
|
11
|
-
|
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.4
|
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-07-
|
11
|
+
date: 2015-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef
|