batali-tk 0.1.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 +7 -0
- data/CHANGELOG.md +2 -0
- data/CONTRIBUTING.md +25 -0
- data/LICENSE +13 -0
- data/README.md +24 -0
- data/batali-tk.gemspec +17 -0
- data/bin/batali-tk +20 -0
- data/lib/batali-tk.rb +4 -0
- data/lib/batali-tk/monkey.rb +86 -0
- data/lib/batali-tk/provisioner.rb +72 -0
- data/lib/batali-tk/version.rb +6 -0
- metadata +89 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3feaae7e7ce0593e46593b8d5ec1196a44699675
|
4
|
+
data.tar.gz: 015a4fd509a6b3c386f277face996d8cbc06a3e8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bbc6204b08764247ee74e3bada0962f14086c5a515f110ab99b951c2dffda9793d97e785c16e7f517fa3f63a4d2d7eb2d9a49685c1288a2361962df2d9994a6d
|
7
|
+
data.tar.gz: 47e962e8c64e7224abd04f255f1ecf4342e296d943ab41e39c3fa871bbf5d8a9aff65ab02fad3dda4bb8179318f5644fe6542d655f330ec6ae92ba59379c56a0
|
data/CHANGELOG.md
ADDED
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
## Branches
|
4
|
+
|
5
|
+
### `master` branch
|
6
|
+
|
7
|
+
The master branch is the current stable released version.
|
8
|
+
|
9
|
+
### `develop` branch
|
10
|
+
|
11
|
+
The develop branch is the current edge of development.
|
12
|
+
|
13
|
+
## Pull requests
|
14
|
+
|
15
|
+
* https://github.com/hw-labs/batali-tk
|
16
|
+
|
17
|
+
Please base all pull requests of the `develop` branch. Merges to
|
18
|
+
`master` only occur through the `develop` branch. Pull requests
|
19
|
+
based on `master` will likely be cherry picked.
|
20
|
+
|
21
|
+
## Issues
|
22
|
+
|
23
|
+
Need to report an issue? Use the github issues:
|
24
|
+
|
25
|
+
* https://github.com/hw-labs/batali-tk
|
data/LICENSE
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Copyright 2015 Chris Roberts
|
2
|
+
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
6
|
+
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
data/README.md
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# Batali TK
|
2
|
+
|
3
|
+
Batali for test-kitchen!
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
Batali support must be injected into test-kitchen. This is done by using
|
8
|
+
a wrapper command. Instead of calling kitchen directly:
|
9
|
+
|
10
|
+
```
|
11
|
+
$ kitchen --help
|
12
|
+
```
|
13
|
+
|
14
|
+
use the wrapper command:
|
15
|
+
|
16
|
+
```
|
17
|
+
$ batali-tk --help
|
18
|
+
```
|
19
|
+
|
20
|
+
This will hopefully not be needed for future versions of test kitchen.
|
21
|
+
|
22
|
+
# Info
|
23
|
+
|
24
|
+
* Repository: https://github.com/hw-labs/batali-tk
|
data/batali-tk.gemspec
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__)) + '/lib/'
|
2
|
+
require 'batali-tk/version'
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = 'batali-tk'
|
5
|
+
s.version = BataliTk::VERSION.version
|
6
|
+
s.summary = 'Batali for test-kitchen'
|
7
|
+
s.author = 'Chris Roberts'
|
8
|
+
s.email = 'code@chrisroberts.org'
|
9
|
+
s.homepage = 'https://github.com/hw-labs/batali-tk'
|
10
|
+
s.description = 'Batali support injector for test kitchen'
|
11
|
+
s.require_path = 'lib'
|
12
|
+
s.license = 'Apache 2.0'
|
13
|
+
s.add_runtime_dependency 'batali', '>= 0.1.20', '< 1'
|
14
|
+
s.add_runtime_dependency 'test-kitchen', BataliTk::TK_CONSTRAINT
|
15
|
+
s.executables << 'batali-tk'
|
16
|
+
s.files = Dir['{lib,bin}/**/**/*'] + %w(batali-tk.gemspec README.md CHANGELOG.md CONTRIBUTING.md LICENSE)
|
17
|
+
end
|
data/bin/batali-tk
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
Signal.trap("INT") { exit 1 }
|
4
|
+
|
5
|
+
# Force `kitchen` name so we don't end up with batali-tk branding
|
6
|
+
require 'thor'
|
7
|
+
|
8
|
+
module Thor::Base::ClassMethods
|
9
|
+
def basename
|
10
|
+
'kitchen'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
require 'batali-tk'
|
15
|
+
require 'kitchen'
|
16
|
+
require 'kitchen/cli'
|
17
|
+
require 'kitchen/errors'
|
18
|
+
|
19
|
+
|
20
|
+
Kitchen.with_friendly_errors { Kitchen::CLI.start }
|
data/lib/batali-tk.rb
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
# Lets hook in batali support!
|
2
|
+
module BataliTk
|
3
|
+
module Box
|
4
|
+
|
5
|
+
def batali_file
|
6
|
+
File.join(config[:kitchen_root], "Batali")
|
7
|
+
end
|
8
|
+
|
9
|
+
def batali_prepare_cookbooks
|
10
|
+
if(File.exists?(batali_file))
|
11
|
+
resolve_with_batali
|
12
|
+
filter_only_cookbook_files
|
13
|
+
else
|
14
|
+
tk_prepare_cookbooks
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def resolve_with_batali
|
19
|
+
Kitchen.mutex.synchronize do
|
20
|
+
Kitchen::Provisioner::Chef::Batali.new(batali_file, tmpbooks_dir, logger).resolve
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class << self
|
25
|
+
|
26
|
+
def included(klass)
|
27
|
+
klass.class_eval do
|
28
|
+
alias_method :tk_prepare_cookbooks, :prepare_cookbooks
|
29
|
+
alias_method :prepare_cookbooks, :batali_prepare_cookbooks
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
module Base
|
38
|
+
|
39
|
+
def batali_file
|
40
|
+
File.join(config[:kitchen_root], "Batali")
|
41
|
+
end
|
42
|
+
|
43
|
+
def batali_load_needed_dependencies!
|
44
|
+
if(File.exists?(batali_file))
|
45
|
+
debug "Batali file found at #{batali_file}, loading Batali"
|
46
|
+
Kitchen::Provisioner::Chef::Batali.load!(logger)
|
47
|
+
else
|
48
|
+
tk_load_needed_dependencies!
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class << self
|
53
|
+
|
54
|
+
def included(klass)
|
55
|
+
klass.class_eval do
|
56
|
+
alias_method :tk_load_needed_dependencies!, :load_needed_dependencies!
|
57
|
+
alias_method :load_needed_dependencies!, :batali_load_needed_dependencies!
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
require 'kitchen/provisioner/base'
|
67
|
+
require 'kitchen/provisioner/chef_base'
|
68
|
+
|
69
|
+
begin
|
70
|
+
require 'kitchen/provisioner/chef/common_sandbox'
|
71
|
+
|
72
|
+
class Kitchen::Provisioner::ChefBase
|
73
|
+
include BataliTk::Base
|
74
|
+
end
|
75
|
+
|
76
|
+
class Kitchen::Provisioner::Chef::CommonSandbox
|
77
|
+
include BataliTk::Box
|
78
|
+
end
|
79
|
+
rescue LoadError
|
80
|
+
|
81
|
+
class Kitchen::Provisioner::ChefBase
|
82
|
+
include BataliTk::Base
|
83
|
+
include BataliTk::Box
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'batali-tk'
|
2
|
+
require 'kitchen/provisioner'
|
3
|
+
require 'kitchen/provisioner/chef_base'
|
4
|
+
require 'kitchen/errors'
|
5
|
+
require 'kitchen/logging'
|
6
|
+
|
7
|
+
module Kitchen
|
8
|
+
module Provisioner
|
9
|
+
module Chef
|
10
|
+
# Chef cookbook resolver using Batali to calculate dependencies
|
11
|
+
class Batali
|
12
|
+
|
13
|
+
include Logging
|
14
|
+
|
15
|
+
class << self
|
16
|
+
|
17
|
+
# Load Batali
|
18
|
+
#
|
19
|
+
# @param logger [Logger]
|
20
|
+
def load!(logger=Kitchen.logger)
|
21
|
+
begin
|
22
|
+
require 'batali'
|
23
|
+
require 'stringio'
|
24
|
+
rescue LoadError => error
|
25
|
+
logger.fatal("Failed to load the `batali` gem! (#{e.class}: #{e})")
|
26
|
+
raise UserError.new "Failed to load the `batali` gem! (#{e.class}: #{e}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
# @return [Batali::BFile]
|
33
|
+
attr_reader :batali_file
|
34
|
+
# @return [String] path to vendor cookbooks
|
35
|
+
attr_reader :vendor_path
|
36
|
+
# @return [Logger]
|
37
|
+
attr_reader :logger
|
38
|
+
|
39
|
+
def initialize(b_file, path, logger=Kitchen.logger)
|
40
|
+
@batali_file = b_file
|
41
|
+
@vendor_path = path
|
42
|
+
@logger = logger
|
43
|
+
end
|
44
|
+
|
45
|
+
# Resolve cookbooks and install into vendor location
|
46
|
+
def resolve
|
47
|
+
info "Resolving cookbook dependencies with Batali #{::Batali::VERSION}..."
|
48
|
+
debug "Using Batail file located at: #{batali_file}"
|
49
|
+
output = ''
|
50
|
+
begin
|
51
|
+
::Batali::Command::Update.new(
|
52
|
+
Smash.new(
|
53
|
+
:file => batali_file,
|
54
|
+
:path => vendor_path,
|
55
|
+
:ui => Bogo::Ui.new(
|
56
|
+
:app_name => 'Batali',
|
57
|
+
:output_to => StringIO.new(output)
|
58
|
+
),
|
59
|
+
),
|
60
|
+
[]
|
61
|
+
).execute!
|
62
|
+
rescue => e
|
63
|
+
error "Batali failed to install cookbooks! #{e.class}: #{e}"
|
64
|
+
debug output
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: batali-tk
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chris Roberts
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-03-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: batali
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.1.20
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '1'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.1.20
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '1'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: test-kitchen
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.3'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.3'
|
47
|
+
description: Batali support injector for test kitchen
|
48
|
+
email: code@chrisroberts.org
|
49
|
+
executables:
|
50
|
+
- batali-tk
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- CHANGELOG.md
|
55
|
+
- CONTRIBUTING.md
|
56
|
+
- LICENSE
|
57
|
+
- README.md
|
58
|
+
- batali-tk.gemspec
|
59
|
+
- bin/batali-tk
|
60
|
+
- lib/batali-tk.rb
|
61
|
+
- lib/batali-tk/monkey.rb
|
62
|
+
- lib/batali-tk/provisioner.rb
|
63
|
+
- lib/batali-tk/version.rb
|
64
|
+
homepage: https://github.com/hw-labs/batali-tk
|
65
|
+
licenses:
|
66
|
+
- Apache 2.0
|
67
|
+
metadata: {}
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
requirements: []
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 2.2.2
|
85
|
+
signing_key:
|
86
|
+
specification_version: 4
|
87
|
+
summary: Batali for test-kitchen
|
88
|
+
test_files: []
|
89
|
+
has_rdoc:
|