dpl-chef_supermarket 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 25c3c1a3b225a86f7f3c18cfb5e2b0b109d0c420
4
+ data.tar.gz: fdc7157ea05e85dd48319bb6069f4d3b015af4d3
5
+ SHA512:
6
+ metadata.gz: e8d13bc98ef7d7ac14e4de9c1669ec89d033df429df524c634d325dc91a707b6f9c435cbadb86ae1535bb397f865b3685e6bd7bf709c3fd8b070a467f3720a85
7
+ data.tar.gz: 5cbc4f57d8e591d8914e7609b09eb072924d939d75655b77fbd1dad2cb69355d241a9b7cd18de6752efbaeb4be0ed733fa1b1b2113f277825e149c7081b8a076
@@ -0,0 +1,8 @@
1
+ require './gemspec_helper'
2
+
3
+ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.3.0")
4
+ gemspec_for 'chef_supermarket', [['rack'], ['mime-types'], ['chef', '~> 12.0']]
5
+ else
6
+ gemspec_for 'chef_supermarket', [['rack'], ['mime-types'], ['chef']]
7
+ end
8
+
@@ -0,0 +1,77 @@
1
+ require 'chef'
2
+
3
+ module DPL
4
+ class Provider
5
+ class ChefSupermarket < Provider
6
+ # Most of the code is inspired by:
7
+ # https://github.com/opscode/chef/blob/11.16.4/lib/chef/knife/cookbook_site_share.rb
8
+
9
+ attr_reader :cookbook_name, :cookbook_category
10
+ attr_reader :cookbook
11
+
12
+ def needs_key?
13
+ false
14
+ end
15
+
16
+ def check_auth
17
+ error "Missing user_id option" unless options[:user_id]
18
+ error "Missing client_key option" unless options[:client_key]
19
+ ::Chef::Config[:client_key] = options[:client_key]
20
+ error "#{options[:client_key]} does not exist" unless ::File.exist?(options[:client_key])
21
+ end
22
+
23
+ def check_app
24
+ @cookbook_name = options[:cookbook_name] || options[:app]
25
+ @cookbook_category = options[:cookbook_category]
26
+ unless cookbook_category
27
+ error "Missing cookbook_category option\n" +
28
+ "see https://docs.getchef.com/knife_cookbook_site.html#id12"
29
+ end
30
+
31
+ log "Validating cookbook #{cookbook_name}"
32
+ # Check that cookbook exist and is valid
33
+ # So we assume cookbook path is '..'
34
+ cl = ::Chef::CookbookLoader.new '..'
35
+ @cookbook = cl[cookbook_name]
36
+ ::Chef::CookbookUploader.new(cookbook, '..').validate_cookbooks
37
+ end
38
+
39
+ def push_app
40
+ log "Creating cookbook build directory"
41
+ tmp_cookbook_dir = Chef::CookbookSiteStreamingUploader.create_build_dir(cookbook)
42
+ log "Making tarball in #{tmp_cookbook_dir}"
43
+ system("tar -czf #{cookbook_name}.tgz #{cookbook_name}", :chdir => tmp_cookbook_dir)
44
+
45
+ uri = "https://supermarket.chef.io/api/v1/cookbooks"
46
+
47
+ log "Uploading to #{uri}"
48
+ category_string = { 'category'=>cookbook_category }.to_json
49
+ http_resp = ::Chef::CookbookSiteStreamingUploader.post(
50
+ uri,
51
+ options[:user_id],
52
+ options[:client_key],
53
+ {
54
+ :tarball => File.open("#{tmp_cookbook_dir}/#{cookbook_name}.tgz"),
55
+ :cookbook => category_string
56
+ }
57
+ )
58
+ res = ::Chef::JSONCompat.from_json(http_resp.body)
59
+ if http_resp.code.to_i != 201
60
+ if res['error_messages']
61
+ if res['error_messages'][0] =~ /Version already exists/
62
+ error "The same version of this cookbook already exists on the Opscode Cookbook Site."
63
+ else
64
+ error "#{res['error_messages'][0]}"
65
+ end
66
+ else
67
+ error "Unknown error while sharing cookbook\n" +
68
+ "Server response: #{http_resp.body}"
69
+ end
70
+ end
71
+
72
+ log "Upload complete."
73
+ ::FileUtils.rm_rf tmp_cookbook_dir
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+ require 'chef/cookbook_loader'
3
+ require 'chef/cookbook_uploader'
4
+ require 'chef/cookbook_site_streaming_uploader'
5
+ require 'dpl/provider/chef_supermarket'
6
+
7
+ describe DPL::Provider::ChefSupermarket do
8
+ subject :provider do
9
+ described_class.new(
10
+ DummyContext.new,
11
+ app: 'example',
12
+ cookbook_category: 'Others',
13
+ user_id: 'user',
14
+ client_key: '/tmp/example.pem'
15
+ )
16
+ end
17
+
18
+ let(:cookbook_uploader) do
19
+ double('cookbook_uploader', validate_cookbooks: true)
20
+ end
21
+
22
+ let(:http_resp) do
23
+ double('http_resp', body: '{}', code: '201')
24
+ end
25
+
26
+ describe "#check_auth" do
27
+ example do
28
+ ::File.stub(:exist?).and_return(true)
29
+ expect(File).to receive(:exist?)
30
+ provider.check_auth
31
+ end
32
+ end
33
+
34
+ describe "#check_app" do
35
+ example do
36
+ ::Chef::CookbookLoader.any_instance.stub(:[]).and_return nil
37
+ expect(::Chef::CookbookUploader).to receive(:new).and_return(cookbook_uploader)
38
+ provider.check_app
39
+ end
40
+ end
41
+
42
+ describe "#push_app" do
43
+ example do
44
+ expect(::Chef::CookbookSiteStreamingUploader).to receive(:create_build_dir).and_return('/tmp/build_dir')
45
+ expect(provider).to receive(:system).and_return(true)
46
+ expect(::File).to receive(:open)
47
+ expect(::Chef::CookbookSiteStreamingUploader).to receive(:post).and_return(http_resp)
48
+ expect(::FileUtils).to receive(:rm_rf).with('/tmp/build_dir')
49
+ provider.push_app
50
+ end
51
+ end
52
+ end
metadata ADDED
@@ -0,0 +1,201 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dpl-chef_supermarket
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Konstantin Haase
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-03-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dpl
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.9.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.9.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rack
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mime-types
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: chef
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec-its
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: json_pure
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: tins
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: coveralls
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: highline
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ description: deploy tool abstraction for clients
168
+ email: konstantin.mailinglists@googlemail.com
169
+ executables: []
170
+ extensions: []
171
+ extra_rdoc_files: []
172
+ files:
173
+ - dpl-chef_supermarket.gemspec
174
+ - lib/dpl/provider/chef_supermarket.rb
175
+ - spec/provider/chef_supermarket_spec.rb
176
+ homepage: https://github.com/travis-ci/dpl
177
+ licenses:
178
+ - MIT
179
+ metadata: {}
180
+ post_install_message:
181
+ rdoc_options: []
182
+ require_paths:
183
+ - lib
184
+ required_ruby_version: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '2.2'
189
+ required_rubygems_version: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ requirements: []
195
+ rubyforge_project:
196
+ rubygems_version: 2.6.13
197
+ signing_key:
198
+ specification_version: 4
199
+ summary: deploy tool
200
+ test_files:
201
+ - spec/provider/chef_supermarket_spec.rb