batali-tk 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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: