galvanize 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +7 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +17 -0
  7. data/Gemfile.lock +242 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +64 -0
  10. data/Rakefile +6 -0
  11. data/bin/console +12 -0
  12. data/bin/gal +10 -0
  13. data/bin/galvanize +10 -0
  14. data/bin/setup +8 -0
  15. data/galvanize.gemspec +25 -0
  16. data/lib/chef-dk/command/generator_commands/habichef.rb +82 -0
  17. data/lib/chef-dk/configurable-patch.rb +15 -0
  18. data/lib/chef-dk/skeletons/code_generator/files/default/Berksfile +4 -0
  19. data/lib/chef-dk/skeletons/code_generator/files/default/build_cookbook/README.md +146 -0
  20. data/lib/chef-dk/skeletons/code_generator/files/default/build_cookbook/kitchen.yml +21 -0
  21. data/lib/chef-dk/skeletons/code_generator/files/default/build_cookbook/test-fixture-recipe.rb +9 -0
  22. data/lib/chef-dk/skeletons/code_generator/files/default/chefignore +109 -0
  23. data/lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README-policy.md +9 -0
  24. data/lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README.md +66 -0
  25. data/lib/chef-dk/skeletons/code_generator/files/default/delivery-config.json +17 -0
  26. data/lib/chef-dk/skeletons/code_generator/files/default/delivery-project.toml +36 -0
  27. data/lib/chef-dk/skeletons/code_generator/files/default/gitignore +22 -0
  28. data/lib/chef-dk/skeletons/code_generator/files/default/repo/README.md +24 -0
  29. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/README.md +27 -0
  30. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +8 -0
  31. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +7 -0
  32. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +9 -0
  33. data/lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/README.md +56 -0
  34. data/lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/example/example_item.json +4 -0
  35. data/lib/chef-dk/skeletons/code_generator/files/default/repo/dot-chef-repo.txt +6 -0
  36. data/lib/chef-dk/skeletons/code_generator/files/default/repo/environments/README.md +9 -0
  37. data/lib/chef-dk/skeletons/code_generator/files/default/repo/environments/example.json +13 -0
  38. data/lib/chef-dk/skeletons/code_generator/files/default/repo/policyfiles/README.md +24 -0
  39. data/lib/chef-dk/skeletons/code_generator/files/default/repo/roles/README.md +9 -0
  40. data/lib/chef-dk/skeletons/code_generator/files/default/repo/roles/example.json +13 -0
  41. data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper.rb +3 -0
  42. data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper_policyfile.rb +3 -0
  43. data/lib/chef-dk/skeletons/code_generator/metadata.rb +8 -0
  44. data/lib/chef-dk/skeletons/code_generator/recipes/attribute.rb +13 -0
  45. data/lib/chef-dk/skeletons/code_generator/recipes/build_cookbook.rb +177 -0
  46. data/lib/chef-dk/skeletons/code_generator/recipes/cookbook.rb +161 -0
  47. data/lib/chef-dk/skeletons/code_generator/recipes/cookbook_file.rb +25 -0
  48. data/lib/chef-dk/skeletons/code_generator/recipes/habichef.rb +92 -0
  49. data/lib/chef-dk/skeletons/code_generator/recipes/helpers.rb +21 -0
  50. data/lib/chef-dk/skeletons/code_generator/recipes/policyfile.rb +9 -0
  51. data/lib/chef-dk/skeletons/code_generator/recipes/recipe.rb +52 -0
  52. data/lib/chef-dk/skeletons/code_generator/recipes/repo.rb +68 -0
  53. data/lib/chef-dk/skeletons/code_generator/recipes/resource.rb +13 -0
  54. data/lib/chef-dk/skeletons/code_generator/recipes/template.rb +32 -0
  55. data/lib/chef-dk/skeletons/code_generator/templates/default/CHANGELOG.md.erb +11 -0
  56. data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.all_rights.erb +3 -0
  57. data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.apachev2.erb +201 -0
  58. data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.gplv2.erb +339 -0
  59. data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.gplv3.erb +674 -0
  60. data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.mit.erb +21 -0
  61. data/lib/chef-dk/skeletons/code_generator/templates/default/Policyfile.rb.erb +25 -0
  62. data/lib/chef-dk/skeletons/code_generator/templates/default/README.md.erb +4 -0
  63. data/lib/chef-dk/skeletons/code_generator/templates/default/attribute.rb.erb +0 -0
  64. data/lib/chef-dk/skeletons/code_generator/templates/default/build_cookbook/Berksfile.erb +7 -0
  65. data/lib/chef-dk/skeletons/code_generator/templates/default/build_cookbook/metadata.rb.erb +10 -0
  66. data/lib/chef-dk/skeletons/code_generator/templates/default/build_cookbook/recipe.rb.erb +8 -0
  67. data/lib/chef-dk/skeletons/code_generator/templates/default/cookbook_file.erb +0 -0
  68. data/lib/chef-dk/skeletons/code_generator/templates/default/gitignore +28 -0
  69. data/lib/chef-dk/skeletons/code_generator/templates/default/habitat/README.md.erb +96 -0
  70. data/lib/chef-dk/skeletons/code_generator/templates/default/habitat/default.toml.erb +18 -0
  71. data/lib/chef-dk/skeletons/code_generator/templates/default/habitat/plan.sh.erb +16 -0
  72. data/lib/chef-dk/skeletons/code_generator/templates/default/helpers.rb.erb +39 -0
  73. data/lib/chef-dk/skeletons/code_generator/templates/default/inspec_default_test.rb.erb +16 -0
  74. data/lib/chef-dk/skeletons/code_generator/templates/default/kitchen.yml.erb +26 -0
  75. data/lib/chef-dk/skeletons/code_generator/templates/default/kitchen_dokken.yml.erb +31 -0
  76. data/lib/chef-dk/skeletons/code_generator/templates/default/kitchen_policyfile.yml.erb +33 -0
  77. data/lib/chef-dk/skeletons/code_generator/templates/default/metadata.rb.erb +20 -0
  78. data/lib/chef-dk/skeletons/code_generator/templates/default/policyfiles/base.rb.erb +30 -0
  79. data/lib/chef-dk/skeletons/code_generator/templates/default/recipe.rb.erb +5 -0
  80. data/lib/chef-dk/skeletons/code_generator/templates/default/recipe_spec.rb.erb +35 -0
  81. data/lib/chef-dk/skeletons/code_generator/templates/default/repo/gitignore.erb +128 -0
  82. data/lib/chef-dk/skeletons/code_generator/templates/default/resource.rb.erb +1 -0
  83. data/lib/chef-dk/skeletons/code_generator/templates/default/template.erb +0 -0
  84. data/lib/galvanize.rb +7 -0
  85. data/lib/galvanize/version.rb +3 -0
  86. metadata +130 -0
