cookbook-omnifetch 0.7.0 → 0.10.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 +5 -5
- data/lib/cookbook-omnifetch.rb +17 -13
- data/lib/cookbook-omnifetch/artifactory.rb +10 -5
- data/lib/cookbook-omnifetch/artifactserver.rb +1 -1
- data/lib/cookbook-omnifetch/base.rb +1 -1
- data/lib/cookbook-omnifetch/chef_server.rb +14 -3
- data/lib/cookbook-omnifetch/chef_server_artifact.rb +15 -4
- data/lib/cookbook-omnifetch/git.rb +3 -3
- data/lib/cookbook-omnifetch/integration.rb +6 -1
- data/lib/cookbook-omnifetch/metadata_based_installer.rb +14 -13
- data/lib/cookbook-omnifetch/path.rb +1 -1
- data/lib/cookbook-omnifetch/threaded_job_queue.rb +1 -1
- data/lib/cookbook-omnifetch/version.rb +1 -1
- metadata +15 -85
- data/.gitignore +0 -23
- data/.rspec +0 -1
- data/.travis.yml +0 -11
- data/Gemfile +0 -8
- data/README.md +0 -90
- data/Rakefile +0 -19
- data/cookbook-omnifetch.gemspec +0 -39
- data/spec/fixtures/cookbooks/example_cookbook-0.5.0/README.md +0 -12
- data/spec/fixtures/cookbooks/example_cookbook-0.5.0/metadata.rb +0 -3
- data/spec/fixtures/cookbooks/example_cookbook-0.5.0/recipes/default.rb +0 -8
- data/spec/fixtures/cookbooks/example_cookbook/.gitignore +0 -2
- data/spec/fixtures/cookbooks/example_cookbook/.kitchen.yml +0 -26
- data/spec/fixtures/cookbooks/example_cookbook/Berksfile +0 -1
- data/spec/fixtures/cookbooks/example_cookbook/Berksfile.lock +0 -3
- data/spec/fixtures/cookbooks/example_cookbook/README.md +0 -12
- data/spec/fixtures/cookbooks/example_cookbook/metadata.rb +0 -3
- data/spec/fixtures/cookbooks/example_cookbook/recipes/default.rb +0 -8
- data/spec/spec_helper.rb +0 -43
- data/spec/unit/artifactory_spec.rb +0 -64
- data/spec/unit/artifactserver_spec.rb +0 -116
- data/spec/unit/base_spec.rb +0 -87
- data/spec/unit/chef_server_artifact_spec.rb +0 -74
- data/spec/unit/chef_server_spec.rb +0 -72
- data/spec/unit/exceptions_spec.rb +0 -87
- data/spec/unit/git_spec.rb +0 -290
- data/spec/unit/metadata_based_installer_spec.rb +0 -137
- data/spec/unit/path_spec.rb +0 -119
data/.gitignore
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
*.gem
|
2
|
-
*.rbc
|
3
|
-
.bundle
|
4
|
-
.config
|
5
|
-
.yardoc
|
6
|
-
Gemfile.lock
|
7
|
-
InstalledFiles
|
8
|
-
_yardoc
|
9
|
-
coverage
|
10
|
-
doc/
|
11
|
-
lib/bundler/man
|
12
|
-
pkg
|
13
|
-
rdoc
|
14
|
-
spec/reports
|
15
|
-
test/tmp
|
16
|
-
test/version_tmp
|
17
|
-
tmp
|
18
|
-
*.bundle
|
19
|
-
*.so
|
20
|
-
*.o
|
21
|
-
*.a
|
22
|
-
mkmf.log
|
23
|
-
.idea/*
|
data/.rspec
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
-c -f documentation
|
data/.travis.yml
DELETED
data/Gemfile
DELETED
data/README.md
DELETED
@@ -1,90 +0,0 @@
|
|
1
|
-
# CookbookOmnifetch
|
2
|
-
|
3
|
-
`CookbookOmnifetch` provides library code for fetching Chef cookbooks
|
4
|
-
from an artifact server (usually https://supermarket.chef.io),
|
5
|
-
git/github, a local path, or a chef-server to a local cache for
|
6
|
-
developement.
|
7
|
-
|
8
|
-
## Installation
|
9
|
-
|
10
|
-
Add this line to your application's Gemfile:
|
11
|
-
|
12
|
-
gem 'cookbook-omnifetch'
|
13
|
-
|
14
|
-
And then execute:
|
15
|
-
|
16
|
-
$ bundle
|
17
|
-
|
18
|
-
Or install it yourself as:
|
19
|
-
|
20
|
-
$ gem install cookbook-omnifetch
|
21
|
-
|
22
|
-
## Usage
|
23
|
-
|
24
|
-
#### Inject Dependencies and Configure
|
25
|
-
|
26
|
-
Cookbook Omnifetch is designed to work with utilities from both the
|
27
|
-
Berkshelf and Chef Software ecosystems, so you have to configure it
|
28
|
-
before you can use it. In ChefDK, we do this:
|
29
|
-
|
30
|
-
```ruby
|
31
|
-
# Configure CookbookOmnifetch's dependency injection settings to use our classes and config.
|
32
|
-
CookbookOmnifetch.configure do |c|
|
33
|
-
c.cache_path = File.expand_path('~/.chefdk/cache')
|
34
|
-
c.storage_path = Pathname.new(File.expand_path('~/.chefdk/cache/cookbooks'))
|
35
|
-
c.shell_out_class = ChefDK::ShellOut
|
36
|
-
c.cached_cookbook_class = ChefDK::CookbookMetadata
|
37
|
-
end
|
38
|
-
```
|
39
|
-
|
40
|
-
#### Fetching Cookbooks
|
41
|
-
|
42
|
-
To download a cookbook:
|
43
|
-
|
44
|
-
```ruby
|
45
|
-
fetcher = CookbookOmnifetch.init(dependency, source_options)
|
46
|
-
fetcher.install
|
47
|
-
```
|
48
|
-
|
49
|
-
To specify the cookbook you want, you give CookbookOmnifetch a
|
50
|
-
dependency object that responds to `#name` and `#version_constraint`,
|
51
|
-
e.g.:
|
52
|
-
|
53
|
-
```ruby
|
54
|
-
require 'semverse'
|
55
|
-
|
56
|
-
Dependency = Struct.new(:name, :version_constraint)
|
57
|
-
|
58
|
-
my_dep = Dependency.new("apache2", Semverse::Constraint.new("~> 1.0"))
|
59
|
-
```
|
60
|
-
|
61
|
-
The source options for the cookbook are given as a Hash; the keys and
|
62
|
-
values vary based on the kind of storage location. As with Bundler's
|
63
|
-
`gem` options, one key specifies the type of upstream service for the
|
64
|
-
cookbook while other keys specify other options specific to that type.
|
65
|
-
For example:
|
66
|
-
|
67
|
-
```ruby
|
68
|
-
CookbookOmnifetch.init(dependency, artifact_server: "https://supermarket.chef.io/api/v1/cookbooks/apache2/versions/3.0.1/download")
|
69
|
-
CookbookOmnifetch.init(dependency, git: "git@github.com:svanzoest/apache2-cookbook.git", tag: "v3.0.1")
|
70
|
-
CookbookOmnifetch.init(dependency, github: "svanzoest/apache2-cookbook", tag: "v3.0.1")
|
71
|
-
CookbookOmnifetch.init(dependency, path: "~/chef-cookbooks/apache2")
|
72
|
-
```
|
73
|
-
|
74
|
-
## Contributing
|
75
|
-
|
76
|
-
For information on contributing to this project, see https://github.com/chef/chef/blob/master/CONTRIBUTING.md
|
77
|
-
|
78
|
-
After that:
|
79
|
-
|
80
|
-
1. Fork it
|
81
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
82
|
-
3. Commit your changes (`git commit -asm 'Add some feature'`)
|
83
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
84
|
-
5. Create a new Pull Request
|
85
|
-
|
86
|
-
## Thanks
|
87
|
-
|
88
|
-
This code was initially extracted from Berkshelf. Thanks to the
|
89
|
-
Berkshelf core teams and contributors.
|
90
|
-
|
data/Rakefile
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
2
|
-
require "rspec/core/rake_task"
|
3
|
-
|
4
|
-
RSpec::Core::RakeTask.new(:spec)
|
5
|
-
|
6
|
-
task :default => :spec
|
7
|
-
|
8
|
-
desc "Run tests for Travis CI"
|
9
|
-
task ci: [:style, :spec]
|
10
|
-
|
11
|
-
begin
|
12
|
-
require "chefstyle"
|
13
|
-
require "rubocop/rake_task"
|
14
|
-
RuboCop::RakeTask.new(:style) do |task|
|
15
|
-
task.options += ["--display-cop-names", "--no-color"]
|
16
|
-
end
|
17
|
-
rescue LoadError
|
18
|
-
puts "chefstyle/rubocop is not available. gem install chefstyle to do style checking."
|
19
|
-
end
|
data/cookbook-omnifetch.gemspec
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
lib = File.expand_path("../lib", __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require "cookbook-omnifetch/version"
|
5
|
-
|
6
|
-
Gem::Specification.new do |spec|
|
7
|
-
spec.name = "cookbook-omnifetch"
|
8
|
-
spec.version = CookbookOmnifetch::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
"Jamie Winsor",
|
11
|
-
"Josiah Kiehl",
|
12
|
-
"Michael Ivey",
|
13
|
-
"Justin Campbell",
|
14
|
-
"Seth Vargo",
|
15
|
-
"Daniel DeLeo",
|
16
|
-
]
|
17
|
-
spec.email = [
|
18
|
-
"jamie@vialstudios.com",
|
19
|
-
"jkiehl@riotgames.com",
|
20
|
-
"michael.ivey@riotgames.com",
|
21
|
-
"justin@justincampbell.me",
|
22
|
-
"sethvargo@gmail.com",
|
23
|
-
"dan@getchef.com",
|
24
|
-
]
|
25
|
-
spec.summary = %q{Library code to fetch Chef cookbooks from a variety of sources to a local cache}
|
26
|
-
spec.homepage = "http://www.getchef.com/"
|
27
|
-
spec.license = "Apache 2.0"
|
28
|
-
|
29
|
-
spec.files = `git ls-files -z`.split("\x0")
|
30
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
31
|
-
spec.test_files = spec.files.grep(%r{^spec/})
|
32
|
-
spec.require_paths = ["lib"]
|
33
|
-
|
34
|
-
spec.add_dependency "mixlib-archive", "~> 0.4"
|
35
|
-
|
36
|
-
spec.add_development_dependency "rake"
|
37
|
-
spec.add_development_dependency "rspec", "~> 3.0"
|
38
|
-
|
39
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
---
|
2
|
-
driver_plugin: vagrant
|
3
|
-
|
4
|
-
platforms:
|
5
|
-
- name: ubuntu-12.04
|
6
|
-
driver_config:
|
7
|
-
box: canonical-ubuntu-12.04
|
8
|
-
box_url: http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box
|
9
|
-
require_chef_omnibus: true
|
10
|
-
- name: ubuntu-10.04
|
11
|
-
driver_config:
|
12
|
-
box: opscode-ubuntu-10.04
|
13
|
-
box_url: http://opscode-vm.s3.amazonaws.com/vagrant/opscode_ubuntu-10.04_chef-11.2.0.box
|
14
|
-
- name: centos-6.3
|
15
|
-
driver_config:
|
16
|
-
box: opscode-centos-6.3
|
17
|
-
box_url: http://opscode-vm.s3.amazonaws.com/vagrant/opscode_centos-6.3_chef-11.2.0.box
|
18
|
-
- name: centos-5.8
|
19
|
-
driver_config:
|
20
|
-
box: opscode-centos-5.8
|
21
|
-
box_url: http://opscode-vm.s3.amazonaws.com/vagrant/opscode_centos-5.8_chef-11.2.0.box
|
22
|
-
|
23
|
-
suites:
|
24
|
-
- name: default
|
25
|
-
run_list: []
|
26
|
-
attributes: {}
|
@@ -1 +0,0 @@
|
|
1
|
-
site :opscode
|
data/spec/spec_helper.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
require "cookbook-omnifetch"
|
2
|
-
|
3
|
-
module Fixtures
|
4
|
-
|
5
|
-
def fixtures_path
|
6
|
-
spec_root.join("fixtures")
|
7
|
-
end
|
8
|
-
|
9
|
-
def spec_root
|
10
|
-
Pathname.new(File.expand_path(File.dirname(__FILE__)))
|
11
|
-
end
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
module MockShellOut; end
|
16
|
-
module MockCachedCookbook; end
|
17
|
-
|
18
|
-
RSpec.configure do |config|
|
19
|
-
|
20
|
-
config.raise_errors_for_deprecations!
|
21
|
-
|
22
|
-
config.include Fixtures
|
23
|
-
|
24
|
-
config.expect_with :rspec do |c|
|
25
|
-
c.syntax = [:expect]
|
26
|
-
end
|
27
|
-
config.mock_with :rspec do |c|
|
28
|
-
c.syntax = [:expect, :should]
|
29
|
-
end
|
30
|
-
|
31
|
-
config.filter_run :focus => true
|
32
|
-
|
33
|
-
config.run_all_when_everything_filtered = true
|
34
|
-
|
35
|
-
config.before(:suite) do
|
36
|
-
CookbookOmnifetch.configure do |c|
|
37
|
-
c.cache_path = File.expand_path("~/.berkshelf")
|
38
|
-
c.storage_path = Pathname.new(File.expand_path("~/.berkshelf/cookbooks"))
|
39
|
-
c.shell_out_class = MockShellOut
|
40
|
-
c.cached_cookbook_class = MockCachedCookbook
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "cookbook-omnifetch/artifactory"
|
3
|
-
require "zlib"
|
4
|
-
require "archive/tar/minitar"
|
5
|
-
|
6
|
-
module CookbookOmnifetch
|
7
|
-
describe ArtifactoryLocation do
|
8
|
-
|
9
|
-
let(:cookbook_name) { "nginx" }
|
10
|
-
|
11
|
-
let(:cookbook_version) { "1.5.23" }
|
12
|
-
|
13
|
-
let(:http_client) { double("Chef::HTTP::Simple") }
|
14
|
-
|
15
|
-
let(:constraint) { double("Constraint") }
|
16
|
-
|
17
|
-
let(:dependency) { double("Dependency", name: cookbook_name, constraint: constraint) }
|
18
|
-
|
19
|
-
let(:url) { "https://artifactory.example.com/api/v1/cookbooks/nginx/versions/1.5.23/download" }
|
20
|
-
|
21
|
-
let(:options) { { artifactory: url, version: cookbook_version, http_client: http_client } }
|
22
|
-
|
23
|
-
subject(:public_repo_location) { described_class.new(dependency, options) }
|
24
|
-
|
25
|
-
it "has a URI" do
|
26
|
-
expect(public_repo_location.uri).to eq(url)
|
27
|
-
end
|
28
|
-
|
29
|
-
it "has a repo host" do
|
30
|
-
expect(public_repo_location.repo_host).to eq("artifactory.example.com")
|
31
|
-
end
|
32
|
-
|
33
|
-
it "has an exact version" do
|
34
|
-
expect(public_repo_location.cookbook_version).to eq("1.5.23")
|
35
|
-
end
|
36
|
-
|
37
|
-
it "has a cache key containing the site URI and version" do
|
38
|
-
expect(public_repo_location.cache_key).to eq("nginx-1.5.23-artifactory.example.com")
|
39
|
-
end
|
40
|
-
|
41
|
-
it "sets the install location as the cache path plus cache key" do
|
42
|
-
expected_install_path = Pathname.new("~/.berkshelf/cookbooks").expand_path.join("nginx-1.5.23-artifactory.example.com")
|
43
|
-
expect(public_repo_location.install_path).to eq(expected_install_path)
|
44
|
-
end
|
45
|
-
|
46
|
-
it "considers the cookbook installed if it exists in the main cache" do
|
47
|
-
expect(public_repo_location.install_path).to receive(:exist?).and_return(true)
|
48
|
-
expect(public_repo_location.installed?).to be true
|
49
|
-
end
|
50
|
-
|
51
|
-
it "considers the cookbook not installed if it doesn't exist in the main cache" do
|
52
|
-
expect(public_repo_location.install_path).to receive(:exist?).and_return(false)
|
53
|
-
expect(public_repo_location.installed?).to be false
|
54
|
-
end
|
55
|
-
|
56
|
-
it "provides lock data as a Hash" do
|
57
|
-
expected_data = {
|
58
|
-
"artifactory" => url,
|
59
|
-
"version" => "1.5.23",
|
60
|
-
}
|
61
|
-
expect(public_repo_location.lock_data).to eq(expected_data)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,116 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "cookbook-omnifetch/artifactserver"
|
3
|
-
require "zlib"
|
4
|
-
require "archive/tar/minitar"
|
5
|
-
|
6
|
-
module CookbookOmnifetch
|
7
|
-
describe ArtifactserverLocation do
|
8
|
-
|
9
|
-
let(:cookbook_name) { "nginx" }
|
10
|
-
|
11
|
-
let(:cookbook_version) { "1.5.23" }
|
12
|
-
|
13
|
-
let(:constraint) { double("Constraint") }
|
14
|
-
|
15
|
-
let(:dependency) { double("Dependency", name: cookbook_name, constraint: constraint) }
|
16
|
-
|
17
|
-
let(:url) { "https://supermarket.getchef.com/api/v1/cookbooks/nginx/versions/1.5.23/download" }
|
18
|
-
|
19
|
-
let(:options) { { artifactserver: url, version: cookbook_version } }
|
20
|
-
|
21
|
-
subject(:public_repo_location) { described_class.new(dependency, options) }
|
22
|
-
|
23
|
-
it "has a URI" do
|
24
|
-
expect(public_repo_location.uri).to eq(url)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "has a repo host" do
|
28
|
-
expect(public_repo_location.repo_host).to eq("supermarket.getchef.com")
|
29
|
-
end
|
30
|
-
|
31
|
-
it "has an exact version" do
|
32
|
-
expect(public_repo_location.cookbook_version).to eq("1.5.23")
|
33
|
-
end
|
34
|
-
|
35
|
-
it "has a cache key containing the site URI and version" do
|
36
|
-
expect(public_repo_location.cache_key).to eq("nginx-1.5.23-supermarket.getchef.com")
|
37
|
-
end
|
38
|
-
|
39
|
-
it "sets the install location as the cache path plus cache key" do
|
40
|
-
expected_install_path = Pathname.new("~/.berkshelf/cookbooks").expand_path.join("nginx-1.5.23-supermarket.getchef.com")
|
41
|
-
expect(public_repo_location.install_path).to eq(expected_install_path)
|
42
|
-
end
|
43
|
-
|
44
|
-
it "considers the cookbook installed if it exists in the main cache" do
|
45
|
-
expect(public_repo_location.install_path).to receive(:exist?).and_return(true)
|
46
|
-
expect(public_repo_location.installed?).to be true
|
47
|
-
end
|
48
|
-
|
49
|
-
it "considers the cookbook not installed if it doesn't exist in the main cache" do
|
50
|
-
expect(public_repo_location.install_path).to receive(:exist?).and_return(false)
|
51
|
-
expect(public_repo_location.installed?).to be false
|
52
|
-
end
|
53
|
-
|
54
|
-
it "provides lock data as a Hash" do
|
55
|
-
expected_data = {
|
56
|
-
"artifactserver" => url,
|
57
|
-
"version" => "1.5.23",
|
58
|
-
}
|
59
|
-
expect(public_repo_location.lock_data).to eq(expected_data)
|
60
|
-
end
|
61
|
-
|
62
|
-
context "when asked to install a new cookbook" do
|
63
|
-
|
64
|
-
let(:http_client) { double("Http Client") }
|
65
|
-
|
66
|
-
let(:test_root) { Dir.mktmpdir(nil) }
|
67
|
-
|
68
|
-
let(:storage_path) { File.join(test_root, "storage") }
|
69
|
-
|
70
|
-
let(:cache_path) { File.join(test_root, "cache") }
|
71
|
-
|
72
|
-
let(:cookbook_fixtures_path) { fixtures_path.join("cookbooks") }
|
73
|
-
|
74
|
-
let(:cookbook_name) { "example_cookbook" }
|
75
|
-
|
76
|
-
let(:cookbook_version) { "0.5.0" }
|
77
|
-
|
78
|
-
let(:cookbook_tarball_handle) do
|
79
|
-
gz_file_name = File.join(test_root, "input.gz")
|
80
|
-
Zlib::GzipWriter.open(gz_file_name) do |gz|
|
81
|
-
# Minitar writes the full paths provided and doesn't seem to have a way to
|
82
|
-
# remove prefixes. So we chdir like barbarians.
|
83
|
-
Dir.chdir(cookbook_fixtures_path) do
|
84
|
-
Archive::Tar::Minitar.pack(cookbook_name, gz)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
File.open(gz_file_name)
|
88
|
-
end
|
89
|
-
|
90
|
-
let(:cookbook_files) { %w{. .. .gitignore .kitchen.yml Berksfile Berksfile.lock metadata.rb README.md recipes} }
|
91
|
-
|
92
|
-
before do
|
93
|
-
allow(CookbookOmnifetch).to receive(:storage_path).and_return(Pathname.new(storage_path))
|
94
|
-
allow(CookbookOmnifetch).to receive(:cache_path).and_return(cache_path)
|
95
|
-
FileUtils.mkdir_p(storage_path)
|
96
|
-
end
|
97
|
-
|
98
|
-
after do
|
99
|
-
FileUtils.rm_r(test_root)
|
100
|
-
end
|
101
|
-
|
102
|
-
it "installs the cookbook to the desired install path" do
|
103
|
-
expect(public_repo_location).to receive(:http_client).and_return(http_client)
|
104
|
-
expect(cookbook_tarball_handle).to receive(:close).and_call_original
|
105
|
-
expect(http_client).to receive(:streaming_request).with(nil).and_yield(cookbook_tarball_handle)
|
106
|
-
expect(public_repo_location).to receive(:validate_cached!)
|
107
|
-
|
108
|
-
public_repo_location.install
|
109
|
-
|
110
|
-
expect(File).to exist(public_repo_location.cache_path)
|
111
|
-
expect(Dir).to exist(public_repo_location.install_path)
|
112
|
-
expect(Dir.entries(public_repo_location.install_path)).to match_array(cookbook_files)
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|