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 +13 -5
- data/CHANGELOG.md +6 -1
- data/README.md +16 -0
- data/lib/kitchen/provisioner/chef_zero_berks_env.rb +53 -23
- metadata +28 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
|
|
2
|
+
!binary "U0hBMQ==":
|
|
3
|
+
metadata.gz: !binary |-
|
|
4
|
+
OTk4NjZlOTk3NjM4YWQ1YmI4MTk1ZmJiNmI2YTk0YWU3NWExZWRjOA==
|
|
5
|
+
data.tar.gz: !binary |-
|
|
6
|
+
MWM4M2RmYWRiN2M3NmYyMTZhMmMwNzYyMjIzMTU5NzEwOTRjNzc3Mg==
|
|
5
7
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
|
|
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
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
|
-
|
|
24
|
-
|
|
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.
|
|
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-
|
|
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:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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: []
|