chef-lxc 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MjVlZDE4Njk0MGY3YTY0NTQ0ZGM0ZjUxMDY3YTk5MmFiMmMxNzI0MA==
5
+ data.tar.gz: !binary |-
6
+ YjkwZTRkMDVhMTVlMjZjY2EwYmVlMGMyZTUyYjhkNjhmOTFhYTFlMw==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZTU4OWYzMmU4NWE4ZjYyMGQxMzQ4MTY4ZTc1YTU0ZTBlZDExYzA4OGQ2MmM2
10
+ ZDA3MWEyNmQ3ZjNhM2I0OGMyZmNkMWI0Mzk5NmZiMGZkOTAyMTNkZDU4M2Yx
11
+ ZTQ1MGRjNGE1NGZlYzJjOGE1NDZjY2Y4YWFlMzYyZGI4YTVhYTU=
12
+ data.tar.gz: !binary |-
13
+ ZmVmZTZhOTQ5ODQ2Mjc3ZjhhZjZlYzMwYTIzNzI3ZjM0MzllNDJlYjk1NDNm
14
+ ZGFiY2Q2OTBiODVkZWI5NjQ3MjRlZDVlMTk0MTJiYzk4NjJiYmIzOTYyYjFl
15
+ MGI5OTA3ZjQzYTFiMDAyNzNmYjYwYWJlYzBkNzg5NGZlMzBiNjc=
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+ gem 'serverspec'
5
+ gem 'specinfra', github: 'ranjib/specinfra', branch: 'lxc'
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Ranjib Dey
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,65 @@
1
+ # Chef::Lxc
2
+
3
+ [Chef](http://www.getchef.com/) integration for [LXC](http://linuxcontainers.org/).
4
+
5
+ ## Installation
6
+ Note: This library depends on [ruby-lxc](https://github.com/lxc/ruby-lxc), a native liblxc binding, ruby-lxc will be
7
+ released around April, 2014(alongside LXC 1.0, Ubuntu 14.04 release). Till then,
8
+ use bundler to experiement with chef-lxc.
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ gem 'chef-lxc', github: 'ranjib/chef-lxc'
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install chef-lxc
21
+
22
+ ## Usage
23
+ - Execute a chef recipe against a running container (like chef-apply)
24
+ ```sh
25
+ lxc-create -n test -t ubuntu
26
+ lxc-start -n test -d
27
+ chef-lxc test -e 'package "screen"' # via command line
28
+ ```
29
+ or stream a recipe
30
+ ```sh
31
+ echo 'package "vim"' | sudo bundle exec chef-lxc chef -s
32
+ ```
33
+ or supply a file
34
+ ```sh
35
+ chef-lxc test /path/to/recipe.rb
36
+ ```
37
+
38
+ - Create & manage containers (inside chef recipes)
39
+ Following will create a default (ubuntu) container named `web`
40
+ ```ruby
41
+ lxc "web"
42
+ ```
43
+ A more elaborate example,
44
+ ```ruby
45
+ lxc "web" do
46
+ template "ubuntu"
47
+
48
+ recipe do
49
+ package "apache2"
50
+ service "apache2" do
51
+ action [:start, :enable]
52
+ end
53
+ end
54
+
55
+ action [:create, :start]
56
+ end
57
+ ```
58
+
59
+ ## Contributing
60
+
61
+ 1. Fork it
62
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
63
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
64
+ 4. Push to the branch (`git push origin my-new-feature`)
65
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec) do |t|
5
+ t.rspec_opts = [].tap do |a|
6
+ a.push('--color')
7
+ a.push('--format progress')
8
+ end.join(' ')
9
+ end
data/bin/chef-lxc ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
4
+ require 'chef/application/lxc'
5
+
6
+ Chef::Application::LXC.new.run
data/chef-lxc.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'chef/lxc/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "chef-lxc"
8
+ spec.version = Chef::LXC::VERSION
9
+ spec.authors = ["Ranjib Dey"]
10
+ spec.email = ["ranjib@linux.com"]
11
+ spec.description = %q{LXC bindings for Chef}
12
+ spec.summary = spec.description
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
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
+ spec.bindir = "bin"
21
+
22
+ spec.add_dependency "chef", "= 11.8.4.ohai7.0"
23
+ spec.add_dependency "ruby-lxc"
24
+ spec.add_dependency "lxc-extra"
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.3"
27
+ spec.add_development_dependency "rspec"
28
+ spec.add_development_dependency "rake"
29
+ spec.add_development_dependency "chef-zero"
30
+ end
@@ -0,0 +1,122 @@
1
+ require 'chef'
2
+ require 'highline'
3
+ require 'chef/lxc'
4
+ require 'chef/application'
5
+ require 'chef/client'
6
+ require 'chef/config'
7
+ require 'chef/log'
8
+ require 'fileutils'
9
+ require 'tempfile'
10
+ require 'chef/providers'
11
+ require 'chef/resources'
12
+
13
+ class Chef::Application::LXC < Chef::Application
14
+
15
+ banner "Usage: chef-lxc CONTAINER [RECIPE_FILE] [-e RECIPE_TEXT] [-s]"
16
+
17
+ option :execute,
18
+ :short => "-e RECIPE_TEXT",
19
+ :long => "--execute RECIPE_TEXT",
20
+ :description => "Execute resources supplied in a string",
21
+ :proc => nil
22
+
23
+ option :stdin,
24
+ :short => "-s",
25
+ :long => "--stdin",
26
+ :description => "Execute resources read from STDIN",
27
+ :boolean => true
28
+
29
+ option :log_level,
30
+ :short => "-l LEVEL",
31
+ :long => "--log_level LEVEL",
32
+ :description => "Set the log level (debug, info, warn, error, fatal)",
33
+ :proc => lambda { |l| l.to_sym }
34
+
35
+ option :help,
36
+ :short => "-h",
37
+ :long => "--help",
38
+ :description => "Show this message",
39
+ :on => :tail,
40
+ :boolean => true,
41
+ :show_options => true,
42
+ :exit => 0
43
+
44
+ option :version,
45
+ :short => "-v",
46
+ :long => "--version",
47
+ :description => "Show chef-lxc version",
48
+ :boolean => true,
49
+ :proc => lambda {|v| puts "Chef::LXC: #{::Chef::LXC::VERSION}"},
50
+ :exit => 0
51
+
52
+ option :why_run,
53
+ :short => '-W',
54
+ :long => '--why-run',
55
+ :description => 'Enable whyrun mode',
56
+ :boolean => true
57
+
58
+ option :color,
59
+ :long => '--[no-]color',
60
+ :boolean => true,
61
+ :default => true,
62
+ :description => "Use colored output, defaults to enabled"
63
+
64
+ def initialize
65
+ super
66
+ end
67
+
68
+ def reconfigure
69
+ parse_options
70
+ Chef::Config.merge!(config)
71
+ configure_logging
72
+ end
73
+
74
+ def run_chef_recipe
75
+ if config[:execute]
76
+ recipe_text = config[:execute]
77
+ elsif config[:stdin]
78
+ recipe_text = STDIN.read
79
+ else
80
+ recipe_text = ::File.read(ARGV[1])
81
+ end
82
+ Chef::Config[:solo] = true
83
+ ct = ::LXC::Container.new(ARGV.first)
84
+ client.ohai.load_plugins
85
+ ct.execute do
86
+ client.run_ohai
87
+ client.load_node
88
+ client.build_node
89
+ run_context = Chef::RunContext.new(client.node, {}, client.events)
90
+ recipe = Chef::Recipe.new("(chef-lxc cookbook)", "(chef-lxc recipe)", run_context)
91
+ recipe.instance_eval(recipe_text, '/foo/bar.rb', 1)
92
+ runner = Chef::Runner.new(run_context)
93
+ runner.converge
94
+ end
95
+ end
96
+
97
+ def client
98
+ @client ||= Class.new(Chef::Client) do
99
+ def run_ohai
100
+ ohai.run_plugins
101
+ end
102
+ end.new
103
+ end
104
+
105
+ def run_application
106
+ begin
107
+ parse_options
108
+ run_chef_recipe
109
+ Chef::Application.exit! "Exiting", 0
110
+ rescue SystemExit => e
111
+ raise
112
+ rescue Exception => e
113
+ Chef::Application.debug_stacktrace(e)
114
+ Chef::Application.fatal!("#{e.class}: #{e.message}", 1)
115
+ end
116
+ end
117
+
118
+ def run
119
+ reconfigure
120
+ run_application
121
+ end
122
+ end
@@ -0,0 +1,5 @@
1
+ class Chef
2
+ module LXC
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
data/lib/chef/lxc.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'lxc'
2
+ require 'lxc/extra'
3
+ require 'chef/lxc/version'
4
+ require 'chef/provider/lxc'
5
+ require 'chef/resource/lxc'
6
+
7
+ class Chef
8
+ module LXC
9
+ end
10
+ end
@@ -0,0 +1,88 @@
1
+ require 'chef/provider'
2
+ require 'lxc'
3
+
4
+ class Chef
5
+ class Provider
6
+ class Lxc < Chef::Provider
7
+
8
+ attr_reader :ct
9
+
10
+ def initialize(new_resource, run_context)
11
+ super(new_resource, run_context)
12
+ end
13
+
14
+ def whyrun_supported?
15
+ true
16
+ end
17
+
18
+ def load_current_resource
19
+ @ct = ::LXC::Container.new(new_resource.container_name)
20
+ if (new_resource.action == 'start') or (new_resource.action == 'stop')
21
+ raise ArgumentError, 'Can not start or stop non-existent container'
22
+ end
23
+ end
24
+
25
+ def action_create
26
+ unless ct.defined?
27
+ converge_by("create container '#{ct.name}'") do
28
+ template = new_resource.lxc_template.type
29
+ block_device = new_resource.lxc_template.bd
30
+ template_options = new_resource.lxc_template.options
31
+ flags = 0
32
+ ct.create(template, block_device, flags, template_options)
33
+ end
34
+ end
35
+ end
36
+
37
+ def action_stop
38
+ if ct.running?
39
+ converge_by("stop container '#{ct.name}'") do
40
+ ct.stop
41
+ end
42
+ end
43
+ end
44
+
45
+ def action_start
46
+ unless ct.running?
47
+ converge_by("start container '#{ct.name}'") do
48
+ ct.start
49
+ end
50
+ end
51
+ unless new_resource.recipe_block.nil?
52
+ run_recipe
53
+ end
54
+ end
55
+
56
+ def action_destroy
57
+ if ct.defined?
58
+ converge_by("destroy container '#{ct.name}'") do
59
+ ct.destroy
60
+ end
61
+ end
62
+ end
63
+
64
+ def run_recipe
65
+ client.ohai.load_plugins
66
+ ct.execute do
67
+ Chef::Config[:solo] = true
68
+ client.run_ohai
69
+ client.load_node
70
+ client.build_node
71
+ run_context = Chef::RunContext.new(client.node, {}, client.events)
72
+ recipe = Chef::Recipe.new(new_resource.name,'inline', run_context)
73
+ recipe.instance_eval(&new_resource.recipe_block)
74
+ runner = Chef::Runner.new(run_context)
75
+ runner.converge
76
+ end
77
+ end
78
+
79
+ def client
80
+ @client ||= Class.new(Chef::Client) do
81
+ def run_ohai
82
+ ohai.run_plugins
83
+ end
84
+ end.new
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,57 @@
1
+ require 'chef/resource'
2
+
3
+ class Chef
4
+ class Resource
5
+ class Lxc < Chef::Resource
6
+
7
+ class InlineRecipe
8
+ end
9
+
10
+ class LXCTemplate
11
+ attr_reader :type, :bd, :options
12
+ def initialize(type='ubuntu')
13
+ @type = type
14
+ @bd = nil
15
+ @options = []
16
+ end
17
+
18
+ def args(args)
19
+ @options = args
20
+ end
21
+
22
+ def block_device(bd)
23
+ @bd = bd
24
+ end
25
+ end
26
+
27
+ identity_attr :container_name
28
+ attr_reader :lxc_template, :recipe_block
29
+
30
+ def initialize(name, run_context = nil)
31
+ super
32
+ @resource_name = :container
33
+ @container_name = name
34
+ @provider = Chef::Provider::Lxc
35
+ @action = :create
36
+ @allowed_actions += [:start, :stop, :destroy, :create]
37
+ @lxc_template = LXCTemplate.new
38
+ @recipe_block = nil
39
+ end
40
+
41
+ def container_name(arg = nil)
42
+ set_or_return(:container_name, arg, kind_of: [ String ] )
43
+ end
44
+
45
+ def template(type = 'ubuntu', &block)
46
+ @lxc_template = LXCTemplate.new(type)
47
+ if block_given?
48
+ @lxc_template.instance_eval(&block)
49
+ end
50
+ end
51
+
52
+ def recipe(&block)
53
+ @recipe_block = block
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ require 'chef/resource/lxc'
4
+ require 'chef/provider/lxc'
5
+ require 'mixlib/shellout'
6
+
7
+ describe 'inline recipe' do
8
+
9
+ before(:all) do
10
+ execute_recipe('recipe.rb')
11
+ end
12
+
13
+ let(:ct) do
14
+ LXC::Container.new('chef')
15
+ end
16
+
17
+ it 'container should be created' do
18
+ expect(ct.defined?).to be_true
19
+ end
20
+
21
+ it 'container should be running' do
22
+ expect(ct.running?).to be_true
23
+ end
24
+
25
+ it 'should create test directory' do
26
+ expect(file('/opt/test')).to be_directory
27
+ end
28
+
29
+ it 'should install apach2 package' do
30
+ expect(package('apache2')).to be_installed
31
+ end
32
+
33
+ it 'should start apache2 service' do
34
+ expect(service('apache2')).to be_running
35
+ end
36
+
37
+ it 'should enable apache2 service' do
38
+ expect(service('apache2')).to be_enabled
39
+ end
40
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ require 'chef/resource/lxc'
4
+ require 'chef/provider/lxc'
5
+ require 'mixlib/shellout'
6
+
7
+ describe 'Chef lxc resource/provider' do
8
+
9
+ before(:all) do
10
+ execute_recipe('simple.rb')
11
+ end
12
+
13
+ let(:ct) do
14
+ LXC::Container.new('chef')
15
+ end
16
+
17
+ it 'should create the container' do
18
+ expect(ct.defined?).to be_true
19
+ end
20
+
21
+ it 'should not start the container' do
22
+ expect(ct.running?).to be_false
23
+ end
24
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ require 'chef/resource/lxc'
4
+ require 'chef/provider/lxc'
5
+ require 'mixlib/shellout'
6
+
7
+ describe 'Chef lxc resource/provider' do
8
+
9
+ before(:all) do
10
+ execute_recipe('template.rb')
11
+ end
12
+
13
+ let(:ct) do
14
+ LXC::Container.new('chef')
15
+ end
16
+
17
+ it 'container should be created' do
18
+ expect(ct.defined?).to be_true
19
+ end
20
+
21
+ it 'container should be running' do
22
+ expect(ct.running?).to be_true
23
+ end
24
+
25
+ it 'container should be ubuntu 10.04' do
26
+ version = ct.execute do
27
+ `lsb_release -a`
28
+ end
29
+ expect(version).to match(/10\.04/)
30
+ end
31
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+ require 'chef/application/lxc'
3
+
4
+ describe Chef::Application::LXC do
5
+ before(:all) do
6
+ c = LXC::Container.new('test')
7
+ c.create('ubuntu') unless c.defined?
8
+ c.start unless c.running?
9
+ end
10
+ after(:all) do
11
+ c = LXC::Container.new('test')
12
+ c.stop if c.running?
13
+ end
14
+ it 'should install a package inside a container' do
15
+ app = Chef::Application::LXC.new
16
+ app.config[:execute] = 'package "screen"'
17
+ ARGV.clear
18
+ ARGV << 'test'
19
+ expect do
20
+ app.run_chef_recipe
21
+ end.to_not raise_error
22
+ end
23
+ end
@@ -0,0 +1,15 @@
1
+ require 'chef/lxc'
2
+
3
+ lxc 'chef' do
4
+ recipe do
5
+
6
+ directory '/opt/test'
7
+
8
+ package 'apache2'
9
+
10
+ service 'apache2' do
11
+ action [:start, :enable]
12
+ end
13
+ end
14
+ action [:create, :start]
15
+ end
@@ -0,0 +1,3 @@
1
+ require 'chef/lxc'
2
+
3
+ lxc "chef"
@@ -0,0 +1,10 @@
1
+ require 'chef/lxc'
2
+
3
+ lxc "chef" do
4
+
5
+ template "ubuntu" do
6
+ args %w{-r lucid}
7
+ end
8
+
9
+ action [:create, :start]
10
+ end
@@ -0,0 +1,29 @@
1
+
2
+ require 'chef/lxc'
3
+ require 'serverspec'
4
+
5
+ include SpecInfra::Helper::Lxc
6
+ include SpecInfra::Helper::Debian
7
+
8
+
9
+ module LXCSpecHelper
10
+ def execute_recipe(recipe)
11
+ c = LXC::Container.new('chef')
12
+ c.stop if c.running?
13
+ c.destroy if c.defined?
14
+ recipe_file = File.expand_path('../data/' + recipe, __FILE__)
15
+ command = Mixlib::ShellOut.new('chef-apply '+ recipe_file, timeout: 20*60)
16
+ command.live_stream=$stdout if STDIN.tty?
17
+ command.run_command
18
+ command
19
+ end
20
+ end
21
+
22
+ RSpec.configure do |config|
23
+ config.expect_with(:rspec) { |c| c.syntax = :expect }
24
+ config.filter_run(focus: true)
25
+ config.include LXCSpecHelper
26
+ config.run_all_when_everything_filtered = true
27
+ config.lxc = "chef"
28
+ config.backtrace_exclusion_patterns = []
29
+ end
metadata ADDED
@@ -0,0 +1,171 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: chef-lxc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ranjib Dey
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: chef
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 11.8.4.ohai7.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 11.8.4.ohai7.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: ruby-lxc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: lxc-extra
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.3'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: chef-zero
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: LXC bindings for Chef
112
+ email:
113
+ - ranjib@linux.com
114
+ executables:
115
+ - chef-lxc
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - .gitignore
120
+ - Gemfile
121
+ - LICENSE.txt
122
+ - README.md
123
+ - Rakefile
124
+ - bin/chef-lxc
125
+ - chef-lxc.gemspec
126
+ - lib/chef/application/lxc.rb
127
+ - lib/chef/lxc.rb
128
+ - lib/chef/lxc/version.rb
129
+ - lib/chef/provider/lxc.rb
130
+ - lib/chef/resource/lxc.rb
131
+ - spec/chef/recipe_spec.rb
132
+ - spec/chef/simple_spec.rb
133
+ - spec/chef/template_spec.rb
134
+ - spec/chef_lxc_spec.rb
135
+ - spec/data/recipe.rb
136
+ - spec/data/simple.rb
137
+ - spec/data/template.rb
138
+ - spec/spec_helper.rb
139
+ homepage: ''
140
+ licenses:
141
+ - MIT
142
+ metadata: {}
143
+ post_install_message:
144
+ rdoc_options: []
145
+ require_paths:
146
+ - lib
147
+ required_ruby_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ! '>='
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ required_rubygems_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ! '>='
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ requirements: []
158
+ rubyforge_project:
159
+ rubygems_version: 2.1.11
160
+ signing_key:
161
+ specification_version: 4
162
+ summary: LXC bindings for Chef
163
+ test_files:
164
+ - spec/chef/recipe_spec.rb
165
+ - spec/chef/simple_spec.rb
166
+ - spec/chef/template_spec.rb
167
+ - spec/chef_lxc_spec.rb
168
+ - spec/data/recipe.rb
169
+ - spec/data/simple.rb
170
+ - spec/data/template.rb
171
+ - spec/spec_helper.rb