kitchen-chef_zero_berks_env 1.0.0 → 1.1.0

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