idlc-sdk-pfm 1.0.0.pre.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +5 -0
  5. data/.yardopts +3 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +37 -0
  9. data/Rakefile +6 -0
  10. data/bin/pfm +8 -0
  11. data/docs/GettingStarted.md +299 -0
  12. data/idlc-sdk-pfm.gemspec +44 -0
  13. data/lib/idlc-sdk-pfm/builtin_commands.rb +11 -0
  14. data/lib/idlc-sdk-pfm/cli.rb +150 -0
  15. data/lib/idlc-sdk-pfm/command/apply.rb +71 -0
  16. data/lib/idlc-sdk-pfm/command/base.rb +195 -0
  17. data/lib/idlc-sdk-pfm/command/build.rb +120 -0
  18. data/lib/idlc-sdk-pfm/command/configure.rb +41 -0
  19. data/lib/idlc-sdk-pfm/command/destroy.rb +61 -0
  20. data/lib/idlc-sdk-pfm/command/exec.rb +24 -0
  21. data/lib/idlc-sdk-pfm/command/format.rb +64 -0
  22. data/lib/idlc-sdk-pfm/command/generate.rb +83 -0
  23. data/lib/idlc-sdk-pfm/command/generator_commands/base.rb +50 -0
  24. data/lib/idlc-sdk-pfm/command/generator_commands/server_build.rb +58 -0
  25. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/Berksfile +3 -0
  26. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/build_cookbook/.kitchen.yml +21 -0
  27. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/build_cookbook/README.md +146 -0
  28. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/build_cookbook/test-fixture-recipe.rb +8 -0
  29. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/chefignore +107 -0
  30. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/cookbook_readmes/README-policy.md +9 -0
  31. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/cookbook_readmes/README.md +54 -0
  32. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/delivery-config.json +12 -0
  33. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/delivery-project.toml +36 -0
  34. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/gitignore +21 -0
  35. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/repo/README.md +24 -0
  36. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/repo/cookbooks/example/README.md +27 -0
  37. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +7 -0
  38. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +6 -0
  39. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +8 -0
  40. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/repo/data_bags/README.md +56 -0
  41. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/repo/data_bags/example/example_item.json +4 -0
  42. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/repo/dot-chef-repo.txt +6 -0
  43. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/repo/environments/README.md +9 -0
  44. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/repo/environments/example.json +13 -0
  45. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/repo/policies/README.md +24 -0
  46. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/repo/roles/README.md +9 -0
  47. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/repo/roles/example.json +13 -0
  48. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/spec_helper.rb +2 -0
  49. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/files/default/spec_helper_policyfile.rb +2 -0
  50. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/metadata.rb +7 -0
  51. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/recipes/app.rb +89 -0
  52. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/recipes/attribute.rb +12 -0
  53. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/recipes/build_cookbook.rb +182 -0
  54. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/recipes/cookbook.rb +144 -0
  55. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/recipes/cookbook_file.rb +24 -0
  56. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/recipes/lwrp.rb +23 -0
  57. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/recipes/policyfile.rb +8 -0
  58. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/recipes/recipe.rb +51 -0
  59. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/recipes/repo.rb +67 -0
  60. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/recipes/template.rb +32 -0
  61. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/LICENSE.all_rights.erb +3 -0
  62. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/LICENSE.apachev2.erb +201 -0
  63. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/LICENSE.gplv2.erb +339 -0
  64. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/LICENSE.gplv3.erb +674 -0
  65. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/LICENSE.mit.erb +21 -0
  66. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/Policyfile.rb.erb +25 -0
  67. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/README.md.erb +4 -0
  68. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/attribute.rb.erb +0 -0
  69. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/build_cookbook/Berksfile.erb +7 -0
  70. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/build_cookbook/metadata.rb.erb +10 -0
  71. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/build_cookbook/recipe.rb.erb +8 -0
  72. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/cookbook_file.erb +0 -0
  73. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/inspec_default_test.rb.erb +18 -0
  74. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/kitchen.yml.erb +26 -0
  75. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/kitchen_policyfile.yml.erb +33 -0
  76. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/metadata.rb.erb +20 -0
  77. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/provider.rb.erb +0 -0
  78. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/recipe.rb.erb +5 -0
  79. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/recipe_spec.rb.erb +22 -0
  80. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/repo/gitignore.erb +128 -0
  81. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/resource.rb.erb +0 -0
  82. data/lib/idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/templates/default/template.erb +0 -0
  83. data/lib/idlc-sdk-pfm/command/generator_commands.rb +34 -0
  84. data/lib/idlc-sdk-pfm/command/plan.rb +80 -0
  85. data/lib/idlc-sdk-pfm/command/templates/app/files/config/client.rb.template +9 -0
  86. data/lib/idlc-sdk-pfm/command/templates/app/files/config/init.ps1.userdata +16 -0
  87. data/lib/idlc-sdk-pfm/command/templates/base/files/config/client.rb.template +6 -0
  88. data/lib/idlc-sdk-pfm/command/templates/base/files/config/init.ps1.userdata +219 -0
  89. data/lib/idlc-sdk-pfm/command/validate.rb +85 -0
  90. data/lib/idlc-sdk-pfm/command/validator_commands/base.rb +65 -0
  91. data/lib/idlc-sdk-pfm/command/validator_commands/infrastructure.rb +46 -0
  92. data/lib/idlc-sdk-pfm/command/validator_commands/server_build.rb +135 -0
  93. data/lib/idlc-sdk-pfm/command/validator_commands.rb +32 -0
  94. data/lib/idlc-sdk-pfm/commands_map.rb +61 -0
  95. data/lib/idlc-sdk-pfm/generator.rb +52 -0
  96. data/lib/idlc-sdk-pfm/helpers.rb +49 -0
  97. data/lib/idlc-sdk-pfm/settings.rb +205 -0
  98. data/lib/idlc-sdk-pfm/validator.rb +52 -0
  99. data/lib/idlc-sdk-pfm/version.rb +3 -0
  100. data/lib/idlc-sdk-pfm.rb +24 -0
  101. metadata +342 -0
@@ -0,0 +1,89 @@
1
+
2
+
3
+ context = ChefDK::Generator.context
4
+ app_dir = File.join(context.app_root, context.app_name)
5
+ cookbooks_dir = context.cookbook_root
6
+ cookbook_dir = File.join(cookbooks_dir, context.cookbook_name)
7
+
8
+ # app root dir
9
+ directory app_dir
10
+
11
+ # Top level files
12
+
13
+ # Test Kitchen
14
+ template "#{app_dir}/.kitchen.yml" do
15
+ source 'kitchen.yml.erb'
16
+ helpers(ChefDK::Generator::TemplateHelper)
17
+ end
18
+
19
+ # Inspec
20
+ directory "#{app_dir}/test/smoke/default" do
21
+ recursive true
22
+ end
23
+
24
+ template "#{app_dir}/test/smoke/default/default_test.rb" do
25
+ source 'inspec_default_test.rb.erb'
26
+ helpers(ChefDK::Generator::TemplateHelper)
27
+ action :create_if_missing
28
+ end
29
+
30
+ # README
31
+ template "#{app_dir}/README.md" do
32
+ helpers(ChefDK::Generator::TemplateHelper)
33
+ end
34
+
35
+ # Generated Cookbook:
36
+
37
+ # cookbook collection dir
38
+ directory cookbooks_dir
39
+
40
+ # cookbook collection dir
41
+ directory cookbook_dir
42
+
43
+ # metadata.rb
44
+ template "#{cookbook_dir}/metadata.rb" do
45
+ helpers(ChefDK::Generator::TemplateHelper)
46
+ end
47
+
48
+ # chefignore
49
+ cookbook_file "#{cookbook_dir}/chefignore"
50
+
51
+ # Berks
52
+ cookbook_file "#{cookbook_dir}/Berksfile"
53
+
54
+ # Recipes
55
+
56
+ directory "#{cookbook_dir}/recipes"
57
+
58
+ template "#{cookbook_dir}/recipes/default.rb" do
59
+ source 'recipe.rb.erb'
60
+ helpers(ChefDK::Generator::TemplateHelper)
61
+ end
62
+
63
+ # Chefspec
64
+ directory "#{cookbook_dir}/spec/unit/recipes" do
65
+ recursive true
66
+ end
67
+
68
+ cookbook_file "#{cookbook_dir}/spec/spec_helper.rb" do
69
+ action :create_if_missing
70
+ end
71
+
72
+ template "#{cookbook_dir}/spec/unit/recipes/default_spec.rb" do
73
+ source 'recipe_spec.rb.erb'
74
+ helpers(ChefDK::Generator::TemplateHelper)
75
+ action :create_if_missing
76
+ end
77
+
78
+ # git
79
+ if context.have_git
80
+ unless context.skip_git_init
81
+ execute('initialize-git') do
82
+ command('git init .')
83
+ cwd app_dir
84
+ end
85
+ end
86
+ cookbook_file "#{app_dir}/.gitignore" do
87
+ source 'gitignore'
88
+ end
89
+ end
@@ -0,0 +1,12 @@
1
+
2
+ context = ChefDK::Generator.context
3
+ cookbook_dir = File.join(context.cookbook_root, context.cookbook_name)
4
+ attribute_dir = File.join(cookbook_dir, 'attributes')
5
+ attribute_path = File.join(cookbook_dir, 'attributes', "#{context.new_file_basename}.rb")
6
+
7
+ directory attribute_dir
8
+
9
+ template attribute_path do
10
+ source 'attribute.rb.erb'
11
+ helpers(ChefDK::Generator::TemplateHelper)
12
+ end
@@ -0,0 +1,182 @@
1
+
2
+ context = ChefDK::Generator.context
3
+ delivery_project_dir = context.delivery_project_dir
4
+ pipeline = context.pipeline
5
+ dot_delivery_dir = File.join(delivery_project_dir, '.delivery')
6
+ config_json = File.join(dot_delivery_dir, 'config.json')
7
+ project_toml = File.join(dot_delivery_dir, 'project.toml')
8
+
9
+ generator_desc('Ensuring delivery configuration')
10
+
11
+ directory dot_delivery_dir
12
+
13
+ cookbook_file config_json do
14
+ source 'delivery-config.json'
15
+ not_if { File.exist?(config_json) }
16
+ end
17
+
18
+ # Adding a new prototype file for delivery-cli local commands
19
+ cookbook_file project_toml do
20
+ source 'delivery-project.toml'
21
+ not_if { File.exist?(project_toml) }
22
+ end
23
+
24
+ generator_desc('Ensuring correct delivery build cookbook content')
25
+
26
+ build_cookbook_dir = File.join(dot_delivery_dir, 'build_cookbook')
27
+
28
+ # cookbook root dir
29
+ directory build_cookbook_dir
30
+
31
+ # metadata.rb
32
+ template "#{build_cookbook_dir}/metadata.rb" do
33
+ source 'build_cookbook/metadata.rb.erb'
34
+ helpers(ChefDK::Generator::TemplateHelper)
35
+ action :create_if_missing
36
+ end
37
+
38
+ # README
39
+ cookbook_file "#{build_cookbook_dir}/README.md" do
40
+ source 'build_cookbook/README.md'
41
+ action :create_if_missing
42
+ end
43
+
44
+ # LICENSE
45
+ template "#{build_cookbook_dir}/LICENSE" do
46
+ source "LICENSE.#{context.license}.erb"
47
+ helpers(ChefDK::Generator::TemplateHelper)
48
+ action :create_if_missing
49
+ end
50
+
51
+ # chefignore
52
+ cookbook_file "#{build_cookbook_dir}/chefignore"
53
+
54
+ # Berksfile
55
+ template "#{build_cookbook_dir}/Berksfile" do
56
+ source 'build_cookbook/Berksfile.erb'
57
+ helpers(ChefDK::Generator::TemplateHelper)
58
+ action :create_if_missing
59
+ end
60
+
61
+ # Recipes
62
+ directory "#{build_cookbook_dir}/recipes"
63
+
64
+ %w(default deploy functional lint provision publish quality security smoke syntax unit).each do |phase|
65
+ template "#{build_cookbook_dir}/recipes/#{phase}.rb" do
66
+ source 'build_cookbook/recipe.rb.erb'
67
+ helpers(ChefDK::Generator::TemplateHelper)
68
+ variables phase: phase
69
+ action :create_if_missing
70
+ end
71
+ end
72
+
73
+ # Test Kitchen build node
74
+ cookbook_file "#{build_cookbook_dir}/.kitchen.yml" do
75
+ source 'build_cookbook/.kitchen.yml'
76
+ end
77
+
78
+ directory "#{build_cookbook_dir}/data_bags/keys" do
79
+ recursive true
80
+ end
81
+
82
+ file "#{build_cookbook_dir}/data_bags/keys/delivery_builder_keys.json" do
83
+ content '{"id": "delivery_builder_keys"}'
84
+ end
85
+
86
+ directory "#{build_cookbook_dir}/secrets"
87
+
88
+ file "#{build_cookbook_dir}/secrets/fakey-mcfakerton"
89
+
90
+ directory "#{build_cookbook_dir}/test/fixtures/cookbooks/test/recipes" do
91
+ recursive true
92
+ end
93
+
94
+ file "#{build_cookbook_dir}/test/fixtures/cookbooks/test/metadata.rb" do
95
+ content %(name 'test'
96
+ version '0.1.0')
97
+ end
98
+
99
+ cookbook_file "#{build_cookbook_dir}/test/fixtures/cookbooks/test/recipes/default.rb" do
100
+ source 'build_cookbook/test-fixture-recipe.rb'
101
+ end
102
+
103
+ # Construct git history as if we did all the work in a feature branch which we
104
+ # merged into master at the end, which looks like this:
105
+ #
106
+ # ```
107
+ # git log --graph --oneline
108
+ # * 5fec5bd Merge branch 'add-delivery-configuration'
109
+ # |\
110
+ # | * 967bb9f Add generated delivery build cookbook
111
+ # | * 1558e0a Add generated delivery configuration
112
+ # |/
113
+ # * db22790 Add generated cookbook content
114
+ # ```
115
+ #
116
+ if context.have_git && context.delivery_project_git_initialized && !context.skip_git_init
117
+
118
+ generator_desc('Adding delivery configuration to feature branch')
119
+
120
+ execute('git-create-feature-branch') do
121
+ command('git checkout -t -b add-delivery-configuration')
122
+ cwd delivery_project_dir
123
+
124
+ not_if 'git branch |grep "add-delivery-configuration"'
125
+ end
126
+
127
+ execute('git-add-delivery-config-json') do
128
+ command('git add .delivery/config.json')
129
+ cwd delivery_project_dir
130
+
131
+ only_if 'git status -u --porcelain |grep ".delivery/config.json"'
132
+ end
133
+
134
+ # Adding the new prototype file to the feature branch
135
+ # so it gets checked in with the delivery config commit
136
+ execute('git-add-delivery-project-toml') do
137
+ command('git add .delivery/project.toml')
138
+ cwd delivery_project_dir
139
+
140
+ only_if 'git status -u --porcelain |grep ".delivery/project.toml"'
141
+ end
142
+
143
+ execute('git-commit-delivery-config') do
144
+ command('git commit -m "Add generated delivery configuration"')
145
+ cwd delivery_project_dir
146
+
147
+ only_if 'git status -u --porcelain | egrep "config.json|project.toml"'
148
+ end
149
+
150
+ generator_desc('Adding build cookbook to feature branch')
151
+
152
+ execute('git-add-delivery-build-cookbook-files') do
153
+ command('git add .delivery')
154
+ cwd delivery_project_dir
155
+
156
+ only_if 'git status -u --porcelain |grep ".delivery"'
157
+ end
158
+
159
+ execute('git-commit-delivery-build-cookbook') do
160
+ command('git commit -m "Add generated delivery build cookbook"')
161
+ cwd delivery_project_dir
162
+
163
+ only_if 'git status -u --porcelain |grep ".delivery"'
164
+ end
165
+
166
+ execute("git-return-to-#{pipeline}-branch") do
167
+ command("git checkout #{pipeline}")
168
+ cwd delivery_project_dir
169
+ end
170
+
171
+ generator_desc('Merging delivery content feature branch to master')
172
+
173
+ execute('git-merge-delivery-config-branch') do
174
+ command('git merge --no-ff add-delivery-configuration')
175
+ cwd delivery_project_dir
176
+ end
177
+
178
+ execute('git-remove-delivery-config-branch') do
179
+ command('git branch -D add-delivery-configuration')
180
+ cwd delivery_project_dir
181
+ end
182
+ end
@@ -0,0 +1,144 @@
1
+
2
+ context = ChefDK::Generator.context
3
+ cookbook_dir = File.join(context.cookbook_root, context.cookbook_name)
4
+
5
+ silence_chef_formatter unless context.verbose
6
+
7
+ generator_desc('Ensuring correct cookbook file content')
8
+
9
+ # cookbook root dir
10
+ directory cookbook_dir
11
+
12
+ # metadata.rb
13
+ spdx_license = case context.license
14
+ when 'apachev2'
15
+ 'Apache-2.0'
16
+ when 'mit'
17
+ 'MIT'
18
+ when 'gplv2'
19
+ 'GPL-2.0'
20
+ when 'gplv3'
21
+ 'GPL-3.0'
22
+ else
23
+ 'All Rights Reserved'
24
+ end
25
+
26
+ template "#{cookbook_dir}/metadata.rb" do
27
+ helpers(ChefDK::Generator::TemplateHelper)
28
+ variables(
29
+ spdx_license: spdx_license
30
+ )
31
+ action :create_if_missing
32
+ end
33
+
34
+ # README
35
+ template "#{cookbook_dir}/README.md" do
36
+ helpers(ChefDK::Generator::TemplateHelper)
37
+ action :create_if_missing
38
+ end
39
+
40
+ # chefignore
41
+ cookbook_file "#{cookbook_dir}/chefignore"
42
+
43
+ if context.use_berkshelf
44
+
45
+ # Berks
46
+ cookbook_file "#{cookbook_dir}/Berksfile" do
47
+ action :create_if_missing
48
+ end
49
+ else
50
+
51
+ # Policyfile
52
+ template "#{cookbook_dir}/Policyfile.rb" do
53
+ source 'Policyfile.rb.erb'
54
+ helpers(ChefDK::Generator::TemplateHelper)
55
+ end
56
+
57
+ end
58
+
59
+ # Test Kitchen
60
+ template "#{cookbook_dir}/.kitchen.yml" do
61
+ if context.use_berkshelf
62
+ source 'kitchen.yml.erb'
63
+ else
64
+ source 'kitchen_policyfile.yml.erb'
65
+ end
66
+
67
+ helpers(ChefDK::Generator::TemplateHelper)
68
+ action :create_if_missing
69
+ end
70
+
71
+ # Inspec
72
+ directory "#{cookbook_dir}/test/smoke/default" do
73
+ recursive true
74
+ end
75
+
76
+ template "#{cookbook_dir}/test/smoke/default/default_test.rb" do
77
+ source 'inspec_default_test.rb.erb'
78
+ helpers(ChefDK::Generator::TemplateHelper)
79
+ action :create_if_missing
80
+ end
81
+
82
+ # Chefspec
83
+ directory "#{cookbook_dir}/spec/unit/recipes" do
84
+ recursive true
85
+ end
86
+
87
+ cookbook_file "#{cookbook_dir}/spec/spec_helper.rb" do
88
+ if context.use_berkshelf
89
+ source 'spec_helper.rb'
90
+ else
91
+ source 'spec_helper_policyfile.rb'
92
+ end
93
+
94
+ action :create_if_missing
95
+ end
96
+
97
+ template "#{cookbook_dir}/spec/unit/recipes/default_spec.rb" do
98
+ source 'recipe_spec.rb.erb'
99
+ helpers(ChefDK::Generator::TemplateHelper)
100
+ action :create_if_missing
101
+ end
102
+
103
+ # Recipes
104
+
105
+ directory "#{cookbook_dir}/recipes"
106
+
107
+ template "#{cookbook_dir}/recipes/default.rb" do
108
+ source 'recipe.rb.erb'
109
+ helpers(ChefDK::Generator::TemplateHelper)
110
+ action :create_if_missing
111
+ end
112
+
113
+ # git
114
+ if context.have_git
115
+ unless context.skip_git_init
116
+
117
+ generator_desc('Committing cookbook files to git')
118
+
119
+ execute('initialize-git') do
120
+ command('git init .')
121
+ cwd cookbook_dir
122
+ end
123
+
124
+ end
125
+
126
+ cookbook_file "#{cookbook_dir}/.gitignore" do
127
+ source 'gitignore'
128
+ end
129
+
130
+ unless context.skip_git_init
131
+
132
+ execute('git-add-new-files') do
133
+ command('git add .')
134
+ cwd cookbook_dir
135
+ end
136
+
137
+ execute('git-commit-new-files') do
138
+ command('git commit -m "Add generated cookbook content"')
139
+ cwd cookbook_dir
140
+ end
141
+ end
142
+ end
143
+
144
+ include_recipe '::build_cookbook' if context.enable_delivery
@@ -0,0 +1,24 @@
1
+
2
+ context = ChefDK::Generator.context
3
+ cookbook_dir = File.join(context.cookbook_root, context.cookbook_name)
4
+ files_dir = File.join(cookbook_dir, 'files', 'default')
5
+ cookbook_file_path = File.join(cookbook_dir, 'files', 'default', context.new_file_basename)
6
+
7
+ directory files_dir do
8
+ recursive true
9
+ end
10
+
11
+ if context.content_source
12
+
13
+ file cookbook_file_path do
14
+ content(IO.read(context.context_source))
15
+ end
16
+
17
+ else
18
+
19
+ template cookbook_file_path do
20
+ source 'cookbook_file.erb'
21
+ helpers(ChefDK::Generator::TemplateHelper)
22
+ end
23
+
24
+ end
@@ -0,0 +1,23 @@
1
+
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
+ provider_dir = File.join(cookbook_dir, 'providers')
9
+ provider_path = File.join(provider_dir, "#{context.new_file_basename}.rb")
10
+
11
+ directory resource_dir
12
+
13
+ template resource_path do
14
+ source 'resource.rb.erb'
15
+ helpers(ChefDK::Generator::TemplateHelper)
16
+ end
17
+
18
+ directory provider_dir
19
+
20
+ template provider_path do
21
+ source 'provider.rb.erb'
22
+ helpers(ChefDK::Generator::TemplateHelper)
23
+ end
@@ -0,0 +1,8 @@
1
+
2
+ context = ChefDK::Generator.context
3
+ policyfile_path = File.join(context.policyfile_dir, "#{context.new_file_basename}.rb")
4
+
5
+ template policyfile_path do
6
+ source 'Policyfile.rb.erb'
7
+ helpers(ChefDK::Generator::TemplateHelper)
8
+ end
@@ -0,0 +1,51 @@
1
+
2
+ context = ChefDK::Generator.context
3
+ cookbook_dir = File.join(context.cookbook_root, context.cookbook_name)
4
+ recipe_path = File.join(cookbook_dir, 'recipes', "#{context.new_file_basename}.rb")
5
+ spec_helper_path = File.join(cookbook_dir, 'spec', 'spec_helper.rb')
6
+ spec_dir = File.join(cookbook_dir, 'spec', 'unit', 'recipes')
7
+ spec_path = File.join(spec_dir, "#{context.new_file_basename}_spec.rb")
8
+ inspec_dir = File.join(cookbook_dir, 'test', 'smoke', 'default')
9
+ inspec_path = File.join(inspec_dir, "#{context.new_file_basename}_test.rb")
10
+
11
+ if File.directory?(File.join(cookbook_dir, 'test', 'recipes'))
12
+ Chef::Log.deprecation <<-EOH
13
+ It appears that you have Inspec tests located at "test/recipes". This location can
14
+ cause issues with Foodcritic and has been deprecated in favor of "test/smoke/default".
15
+ Please move your existing Inspec tests to the newly created "test/smoke/default"
16
+ directory, and update the 'inspec_tests' value in your .kitchen.yml file(s) to
17
+ point to "test/smoke/default".
18
+ EOH
19
+ end
20
+
21
+ # Chefspec
22
+ directory spec_dir do
23
+ recursive true
24
+ end
25
+
26
+ cookbook_file spec_helper_path do
27
+ action :create_if_missing
28
+ end
29
+
30
+ template spec_path do
31
+ source 'recipe_spec.rb.erb'
32
+ helpers(ChefDK::Generator::TemplateHelper)
33
+ action :create_if_missing
34
+ end
35
+
36
+ # Inspec
37
+ directory inspec_dir do
38
+ recursive true
39
+ end
40
+
41
+ template inspec_path do
42
+ source 'inspec_default_test.rb.erb'
43
+ helpers(ChefDK::Generator::TemplateHelper)
44
+ action :create_if_missing
45
+ end
46
+
47
+ # Recipe
48
+ template recipe_path do
49
+ source 'recipe.rb.erb'
50
+ helpers(ChefDK::Generator::TemplateHelper)
51
+ end
@@ -0,0 +1,67 @@
1
+ context = ChefDK::Generator.context
2
+ repo_dir = File.join(context.repo_root, context.repo_name)
3
+
4
+ # repo root dir
5
+ directory repo_dir
6
+
7
+ # Top level files
8
+ template "#{repo_dir}/LICENSE" do
9
+ source "LICENSE.#{context.license}.erb"
10
+ helpers(ChefDK::Generator::TemplateHelper)
11
+ action :create_if_missing
12
+ end
13
+
14
+ cookbook_file "#{repo_dir}/.chef-repo.txt" do
15
+ source 'repo/dot-chef-repo.txt'
16
+ action :create_if_missing
17
+ end
18
+
19
+ cookbook_file "#{repo_dir}/README.md" do
20
+ source 'repo/README.md'
21
+ action :create_if_missing
22
+ end
23
+
24
+ cookbook_file "#{repo_dir}/chefignore" do
25
+ source 'chefignore'
26
+ action :create_if_missing
27
+ end
28
+
29
+ directories_to_create = %w( cookbooks data_bags )
30
+
31
+ directories_to_create += if context.use_roles
32
+ %w( roles environments )
33
+ else
34
+ %w( policies )
35
+ end
36
+
37
+ directories_to_create.each do |tlo|
38
+ remote_directory "#{repo_dir}/#{tlo}" do
39
+ source "repo/#{tlo}"
40
+ action :create_if_missing
41
+ end
42
+ end
43
+
44
+ cookbook_file "#{repo_dir}/cookbooks/README.md" do
45
+ if context.policy_only
46
+ source 'cookbook_readmes/README-policy.md'
47
+ else
48
+ source 'cookbook_readmes/README.md'
49
+ end
50
+ action :create_if_missing
51
+ end
52
+
53
+ # git
54
+ if context.have_git
55
+ unless context.skip_git_init
56
+ execute('initialize-git') do
57
+ command('git init .')
58
+ cwd repo_dir
59
+ not_if { File.exist?("#{repo_dir}/.gitignore") }
60
+ end
61
+ end
62
+ template "#{repo_dir}/.gitignore" do
63
+ source 'repo/gitignore.erb'
64
+ helpers(ChefDK::Generator::TemplateHelper)
65
+ action :create_if_missing
66
+ end
67
+ end
@@ -0,0 +1,32 @@
1
+
2
+ context = ChefDK::Generator.context
3
+ cookbook_dir = File.join(context.cookbook_root, context.cookbook_name)
4
+ template_dir = File.join(cookbook_dir, 'templates', 'default')
5
+ template_filename = context.new_file_basename
6
+
7
+ unless File.extname(template_filename) == '.erb'
8
+ # new_file_basename is a frozen string, so we have to create an entirely
9
+ # new string here instead of using concat.
10
+ template_filename = "#{template_filename}.erb"
11
+ end
12
+
13
+ template_path = File.join(cookbook_dir, 'templates', template_filename)
14
+
15
+ directory template_dir do
16
+ recursive true
17
+ end
18
+
19
+ if context.content_source
20
+
21
+ file template_path do
22
+ content(IO.read(context.context_source))
23
+ end
24
+
25
+ else
26
+
27
+ template template_path do
28
+ source 'template.erb'
29
+ helpers(ChefDK::Generator::TemplateHelper)
30
+ end
31
+
32
+ end
@@ -0,0 +1,3 @@
1
+ Copyright <%= year %> <%= copyright_holder %>
2
+
3
+ All rights reserved, do not redistribute.