batali-tk 0.1.4 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dc8c7a562ad705cdeb8271748e5809e4a988f41c
4
- data.tar.gz: 17ef1799d68a9e2cb7d50e1fb91ab5f39926d899
3
+ metadata.gz: 0b6f318f0e0529d04126964e9bef9be6da18018d
4
+ data.tar.gz: f38cc77847cfecfe57598d7a44614bc69ec9eae9
5
5
  SHA512:
6
- metadata.gz: 680edcc872fe4e33fc7a3a1553bb9d154bcbc503983fdcecf0e679e64026e88764cba144a9e254e14137b25f0315621e2afd78a8ad180df05a2fd0b1f0fa837a
7
- data.tar.gz: cd1c0a282e7c91afec6e8fb22c29da2ac48d5f0a4ffaa315f38fefb20cbb0ba54a2ef9177cbca09dbd7923ef00383d8844d2f41e5302e56152dc1d7a5b740327
6
+ metadata.gz: 51518ec2b64948257da81e2462e07e799f7d3164f89538b09f60229675ceda2097b22abc3f025e3be1673cdb58de7d0eeb5c51ab940c7d31aa51a6906774aea7
7
+ data.tar.gz: e8f908d11159ba87c55d3514a499f79d481ea1e94bbd4787d4dae56f2af413b564644c0c2b59d6e9d8895620530c760d1d3d22c6466c5a6de7e6a5a059565ae3
@@ -1,3 +1,6 @@
1
+ # v0.2.0
2
+ * [enhancement] Add support for infrastructure repository style testing
3
+
1
4
  # v0.1.4
2
5
  * [fix] Fix cookbook installation issue
3
6
  * Always send batali action output to debug
data/README.md CHANGED
@@ -17,7 +17,30 @@ use the wrapper command:
17
17
  $ batali-tk --help
18
18
  ```
19
19
 
20
- This will hopefully not be needed for future versions of test kitchen.
20
+ ### Infrastructure Repository
21
+
22
+ The Batali test-kitchen wrapper can be used to test cookbooks within an
23
+ infrastructure repository context. A `Batali` file is required at the root
24
+ of the infrastructure repository and is optional within the cookbook itself
25
+ (only required in the cookbook if extra testing dependencies are required).
26
+ This can be done using the `--batali-cookbook-path` flag. As most cookbooks
27
+ will live in a separate repository, you can provide the path to a working
28
+ copy on your system:
29
+
30
+ ```
31
+ $ batali-tk test BOX --batali-cookbook-path ../users
32
+ ```
33
+
34
+ #### Environment constraints
35
+
36
+ If you want to test the cookbook using a specific set of environment constraints,
37
+ that can be done too. It required the auto discovery feature of Batali to be
38
+ in use within the infrastructure repository Batali file. To enable environment
39
+ constraints:
40
+
41
+ ```
42
+ $ batali-tk test BOX --batali-cookbook-path ../users --batali-environment production
43
+ ```
21
44
 
22
45
  # Info
23
46
 
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.description = 'Batali support injector for test kitchen'
11
11
  s.require_path = 'lib'
12
12
  s.license = 'Apache 2.0'
13
- s.add_runtime_dependency 'batali', '>= 0.2.16', '< 1'
13
+ s.add_runtime_dependency 'batali', '>= 0.2.33', '< 1'
14
14
  s.add_runtime_dependency 'test-kitchen', BataliTk::TK_CONSTRAINT
15
15
  s.executables << 'batali-tk'
16
16
  s.files = Dir['{lib,bin}/**/**/*'] + %w(batali-tk.gemspec README.md CHANGELOG.md CONTRIBUTING.md LICENSE)
@@ -1,6 +1,64 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  Signal.trap("INT") { exit 1 }
4
+ require 'bogo'
5
+ require 'batali'
6
+
7
+ if(idx = ARGV.index('--batali-cookbook-path'))
8
+ _, cookbook_path = ARGV.slice!(idx, 2)
9
+ cookbook_info = Batali::Origin::Path.new(:name => 'metadata', :path => File.expand_path(cookbook_path))
10
+ cookbook_name = cookbook_info.units.first.name
11
+ ckbk_batali = File.join(File.expand_path(cookbook_path), 'Batali')
12
+ origin_batali = Batali::BFile.new(File.expand_path('./Batali'))
13
+ origin_batali.cookbook.delete_if{|item| item.name == cookbook_name}
14
+ if(File.exists?(ckbk_batali))
15
+ ckbk_b = Batali::BFile.new(ckbk_batali)
16
+ new_batali_data = MultiJson.dump(
17
+ MultiJson.load(
18
+ MultiJson.dump(ckbk_b.data)
19
+ ).to_smash.deep_merge(
20
+ MultiJson.load(
21
+ MultiJson.dump(origin_batali.data)
22
+ )
23
+ )
24
+ )
25
+ else
26
+ origin_batali.cookbook.push(Batali::BFile::Cookbook.new(:name => cookbook_name, :path => cookbook_path))
27
+ new_batali_data = MultiJson.dump(origin_batali.data)
28
+ end
29
+
30
+ n_data = MultiJson.load(new_batali_data)
31
+
32
+ expander = lambda do |item|
33
+ if(item.is_a?(Hash))
34
+ item.keys.each do |k|
35
+ if(k == 'path')
36
+ item[k] = File.expand_path(item[k])
37
+ elsif(item[k].is_a?(Hash) || item[k].is_a?(Array))
38
+ expander.call(item[k])
39
+ end
40
+ end
41
+ elsif(item.is_a?(Array))
42
+ item.each{|i| expander.call(i)}
43
+ end
44
+ end
45
+ expander.call(n_data)
46
+
47
+ temp_b = Bogo::EphemeralFile.new('batali-tk')
48
+ temp_b.write MultiJson.dump(n_data)
49
+ temp_b.flush
50
+
51
+ ENV['KITCHEN_BATALI_FILE'] = temp_b.path
52
+ ENV['KITCHEN_YAML'] = File.expand_path(
53
+ File.join('.', cookbook_path, '.kitchen.yml')
54
+ )
55
+ puts "!! Batali test-kitchen infra-repo override for `#{cookbook_name}` @ `#{cookbook_path}`"
56
+ end
57
+ if(idx = ARGV.index('--batali-environment'))
58
+ _, environment_name = ARGV.slice!(idx, 2)
59
+ ENV['KITCHEN_BATALI_ENVIRONMENT'] = environment_name
60
+ puts "!! Batali test-kitchen infra-repo override for resolution against `#{environment_name}` environment defined constraints"
61
+ end
4
62
 
