galvanize 0.1.2

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.
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