souschef 0.4.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 +7 -0
- data/.gitignore +22 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +177 -0
- data/Rakefile +1 -0
- data/bin/souschef +33 -0
- data/data/chefspec/chefspec.erb +6 -0
- data/data/chefspec/spec_helper.rb +8 -0
- data/data/gemfile.yml +23 -0
- data/data/license.erb +3 -0
- data/data/metadata.erb +7 -0
- data/data/rakefile.erb +39 -0
- data/data/readme.erb +47 -0
- data/data/recipe/recipe.erb +6 -0
- data/data/rubocop/rubocop.yml +19 -0
- data/data/serverspec/serverspec.erb +2 -0
- data/data/serverspec/serverspec_helper.rb +10 -0
- data/data/testkitchen/kitchen.default.erb +22 -0
- data/lib/souschef.rb +16 -0
- data/lib/souschef/berkshelf.rb +93 -0
- data/lib/souschef/config.rb +20 -0
- data/lib/souschef/configure/file.rb +46 -0
- data/lib/souschef/gemfile.rb +42 -0
- data/lib/souschef/print.rb +40 -0
- data/lib/souschef/runner.rb +104 -0
- data/lib/souschef/scaffold.rb +145 -0
- data/lib/souschef/template.rb +26 -0
- data/lib/souschef/template/base.rb +69 -0
- data/lib/souschef/template/chefspec.rb +26 -0
- data/lib/souschef/template/license.rb +25 -0
- data/lib/souschef/template/metadata.rb +30 -0
- data/lib/souschef/template/rakefile.rb +23 -0
- data/lib/souschef/template/readme.rb +24 -0
- data/lib/souschef/template/rubocop.rb +22 -0
- data/lib/souschef/template/serverspec.rb +27 -0
- data/lib/souschef/testkitchen.rb +135 -0
- data/lib/souschef/testkitchen/docker.rb +97 -0
- data/lib/souschef/testkitchen/solusvm.rb +101 -0
- data/lib/souschef/testkitchen/virtualbox.rb +66 -0
- data/lib/souschef/version.rb +4 -0
- data/souschef.gemspec +33 -0
- metadata +254 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8346f12ba0184f1d32193a4f9fe4fddb1b4d8048
|
4
|
+
data.tar.gz: 93f8a98bd81ede8f3638f81f19db3fa283e73ae4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 20e084327520acbc3f39404a85c47a55dc438a36dcb94396ed67357a508606ce1928fdb97b9ff04cae0d441c3669fab07f1f5a4f9b4100f1bc27bdcc5a49b66c
|
7
|
+
data.tar.gz: eabede258978b53326a716ffbd93b01d6db9a32a5bbc4b36161d171bfe208473ed4bb66ffffdcd48cbd7cc4a2f5a219e09f34ba6576c4354e6e8f62079afb15b
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
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
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Antun Krasic
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
# Souschef
|
2
|
+
|
3
|
+
Souschef is a helper script to aid with starting a developing Chef cookbook by automating the creation of cookbook per standards.
|
4
|
+
|
5
|
+
Cookbook creation uses following steps:
|
6
|
+
- Using Berkshelf to create the cookbook structure
|
7
|
+
- Populates the `Gemfile`, `.kitchen.yml`, `.rubocop.yml`
|
8
|
+
- Adjusts the `metadata.rb`, `README` and `LICENSE`
|
9
|
+
- Configured directorie and places `spec_helper.rb` for Chefspec and Serverspec
|
10
|
+
- Adds `Rakefile` which runs Foodcritic, Rubocop, RSpec and TestKitchecn tests
|
11
|
+
|
12
|
+
Souschef also can create new recipe and spec test files for you:
|
13
|
+
- file under `recipes/` directory
|
14
|
+
- file under `spec/unit/` directory
|
15
|
+
- file under `test/integration/default/serverspec/localhost/` directory
|
16
|
+
|
17
|
+
|
18
|
+
## Installation
|
19
|
+
Clone this repository and do:
|
20
|
+
`gem build souschef.gemspec`
|
21
|
+
`gem install souschef-*.gem`
|
22
|
+
|
23
|
+
|
24
|
+
# Getting started
|
25
|
+
First off you'd need to generate your configuration file that will hold data
|
26
|
+
about your profile - `maintainer`, `maintainer_email` and `license` which are
|
27
|
+
written to the `~/.souschef.yml` file.
|
28
|
+
Additionally, you can have several profiles specified by the `--profile` argument.
|
29
|
+
|
30
|
+
**Creating default configuration**
|
31
|
+
|
32
|
+
`souschef --configure --maintainer 'John Doe' --maintainer-email 'john@doe.com' --license 'MIT'`
|
33
|
+
|
34
|
+
or
|
35
|
+
|
36
|
+
`souschef --profile 'default' --configure --maintainer 'John Doe' --maintainer-email 'john@doe.com' --license 'MIT'`
|
37
|
+
## Usage
|
38
|
+
|
39
|
+
Currently available options:
|
40
|
+
|
41
|
+
```
|
42
|
+
Options:
|
43
|
+
--cookbook <s>: Name of your cookbook
|
44
|
+
--path <s>: Define cookbook directory path (relative)
|
45
|
+
--testkitchen <s>: Pick your additional configuration to create
|
46
|
+
.kitchen.local.yml file
|
47
|
+
--scaffold: Create recipe, chefspec and serverspec files for
|
48
|
+
recipe
|
49
|
+
--recipe <s>: Recipe name, used along with --scaffold
|
50
|
+
--profile <s>: Pick your configuration profile (default: default)
|
51
|
+
--force: Force create action
|
52
|
+
--configure: Create configuration file
|
53
|
+
--verbose: Print out detailed information
|
54
|
+
--maintainer <s>: Maintainer name
|
55
|
+
--maintainer-email <s>: Maintainer email
|
56
|
+
--license <s>: Licese you want to use, be explicit
|
57
|
+
|
58
|
+
```
|
59
|
+
|
60
|
+
# Example usage
|
61
|
+
**Create cookbook in current directory**
|
62
|
+
|
63
|
+
`souschef --cookbook mycb --verbose`
|
64
|
+
|
65
|
+
**Create cookbook using alternate profile from your configuration file**
|
66
|
+
|
67
|
+
`souschef --cookbook mycb --profile other --verbose`
|
68
|
+
|
69
|
+
**Create cookbook in a subfolder of current directory**
|
70
|
+
|
71
|
+
`souschef --cookbook mycb --path subdir --verbose`
|
72
|
+
|
73
|
+
**Use scaffold to get you started writing a new recipe and tests**
|
74
|
+
|
75
|
+
`souschef --scaffold --recipe install`
|
76
|
+
|
77
|
+
# Profile support
|
78
|
+
Souschef lets you one or several profiles/configurations under one roof, to get
|
79
|
+
started simply configure it via:
|
80
|
+
|
81
|
+
```
|
82
|
+
souschef --configure --maintainer "YOUR NAME" \
|
83
|
+
--maintainer-email "YOUR EMAIL" \
|
84
|
+
--license "Restricted license, do not touch"
|
85
|
+
```
|
86
|
+
|
87
|
+
Profile configuration is written inside `~/.souschef.yml` file and can be easily
|
88
|
+
edited by hand if needed.
|
89
|
+
|
90
|
+
# Note on TestKitchen
|
91
|
+
Souschef uses a default template for TestKitchen `.kitchen.yaml`. If this
|
92
|
+
doesn't fit your needs, please check the section on custimization and create
|
93
|
+
your own `.kitchen.default.erb` template.
|
94
|
+
|
95
|
+
If you are sporting Docker, DigitalOcean or any other TestKitchen driver please
|
96
|
+
follow these steps to make it into your newly generated cookbook:
|
97
|
+
|
98
|
+
**Create testkitchen directory for your profile**
|
99
|
+
|
100
|
+
Assuming that your will be using this for the "default" profile, but adjust
|
101
|
+
accordingly:
|
102
|
+
|
103
|
+
`mkdir -p ~/.souschef/default/testkitchen/`
|
104
|
+
|
105
|
+
**Create your new ERB driver configuration**
|
106
|
+
|
107
|
+
To differentiate between drivers, TestKitchen template filename has the
|
108
|
+
following format: kitchen.DRIVER.yml
|
109
|
+
If you want to use your own Docker TestKitchen configuration please create
|
110
|
+
following file and populate it with a valid YAML syntax.
|
111
|
+
|
112
|
+
`vim ~/.souschef/default/testkitchen/kitchen.docker.erb`
|
113
|
+
|
114
|
+
**Create your new cookbook using TestKitchen Docker tempalte**
|
115
|
+
|
116
|
+
`souschef --cookbook mycb --testkitchen docker`
|
117
|
+
|
118
|
+
Souschef will create following standard `.kitchen.yml` file and
|
119
|
+
`.kitchen.local.yml` holding your Docker configuration. If you have a custom
|
120
|
+
`kitchen.default.erb` Souschef will use that to generate `.kitchen.yml` over the
|
121
|
+
bundled template.
|
122
|
+
|
123
|
+
# Customization
|
124
|
+
|
125
|
+
When creating a cookbook, Souschef will look first if a custom directory for the
|
126
|
+
chosen profile exists - `~/.souschef/$PROFILE` and search if the template it is
|
127
|
+
currently creating exists there - if so, it will be used instead of the bundled
|
128
|
+
one.
|
129
|
+
|
130
|
+
|
131
|
+
You can customize the default configuration that comes with few easy steps,
|
132
|
+
below is an example for a custom recipe file
|
133
|
+
|
134
|
+
**Create ~/.souschef/ directory for chosen profile**
|
135
|
+
|
136
|
+
`mkdir -p ~/souschef/default/recipe`
|
137
|
+
|
138
|
+
**Create your own rubocop.yml file**
|
139
|
+
|
140
|
+
`vim ~/.shouschef/default/recipe/recipe.erb`
|
141
|
+
|
142
|
+
**Run souschef command and you will see following in the output**
|
143
|
+
|
144
|
+
```
|
145
|
+
~> Create default[recipe] from /home/user/.souschef/default/recipe/recipe.erb
|
146
|
+
```
|
147
|
+
|
148
|
+
**Full directory structure of custom files**
|
149
|
+
|
150
|
+
```
|
151
|
+
├── chefspec
|
152
|
+
│ ├── chefspec.erb
|
153
|
+
│ └── spec_helper.rb
|
154
|
+
├── gemfile.yml
|
155
|
+
├── license.erb
|
156
|
+
├── metadata.erb
|
157
|
+
├── rakefile.erb
|
158
|
+
├── readme.erb
|
159
|
+
├── recipe
|
160
|
+
│ └── recipe.erb
|
161
|
+
├── rubocop
|
162
|
+
│ └── rubocop.yml
|
163
|
+
├── serverspec
|
164
|
+
│ ├── serverspec.erb
|
165
|
+
│ └── serverspec_helper.rb
|
166
|
+
└── testkitchen
|
167
|
+
└── kitchen.default.erb
|
168
|
+
```
|
169
|
+
|
170
|
+
|
171
|
+
## Contributing
|
172
|
+
|
173
|
+
1. Fork it ( https://github.com/[my-github-username]/souschef/fork )
|
174
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
175
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
176
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
177
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
data/bin/souschef
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
# souschef - Chef developemnt helper
|
3
|
+
$LOAD_PATH << File.join(File.dirname(__FILE__), '../lib')
|
4
|
+
require 'souschef'
|
5
|
+
|
6
|
+
options = Trollop::Parser.new do
|
7
|
+
version "SousChef #{Souschef::VERSION}"
|
8
|
+
|
9
|
+
opt :cookbook, 'Name of your cookbook', type: :string
|
10
|
+
opt :path, 'Define cookbook directory path (relative)', type: :string
|
11
|
+
opt :testkitchen, "Pick your additional configuration to create \
|
12
|
+
.kitchen.local.yml file", type: :string
|
13
|
+
opt :scaffold, 'Create recipe, chefspec and serverspec files for recipe'
|
14
|
+
opt :recipe, 'Recipe name, used along with --scaffold', type: :string
|
15
|
+
opt :profile, 'Pick your configuration profile', default: 'default'
|
16
|
+
opt :force, 'Force create action'
|
17
|
+
opt :configure, 'Create configuration file'
|
18
|
+
opt :verbose, 'Print out detailed information'
|
19
|
+
opt :maintainer, 'Maintainer name', type: :string
|
20
|
+
opt :maintainer_email, 'Maintainer email', type: :string
|
21
|
+
opt :license, 'Licese you want to use, be explicit', type: :string
|
22
|
+
end
|
23
|
+
|
24
|
+
opts = Trollop.with_standard_exception_handling options do
|
25
|
+
fail Trollop::HelpNeeded if ARGV.empty?
|
26
|
+
options.parse ARGV
|
27
|
+
end
|
28
|
+
|
29
|
+
begin
|
30
|
+
Souschef::Runner.new(opts).run
|
31
|
+
rescue RuntimeError => e
|
32
|
+
Souschef::Print.error e
|
33
|
+
end
|
data/data/gemfile.yml
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
---
|
2
|
+
:source:
|
3
|
+
- https://rubygems.org
|
4
|
+
:general:
|
5
|
+
- :name: chefspec
|
6
|
+
:version: "~> 4"
|
7
|
+
- :name: berkshelf
|
8
|
+
:version: "~> 3"
|
9
|
+
- rake
|
10
|
+
- rubocop
|
11
|
+
- foodcritic
|
12
|
+
:group:
|
13
|
+
- :group_name: development
|
14
|
+
:gems:
|
15
|
+
- :name: vagrant-berkshelf
|
16
|
+
:github: berkshelf/vagrant-berkshelf
|
17
|
+
- :name: vagrant-omnibus
|
18
|
+
:github: schisamo/vagrant-omnibus
|
19
|
+
- :group_name: integration
|
20
|
+
:gems:
|
21
|
+
- test-kitchen
|
22
|
+
- kitchen-vagrant
|
23
|
+
- kitchen-docker
|
data/data/license.erb
ADDED
data/data/metadata.erb
ADDED
data/data/rakefile.erb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rspec/core/rake_task'
|
2
|
+
require 'rubocop/rake_task'
|
3
|
+
require 'foodcritic'
|
4
|
+
require 'kitchen'
|
5
|
+
|
6
|
+
# Style tests. Rubocop and Foodcritic
|
7
|
+
namespace :style do
|
8
|
+
desc 'Run Ruby style checks'
|
9
|
+
RuboCop::RakeTask.new(:ruby)
|
10
|
+
|
11
|
+
desc 'Run Chef style checks'
|
12
|
+
FoodCritic::Rake::LintTask.new(:chef) do |t|
|
13
|
+
t.options = {
|
14
|
+
fail_tags: ['any'],
|
15
|
+
tags: ['~FC005']
|
16
|
+
}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
desc 'Run all style checks'
|
21
|
+
task style: ['style:chef', 'style:ruby']
|
22
|
+
|
23
|
+
# Rspec and ChefSpec
|
24
|
+
desc "Run ChefSpec examples"
|
25
|
+
RSpec::Core::RakeTask.new(:spec)
|
26
|
+
|
27
|
+
# Integration tests. Kitchen.ci
|
28
|
+
namespace :integration do
|
29
|
+
desc 'Run Test Kitchen with Vagrant'
|
30
|
+
task :vagrant do
|
31
|
+
Kitchen.logger = Kitchen.default_file_logger
|
32
|
+
Kitchen::Config.new.instances.each do |instance|
|
33
|
+
instance.test(:always)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Default
|
39
|
+
task default: ['style', 'spec', 'integration:vagrant']
|
data/data/readme.erb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
## <%= @cookbook %>
|
2
|
+
|
3
|
+
## Description
|
4
|
+
|
5
|
+
INSERT DESCRIPTION FOR <%= @cookbook %> HERE
|
6
|
+
|
7
|
+
---
|
8
|
+
|
9
|
+
## Supported Platforms
|
10
|
+
|
11
|
+
The following platforms and versions are tested and supported using
|
12
|
+
[test-kitchen](http://kitchen.ci/).
|
13
|
+
|
14
|
+
* CentOS 5.10, 6.5
|
15
|
+
|
16
|
+
|
17
|
+
---
|
18
|
+
|
19
|
+
## Cookbook Dependencies
|
20
|
+
|
21
|
+
* None
|
22
|
+
|
23
|
+
---
|
24
|
+
|
25
|
+
## Attributes
|
26
|
+
|
27
|
+
* None
|
28
|
+
|
29
|
+
---
|
30
|
+
|
31
|
+
## Recipes
|
32
|
+
|
33
|
+
* default
|
34
|
+
+ None
|
35
|
+
|
36
|
+
---
|
37
|
+
|
38
|
+
## Tests
|
39
|
+
|
40
|
+
* default
|
41
|
+
+ None
|
42
|
+
|
43
|
+
---
|
44
|
+
|
45
|
+
## Author
|
46
|
+
|
47
|
+
Author: <%= @maintainer %> (<%= @maintainer_email %>)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
AllCops:
|
2
|
+
Include:
|
3
|
+
- Berksfile
|
4
|
+
- Gemfile
|
5
|
+
- Rakefile
|
6
|
+
Exclude:
|
7
|
+
- vendor/**/*
|
8
|
+
AlignParameters:
|
9
|
+
Enabled: false
|
10
|
+
Encoding:
|
11
|
+
Enabled: false
|
12
|
+
HashSyntax:
|
13
|
+
Enabled: false
|
14
|
+
LineLength:
|
15
|
+
Enabled: false
|
16
|
+
MethodLength:
|
17
|
+
Max: 30
|
18
|
+
StringLiterals:
|
19
|
+
Enabled: false
|