chef-raketasks 0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 4a206cd5eb0b4304b19c982c0e229cc682b935d3f60e3a7c7fdb0db9f237a239
4
+ data.tar.gz: 69a5526064b85e790c7e923da858cdd86765d2ab67250485251100c520188607
5
+ SHA512:
6
+ metadata.gz: '01851a1c137d43a58e26a024085911e2936985db9b3ca5b400995b48aa57217d4c6a05b1ebea4dc2558d1a34fbe626383ef32d89dbfb6f47897c7934e0bdd8d6'
7
+ data.tar.gz: 0f2d7f87407e78b1f4bd81a42611272462b50e06b31e486cc5f0a13edc7252afd6e86c3e872bfcab1b573516f0be73863b903c948a37ff01618c43e2c4af17f3
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # Changelog
2
+
3
+ ## Version 0.1.0
4
+
5
+ - Initial version
data/README.md ADDED
@@ -0,0 +1,212 @@
1
+ # chef-raketasks
2
+
3
+ ## Summary
4
+
5
+ A RubyGem which helps out with some technical functionality to
6
+ make life easier with chef.
7
+
8
+ ## Requirements
9
+
10
+ * Chef Infra >= 14.0
11
+ * Gems
12
+ * berkshelf
13
+ * rake
14
+ * yard
15
+
16
+ ## Usage
17
+
18
+ Install gem using ```gem install chef-raketasks``` or add it
19
+ to your Gemfile/.gemspec
20
+
21
+ Include the Gem via ```require 'chef-raketasks'``` at the top of your
22
+ Rakefile. After that, just run ```rake -T``` or ```rake --tasks``` to see all
23
+ available tasks.
24
+
25
+ ## Cleanup Tasks
26
+
27
+ ### rake clean:chefcache
28
+
29
+ Removes cache dirs from any local chef installation.
30
+ Uses always the regular cache dirs of chef, chefdk and workstation.
31
+
32
+ ### rake clean:cookbook
33
+
34
+ Removes any temporary files from a cookbook.
35
+ Based on your current position in your filesystem.
36
+
37
+ ### rake clean:inspec
38
+
39
+ Removes any temporary files from an InSpec profile.
40
+ Based on your current position in your filesystem.
41
+
42
+ ## Installation Tasks
43
+
44
+ ### rake gem:install:static
45
+
46
+ Installs latest version of kitchen-static gem.
47
+
48
+ ### rake gem:install:static:kitchen[version,source]
49
+
50
+ Installs `kitchen-static` for kitchen.
51
+
52
+ * `version`: define a specific version of the gem
53
+ * `source`: define a different source than rubygems.org
54
+
55
+ ### rake gem:install:vcenter
56
+
57
+ Installs latest version of kitchen-vcenter and related gems.
58
+
59
+ ### rake gem:install:vcenter:kitchen[version,source]
60
+
61
+ Installs kitchen-vcenter for kitchen
62
+
63
+ * `version`: define a specific version of the gem
64
+ * `source`: define a different source than rubygems.org
65
+
66
+ ### rake gem:install:vcenter:sdk[version,source]
67
+
68
+ Installs vcenter sdk for kitchen.
69
+
70
+ * `version`: define a specific version of the gem
71
+ * `source`: define a different source than rubygems.org
72
+
73
+ ## Packaging Tasks
74
+
75
+ ### rake package:cookbook
76
+
77
+ Package cookbook as .tgz file.
78
+ Based on your current position in your filesystem.
79
+
80
+ ### rake package:inspec
81
+
82
+ Package InSpec profile as .tgz file
83
+
84
+ ### rake package:policyfile:install
85
+
86
+ Generate new policyfile lock
87
+
88
+ ## Release Tasks
89
+
90
+ ### rake release:artifactory[endpoint,apikey,repokey,path]
91
+
92
+ Upload to Artifactory with required settings like:
93
+
94
+ * `endpoint`: defines the url of artifactory
95
+ * `apikey`: the api key from artifactory with the necessary rights
96
+ * `repokey`: add the repokey for artifactory
97
+ * `path`: add the path within the repo
98
+
99
+ ### rake release:chefserver
100
+
101
+ Upload to Chef Server.
102
+ It uses the current configured supermarket in your knife.rb or config.rb.
103
+
104
+ ### rake release:supermarket
105
+
106
+ Upload to Chef Supermarket.
107
+ It uses the current configured supermarket in your knife.rb or config.rb.
108
+
109
+ ## Test Tasks
110
+
111
+ ### rake test:integration:ec2[regexp,action]
112
+
113
+ Run integration tests on AWS EC2
114
+
115
+ * `regexp`: Suite identifier (when calling `kitchen windows test`, this would be
116
+ `windows`. Default: all)
117
+ * `action`: Kitchen action (default: `test`)
118
+
119
+ For this, your `.kitchen.yml` file gets merged with `.kitchen.ec2.yml` which
120
+ includes the driver settings.
121
+
122
+ Example:
123
+
124
+ ```yaml
125
+ driver:
126
+ name: ec2
127
+ aws_ssh_key_id: testkitchen
128
+ region: eu-west-1
129
+ subnet_id: subnet-123456789
130
+ security_group_ids: [...]
131
+ iam_profile_name: ChefKitchen
132
+ instance_type: t3a.small
133
+ skip_cost_warning: true
134
+ tags:
135
+ Name: ChefKitchen
136
+ CreatedBy: test-kitchen
137
+ ```
138
+
139
+ Details at <https://github.com/test-kitchen/kitchen-ec2>
140
+
141
+ ### rake test:integration:static[regexp,action]
142
+
143
+ Run integration tests using static IPs (e.g. physical hosts).
144
+
145
+ You can add some regex and action like you do with kitchen itself. The platform
146
+ specific file for this task is `.kitchen.static.yml`.
147
+
148
+ Details at <https://github.com/tecracer-theinen/kitchen-static>
149
+
150
+ ### rake test:integration:vagrant[regexp,action]
151
+
152
+ Run integration tests using Vagrant.
153
+
154
+ You can add some regex and action like you do with kitchen itself. The platform
155
+ specific file for this task is `.kitchen.vagrant.yml`.
156
+
157
+ Details at <https://github.com/test-kitchen/kitchen-vagrant>
158
+
159
+ ### rake test:integration:vcenter[regexp,action]
160
+
161
+ Run integration tests using vCenter.
162
+
163
+ You can add some regex and action like you do with kitchen itself. The platform
164
+ specific file for this task is `.kitchen.vcenter.yml`.
165
+
166
+ Details at <https://github.com/chef/kitchen-vcenter>
167
+
168
+
169
+ ### rake test:lint:cookbook
170
+
171
+ Run linting tests for cookbook in current dir.
172
+
173
+ ## Contributing
174
+
175
+ For information on contributing to this project see <https://github.com/chef/chef/blob/master/CONTRIBUTING.md>
176
+
177
+ ## Development
178
+
179
+ * Report issues/questions/feature requests on [GitHub Issues][issues]
180
+ * Source hosted at [GitHub][repo]
181
+
182
+ Pull requests are very welcome! Make sure your patches are well tested.
183
+ Ideally create a topic branch for every separate change you make. For
184
+ example:
185
+
186
+ 1. Fork the repo
187
+ 1. Create your feature branch (`git checkout -b my-new-feature`)
188
+ 1. Commit your changes with signing them (`git commit -s -am 'Added some feature'`)
189
+ 1. Push to the branch (`git push origin my-new-feature`)
190
+ 1. Create new Pull Request
191
+
192
+ ## License
193
+
194
+ Author:: Patrick Schaumburg ([pschaumburg@tecracer.de](mailto:pschaumburg@tecracer.de))
195
+
196
+ Copyright:: Copyright (c) 2020 tecRacer Group
197
+
198
+ License:: Apache License, Version 2.0
199
+
200
+ ```text
201
+ Licensed under the Apache License, Version 2.0 (the "License");
202
+ you may not use this file except in compliance with the License.
203
+ You may obtain a copy of the License at
204
+
205
+ http://www.apache.org/licenses/LICENSE-2.0
206
+
207
+ Unless required by applicable law or agreed to in writing, software
208
+ distributed under the License is distributed on an "AS IS" BASIS,
209
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
210
+ See the License for the specific language governing permissions and
211
+ limitations under the License.
212
+ ```
@@ -0,0 +1,41 @@
1
+ #
2
+ # Author:: Patrick Schaumburg (<pschaumburg@tecracer.de>)
3
+ # Copyright:: Copyright 2020, tecRacer Group
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'rake'
20
+ require 'rake/tasklib'
21
+
22
+ require_relative 'chef/raketasks/clean'
23
+ require_relative 'chef/raketasks/doc'
24
+ require_relative 'chef/raketasks/gem'
25
+ require_relative 'chef/raketasks/package'
26
+ require_relative 'chef/raketasks/release'
27
+ require_relative 'chef/raketasks/test'
28
+ require_relative 'chef/raketasks/version'
29
+
30
+ # Hide tasks which are rescoped or not needed usually
31
+ %w[
32
+ doc
33
+ gem:install:generator
34
+ gem:install:generator:appinstall
35
+ package:policyfile:pack
36
+ package:policyfile:update
37
+ test:integration
38
+ test:unit:cookbook
39
+ ].each do |task|
40
+ Rake::Task[task].clear_comments if Rake::Task.task_defined? task
41
+ end
@@ -0,0 +1,82 @@
1
+ #
2
+ # Author:: Patrick Schaumburg (<pschaumburg@tecracer.de>)
3
+ # Copyright:: Copyright 2020, tecRacer Group
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ module ChefRake
20
+ module Task
21
+ include Rake::DSL if defined? Rake::DSL
22
+ class Clean < ::Rake::TaskLib
23
+ def initialize
24
+
25
+ namespace :clean do
26
+ desc 'Removes cache dirs from any local chef installation'
27
+ task :chefcache do
28
+ cachedirs = [
29
+ ENV['HOME'] + '/.chef/cache',
30
+ ENV['HOME'] + '/.chefdk/cache',
31
+ ENV['HOME'] + '/.chef-workstation/cache'
32
+ ]
33
+ cachedirs.each { |f| FileUtils.rm_rf(Dir.glob(f)) }
34
+ end
35
+
36
+ desc 'Removes any temporary files from a cookbook'
37
+ task :cookbook do
38
+ %w[
39
+ Berksfile.lock
40
+ .bundle
41
+ .cache
42
+ coverage
43
+ doc/
44
+ Gemfile.lock
45
+ .kitchen
46
+ metadata.json
47
+ pkg/
48
+ policies/*.lock.json
49
+ *.lock.json
50
+ reports/
51
+ rspec.xml
52
+ vendor
53
+ .yardoc
54
+ .DS_Store
55
+ ].each { |f| FileUtils.rm_rf(Dir.glob(f)) }
56
+ end
57
+
58
+ desc 'Removes any temporary files from an InSpec profile'
59
+ task :inspec do
60
+ %w[
61
+ inspec.lock
62
+ coverage
63
+ doc/
64
+ Gemfile.lock
65
+ pkg/
66
+ reports/
67
+ rspec.xml
68
+ vendor
69
+ .yardoc
70
+ .DS_Store
71
+ ].each { |f| FileUtils.rm_rf(Dir.glob(f)) }
72
+ end
73
+ end
74
+
75
+ task clean: :'clean:cookbook'
76
+
77
+ end # def initialize
78
+ end # class Clean
79
+ end # module RakeTasks
80
+ end # module Chef
81
+
82
+ ChefRake::Task::Clean.new
@@ -0,0 +1,39 @@
1
+ #
2
+ # Author:: Thomas Heinen (<theinen@tecracer.de>)
3
+ # Copyright:: Copyright 2020, tecRacer Group
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ module ChefRake
20
+ module Task
21
+ include Rake::DSL if defined? Rake::DSL
22
+ class Doc < ::Rake::TaskLib
23
+ def initialize
24
+
25
+ desc 'Generate Ruby documentation'
26
+ task :doc do
27
+ require 'yaml'
28
+ require 'yard'
29
+ YARD::Rake::YardocTask.new do |t|
30
+ t.stats_options = %w[--list-undoc]
31
+ end
32
+ end
33
+
34
+ end # def initialize
35
+ end # class Doc
36
+ end # module RakeTasks
37
+ end # module Chef
38
+
39
+ ChefRake::Task::Doc.new
@@ -0,0 +1,74 @@
1
+ #
2
+ # Author:: Patrick Schaumburg (<pschaumburg@tecracer.de>)
3
+ # Copyright:: Copyright 2020, tecRacer Group
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ module ChefRake
20
+ module Task
21
+ include Rake::DSL if defined? Rake::DSL
22
+ class Gem < ::Rake::TaskLib
23
+ def initialize
24
+
25
+ namespace :gem do
26
+ desc 'gem:install'
27
+ namespace :install do
28
+ def install_gem(name, version, source)
29
+ cmd = 'chef gem install '
30
+ cmd << name + ' '
31
+ cmd << "-v #{version} " unless version.nil?
32
+ cmd << "-s #{source} " unless source.nil?
33
+ cmd << '--no-document'
34
+
35
+ sh cmd
36
+ end
37
+
38
+ # NAMESPACE: gem:install:static
39
+ desc 'Installs necessary static gems for kitchen'
40
+ task static: %i[
41
+ gem:install:static:kitchen
42
+ ]
43
+ namespace :static do
44
+ desc 'Installs kitchen-static for kitchen'
45
+ task :kitchen, [:version, :source] do |_t, args|
46
+ install_gem('kitchen-static', args.version, args.source)
47
+ end
48
+ end
49
+
50
+ # NAMESPACE: gem:install:vcenter
51
+ desc 'Installs necessary vcenter gems for kitchen'
52
+ task vcenter: %i[
53
+ gem:install:vcenter:sdk
54
+ gem:install:vcenter:kitchen
55
+ ]
56
+ namespace :vcenter do
57
+ desc 'Installs vcenter sdk for kitchen'
58
+ task :sdk, [:version, :source] do |_t, args|
59
+ install_gem('vsphere-automation-sdk', args.version, args.source)
60
+ end
61
+
62
+ desc 'Installs kitchen-vcenter for kitchen'
63
+ task :kitchen, [:version, :source] do |_t, args|
64
+ install_gem('kitchen-vcenter', args.version, args.source)
65
+ end
66
+ end # namespace vcenter
67
+ end # namespace install
68
+ end # namespace gem
69
+ end # def initialize
70
+ end # class Gem
71
+ end # module RakeTasks
72
+ end # module Chef
73
+
74
+ ChefRake::Task::Gem.new
@@ -0,0 +1,146 @@
1
+ #
2
+ # Author:: Patrick Schaumburg (<pschaumburg@tecracer.de>)
3
+ # Author:: Thomas Heinen (<theinen@tecracer.de>)
4
+ # Copyright:: Copyright 2020, tecRacer Group
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ module ChefRake
21
+ module Task
22
+ include Rake::DSL if defined? Rake::DSL
23
+ class Package < ::Rake::TaskLib
24
+ def initialize
25
+
26
+ namespace :package do
27
+ desc 'Package cookbook as .tgz file'
28
+ task :cookbook do
29
+ # Berkshelf::Packager does not use chefignore, so a cleanup is necessary before
30
+ Rake::Task['clean:cookbook'].execute
31
+
32
+ require 'berkshelf'
33
+ current_dir = Rake.application.original_dir
34
+ metadata = Chef::Cookbook::Metadata.new
35
+ metadata.from_file File.join(current_dir, 'metadata.rb')
36
+ file_name = format('cookbook-%<name>s-%<version>s.tar.gz', metadata.to_hash.transform_keys(&:to_sym))
37
+ rel_path = File.join('pkg', file_name)
38
+ abs_path = File.join(current_dir, rel_path)
39
+ # Clean up and prepare
40
+ Dir.mkdir('pkg') unless Dir.exist?('pkg')
41
+ packager = Berkshelf::Packager.new abs_path
42
+ packager.run(current_dir)
43
+ printf("Cookbook(s) packaged to %s (size %d bytes)\n", rel_path, File.size(rel_path))
44
+
45
+ rescue StandardError => e
46
+ puts ">>> Gem load error: #{e}, omitting package" unless ENV['CI']
47
+ end
48
+
49
+ desc 'Package InSpec profile as .tgz file'
50
+ task :inspec do
51
+ # Berkshelf::Packager does not use chefignore, so a cleanup is necessary before
52
+ Rake::Task['clean:inspec'].execute
53
+
54
+ require 'inspec'
55
+ require 'train'
56
+ current_dir = Rake.application.original_dir
57
+ pkg_path = File.join(current_dir, 'pkg')
58
+
59
+ data = File.read(File.join(current_dir, 'inspec.yml'))
60
+ metadata = Inspec::Metadata.from_yaml(nil, data, nil)
61
+ metadata_as_hash = metadata.params.to_hash.transform_keys(&:to_sym)
62
+ file_name = format('inspecprofile-%<name>s-%<version>s.tar.gz', metadata_as_hash)
63
+ pkg_rel_path = File.join('pkg', file_name)
64
+ abs_path = File.join(current_dir, pkg_rel_path)
65
+
66
+ Dir.mkdir(pkg_path) unless Dir.exist?(pkg_path)
67
+ Dir.mkdir(ENV['HOME'] + '/.inspec/cache') unless Dir.exist?(ENV['HOME'] + '/.inspec/cache')
68
+
69
+ cmd = Train.create('local', command_runner: :generic).connection
70
+ command = 'inspec'
71
+ command << ' archive ' + current_dir
72
+ command << ' --overwrite'
73
+ command << ' --output ' + abs_path
74
+ # command << ' --vendor-cache=' + ENV['HOME'] + "/.inspec/cache" # looks like this has an error in main code
75
+
76
+ puts command
77
+ cmd.run_command(command)
78
+
79
+ printf("InSpec Profile(s) packaged to %s (size %d bytes)\n", abs_path, File.size(abs_path))
80
+
81
+ rescue StandardError => e
82
+ puts ">>> Gem load error: #{e}, omitting package" unless ENV['CI']
83
+ end
84
+
85
+ namespace :policyfile do
86
+ desc 'Generate new policyfile lock'
87
+ task :install do
88
+ # Rake::Task["clean:policyfile"].execute
89
+ current_dir = Rake.application.original_dir
90
+
91
+ require 'chef-cli/cli'
92
+ policyfile_rel_path = 'Policyfile.rb'
93
+ policyfile_full_path = File.expand_path(policyfile_rel_path, current_dir)
94
+
95
+ cli = ChefCLI::CLI.new(['install', policyfile_full_path])
96
+ subcommand_name, *subcommand_params = cli.argv
97
+ subcommand = cli.instantiate_subcommand(subcommand_name)
98
+ subcommand.run_with_default_options(subcommand_params)
99
+
100
+ rescue StandardError => e
101
+ puts ">>> Gem load error: #{e}, omitting package" unless ENV['CI']
102
+ end
103
+
104
+ desc 'Update current policyfile.lock.json'
105
+ task :update do
106
+ current_dir = Rake.application.original_dir
107
+ require 'chef-cli/cli'
108
+
109
+ policyfile_rel_path = 'Policyfile.rb'
110
+ policyfile_full_path = File.expand_path(policyfile_rel_path, current_dir)
111
+
112
+ cli = ChefCLI::CLI.new(['update', policyfile_full_path])
113
+
114
+ subcommand_name, *subcommand_params = cli.argv
115
+ subcommand = cli.instantiate_subcommand(subcommand_name)
116
+ subcommand.run_with_default_options(subcommand_params)
117
+
118
+ rescue StandardError => e
119
+ puts ">>> Gem load error: #{e}, omitting package" unless ENV['CI']
120
+ end
121
+
122
+ desc 'Pack current policyfile.lock.json'
123
+ task :pack do
124
+ current_dir = Rake.application.original_dir
125
+
126
+ require 'chef-cli/cli'
127
+ policyfile_rel_path = 'Policyfile.rb'
128
+ policyfile_full_path = File.expand_path(policyfile_rel_path, current_dir)
129
+
130
+ cli = ChefCLI::CLI.new(['update', policyfile_full_path])
131
+
132
+ subcommand_name, *subcommand_params = cli.argv
133
+ subcommand = cli.instantiate_subcommand(subcommand_name)
134
+ subcommand.run_with_default_options(subcommand_params)
135
+
136
+ rescue StandardError => e
137
+ puts ">>> Gem load error: #{e}, omitting package" unless ENV['CI']
138
+ end
139
+ end # namespace policyfile
140
+ end # namespace package
141
+ end # def initialize
142
+ end # class Package
143
+ end # module RakeTasks
144
+ end # module Chef
145
+
146
+ ChefRake::Task::Package.new
@@ -0,0 +1,97 @@
1
+ #
2
+ # Author:: Patrick Schaumburg (<pschaumburg@tecracer.de>)
3
+ # Copyright:: Copyright 2020, tecRacer Group
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ module ChefRake
20
+ module Task
21
+ include Rake::DSL if defined? Rake::DSL
22
+ class Release < ::Rake::TaskLib
23
+ def initialize
24
+
25
+ namespace :release do
26
+ desc 'Upload to Artifactory'
27
+ task :artifactory, [:endpoint, :apikey, :repokey, :path] do |_t, args|
28
+ Rake::Task['package:cookbook'].execute
29
+
30
+ require 'berkshelf'
31
+ current_dir = Rake.application.original_dir
32
+ metadata = Chef::Cookbook::Metadata.new
33
+ metadata.from_file File.join(current_dir, 'metadata.rb')
34
+ file_name = format('cookbook-%<name>s-%<version>s.tar.gz', metadata.to_hash.transform_keys(&:to_sym))
35
+ rel_path = File.join('pkg', file_name)
36
+ abs_path = File.join(current_dir, rel_path)
37
+
38
+ require 'artifactory'
39
+ Artifactory.endpoint = args.endpoint # @TODO: Remove trailing slash, if exist
40
+ Artifactory.api_key = args.apikey
41
+ targetpath = args.path + '/' + file_name
42
+
43
+ artifact = Artifactory::Resource::Artifact.new(local_path: abs_path)
44
+ upload = artifact.upload(args.repokey, targetpath)
45
+
46
+ printf("Cookbook released to %s (size %d bytes)\n", upload.uri, upload.size)
47
+ printf("SHA256 Checksum: %s\n", upload.checksums['sha256'])
48
+
49
+ rescue StandardError => e
50
+ puts ">>> Gem load error: #{e}, omitting package" unless ENV['CI']
51
+ end
52
+
53
+ desc 'Upload to Chef Server'
54
+ task :chefserver do
55
+ Rake::Task['clean:cookbook'].execute
56
+
57
+ require 'berkshelf'
58
+ current_dir = Rake.application.original_dir
59
+ parent_dir = File.expand_path('..', current_dir)
60
+ metadata = Chef::Cookbook::Metadata.new
61
+ metadata.from_file File.join(current_dir, 'metadata.rb')
62
+
63
+ cmd = "knife cookbook upload #{metadata.name} --freeze"
64
+ cmd << " --cookbook-path #{parent_dir}"
65
+ sh cmd
66
+
67
+ rescue StandardError => e
68
+ puts ">>> Gem load error: #{e}, omitting package" unless ENV['CI']
69
+ end
70
+
71
+ desc 'Upload to Chef Supermarket'
72
+ task :supermarket do
73
+ Rake::Task['clean:cookbook'].execute
74
+
75
+ require 'berkshelf'
76
+ current_dir = Rake.application.original_dir
77
+ parent_dir = File.expand_path('..', current_dir)
78
+ metadata = Chef::Cookbook::Metadata.new
79
+ metadata.from_file File.join(current_dir, 'metadata.rb')
80
+
81
+ cmd = "knife supermarket share #{metadata.name}"
82
+ cmd << " --cookbook-path #{parent_dir}"
83
+ sh cmd
84
+
85
+ # require 'chef/mixin/shell_out'
86
+ # require 'chef/knife/supermarket_share'
87
+
88
+ rescue StandardError => e
89
+ puts ">>> Gem load error: #{e}, omitting package" unless ENV['CI']
90
+ end
91
+ end # namespace release
92
+ end # def initialize
93
+ end # class Release
94
+ end # module RakeTasks
95
+ end # module Chef
96
+
97
+ ChefRake::Task::Release.new
@@ -0,0 +1,107 @@
1
+ #
2
+ # Author:: Patrick Schaumburg (<pschaumburg@tecracer.de>)
3
+ # Author:: Thomas Heinen (<theinen@tecracer.de>)
4
+ # Copyright:: Copyright 2020, tecRacer Group
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ module ChefRake
21
+ module Task
22
+ include Rake::DSL if defined? Rake::DSL
23
+ class Test < ::Rake::TaskLib
24
+ def initialize
25
+
26
+ namespace :test do
27
+ desc 'Run all integration tests'
28
+ task integration: %i[
29
+ integration:ec2
30
+ integration:physical
31
+ integration:vagrant
32
+ integration:vcenter
33
+ ]
34
+
35
+ namespace :integration do
36
+ def kitchen_instances(regexp, config)
37
+ # Gets a collection of instances.
38
+ #
39
+ # @param regexp [String] regular expression to match against instance names.
40
+ # @param config [Hash] configuration values for the `Kitchen::Config` class.
41
+ # @return [Collection<Instance>] all instances.
42
+ active_config = Kitchen::Config.new(config)
43
+ # If we are in CI mode then add formatter options (@refactor)
44
+ kitchen_config = active_config.send(:data).send(:data)
45
+
46
+ if ENV['CI']
47
+ kitchen_config[:verifier][:reporter] = ['junit:reports/integration/inspec_%{platform}_%{suite}.xml']
48
+ end
49
+
50
+ instances = active_config.instances
51
+ return instances if regexp.nil? || regexp == 'all'
52
+
53
+ instances.get_all(Regexp.new(regexp))
54
+ end
55
+
56
+ def run_kitchen(action, regexp, loader_config = {})
57
+ # Runs a test kitchen action against some instances.
58
+ #
59
+ # @param action [String] kitchen action to run (defaults to `'test'`).
60
+ # @param regexp [String] regular expression to match against instance names.
61
+ # @param loader_config [Hash] loader configuration options.
62
+ # @return void
63
+ action = 'test' if action.nil?
64
+ require 'kitchen'
65
+ Kitchen.logger = Kitchen.default_file_logger
66
+ config = { loader: Kitchen::Loader::YAML.new(loader_config) }
67
+ kitchen_instances(regexp, config).each { |i| i.send(action) }
68
+ rescue StandardError
69
+ # Clean up on any error
70
+ kitchen_instances(regexp, config).each { |i| i.send('destroy') }
71
+ end
72
+
73
+ desc 'Run integration tests on AWS EC2'
74
+ task :ec2, [:regexp, :action] do |_t, args|
75
+ run_kitchen(args.action, args.regexp, local_config: '.kitchen.ec2.yml')
76
+ end
77
+
78
+ desc 'Run integration tests using static IPs'
79
+ task :static, [:regexp, :action] do |_t, args|
80
+ run_kitchen(args.action, args.regexp, local_config: '.kitchen.static.yml')
81
+ end
82
+
83
+ desc 'Run integration tests locally with vagrant'
84
+ task :vagrant, [:regexp, :action] do |_t, args|
85
+ run_kitchen(args.action, args.regexp, local_config: '.kitchen.vagrant.yml')
86
+ end
87
+
88
+ desc 'Run integration tests using vCenter'
89
+ task :vcenter, [:regexp, :action] do |_t, args|
90
+ run_kitchen(args.action, args.regexp, local_config: '.kitchen.vcenter.yml')
91
+ end
92
+ end # namespace integration
93
+
94
+ namespace :lint do
95
+ desc 'Run linting tests for cookbook'
96
+ task :cookbook do
97
+ puts 'running cookstyle for cookbook'
98
+ puts `cookstyle`
99
+ end
100
+ end # namespace lint
101
+ end # namespace test
102
+ end # def initialize
103
+ end # class Test
104
+ end # module RakeTasks
105
+ end # module Chef
106
+
107
+ ChefRake::Task::Test.new
@@ -0,0 +1,23 @@
1
+ #
2
+ # Author:: Patrick Schaumburg (<pschaumburg@tecracer.de>)
3
+ # Copyright:: Copyright 2020, tecRacer Group
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ module ChefRake
20
+ module Task
21
+ VERSION = '0.1.0'.freeze
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,151 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: chef-raketasks
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Patrick Schaumburg
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-04-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mdl
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.4'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop-rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.18'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.18'
41
+ - !ruby/object:Gem::Dependency
42
+ name: berkshelf
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '7.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '7.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: parse_gemspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '13.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '13.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.9'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.9'
97
+ - !ruby/object:Gem::Dependency
98
+ name: yard
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.9'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.9'
111
+ description: Provides a central repository of the most essential tasks
112
+ email:
113
+ - pschaumburg@tecracer.de
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - CHANGELOG.md
119
+ - README.md
120
+ - lib/chef-raketasks.rb
121
+ - lib/chef/raketasks/clean.rb
122
+ - lib/chef/raketasks/doc.rb
123
+ - lib/chef/raketasks/gem.rb
124
+ - lib/chef/raketasks/package.rb
125
+ - lib/chef/raketasks/release.rb
126
+ - lib/chef/raketasks/test.rb
127
+ - lib/chef/raketasks/version.rb
128
+ homepage: https://www.tecracer.de
129
+ licenses:
130
+ - Apache-2.0
131
+ metadata: {}
132
+ post_install_message: Add `require 'chef-raketasks'` to your `Rakefile`.
133
+ rdoc_options: []
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '2.5'
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ requirements: []
147
+ rubygems_version: 3.0.3
148
+ signing_key:
149
+ specification_version: 4
150
+ summary: Collection of reusable Rake tasks for Chef
151
+ test_files: []