5
63
  # Force `kitchen` name so we don't end up with batali-tk branding
6
64
  require 'thor'
@@ -16,5 +74,10 @@ require 'kitchen'
16
74
  require 'kitchen/cli'
17
75
  require 'kitchen/errors'
18
76
 
19
-
20
- Kitchen.with_friendly_errors { Kitchen::CLI.start }
77
+ cwd = Dir.pwd
78
+ begin
79
+ Dir.chdir(cookbook_path)
80
+ Kitchen.with_friendly_errors { Kitchen::CLI.start }
81
+ ensure
82
+ Dir.chdir(cwd)
83
+ end
@@ -3,7 +3,7 @@ module BataliTk
3
3
  module Box
4
4
 
5
5
  def batali_file
6
- File.join(config[:kitchen_root], "Batali")
6
+ ENV.fetch('KITCHEN_BATALI_FILE', File.join(config[:kitchen_root], "Batali"))
7
7
  end
8
8
 
9
9
  def batali_prepare_cookbooks
@@ -37,7 +37,7 @@ module BataliTk
37
37
  module Base
38
38
 
39
39
  def batali_file
40
- File.join(config[:kitchen_root], "Batali")
40
+ ENV.fetch('KITCHEN_BATALI_FILE', File.join(config[:kitchen_root], "Batali"))
41
41
  end
42
42
 
43
43
  def batali_load_needed_dependencies!
@@ -48,20 +48,30 @@ module Kitchen
48
48
  debug "Using Batali file located at: #{batali_file}"
49
49
  output = ''
50
50
  begin
51
- ::Batali::Command::Update.new(
52
- Smash.new(
53
- :file => batali_file,
51
+ FileUtils.cp(
52
+ batali_file,
53
+ File.join(
54
+ File.dirname(vendor_path),
55
+ 'Batali'
56
+ )
57
+ )
58
+ Dir.chdir(File.dirname(vendor_path)) do
59
+ ::Batali::Command::Update.new(
60
+ Smash.new(
54
61
  :path => vendor_path,
55
62
  :update => {
56
- :install => true
63
+ :install => true,
64
+ :environment => ENV['KITCHEN_BATALI_ENVIRONMENT'],
65
+ :infrastructure => false
57
66
  },
58
67
  :ui => Bogo::Ui.new(
59
68
  :app_name => 'Batali',
60
69
  :output_to => StringIO.new(output)
61
70
  ),
62
71
  ),
63
- []
64
- ).execute!
72
+ []
73
+ ).execute!
74
+ end
65
75
  rescue => e
66
76
  error "Batali failed to install cookbooks! #{e.class}: #{e}"
67
77
  end
@@ -1,6 +1,6 @@
1
1
  module BataliTk
2
2
  # Library version
3
- VERSION = Gem::Version.new('0.1.4')
3
+ VERSION = Gem::Version.new('0.2.0')
4
4
  # Constraint for test-kitchen dependency
5
5
  TK_CONSTRAINT = '~> 1.3'
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: batali-tk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Roberts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-30 00:00:00.000000000 Z
11
+ date: 2015-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: batali
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.16
19
+ version: 0.2.33
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '1'
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 0.2.16
29
+ version: 0.2.33
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '1'
@@ -81,9 +81,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
81
  version: '0'
82
82
  requirements: []
83
83
  rubyforge_project:
84
- rubygems_version: 2.2.2
84
+ rubygems_version: 2.4.8
85
85
  signing_key:
86
86
  specification_version: 4
87
87
  summary: Batali for test-kitchen
88
88
  test_files: []
89
- has_rdoc: