kitchen-chef_zero_berks_env 1.0.0 → 1.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 CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: f606d23cba1fa31d168cbccf375d367e7443fd04
4
- data.tar.gz: b297ce4e8f2a5a707fab565a5bf89eb63bac4422
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ OTk4NjZlOTk3NjM4YWQ1YmI4MTk1ZmJiNmI2YTk0YWU3NWExZWRjOA==
5
+ data.tar.gz: !binary |-
6
+ MWM4M2RmYWRiN2M3NmYyMTZhMmMwNzYyMjIzMTU5NzEwOTRjNzc3Mg==
5
7
  SHA512:
6
- metadata.gz: 12ca5700a66cb6244b9ffddb8887ab1ca75308a918ae9857bf8a697ddba40009aea3d7c6a2eab521837524291815f5762f00c07edc586a1f460749c59710faa9
7
- data.tar.gz: a0fd9421e62f51ca709c82ddf87f049d1525e832f2a2af863e76c9ef937f31419251538396b9abee0cf969a9062ddb576676e8dac7139979dcbb149244d03f9e
8
+ metadata.gz: !binary |-
9
+ NjExMzg4Y2IyNjBkMDUyMmRjMWY5ZDZiZDg1NjRjYzk1N2M1ZGIyYjdiMmUw
10
+ YzgzYmJiMmRiYzhiYWQ0OTcxYjRlOTEyZjI1MjAzMWZlYTRmNzBjZjE5MGM3
11
+ YWNkMTFmZGM3NWNhMzU3MjRiOTgzNWIzYmI2ZGM5NjZhNThhM2M=
12
+ data.tar.gz: !binary |-
13
+ MGE4NmQxMDg3NWNhZDc3MTg1MjczYzMyMjhkYThhYTZmYThiOGNlODcwNjlk
14
+ NzJmMGQxYmE2OTkyZDRlYWE3ZjUwYTk1MDc0ZGYwNzU4NGZlMDg4ZWNlNDRm
15
+ OTgxYTgxMjM5ZTYwODI5MDhhMWM0NTdmMzY3MTE5YTIwNWE0OTM=
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # kitchen-chef_zero_berks_env
2
2
 
3
- ## v0.0.1 (2015-09-20)
3
+ ## v1.1.0 (2015-09-21)
4
+
5
+ New feature: Added config option `environments_repo`.
6
+ Enhancement: Better structured (less monolithic).
7
+
8
+ ## v1.0.0 (2015-09-20)
4
9
 
5
10
  Initial release
data/README.md CHANGED
@@ -20,6 +20,9 @@ Hopefuly this provider will do the trick!
20
20
  Simply replace the provider from `chef_zero` to `chef_zero_berks_env`.
21
21
  The provider will look for the `environments_path` and `environment` configs from the provider.
22
22
 
23
+ You can specify the `environments_repo` config, that overrides the `environments_path`. That allows you to fetch the chef environments
24
+ from a remote repository.
25
+
23
26
  ## Example
24
27
 
25
28
  ```yaml
@@ -33,3 +36,16 @@ suites:
33
36
  client_rb:
34
37
  environment: 'my_chef_environment'
35
38
  ```
39
+ or
40
+
41
+ ```yaml
42
+ provisioner:
43
+ name: chef_zero_berks_env
44
+ environments_repo: 'git@github.com:ruizink/my_awesome_chef_environments.git'
45
+
46
+ suites:
47
+ - name: default
48
+ provisioner:
49
+ client_rb:
50
+ environment: 'my_chef_environment'
51
+ ```
@@ -1,6 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  require 'kitchen/provisioner/chef_zero'
4
+ require 'git'
4
5
 
5
6
  module Kitchen
6
7
  module Provisioner
@@ -20,30 +21,11 @@ module Kitchen
20
21
 
21
22
  # skip if the environment was not specified
22
23
  unless chef_environment.nil?
23
- info("Loading chef environment '#{chef_environment}'...")
24
- debug("Using environment from '#{config[:environments_path]}/#{chef_environment}.json'")
25
-
26
- environment_json = JSON.parse(File.read("#{config[:environments_path]}/#{chef_environment}.json"))
27
-
28
- ::Berkshelf.ui.mute do
29
- info("Resolving dependency graph with Berkshelf #{::Berkshelf::VERSION}...")
30
- berks.install
31
- info("Locking the versions fetched from the chef environment '#{chef_environment}'...")
32
- unless environment_json['cookbook_versions'].nil?
33
- berks.lockfile.graph.each do |graphitem|
34
- version = environment_json['cookbook_versions'][graphitem.name]
35
- unless version.nil? || berks.has_dependency?(graphitem.name)
36
- info("Adding Berkshelf dependency: #{graphitem.name} (#{version})")
37
- berks.add_dependency(graphitem.name, version)
38
- end
39
- end
40
- # update the lockfile
41
- berks.update
42
- berks.lockfile.graph.update(berks.install)
43
- berks.lockfile.update(berks.dependencies)
44
- berks.lockfile.save
45
- end
24
+ unless config[:environments_repo].nil?
25
+ config[:environments_path] = environments_path_from_git(config[:environments_repo])
46
26
  end
