chef-lxc 0.1.3 → 0.3
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/Gemfile +2 -0
- data/Rakefile +1 -0
- data/chef-lxc.gemspec +1 -1
- data/lib/chef/lxc/knife_helper.rb +30 -1
- data/lib/chef/lxc/version.rb +1 -1
- data/lib/chef/lxc_helper.rb +1 -0
- data/spec/chef/lxc/fleet_dsl.rb +38 -37
- data/spec/chef/lxc/knife_helper_spec.rb +70 -0
- data/spec/spec_helper.rb +22 -0
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 024d4681812669a4f30454c5ab95e29f02494212
|
4
|
+
data.tar.gz: cdc9eeb06b91a6c575962994e75d145a38dbb4f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5858865ababef7d065a64a23d6c94c98e15e81e6ee29633e1b9a02672188cd1bbe6c7a1d3e2ff89d68a4afdbe8dafc93d57a189bbd0befeb92ffb03e5ce161e
|
7
|
+
data.tar.gz: c096e26912c6ae3425e4eb5449204144b53e6eae6733efcb6c8e058065a2c37d8ae4f72b4a4eecfb280bad3f6dcea4d7649740902dc6597aba73a651b6826da2
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/chef-lxc.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
spec.bindir = "bin"
|
21
21
|
|
22
|
-
spec.add_dependency "chef", ">=
|
22
|
+
spec.add_dependency "chef", ">= 12"
|
23
23
|
spec.add_dependency "ruby-lxc"
|
24
24
|
spec.add_dependency "lxc-extra"
|
25
25
|
spec.homepage = 'https://github.com/ranjib/chef-lxc'
|
@@ -33,7 +33,7 @@ class Chef
|
|
33
33
|
def upload_data_bag(name, path, opts = {})
|
34
34
|
items = Dir["#{path}/*"]
|
35
35
|
name_args = [name, items].flatten
|
36
|
-
plugin = knife(Chef::Knife::DataBagFromFile, *name_args)do |config|
|
36
|
+
plugin = knife(Chef::Knife::DataBagFromFile, *name_args) do |config|
|
37
37
|
if opts[:encrypted]
|
38
38
|
config[:secret_file] = opts[:secret_file]
|
39
39
|
config[:encrypt] = true
|
@@ -42,6 +42,35 @@ class Chef
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
+
def load_secret(secret_file = nil)
|
46
|
+
config = chef_config
|
47
|
+
Chef::EncryptedDataBagItem.load_secret(
|
48
|
+
secret_file || config[:knife][:secret_file]
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
def update_data_bag_item(data_bag_name, item_name, update_hash, opts = {})
|
53
|
+
hash = Chef::DataBagItem.load(data_bag_name, item_name)
|
54
|
+
if opts[:encrypted]
|
55
|
+
secret = load_secret(opts[:secret_file])
|
56
|
+
hash = Chef::EncryptedDataBagItem.load(data_bag_name, item_name, secret).to_hash
|
57
|
+
end
|
58
|
+
updated_hash = hash.merge(update_hash)
|
59
|
+
upload_data_bag_item_from_hash(data_bag_name, updated_hash, opts)
|
60
|
+
end
|
61
|
+
|
62
|
+
# hash must contain an entry of the form 'id' => item_name
|
63
|
+
def upload_data_bag_item_from_hash(data_bag_name, hash, opts = {})
|
64
|
+
config = chef_config
|
65
|
+
if opts[:encrypted]
|
66
|
+
secret = load_secret(opts[:secret_file])
|
67
|
+
hash = Chef::EncryptedDataBagItem.encrypt_data_bag_item(hash, secret)
|
68
|
+
end
|
69
|
+
item = Chef::DataBagItem.from_hash(hash)
|
70
|
+
item.data_bag(data_bag_name)
|
71
|
+
item.save
|
72
|
+
end
|
73
|
+
|
45
74
|
def create_environment(name, opts ={})
|
46
75
|
e = Chef::Environment.new
|
47
76
|
e.name(name)
|
data/lib/chef/lxc/version.rb
CHANGED
data/lib/chef/lxc_helper.rb
CHANGED
data/spec/chef/lxc/fleet_dsl.rb
CHANGED
@@ -2,46 +2,47 @@ require 'chef/lxc'
|
|
2
2
|
require 'chef_zero/server'
|
3
3
|
require 'tempfile'
|
4
4
|
|
5
|
+
require 'spec_helper'
|
6
|
+
|
5
7
|
cookbook_path = File.expand_path('../../../data/cookbooks', __FILE__)
|
6
|
-
server = ChefZero::Server.new(host: '10.0.3.1', port: 8889)
|
7
|
-
server.start_background unless server.running?
|
8
|
-
tempfile = Tempfile.new('chef-lxc')
|
9
|
-
File.open(tempfile.path, 'w') do |f|
|
10
|
-
f.write(server.gen_key_pair.first)
|
11
|
-
end
|
12
8
|
|
13
|
-
|
14
|
-
|
15
|
-
fleet.
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
9
|
+
describe(:fleet_dsl) do
|
10
|
+
let(:server) { ChefSpecHelper.new_server }
|
11
|
+
let(:fleet) { ChefSpecHelper.create_fleet(server) }
|
12
|
+
|
13
|
+
after(:each) do
|
14
|
+
server.stop if server.running?
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'succeeds' do
|
18
|
+
# Upload cookbooks, data bags, create roles
|
19
|
+
fleet.upload_cookbooks(cookbook_path)
|
20
|
+
fleet.create_role('memcached', 'recipe[memcached]')
|
21
|
+
|
22
|
+
# Create base container with chef installed in it
|
23
|
+
fleet.create_container('base') do |ct|
|
24
|
+
ct.recipe do
|
25
|
+
execute 'apt-get update -y'
|
26
|
+
remote_file '/opt/chef_12.2.1-1_amd64.deb' do
|
27
|
+
source 'http://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/13.04/x86_64/chef_12.2.1-1_amd64.deb'
|
28
|
+
end
|
29
|
+
dpkg_package 'chef' do
|
30
|
+
source '/opt/chef_12.2.1-1_amd64.deb'
|
31
|
+
end
|
32
|
+
directory '/etc/chef'
|
33
|
+
file '/etc/chef/client.pem' do
|
34
|
+
content ChefZero::Server.new.gen_key_pair.first
|
35
|
+
end
|
36
|
+
file '/etc/chef/client.rb' do
|
37
|
+
content "chef_server_url 'http://10.0.3.1:8889'\n"
|
38
|
+
end
|
30
39
|
end
|
40
|
+
ct.stop
|
41
|
+
end
|
42
|
+
|
43
|
+
fleet.create_container('memcached', from: 'base') do |ct|
|
44
|
+
ct.command!('chef-client -r role[memcached]')
|
45
|
+
ct.stop
|
31
46
|
end
|
32
|
-
end
|
33
|
-
|
34
|
-
# configure chef setting for the new chef server
|
35
|
-
fleet.chef_config do |config|
|
36
|
-
config[:client_key] = tempfile.path
|
37
|
-
config[:node_name] = 'test'
|
38
|
-
config[:chef_server_url] = 'http://10.0.3.1:8889'
|
39
|
-
end
|
40
|
-
|
41
|
-
# Upload cookbooks, data bags, create roles
|
42
|
-
fleet.upload_cookbooks(cookbook_path)
|
43
|
-
fleet.create_role('memcached', 'recipe[memcached]')
|
44
|
-
fleet.create_container('memcached', from: 'base') do |ct|
|
45
|
-
ct.command('chef-client -r role[memcached]')
|
46
47
|
end
|
47
48
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Chef::LXC::KnifeHelper do
|
4
|
+
before(:each) do
|
5
|
+
fleet.chef_config({encrypted_data_bag_secret: 'secret'})
|
6
|
+
|
7
|
+
allow(File).to receive(:exist?).and_call_original
|
8
|
+
allow(File).to receive(:exist?).with('secret').and_return(true)
|
9
|
+
allow(IO).to receive(:read).and_call_original
|
10
|
+
allow(IO).to receive(:read).with('secret').and_return('secret_val')
|
11
|
+
end
|
12
|
+
|
13
|
+
after(:each) do
|
14
|
+
server.stop if server.running?
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_data_bag(data_bag_name, hash, opts = {})
|
18
|
+
fleet.create_data_bag(data_bag_name)
|
19
|
+
fleet.upload_data_bag_item_from_hash(data_bag_name, hash, opts)
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:server) { ChefSpecHelper.new_server }
|
23
|
+
let(:fleet) { ChefSpecHelper.create_fleet(server) }
|
24
|
+
let(:data_bag_name) { :data_bag_name }
|
25
|
+
let(:item_name) { :item_name }
|
26
|
+
|
27
|
+
context('#update_data_bag_item') do
|
28
|
+
it 'adds new keys to data bag item (encrypted)' do
|
29
|
+
opts = {encrypted: true}
|
30
|
+
create_data_bag(data_bag_name, {'id' => item_name}, opts)
|
31
|
+
|
32
|
+
fleet.update_data_bag_item(data_bag_name, item_name, {a: :b}, opts)
|
33
|
+
|
34
|
+
secrets = Chef::EncryptedDataBagItem.load(data_bag_name, item_name)
|
35
|
+
expect(secrets['a']).to eq('b')
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'overwrites old keys in data bag item (encrypted)' do
|
39
|
+
opts = {encrypted: true}
|
40
|
+
existing_data = {'id' => item_name, a: :c}
|
41
|
+
create_data_bag(data_bag_name, existing_data, opts)
|
42
|
+
|
43
|
+
fleet.update_data_bag_item(data_bag_name, item_name, {a: :b}, opts)
|
44
|
+
|
45
|
+
secrets = Chef::EncryptedDataBagItem.load(data_bag_name, item_name)
|
46
|
+
expect(secrets['a']).to eq('b')
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'adds new keys to data bag item (unencrypted)' do
|
50
|
+
opts = {}
|
51
|
+
create_data_bag(data_bag_name, {'id' => item_name}, opts)
|
52
|
+
|
53
|
+
fleet.update_data_bag_item(data_bag_name, item_name, {a: :b}, opts)
|
54
|
+
|
55
|
+
secrets = Chef::DataBagItem.load(data_bag_name, item_name)
|
56
|
+
expect(secrets['a']).to eq('b')
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'overwrites old keys in data bag item (unencrypted)' do
|
60
|
+
opts = {}
|
61
|
+
existing_data = {'id' => item_name, a: :c}
|
62
|
+
create_data_bag(data_bag_name, existing_data, opts)
|
63
|
+
|
64
|
+
fleet.update_data_bag_item(data_bag_name, item_name, {a: :b}, opts)
|
65
|
+
|
66
|
+
secrets = Chef::DataBagItem.load(data_bag_name, item_name)
|
67
|
+
expect(secrets['a']).to eq('b')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -19,6 +19,28 @@ module LXCSpecHelper
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
module ChefSpecHelper
|
23
|
+
def self.new_server
|
24
|
+
ChefZero::Server.new(host: '10.0.3.1', port: 8889)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.create_fleet(server)
|
28
|
+
server.start_background unless server.running?
|
29
|
+
tempfile = Tempfile.new('chef-lxc')
|
30
|
+
File.open(tempfile.path, 'w') do |f|
|
31
|
+
f.write(server.gen_key_pair.first)
|
32
|
+
end
|
33
|
+
|
34
|
+
Chef::LXC.create_fleet('chef-helper') do |fleet|
|
35
|
+
fleet.chef_config do |config|
|
36
|
+
config[:client_key] = tempfile.path
|
37
|
+
config[:node_name] = 'test'
|
38
|
+
config[:chef_server_url] = server.url
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
22
44
|
RSpec.configure do |config|
|
23
45
|
config.expect_with(:rspec) { |c| c.syntax = :expect }
|
24
46
|
config.filter_run(focus: true)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-lxc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ranjib Dey
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '12'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '12'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: ruby-lxc
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -148,6 +148,7 @@ files:
|
|
148
148
|
- lib/chef/resource/lxc.rb
|
149
149
|
- spec/chef/lxc/fleet_dsl.rb
|
150
150
|
- spec/chef/lxc/fleet_spec.rb
|
151
|
+
- spec/chef/lxc/knife_helper_spec.rb
|
151
152
|
- spec/chef/recipe_spec.rb
|
152
153
|
- spec/chef/simple_spec.rb
|
153
154
|
- spec/chef/template_spec.rb
|
@@ -178,13 +179,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
179
|
version: '0'
|
179
180
|
requirements: []
|
180
181
|
rubyforge_project:
|
181
|
-
rubygems_version: 2.
|
182
|
+
rubygems_version: 2.4.5
|
182
183
|
signing_key:
|
183
184
|
specification_version: 4
|
184
185
|
summary: LXC bindings for Chef
|
185
186
|
test_files:
|
186
187
|
- spec/chef/lxc/fleet_dsl.rb
|
187
188
|
- spec/chef/lxc/fleet_spec.rb
|
189
|
+
- spec/chef/lxc/knife_helper_spec.rb
|
188
190
|
- spec/chef/recipe_spec.rb
|
189
191
|
- spec/chef/simple_spec.rb
|
190
192
|
- spec/chef/template_spec.rb
|