cookbook_creator 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/cookbook_create +11 -0
- data/cookbook_creator.gemspec +33 -0
- data/lib/cookbook_creator/cli.rb +100 -0
- data/lib/cookbook_creator/config.rb +24 -0
- data/lib/cookbook_creator/config_loader.rb +157 -0
- data/lib/cookbook_creator/generator.rb +202 -0
- data/lib/cookbook_creator/helpers.rb +25 -0
- data/lib/cookbook_creator/main.rb +42 -0
- data/lib/cookbook_creator/null_logger.rb +70 -0
- data/lib/cookbook_creator/pathhelper.rb +33 -0
- data/lib/cookbook_creator/runner.rb +74 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/Berksfile +3 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/chefignore +100 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/cookbook_readmes/README-policy.md +9 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/cookbook_readmes/README.md +54 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/gitignore +16 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/repo/README.md +28 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/repo/cookbooks/example/README.md +27 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +7 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +3 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +8 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/repo/data_bags/README.md +58 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/repo/data_bags/example/example_item.json +4 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/repo/dot-chef-repo.txt +6 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/repo/environments/README.md +9 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/repo/environments/example.json +13 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/repo/policies/README.md +24 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/repo/roles/README.md +9 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/repo/roles/example.json +13 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/serverspec_spec_helper.rb +8 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/spec_helper.rb +2 -0
- data/lib/cookbook_creator/skeletons/code_generator/files/default/spec_helper_policyfile.rb +2 -0
- data/lib/cookbook_creator/skeletons/code_generator/metadata.rb +8 -0
- data/lib/cookbook_creator/skeletons/code_generator/recipes/app.rb +97 -0
- data/lib/cookbook_creator/skeletons/code_generator/recipes/attribute.rb +12 -0
- data/lib/cookbook_creator/skeletons/code_generator/recipes/cookbook.rb +112 -0
- data/lib/cookbook_creator/skeletons/code_generator/recipes/cookbook_file.rb +24 -0
- data/lib/cookbook_creator/skeletons/code_generator/recipes/lwrp.rb +23 -0
- data/lib/cookbook_creator/skeletons/code_generator/recipes/policyfile.rb +8 -0
- data/lib/cookbook_creator/skeletons/code_generator/recipes/recipe.rb +27 -0
- data/lib/cookbook_creator/skeletons/code_generator/recipes/repo.rb +67 -0
- data/lib/cookbook_creator/skeletons/code_generator/recipes/template.rb +32 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/Berksfile.erb +3 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/LICENSE.all_rights.erb +3 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/LICENSE.apache2.erb +201 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/LICENSE.gplv2.erb +339 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/LICENSE.gplv3.erb +674 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/LICENSE.mit.erb +21 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/README.md.erb +4 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/attribute.rb.erb +1 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/cookbook_file.erb +1 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/kitchen.yml.erb +25 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/library.rb.erb +7 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/metadata.rb.erb +7 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/provider.rb.erb +10 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/recipe.rb.erb +5 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/recipe_spec.rb.erb +20 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/repo/gitignore.erb +11 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/resource.rb.erb +7 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/serverspec_default_spec.rb.erb +9 -0
- data/lib/cookbook_creator/skeletons/code_generator/templates/default/template.erb +0 -0
- data/lib/skeletons/code_generator/files/default/Berksfile +3 -0
- data/lib/skeletons/code_generator/files/default/chefignore +100 -0
- data/lib/skeletons/code_generator/files/default/cookbook_readmes/README-policy.md +9 -0
- data/lib/skeletons/code_generator/files/default/cookbook_readmes/README.md +54 -0
- data/lib/skeletons/code_generator/files/default/gitignore +16 -0
- data/lib/skeletons/code_generator/files/default/repo/README.md +28 -0
- data/lib/skeletons/code_generator/files/default/repo/cookbooks/example/README.md +27 -0
- data/lib/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +7 -0
- data/lib/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +3 -0
- data/lib/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +8 -0
- data/lib/skeletons/code_generator/files/default/repo/data_bags/README.md +58 -0
- data/lib/skeletons/code_generator/files/default/repo/data_bags/example/example_item.json +4 -0
- data/lib/skeletons/code_generator/files/default/repo/dot-chef-repo.txt +6 -0
- data/lib/skeletons/code_generator/files/default/repo/environments/README.md +9 -0
- data/lib/skeletons/code_generator/files/default/repo/environments/example.json +13 -0
- data/lib/skeletons/code_generator/files/default/repo/policies/README.md +24 -0
- data/lib/skeletons/code_generator/files/default/repo/roles/README.md +9 -0
- data/lib/skeletons/code_generator/files/default/repo/roles/example.json +13 -0
- data/lib/skeletons/code_generator/files/default/serverspec_spec_helper.rb +8 -0
- data/lib/skeletons/code_generator/files/default/spec_helper.rb +2 -0
- data/lib/skeletons/code_generator/files/default/spec_helper_policyfile.rb +2 -0
- data/lib/skeletons/code_generator/metadata.rb +8 -0
- data/lib/skeletons/code_generator/recipes/app.rb +97 -0
- data/lib/skeletons/code_generator/recipes/attribute.rb +12 -0
- data/lib/skeletons/code_generator/recipes/cookbook.rb +94 -0
- data/lib/skeletons/code_generator/recipes/cookbook_file.rb +24 -0
- data/lib/skeletons/code_generator/recipes/lwrp.rb +23 -0
- data/lib/skeletons/code_generator/recipes/policyfile.rb +8 -0
- data/lib/skeletons/code_generator/recipes/recipe.rb +27 -0
- data/lib/skeletons/code_generator/recipes/repo.rb +67 -0
- data/lib/skeletons/code_generator/recipes/template.rb +32 -0
- data/lib/skeletons/code_generator/templates/default/LICENSE.all_rights.erb +3 -0
- data/lib/skeletons/code_generator/templates/default/LICENSE.apache2.erb +201 -0
- data/lib/skeletons/code_generator/templates/default/LICENSE.gplv2.erb +339 -0
- data/lib/skeletons/code_generator/templates/default/LICENSE.gplv3.erb +674 -0
- data/lib/skeletons/code_generator/templates/default/LICENSE.mit.erb +21 -0
- data/lib/skeletons/code_generator/templates/default/Policyfile.rb.erb +25 -0
- data/lib/skeletons/code_generator/templates/default/README.md.erb +4 -0
- data/lib/skeletons/code_generator/templates/default/attribute.rb.erb +0 -0
- data/lib/skeletons/code_generator/templates/default/cookbook_file.erb +0 -0
- data/lib/skeletons/code_generator/templates/default/kitchen.yml.erb +21 -0
- data/lib/skeletons/code_generator/templates/default/kitchen_policyfile.yml.erb +32 -0
- data/lib/skeletons/code_generator/templates/default/metadata.rb.erb +7 -0
- data/lib/skeletons/code_generator/templates/default/provider.rb.erb +0 -0
- data/lib/skeletons/code_generator/templates/default/recipe.rb.erb +5 -0
- data/lib/skeletons/code_generator/templates/default/recipe_spec.rb.erb +20 -0
- data/lib/skeletons/code_generator/templates/default/repo/gitignore.erb +11 -0
- data/lib/skeletons/code_generator/templates/default/resource.rb.erb +0 -0
- data/lib/skeletons/code_generator/templates/default/serverspec_default_spec.rb.erb +9 -0
- data/lib/skeletons/code_generator/templates/default/template.erb +0 -0
- data/test.txt +0 -0
- metadata +119 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f70ff162f70eff1a36152803cc46ca952c5d966f
|
4
|
+
data.tar.gz: 86bc88ba6ac05b613b49841cbc8af0ed4c5df02d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8373416c2a9ac6e9d05d4ab1fd6403ac9dbd2814a7768cd00a08ffcedbabaab438eb6000542df1799ca695e4671eb124ec511b6e9db130ddf9de71183f83469e
|
7
|
+
data.tar.gz: 8337b4a7c0e71c039e04d24de2f83d39e6842a8f5c5b8a1759046f0c27608c01fc999a275980bbae70cdd6b00f7ec14cc8bbef66ed9bf3712becd04c52542f9f
|
data/bin/cookbook_create
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Copyright (c) 2016 Tacit Knowledge, All Rights Reserved.
|
4
|
+
#
|
5
|
+
|
6
|
+
Kernel.trap(:INT) { print("\n"); exit 1 }
|
7
|
+
|
8
|
+
$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")))
|
9
|
+
require 'cookbook_creator/main'
|
10
|
+
|
11
|
+
CookbookCreator::Main.new(ARGV.clone).run
|
@@ -0,0 +1,33 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'cookbook_creator'
|
3
|
+
s.version = '0.0.2'
|
4
|
+
s.date = '2016-01-11'
|
5
|
+
s.summary = "Everything required for cookbook generation"
|
6
|
+
s.description = "This gem is used to generate cookbook skeleton"
|
7
|
+
s.authors = ['Serghei Anicheev']
|
8
|
+
s.email = 'sanicheev@tacitknowledge.com'
|
9
|
+
s.require_paths = ['lib']
|
10
|
+
s.required_ruby_version = '~> 2.2.1'
|
11
|
+
s.bindir = 'bin'
|
12
|
+
s.executables = [ 'cookbook_create' ]
|
13
|
+
s.files = %w(test.txt) + Dir.glob("*.gemspec") +
|
14
|
+
Dir.glob("{lib,spec}/**/*", File::FNM_DOTMATCH).reject { |f| File.directory?(f) }
|
15
|
+
s.add_dependency "chef", "~> 12.6.0"
|
16
|
+
s.add_dependency "bundler"
|
17
|
+
s.add_dependency "berkshelf", "~> 4.0.1"
|
18
|
+
s.add_dependency "berkshelf-api-client", "~> 2.0.0"
|
19
|
+
s.add_dependency "chef-zero", "~> 4.4.0"
|
20
|
+
s.add_dependency "kitchen", "~> 0.0.3"
|
21
|
+
s.add_dependency "json", "~> 1.8.3"
|
22
|
+
s.add_dependency "ohai", "~> 8.8.1"
|
23
|
+
s.add_dependency "rake", "~> 10.4.2"
|
24
|
+
s.add_dependency "rspec", "~> 3.4.0"
|
25
|
+
s.add_dependency "chefspec", "~> 4.5.0"
|
26
|
+
s.add_dependency "serverspec", "~> 2.25.0"
|
27
|
+
s.add_dependency "mixlib-cli", "~> 1.5.0"
|
28
|
+
s.add_dependency "mixlib-config", "~> 2.2.1"
|
29
|
+
|
30
|
+
s.homepage =
|
31
|
+
'http://rubygems.org/gems/cookbook_creator'
|
32
|
+
s.license = 'Free License'
|
33
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Anicheev Serghei (<sanicheev@tacitknowledge.com>)
|
3
|
+
# Copyright:: Copyright (c) 2016 Tacit Knowledge.
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'mixlib/cli'
|
7
|
+
|
8
|
+
module CookbookCreator
|
9
|
+
class MCLI
|
10
|
+
include Mixlib::CLI
|
11
|
+
|
12
|
+
option :config_file,
|
13
|
+
:short => "-c config_file",
|
14
|
+
:long => "--config",
|
15
|
+
:description => "The configuration file to use",
|
16
|
+
:default => ConfigLoader.new(nil, nil).config_location
|
17
|
+
|
18
|
+
option :generator_cookbook,
|
19
|
+
:short => "-g generator_cookbook",
|
20
|
+
:long => "--generator_cookbook",
|
21
|
+
:description => "Path to generator cookbook templates",
|
22
|
+
:default => File.expand_path("../skeletons", __FILE__)
|
23
|
+
|
24
|
+
option :maintainer,
|
25
|
+
:short => "-m maintainer",
|
26
|
+
:long => "--maintainer",
|
27
|
+
:description => "Maintaining organisation",
|
28
|
+
:default => 'Example Org.'
|
29
|
+
|
30
|
+
option :maintainer_email,
|
31
|
+
:short => "-e maintainer_email",
|
32
|
+
:long => "--maintainer_email",
|
33
|
+
:description => "Maintainers Email",
|
34
|
+
:default => 'operator@example.org'
|
35
|
+
|
36
|
+
option :provisioner,
|
37
|
+
:short => "-p provisioner",
|
38
|
+
:long => "--provisioner",
|
39
|
+
:description => "Provisioner to use",
|
40
|
+
:default => 'chef_zero'
|
41
|
+
|
42
|
+
option :license,
|
43
|
+
:short => "-l license",
|
44
|
+
:long => "--license",
|
45
|
+
:description => "License to use",
|
46
|
+
:default => 'all_rights'
|
47
|
+
|
48
|
+
option :platform,
|
49
|
+
:short => "-P platform",
|
50
|
+
:long => "--platform",
|
51
|
+
:description => "Platform to use",
|
52
|
+
:default => 'centos-7.1'
|
53
|
+
|
54
|
+
option :driver,
|
55
|
+
:short => "-d driver",
|
56
|
+
:long => "--driver",
|
57
|
+
:description => "Driver to use",
|
58
|
+
:default => 'docker'
|
59
|
+
|
60
|
+
option :image,
|
61
|
+
:short => "-i driver",
|
62
|
+
:long => "--image",
|
63
|
+
:description => "Docker image to use",
|
64
|
+
:default => 'centos-7.1'
|
65
|
+
|
66
|
+
option :supermarket_url,
|
67
|
+
:short => "-s supermarket_url",
|
68
|
+
:long => "--supermarket_url",
|
69
|
+
:description => "Supermarket URL",
|
70
|
+
:default => 'https://supermarket.chef.io'
|
71
|
+
|
72
|
+
option :lwrp,
|
73
|
+
:short => "-L",
|
74
|
+
:long => "--lwrp",
|
75
|
+
:description => "Should cookbook contain LWRP?",
|
76
|
+
:boolean => true,
|
77
|
+
:default => false
|
78
|
+
|
79
|
+
option :lib,
|
80
|
+
:short => "-i",
|
81
|
+
:long => "--lib",
|
82
|
+
:description => "Should cookbook contain lib?",
|
83
|
+
:boolean => true,
|
84
|
+
:default => false
|
85
|
+
|
86
|
+
option :help,
|
87
|
+
:short => "-h",
|
88
|
+
:long => "--help",
|
89
|
+
:description => "Show this message",
|
90
|
+
:on => :tail,
|
91
|
+
:boolean => true,
|
92
|
+
:show_options => true,
|
93
|
+
:exit => 0
|
94
|
+
|
95
|
+
def run(argv=[])
|
96
|
+
parse_options(argv)
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Anicheev Serghei (<sanicheev@tacitknowledge.com>)
|
3
|
+
# Copyright:: Copyright (c) 2016 Tacit Knowledge.
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'mixlib/config'
|
7
|
+
|
8
|
+
module CookbookCreator
|
9
|
+
class Config
|
10
|
+
extend Mixlib::Config
|
11
|
+
config_strict_mode true
|
12
|
+
configurable :maintainer
|
13
|
+
configurable :maintainer_email
|
14
|
+
configurable :provisioner
|
15
|
+
configurable :license
|
16
|
+
configurable :platform
|
17
|
+
configurable :driver
|
18
|
+
configurable :supermarket_url
|
19
|
+
configurable :lwrp
|
20
|
+
configurable :lib
|
21
|
+
configurable :generator_cookbook
|
22
|
+
configurable :image
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Anicheev Serghei (<sanicheev@tacitknowledge.com>)
|
3
|
+
# Copyright:: Copyright (c) 2016 Tacit Knowledge.
|
4
|
+
#
|
5
|
+
# Initially this code block was developed by Chef community.
|
6
|
+
# But in order to fit for our needs it was modified
|
7
|
+
#
|
8
|
+
|
9
|
+
|
10
|
+
require 'cookbook_creator/null_logger'
|
11
|
+
require 'cookbook_creator/pathhelper'
|
12
|
+
require 'pathname'
|
13
|
+
|
14
|
+
module CookbookCreator
|
15
|
+
class ConfigLoader
|
16
|
+
|
17
|
+
# Path to a config file requested by user, (e.g., via command line option). Can be nil
|
18
|
+
attr_accessor :explicit_config_file
|
19
|
+
|
20
|
+
def initialize(explicit_config_file, logger=nil)
|
21
|
+
@explicit_config_file = explicit_config_file
|
22
|
+
@generator_config_dir = nil
|
23
|
+
@config_location = nil
|
24
|
+
@logger = logger || NullLogger.new
|
25
|
+
end
|
26
|
+
|
27
|
+
def no_config_found?
|
28
|
+
config_location.nil?
|
29
|
+
end
|
30
|
+
|
31
|
+
def config_location
|
32
|
+
@config_location ||= (explicit_config_file || locate_local_config)
|
33
|
+
end
|
34
|
+
|
35
|
+
def generator_config_dir
|
36
|
+
if @generator_config_dir.nil?
|
37
|
+
@generator_config_dir = false
|
38
|
+
full_path = working_directory.split(File::SEPARATOR)
|
39
|
+
(full_path.length - 1).downto(0) do |i|
|
40
|
+
candidate_directory = File.join(full_path[0..i] + [".generator"])
|
41
|
+
if File.exist?(candidate_directory) && File.directory?(candidate_directory)
|
42
|
+
@generator_config_dir = candidate_directory
|
43
|
+
break
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
@generator_config_dir
|
48
|
+
end
|
49
|
+
|
50
|
+
def load
|
51
|
+
# Ignore it if there's no explicit_config_file and can't find one at a
|
52
|
+
# default path.
|
53
|
+
return false if config_location.nil?
|
54
|
+
|
55
|
+
if explicit_config_file && !path_exists?(config_location)
|
56
|
+
raise "Specified config file #{config_location} does not exist"
|
57
|
+
end
|
58
|
+
|
59
|
+
# Have to set Config.config_file b/c other config is derived from it.
|
60
|
+
Config.config_file = config_location
|
61
|
+
read_config(IO.read(config_location), config_location)
|
62
|
+
end
|
63
|
+
|
64
|
+
# (Private API, public for test purposes)
|
65
|
+
def env
|
66
|
+
ENV
|
67
|
+
end
|
68
|
+
|
69
|
+
# (Private API, public for test purposes)
|
70
|
+
def path_exists?(path)
|
71
|
+
Pathname.new(path).expand_path.exist?
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def have_config?(path)
|
77
|
+
if path_exists?(path)
|
78
|
+
logger.info("Using config at #{path}")
|
79
|
+
true
|
80
|
+
else
|
81
|
+
logger.debug("Config not found at #{path}, trying next option")
|
82
|
+
false
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def locate_local_config
|
87
|
+
candidate_configs = []
|
88
|
+
|
89
|
+
# Look for $ARROW_HOME/generator.rb (allow multiple generator config on same machine)
|
90
|
+
if env['ARROW_HOME']
|
91
|
+
candidate_configs << File.join(env['ARROW_HOME'], 'generator.rb')
|
92
|
+
end
|
93
|
+
# Look for $PWD/generator.rb
|
94
|
+
if Dir.pwd
|
95
|
+
candidate_configs << File.join(Dir.pwd, 'generator.rb')
|
96
|
+
end
|
97
|
+
# Look for $UPWARD/.generator/generator.rb
|
98
|
+
if generator_config_dir
|
99
|
+
candidate_configs << File.join(generator_config_dir, 'generator.rb')
|
100
|
+
end
|
101
|
+
# Look for $HOME/.generator/generator.rb
|
102
|
+
PathHelper.home('.generator') do |dot_generator_dir|
|
103
|
+
candidate_configs << File.join(dot_generator_dir, 'generator.rb')
|
104
|
+
end
|
105
|
+
|
106
|
+
candidate_configs.find do | candidate_config |
|
107
|
+
have_config?(candidate_config)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def working_directory
|
112
|
+
Dir.pwd
|
113
|
+
end
|
114
|
+
|
115
|
+
def read_config(config_content, config_file_path)
|
116
|
+
Config.from_string(config_content, config_file_path)
|
117
|
+
rescue SignalException
|
118
|
+
raise
|
119
|
+
rescue SyntaxError => e
|
120
|
+
message = ""
|
121
|
+
message << "You have invalid ruby syntax in your config file #{config_file_path}\n\n"
|
122
|
+
message << "#{e.class.name}: #{e.message}\n"
|
123
|
+
if file_line = e.message[/#{Regexp.escape(config_file_path)}:[\d]+/]
|
124
|
+
line = file_line[/:([\d]+)$/, 1].to_i
|
125
|
+
message << highlight_config_error(config_file_path, line)
|
126
|
+
end
|
127
|
+
raise ChefConfig::ConfigurationError, message
|
128
|
+
rescue Exception => e
|
129
|
+
message = "You have an error in your config file #{config_file_path}\n\n"
|
130
|
+
message << "#{e.class.name}: #{e.message}\n"
|
131
|
+
filtered_trace = e.backtrace.grep(/#{Regexp.escape(config_file_path)}/)
|
132
|
+
filtered_trace.each {|bt_line| message << " " << bt_line << "\n" }
|
133
|
+
if !filtered_trace.empty?
|
134
|
+
line_nr = filtered_trace.first[/#{Regexp.escape(config_file_path)}:([\d]+)/, 1]
|
135
|
+
message << highlight_config_error(config_file_path, line_nr.to_i)
|
136
|
+
end
|
137
|
+
raise ChefConfig::ConfigurationError, message
|
138
|
+
end
|
139
|
+
|
140
|
+
|
141
|
+
def highlight_config_error(file, line)
|
142
|
+
config_file_lines = []
|
143
|
+
IO.readlines(file).each_with_index {|l, i| config_file_lines << "#{(i + 1).to_s.rjust(3)}: #{l.chomp}"}
|
144
|
+
if line == 1
|
145
|
+
lines = config_file_lines[0..3]
|
146
|
+
else
|
147
|
+
lines = config_file_lines[Range.new(line - 2, line)]
|
148
|
+
end
|
149
|
+
"Relevant file content:\n" + lines.join("\n") + "\n"
|
150
|
+
end
|
151
|
+
|
152
|
+
def logger
|
153
|
+
@logger
|
154
|
+
end
|
155
|
+
|
156
|
+
end
|
157
|
+
end
|
@@ -0,0 +1,202 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Anicheev Serghei (<sanicheev@tacitknowledge.com>)
|
3
|
+
# Copyright:: Copyright (c) 2016 Tacit Knowledge.
|
4
|
+
#
|
5
|
+
# Initially this code block was developed by Chef community.
|
6
|
+
# But in order to fit for our needs it was modified
|
7
|
+
#
|
8
|
+
|
9
|
+
module CookbookCreator
|
10
|
+
|
11
|
+
module Generator
|
12
|
+
# This is here to hold attr_accessor data for Generator context variables
|
13
|
+
class Context
|
14
|
+
|
15
|
+
|
16
|
+
def self.add_attr(name)
|
17
|
+
@attributes ||= [ ]
|
18
|
+
|
19
|
+
if !@attributes.include?(name)
|
20
|
+
@attributes << name
|
21
|
+
attr_accessor(name)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.cookbook_root
|
26
|
+
File.dirname(cookbook_full_path)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.cookbook_full_path
|
30
|
+
File.expand_path(cookbook_name_or_path, Dir.pwd)
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.cookbook_name_or_path
|
34
|
+
name = ARGV[0]
|
35
|
+
File.expand_path(name, Dir.pwd)
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.recipe
|
39
|
+
"cookbook"
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.recipe_name
|
43
|
+
"default"
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.cookbook_name
|
47
|
+
File.basename(cookbook_full_path)
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.have_git?
|
51
|
+
path = ENV["PATH"] || ""
|
52
|
+
paths = path.split(File::PATH_SEPARATOR)
|
53
|
+
paths.any? {|bin_path| File.exist?(File.join(bin_path, "git#{RbConfig::CONFIG['EXEEXT']}"))}
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.reset
|
57
|
+
return if @attributes.nil?
|
58
|
+
|
59
|
+
@attributes.each do |attr|
|
60
|
+
remove_method(attr)
|
61
|
+
end
|
62
|
+
|
63
|
+
@attributes = nil
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.reset
|
68
|
+
@context = nil
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.context
|
72
|
+
@context ||= Context.new
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.add_attr_to_context(name, value=nil)
|
76
|
+
sym_name = name.to_sym
|
77
|
+
CookbookCreator::Generator::Context.add_attr(sym_name)
|
78
|
+
CookbookCreator::Generator::TemplateHelper.delegate_to_app_context(sym_name)
|
79
|
+
context.public_send("#{sym_name}=", value)
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.setup_context(config_options)
|
83
|
+
CookbookCreator::Generator.add_attr_to_context(:cookbook_root, CookbookCreator::Generator::Context.cookbook_root)
|
84
|
+
CookbookCreator::Generator.add_attr_to_context(:cookbook_name, CookbookCreator::Generator::Context.cookbook_name)
|
85
|
+
CookbookCreator::Generator.add_attr_to_context(:recipe_name, CookbookCreator::Generator::Context.recipe_name)
|
86
|
+
CookbookCreator::Generator.add_attr_to_context(:copyright_holder, config_options[:maintainer])
|
87
|
+
CookbookCreator::Generator.add_attr_to_context(:email, config_options[:maintainer_email])
|
88
|
+
CookbookCreator::Generator.add_attr_to_context(:license, config_options[:license])
|
89
|
+
CookbookCreator::Generator.add_attr_to_context(:provisioner, config_options[:provisioner])
|
90
|
+
CookbookCreator::Generator.add_attr_to_context(:driver, config_options[:driver])
|
91
|
+
CookbookCreator::Generator.add_attr_to_context(:platform, config_options[:platform])
|
92
|
+
CookbookCreator::Generator.add_attr_to_context(:supermarket_url, config_options[:supermarket_url])
|
93
|
+
CookbookCreator::Generator.add_attr_to_context(:lwrp, config_options[:lwrp])
|
94
|
+
CookbookCreator::Generator.add_attr_to_context(:lib, config_options[:lib])
|
95
|
+
CookbookCreator::Generator.add_attr_to_context(:image, config_options[:image])
|
96
|
+
end
|
97
|
+
|
98
|
+
module TemplateHelper
|
99
|
+
|
100
|
+
def self.delegate_to_app_context(name)
|
101
|
+
define_method(name) do
|
102
|
+
CookbookCreator::Generator.context.public_send(name)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def year
|
107
|
+
Time.now.year
|
108
|
+
end
|
109
|
+
|
110
|
+
# Prints the short description of the license, suitable for use in a
|
111
|
+
# preamble to a file. Optionally specify a comment to prepend to each line.
|
112
|
+
def license_description(comment=nil)
|
113
|
+
case license
|
114
|
+
when 'all_rights'
|
115
|
+
result = "Copyright (c) #{year} #{copyright_holder}, All Rights Reserved."
|
116
|
+
when 'apache2'
|
117
|
+
result = <<-EOH
|
118
|
+
Copyright #{year} #{copyright_holder}
|
119
|
+
|
120
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
121
|
+
you may not use this file except in compliance with the License.
|
122
|
+
You may obtain a copy of the License at
|
123
|
+
|
124
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
125
|
+
|
126
|
+
Unless required by applicable law or agreed to in writing, software
|
127
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
128
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
129
|
+
See the License for the specific language governing permissions and
|
130
|
+
limitations under the License.
|
131
|
+
EOH
|
132
|
+
when 'mit'
|
133
|
+
result = <<-EOH
|
134
|
+
The MIT License (MIT)
|
135
|
+
|
136
|
+
Copyright (c) #{year} #{copyright_holder}
|
137
|
+
|
138
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
139
|
+
of this software and associated documentation files (the "Software"), to deal
|
140
|
+
in the Software without restriction, including without limitation the rights
|
141
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
142
|
+
copies of the Software, and to permit persons to whom the Software is
|
143
|
+
furnished to do so, subject to the following conditions:
|
144
|
+
|
145
|
+
The above copyright notice and this permission notice shall be included in
|
146
|
+
all copies or substantial portions of the Software.
|
147
|
+
|
148
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
149
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
150
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
151
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
152
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
153
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
154
|
+
THE SOFTWARE.
|
155
|
+
EOH
|
156
|
+
when 'gplv2'
|
157
|
+
result = <<-EOH
|
158
|
+
Copyright (C) #{year} #{copyright_holder}
|
159
|
+
|
160
|
+
This program is free software; you can redistribute it and/or modify
|
161
|
+
it under the terms of the GNU General Public License as published by
|
162
|
+
the Free Software Foundation; either version 2 of the License, or
|
163
|
+
(at your option) any later version.
|
164
|
+
|
165
|
+
This program is distributed in the hope that it will be useful,
|
166
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
167
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
168
|
+
GNU General Public License for more details.
|
169
|
+
|
170
|
+
You should have received a copy of the GNU General Public License along
|
171
|
+
with this program; if not, write to the Free Software Foundation, Inc.,
|
172
|
+
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
173
|
+
EOH
|
174
|
+
when 'gplv3'
|
175
|
+
result = <<-EOH
|
176
|
+
Copyright (C) #{year} #{copyright_holder}
|
177
|
+
|
178
|
+
This program is free software: you can redistribute it and/or modify
|
179
|
+
it under the terms of the GNU General Public License as published by
|
180
|
+
the Free Software Foundation, either version 3 of the License, or
|
181
|
+
(at your option) any later version.
|
182
|
+
|
183
|
+
This program is distributed in the hope that it will be useful,
|
184
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
185
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
186
|
+
GNU General Public License for more details.
|
187
|
+
|
188
|
+
You should have received a copy of the GNU General Public License
|
189
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
190
|
+
EOH
|
191
|
+
end
|
192
|
+
if comment
|
193
|
+
# Ensure there's no trailing whitespace
|
194
|
+
result.gsub(/^(.+)$/, "#{comment} \\1").gsub(/^$/, "#{comment}")
|
195
|
+
else
|
196
|
+
result
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
end
|
202
|
+
end
|