27
+ info("Loading chef environment '#{chef_environment}'...")
28
+ lock_berksfile(berks, cookbook_versions("#{config[:environments_path]}/#{chef_environment}.json"))
47
29
  end
48
30
  Kitchen.mutex.synchronize do
49
31
  info("Resolving cookbook dependencies with Berkshelf #{::Berkshelf::VERSION}...")
@@ -60,6 +42,54 @@ module Kitchen
60
42
  end
61
43
  end
62
44
  end
45
+
46
+ # Fetches a git repo to a temporary directory
47
+ #
48
+ # @param args [String] git repo
49
+ # @return [String] the environments_path directory
50
+ # @api private
51
+ def environments_path_from_git(repo)
52
+ info("Fetching chef environments from repo '#{repo}'...")
53
+ tmpenv_dir = Dir.mktmpdir('environments-')
54
+ Git.clone(repo, 'chef_env', path: tmpenv_dir, depth: 1)
55
+ "#{tmpenv_dir}/chef_env"
56
+ end
57
+
58
+ # Gets the cookbook version restrictions from a chef environment
59
+ #
60
+ # @param [String] chef environment path
61
+ # @return [Hash] cookbook versions
62
+ # @api private
63
+ def cookbook_versions(json_path)
64
+ info("Using environment from '#{json_path}'")
65
+ JSON.parse(File.read("#{json_path}"))['cookbook_versions']
66
+ end
67
+
68
+ # Locks the cookbook versions into Berksfile.lock
69
+ #
70
+ # @param [Berksfile] berksfile to lock
71
+ # @param [Hash] cookbook versions
72
+ # @api private
73
+ def lock_berksfile(berksfile, cookbook_versions)
74
+ ::Berkshelf.ui.mute do
75
+ info("Resolving dependency graph with Berkshelf #{::Berkshelf::VERSION}...")
76
+ berksfile.install
77
+ unless cookbook_versions.nil?
78
+ berksfile.lockfile.graph.each do |graphitem|
79
+ version = cookbook_versions[graphitem.name]
80
+ unless version.nil? || berksfile.has_dependency?(graphitem.name)
81
+ info("Adding Berkshelf dependency: #{graphitem.name} (#{version})")
82
+ berksfile.add_dependency(graphitem.name, version)
83
+ end
84
+ end
85
+ # update the lockfile
86
+ berksfile.update
87
+ berksfile.lockfile.graph.update(berksfile.install)
88
+ berksfile.lockfile.update(berksfile.dependencies)
89
+ berksfile.lockfile.save
90
+ end
91
+ end
92
+ end
63
93
  end
64
94
  end
65
95
  end
metadata CHANGED
@@ -1,62 +1,75 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen-chef_zero_berks_env
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mário Santos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-20 00:00:00.000000000 Z
11
+ date: 2015-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-kitchen
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
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
26
  version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: git
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.2'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: pry
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - "~>"
45
+ - - ~>
32
46
  - !ruby/object:Gem::Version
33
47
  version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - "~>"
52
+ - - ~>
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: berkshelf
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - ~>
46
60
  - !ruby/object:Gem::Version
47
61
  version: '3.2'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - ~>
53
67
  - !ruby/object:Gem::Version
54
68
  version: '3.2'
55
- description: |2
56
- Plugin for test-kitchen that extends the chef_zero provisioner allowing
57
- berkshelf to use cookbook restrictions loaded from chef environment files.
58
- This way, Berkshelf will allways vendor the cookbook versions specified
59
- in the chef environment.
69
+ description: ! " Plugin for test-kitchen that extends the chef_zero provisioner allowing\n
70
+ \ berkshelf to use cookbook restrictions loaded from chef environment files.\n This
71
+ way, Berkshelf will allways vendor the cookbook versions specified\n in the chef
72
+ environment.\n"
60
73
  email:
61
74
  - mario.rf.santos@gmail.com
62
75
  executables: []
@@ -78,12 +91,12 @@ require_paths:
78
91
  - lib
79
92
  required_ruby_version: !ruby/object:Gem::Requirement
80
93
  requirements:
81
- - - ">="
94
+ - - ! '>='
82
95
  - !ruby/object:Gem::Version
83
96
  version: '0'
84
97
  required_rubygems_version: !ruby/object:Gem::Requirement
85
98
  requirements:
86
- - - ">="
99
+ - - ! '>='
87
100
  - !ruby/object:Gem::Version
88
101
  version: '0'
89
102
  requirements: []