@@ -0,0 +1,161 @@
1
+ # frozen_string_literal: true
2
+
3
+ context = ChefDK::Generator.context
4
+ cookbook_dir = File.join(context.cookbook_root, context.cookbook_name)
5
+
6
+ silence_chef_formatter unless context.verbose
7
+
8
+ generator_desc('Ensuring correct cookbook file content')
9
+
10
+ # cookbook root dir
11
+ directory cookbook_dir
12
+
13
+ # metadata.rb
14
+ spdx_license = case context.license
15
+ when 'apachev2'
16
+ 'Apache-2.0'
17
+ when 'mit'
18
+ 'MIT'
19
+ when 'gplv2'
20
+ 'GPL-2.0'
21
+ when 'gplv3'
22
+ 'GPL-3.0'
23
+ else
24
+ 'All Rights Reserved'
25
+ end
26
+
27
+ template "#{cookbook_dir}/metadata.rb" do
28
+ helpers(ChefDK::Generator::TemplateHelper)
29
+ variables(
30
+ spdx_license: spdx_license
31
+ )
32
+ action :create_if_missing
33
+ end
34
+
35
+ # README
36
+ template "#{cookbook_dir}/README.md" do
37
+ helpers(ChefDK::Generator::TemplateHelper)
38
+ action :create_if_missing
39
+ end
40
+
41
+ # CHANGELOG
42
+ template "#{cookbook_dir}/CHANGELOG.md" do
43
+ helpers(ChefDK::Generator::TemplateHelper)
44
+ action :create_if_missing
45
+ end
46
+
47
+ # chefignore
48
+ cookbook_file "#{cookbook_dir}/chefignore"
49
+
50
+ if context.use_berkshelf
51
+
52
+ # Berks
53
+ cookbook_file "#{cookbook_dir}/Berksfile" do
54
+ action :create_if_missing
55
+ end
56
+ else
57
+
58
+ # Policyfile
59
+ template "#{cookbook_dir}/Policyfile.rb" do
60
+ source 'Policyfile.rb.erb'
61
+ helpers(ChefDK::Generator::TemplateHelper)
62
+ end
63
+
64
+ end
65
+
66
+ # LICENSE
67
+ template "#{cookbook_dir}/LICENSE" do
68
+ helpers(ChefDK::Generator::TemplateHelper)
69
+ source "LICENSE.#{context.license}.erb"
70
+ action :create_if_missing
71
+ end
72
+
73
+ # Test Kitchen
74
+ template "#{cookbook_dir}/kitchen.yml" do
75
+ if context.kitchen == 'dokken'
76
+ # kitchen-dokken configuration works with berkshelf and policyfiles
77
+ source 'kitchen_dokken.yml.erb'
78
+ elsif context.use_berkshelf
79
+ source 'kitchen.yml.erb'
80
+ else
81
+ source 'kitchen_policyfile.yml.erb'
82
+ end
83
+
84
+ helpers(ChefDK::Generator::TemplateHelper)
85
+ action :create_if_missing
86
+ end
87
+
88
+ # Inspec
89
+ directory "#{cookbook_dir}/test/integration/default" do
90
+ recursive true
91
+ end
92
+
93
+ template "#{cookbook_dir}/test/integration/default/default_test.rb" do
94
+ source 'inspec_default_test.rb.erb'
95
+ helpers(ChefDK::Generator::TemplateHelper)
96
+ action :create_if_missing
97
+ end
98
+
99
+ # Chefspec
100
+ directory "#{cookbook_dir}/spec/unit/recipes" do
101
+ recursive true
102
+ end
103
+
104
+ cookbook_file "#{cookbook_dir}/spec/spec_helper.rb" do
105
+ if context.use_berkshelf
106
+ source 'spec_helper.rb'
107
+ else
108
+ source 'spec_helper_policyfile.rb'
109
+ end
110
+
111
+ action :create_if_missing
112
+ end
113
+
114
+ template "#{cookbook_dir}/spec/unit/recipes/default_spec.rb" do
115
+ source 'recipe_spec.rb.erb'
116
+ helpers(ChefDK::Generator::TemplateHelper)
117
+ action :create_if_missing
118
+ end
119
+
120
+ # Recipes
121
+
122
+ directory "#{cookbook_dir}/recipes"
123
+
124
+ template "#{cookbook_dir}/recipes/default.rb" do
125
+ source 'recipe.rb.erb'
126
+ helpers(ChefDK::Generator::TemplateHelper)
127
+ action :create_if_missing
128
+ end
129
+
130
+ # git
131
+ if context.have_git
132
+ unless context.skip_git_init
133
+
134
+ generator_desc('Committing cookbook files to git')
135
+
136
+ execute('initialize-git') do
137
+ command('git init .')
138
+ cwd cookbook_dir
139
+ end
140
+
141
+ end
142
+
143
+ cookbook_file "#{cookbook_dir}/.gitignore" do
144
+ source 'gitignore'
145
+ end
146
+
147
+ unless context.skip_git_init
148
+
149
+ execute('git-add-new-files') do
150
+ command('git add .')
151
+ cwd cookbook_dir
152
+ end
153
+
154
+ execute('git-commit-new-files') do
155
+ command('git commit -m "Add generated cookbook content"')
156
+ cwd cookbook_dir
157
+ end
158
+ end
159
+ end
160
+
161
+ include_recipe '::build_cookbook' if context.enable_delivery
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ context = ChefDK::Generator.context
4
+ cookbook_dir = File.join(context.cookbook_root, context.cookbook_name)
5
+ files_dir = File.join(cookbook_dir, 'files', 'default')
6
+ cookbook_file_path = File.join(cookbook_dir, 'files', 'default', context.new_file_basename)
7
+
8
+ directory files_dir do
9
+ recursive true
10
+ end
11
+
12
+ if context.content_source
13
+
14
+ file cookbook_file_path do
15
+ content(IO.read(context.context_source))
16
+ end
17
+
18
+ else
19
+
20
+ template cookbook_file_path do
21
+ source 'cookbook_file.erb'
22
+ helpers(ChefDK::Generator::TemplateHelper)
23
+ end
24
+
25
+ end
@@ -0,0 +1,92 @@
1
+ context = ChefDK::Generator.context
2
+ habitat_dir = File.join context.habichef_root, context.habichef_name
3
+
4
+ # silence_chef_formatter unless context.verbose
5
+
6
+ generator_desc 'Ensuring correct HabiChef project content'
7
+
8
+ spdx_license = case context.license
9
+ when 'apachev2'
10
+ 'Apache-2.0'
11
+ when 'mit'
12
+ 'MIT'
13
+ when 'gplv2'
14
+ 'GPL-2.0'
15
+ when 'gplv3'
16
+ 'GPL-3.0'
17
+ else
18
+ 'All Rights Reserved'
19
+ end
20
+
21
+ # cookbook root dir
22
+ directory habitat_dir
23
+ # rest of dirs
24
+ %w(habitat policyfiles).each do |dir|
25
+ directory File.join habitat_dir, dir
26
+ end
27
+
28
+ # our base files
29
+ %w(
30
+ habitat/default.toml
31
+ habitat/plan.sh
32
+ habitat/README.md
33
+ policyfiles/base.rb
34
+ ).each do |name|
35
+ template File.join habitat_dir, name do
36
+ helpers(ChefDK::Generator::TemplateHelper)
37
+ source "#{name}.erb"
38
+ action :create_if_missing
39
+ end
40
+ end
41
+
42
+ # LICENSE
43
+ template "#{habitat_dir}/LICENSE" do
44
+ helpers(ChefDK::Generator::TemplateHelper)
45
+ source "LICENSE.#{context.license}.erb"
46
+ action :create_if_missing
47
+ end
48
+
49
+ # CHANGELOG
50
+ template "#{habitat_dir}/CHANGELOG.md" do
51
+ helpers(ChefDK::Generator::TemplateHelper)
52
+ action :create_if_missing
53
+ end
54
+
55
+ # Inspec
56
+ directory "#{habitat_dir}/test/integration/default" do
57
+ recursive true
58
+ end
59
+
60
+ template "#{habitat_dir}/test/integration/default/default_test.rb" do
61
+ source 'inspec_default_test.rb.erb'
62
+ helpers(ChefDK::Generator::TemplateHelper)
63
+ action :create_if_missing
64
+ end
65
+
66
+ # git
67
+ if context.have_git
68
+ unless context.skip_git_init
69
+ generator_desc('Committing cookbook files to git')
70
+
71
+ execute('initialize-git') do
72
+ command('git init .')
73
+ cwd habitat_dir
74
+ end
75
+ end
76
+
77
+ template "#{habitat_dir}/.gitignore" do
78
+ source 'gitignore'
79
+ end
80
+
81
+ unless context.skip_git_init
82
+ execute('git-add-new-files') do
83
+ command('git add .')
84
+ cwd habitat_dir
85
+ end
86
+
87
+ execute('git-commit-new-files') do
88
+ command('git commit -m "Add generated HabiChef content"')
89
+ cwd habitat_dir
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ context = ChefDK::Generator.context
4
+ cookbook_dir = File.join(context.cookbook_root, context.cookbook_name)
5
+ libraries_dir = File.join(cookbook_dir, 'libraries')
6
+ helpers_path = File.join(cookbook_dir, 'libraries', "#{context.new_file_basename}.rb")
7
+
8
+ directory libraries_dir
9
+
10
+ def camelize(name)
11
+ name.to_s.split(/[^a-zA-Z]/).map(&:capitalize).join
12
+ end
13
+
14
+ cookbook_class_name = camelize(context.cookbook_name)
15
+ helper_class_name = "#{camelize(context.new_file_basename)}Helpers"
16
+
17
+ template helpers_path do
18
+ source 'helpers.rb.erb'
19
+ helpers(ChefDK::Generator::TemplateHelper)
20
+ variables(cookbook_class_name: cookbook_class_name, helper_class_name: helper_class_name)
21
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ context = ChefDK::Generator.context
4
+ policyfile_path = File.join(context.policyfile_dir, "#{context.new_file_basename}.rb")
5
+
6
+ template policyfile_path do
7
+ source 'Policyfile.rb.erb'
8
+ helpers(ChefDK::Generator::TemplateHelper)
9
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ context = ChefDK::Generator.context
4
+ cookbook_dir = File.join(context.cookbook_root, context.cookbook_name)
5
+ recipe_path = File.join(cookbook_dir, 'recipes', "#{context.new_file_basename}.rb")
6
+ spec_helper_path = File.join(cookbook_dir, 'spec', 'spec_helper.rb')
7
+ spec_dir = File.join(cookbook_dir, 'spec', 'unit', 'recipes')
8
+ spec_path = File.join(spec_dir, "#{context.new_file_basename}_spec.rb")
9
+ inspec_dir = File.join(cookbook_dir, 'test', 'integration', 'default')
10
+ inspec_path = File.join(inspec_dir, "#{context.new_file_basename}_test.rb")
11
+
12
+ if File.directory?(File.join(cookbook_dir, 'test', 'recipes'))
13
+ Chef::Log.deprecation <<~EOH
14
+ It appears that you have InSpec tests located at "test/recipes". This location can
15
+ cause issues with Foodcritic and has been deprecated in favor of "test/integration/default".
16
+ Please move your existing InSpec tests to the newly created "test/integration/default"
17
+ directory, and update the 'inspec_tests' value in your kitchen.yml file(s) to
18
+ point to "test/integration/default".
19
+ EOH
20
+ end
21
+
22
+ # Chefspec
23
+ directory spec_dir do
24
+ recursive true
25
+ end
26
+
27
+ cookbook_file spec_helper_path do
28
+ action :create_if_missing
29
+ end
30
+
31
+ template spec_path do
32
+ source 'recipe_spec.rb.erb'
33
+ helpers(ChefDK::Generator::TemplateHelper)
34
+ action :create_if_missing
35
+ end
36
+
37
+ # Inspec
38
+ directory inspec_dir do
39
+ recursive true
40
+ end
41
+
42
+ template inspec_path do
43
+ source 'inspec_default_test.rb.erb'
44
+ helpers(ChefDK::Generator::TemplateHelper)
45
+ action :create_if_missing
46
+ end
47
+
48
+ # Recipe
49
+ template recipe_path do
50
+ source 'recipe.rb.erb'
51
+ helpers(ChefDK::Generator::TemplateHelper)
52
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+ context = ChefDK::Generator.context
3
+ repo_dir = File.join(context.repo_root, context.repo_name)
4
+
5
+ # repo root dir
6
+ directory repo_dir
7
+
8
+ # Top level files
9
+ template "#{repo_dir}/LICENSE" do
10
+ source "LICENSE.#{context.license}.erb"
11
+ helpers(ChefDK::Generator::TemplateHelper)
12
+ action :create_if_missing
13
+ end
14
+
15
+ cookbook_file "#{repo_dir}/.chef-repo.txt" do
16
+ source 'repo/dot-chef-repo.txt'
17
+ action :create_if_missing
18
+ end
19
+
20
+ cookbook_file "#{repo_dir}/README.md" do
21
+ source 'repo/README.md'
22
+ action :create_if_missing
23
+ end
24
+
25
+ cookbook_file "#{repo_dir}/chefignore" do
26
+ source 'chefignore'
27
+ action :create_if_missing
28
+ end
29
+
30
+ directories_to_create = %w( cookbooks data_bags )
31
+
32
+ directories_to_create += if context.use_roles
33
+ %w( roles environments )
34
+ else
35
+ %w( policyfiles )
36
+ end
37
+
38
+ directories_to_create.each do |tlo|
39
+ remote_directory "#{repo_dir}/#{tlo}" do
40
+ source "repo/#{tlo}"
41
+ action :create_if_missing
42
+ end
43
+ end
44
+
45
+ cookbook_file "#{repo_dir}/cookbooks/README.md" do
46
+ if context.policy_only
47
+ source 'cookbook_readmes/README-policy.md'
48
+ else
49
+ source 'cookbook_readmes/README.md'
50
+ end
51
+ action :create_if_missing
52
+ end
53
+
54
+ # git
55
+ if context.have_git
56
+ unless context.skip_git_init
57
+ execute('initialize-git') do
58
+ command('git init .')
59
+ cwd repo_dir
60
+ not_if { File.exist?("#{repo_dir}/.gitignore") }
61
+ end
62
+ end
63
+ template "#{repo_dir}/.gitignore" do
64
+ source 'repo/gitignore.erb'
65
+ helpers(ChefDK::Generator::TemplateHelper)
66
+ action :create_if_missing
67
+ end
68
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+ context = ChefDK::Generator.context
3
+ cookbook_dir = File.join(context.cookbook_root, context.cookbook_name)
4
+
5
+ resource_dir = File.join(cookbook_dir, 'resources')
6
+ resource_path = File.join(resource_dir, "#{context.new_file_basename}.rb")
7
+
8
+ directory resource_dir
9
+
10
+ template resource_path do
11
+ source 'resource.rb.erb'
12
+ helpers(ChefDK::Generator::TemplateHelper)
13
+ end