selfbootstrap 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/LICENSE +3 -0
  4. data/README.md +12 -0
  5. data/bin/selfbootstrap +10 -0
  6. data/certs/public/jimbodragon.pem +26 -0
  7. data/lib/selfbootstrap/nochef/berks.rb +108 -0
  8. data/lib/selfbootstrap/nochef/chef.rb +63 -0
  9. data/lib/selfbootstrap/nochef/chefrepo.rb +237 -0
  10. data/lib/selfbootstrap/nochef/commandline.rb +114 -0
  11. data/lib/selfbootstrap/nochef/defaultvalues.rb +258 -0
  12. data/lib/selfbootstrap/nochef/defaultworkstationresource.rb +95 -0
  13. data/lib/selfbootstrap/nochef/git.rb +128 -0
  14. data/lib/selfbootstrap/nochef/kitchen.rb +84 -0
  15. data/lib/selfbootstrap/nochef/knife.rb +95 -0
  16. data/lib/selfbootstrap/nochef/platforms.rb +54 -0
  17. data/lib/selfbootstrap/nochef/provisioners.rb +68 -0
  18. data/lib/selfbootstrap/nochef/selfbootstrap.rb +467 -0
  19. data/lib/selfbootstrap/nochef/ssh.rb +72 -0
  20. data/lib/selfbootstrap/nochef/suites.rb +46 -0
  21. data/lib/selfbootstrap/nochef/update.rb +62 -0
  22. data/lib/selfbootstrap/nochef/users.rb +106 -0
  23. data/lib/selfbootstrap/nochef/verifiers.rb +59 -0
  24. data/lib/selfbootstrap/nochef/workstation.rb +250 -0
  25. data/lib/selfbootstrap/nochef/workstationresource.rb +140 -0
  26. data/lib/selfbootstrap/nochef.rb +52 -0
  27. data/lib/selfbootstrap/withchef/chef.rb +120 -0
  28. data/lib/selfbootstrap/withchef/chefrepo.rb +84 -0
  29. data/lib/selfbootstrap/withchef/commandline.rb +40 -0
  30. data/lib/selfbootstrap/withchef/defaultvalues.rb +39 -0
  31. data/lib/selfbootstrap/withchef/git.rb +86 -0
  32. data/lib/selfbootstrap/withchef/selfbootstrap.rb +41 -0
  33. data/lib/selfbootstrap/withchef/users.rb +161 -0
  34. data/lib/selfbootstrap/withchef/workstation.rb +77 -0
  35. data/lib/selfbootstrap/withchef/workstationresource.rb +60 -0
  36. data/lib/selfbootstrap/withchef.rb +55 -0
  37. data/lib/selfbootstrap/withlogger/defaultvalues.rb +33 -0
  38. data/lib/selfbootstrap/withlogger/selfbootstrap.rb +41 -0
  39. data/lib/selfbootstrap/withlogger/workstationresource.rb +59 -0
  40. data/lib/selfbootstrap/withlogger.rb +52 -0
  41. data/lib/selfbootstrap.rb +132 -0
  42. data.tar.gz.sig +0 -0
  43. metadata +117 -0
  44. metadata.gz.sig +0 -0
@@ -0,0 +1,54 @@
1
+ #
2
+ # Chef Infra Documentation
3
+ # https://docs.chef.io/libraries/
4
+ #
5
+
6
+ #
7
+ # This module name was auto-generated from the cookbook name. This name is a
8
+ # single word that starts with a capital letter and then continues to use
9
+ # camel-casing throughout the remainder of the name.
10
+ #
11
+
12
+ require_relative 'suites'
13
+
14
+ module ChefWorkstationInitialize
15
+ module SelfBootstrap
16
+ module NoChef
17
+ module PlatformsHelpers
18
+ include ChefWorkstationInitialize::SelfBootstrap::NoChef::SuitesHelpers
19
+ #
20
+ # Define the methods that you would like to assist the work you do in recipes,
21
+ # resources, or templates.
22
+ #
23
+ # def my_helper_method
24
+ # worklog('Running method my_helper_method' + " for class #{self.class} inside file #{__FILE__}")
25
+
26
+ # # help method implementation
27
+ # end
28
+ def default_platforms
29
+ worklog('Running method default_platforms' + " for class #{self.class} inside file #{__FILE__}")
30
+
31
+ workstation_resource[:platforms]
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ #
39
+ # The module you have defined may be extended within the recipe to grant the
40
+ # recipe the helper methods you define.
41
+ #
42
+ # Within your recipe you would write:
43
+ #
44
+ # extend ChefWorkstationInitialize::PlatformsHelpers
45
+ #
46
+ # my_helper_method
47
+ #
48
+ # You may also add this to a single resource within a recipe:
49
+ #
50
+ # template '/etc/app.conf' do
51
+ # extend ChefWorkstationInitialize::PlatformsHelpers
52
+ # variables specific_key: my_helper_method
53
+ # end
54
+ #
@@ -0,0 +1,68 @@
1
+ #
2
+ # Chef Infra Documentation
3
+ # https://docs.chef.io/libraries/
4
+ #
5
+
6
+ #
7
+ # This module name was auto-generated from the cookbook name. This name is a
8
+ # single word that starts with a capital letter and then continues to use
9
+ # camel-casing throughout the remainder of the name.
10
+ #
11
+
12
+ require_relative 'verifiers'
13
+ require_relative 'platforms'
14
+
15
+ module ChefWorkstationInitialize
16
+ module SelfBootstrap
17
+ module NoChef
18
+ module ProvisionersHelpers
19
+ include ChefWorkstationInitialize::SelfBootstrap::NoChef::VerifiersHelpers
20
+ include ChefWorkstationInitialize::SelfBootstrap::NoChef::PlatformsHelpers
21
+ #
22
+ # Define the methods that you would like to assist the work you do in recipes,
23
+ # resources, or templates.
24
+ #
25
+ # def my_helper_method
26
+ # worklog('Running method my_helper_method' + " for class #{self.class} inside file #{__FILE__}")
27
+
28
+ # # help method implementation
29
+ # end
30
+
31
+ def provisioners
32
+ worklog('Running method provisioners' + " for class #{self.class} inside file #{__FILE__}")
33
+
34
+ [chef_zero_provisioner]
35
+ end
36
+
37
+ def chef_zero_provisioner
38
+ worklog('Running method chef_zero_provisioner' + " for class #{self.class} inside file #{__FILE__}")
39
+
40
+ {
41
+ name: 'chef_zero',
42
+ always_update_cookbooks: true,
43
+ kitchen_root: kitchen_root,
44
+ # encrypted_data_bag_secret_key_path:,
45
+ }
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ #
53
+ # The module you have defined may be extended within the recipe to grant the
54
+ # recipe the helper methods you define.
55
+ #
56
+ # Within your recipe you would write:
57
+ #
58
+ # extend ChefWorkstationInitialize::ProvisionersHelpers
59
+ #
60
+ # my_helper_method
61
+ #
62
+ # You may also add this to a single resource within a recipe:
63
+ #
64
+ # template '/etc/app.conf' do
65
+ # extend ChefWorkstationInitialize::ProvisionersHelpers
66
+ # variables specific_key: my_helper_method
67
+ # end
68
+ #
@@ -0,0 +1,467 @@
1
+ #
2
+ # Chef Infra Documentation
3
+ # https://docs.chef.io/libraries/
4
+ #
5
+
6
+ #
7
+ # This module name was auto-generated from the cookbook name. This name is a
8
+ # single word that starts with a capital letter and then continues to use
9
+ # camel-casing throughout the remainder of the name.
10
+ #
11
+
12
+ require_relative 'workstationresource'
13
+
14
+ module ChefWorkstationInitialize
15
+ module SelfBootstrap
16
+ module NoChef
17
+ module SelfBootstrapHelpers
18
+ include ChefWorkstationInitialize::SelfBootstrap::NoChef::WorkstationResourceHelpers
19
+
20
+ attr_accessor :force_solo
21
+
22
+ def self_bootstrap_with_kitchen
23
+ kitchen 'list bootstrap self', sudo: true
24
+ end
25
+
26
+ def set_chef_profile
27
+ bash_file = '/etc/bash.bashrc.copy'
28
+ chef_shell_cmd = 'eval "$(chef shell-init bash)"'
29
+ debug_worklog "Set chef profile tpo #{bash_file}"
30
+ open(bash_file, 'a') do |f|
31
+ f.puts chef_shell_cmd
32
+ end unless ::File.read(bash_file).include?(chef_shell_cmd)
33
+ end
34
+
35
+ def install_chef_client
36
+ base_command('curl -L https://omnitruck.chef.io/install.sh | sudo bash -s -- -s once -P chef-workstation')
37
+ end
38
+
39
+ def is_chef_installed?
40
+ ::Dir.exist?('/opt/chef-workstation')
41
+ end
42
+
43
+ def is_chef_profile_set?
44
+ base_command('which ruby') == '/usr/bin/chef-client'
45
+ end
46
+
47
+ def is_knife?
48
+ ::File.basename($PROGRAM_NAME).eql?('knife')
49
+ end
50
+
51
+ def for_solo?
52
+ is_knife? && ARGV.join(' ').include?('config show solo --format json')
53
+ end
54
+
55
+ def for_search_local_node?
56
+ is_knife? && ARGV.join(' ').include?("search node name:#{default_hostname} --format json -z")
57
+ end
58
+
59
+ def is_self_bootsrapping?
60
+ is_kitchen_command? && ARGV.join(' ').include?('list bootstrap self')
61
+ end
62
+
63
+ def is_boostrapping?
64
+ # debug_worklog "unauthorized_to_boostrap = #{bootstrapping_progress_file}"
65
+ ::File.exist?(bootstrapping_progress_file)
66
+ end
67
+
68
+ def is_chef_command?
69
+ ::File.basename($PROGRAM_NAME).eql?('chef')
70
+ end
71
+
72
+ def is_chef_cli_command?
73
+ ::File.basename($PROGRAM_NAME).eql?('chef-cli')
74
+ end
75
+
76
+ def is_chef_client_command?
77
+ ::File.basename($PROGRAM_NAME).eql?('chef-client')
78
+ end
79
+
80
+ def is_kitchen_command?
81
+ ::File.basename($PROGRAM_NAME).eql?('kitchen')
82
+ end
83
+
84
+ def unauthorized_to_boostrap?
85
+ is_chef_command? || is_chef_client_command? || is_chef_cli_command?
86
+ end
87
+
88
+ def skip_boostrap?
89
+ debug_worklog("for_solo = #{for_solo?}")
90
+ debug_worklog("for_search_local_node = #{for_search_local_node?}")
91
+ debug_worklog("is_boostrapping = #{is_boostrapping?}")
92
+ debug_worklog("unauthorized_to_boostrap = #{unauthorized_to_boostrap?}")
93
+ for_solo? || for_search_local_node? || is_boostrapping? || unauthorized_to_boostrap?
94
+ end
95
+
96
+ def chef_solo_options
97
+ solo_options.each do |opt, value|
98
+ send(opt, JSON.generate(JSON.generate(value).encode)) unless value.nil? || !respond_to?(opt)
99
+ end
100
+ end
101
+
102
+ def chef_solo_options_encode
103
+ chef_solo_options_str = ''
104
+ solo_options.each do |opt, value|
105
+ chef_solo_options_str += "#{opt} #{JSON.generate(JSON.generate(value).encode)}\n"
106
+ end
107
+ chef_solo_options_str
108
+ end
109
+
110
+ def chef_solo_options_command
111
+ solo_options.map do |opt, value|
112
+ encode_value = JSON.generate(value).encode
113
+ unless value.is_a? String
114
+ encode_value = JSON.generate(JSON.generate(value).encode)
115
+ end
116
+ "--config-option #{opt}=#{encode_value}"
117
+ end.join(' ')
118
+ end
119
+
120
+ def remove_bootstrap_file
121
+ FileUtils.rm bootstrapping_progress_file if ::File.exist?(bootstrapping_progress_file)
122
+ end
123
+
124
+ def boostrapp_once
125
+ create_chef_additionnal_dir
126
+ berks_vendor_init unless is_self_bootsrapping?
127
+ unless ::File.exist?(bootstrapping_progress_file)
128
+ FileUtils.touch bootstrapping_progress_file unless is_self_bootsrapping?
129
+ change_unix_permission if is_self_bootsrapping?
130
+ bootstrap_self_command
131
+ change_unix_permission if is_self_bootsrapping?
132
+ remove_bootstrap_file
133
+ exit 0 if is_self_bootsrapping?
134
+ end
135
+ end
136
+
137
+ def bootstrap_self_command
138
+ if is_solo?
139
+ debug_worklog 'boostrapped with solo'
140
+ if workstation_resource[:user] != 'root'
141
+ debug_worklog 'boostrapped with solo and kitchen and root'
142
+ remove_bootstrap_file
143
+ self_bootstrap_with_kitchen
144
+ else
145
+ debug_worklog 'boostrapped with solo and chef-client'
146
+ install_chef_client
147
+ set_chef_profile
148
+ chef_client_self_bootstrap_cmd
149
+ end
150
+ else
151
+ debug_worklog 'boostrapped with chef-server and knife'
152
+ knife_self_bootstrap_cmd
153
+ end
154
+ debug_worklog 'bootstrap self command completed'
155
+ end
156
+
157
+ def bootstrap_self
158
+ # worklog "Bootstrap #{default_hostname} with skip #{skip_boostrap?}::#{boostrapped?}"
159
+ unless skip_boostrap? || boostrapped?
160
+ worklog 'machine not boostrapped'
161
+ boostrapp_once
162
+ end
163
+ end
164
+
165
+ def is_solo?
166
+ force_solo || (
167
+ if skip_boostrap?
168
+ debug_worklog('Checking solo from workstation resource')
169
+ workstation_resource[:solo]
170
+ else
171
+ json_parse = JSON.parse(get_solo_cmd)
172
+ debug_worklog("is solo parse = #{json_parse}")
173
+ json_parse.nil? ? workstation_resource[:solo] : json_parse['solo']
174
+ end
175
+ )
176
+ end
177
+
178
+ def boostrapped?
179
+ return false if for_search_local_node?
180
+
181
+ begin
182
+ result = JSON.parse(knife_search_self_cmd)
183
+ debug_worklog('Searching result' + result.to_s)
184
+ rows = result['rows']
185
+ get_runlist = nil
186
+ rows.each do |row|
187
+ unless row['run_list'].nil?
188
+ get_runlist += row['run_list']
189
+ end
190
+ end
191
+
192
+ !get_runlist.nil?
193
+ rescue JSON::ParserError => json_parse_error
194
+ worklog "Force solo as not able to parse json in: #{json_parse_error.inspect}"
195
+ boostrapped = false
196
+ @force_solo = true
197
+ rescue StandardError => std_bootstrap_err
198
+ worklog "Not able to validate if bootrapped as: #{std_bootstrap_err.inspect}"
199
+ @force_solo = true
200
+ boostrapped = false
201
+ end
202
+ boostrapped
203
+ end
204
+
205
+ def solo_options
206
+ {
207
+ chef_repo_path: get_path(workstation_chef_repo_path),
208
+ cookbook_path: [
209
+ get_path(workstation_cookbooks_dir),
210
+ get_path(workstation_libraries_dir),
211
+ get_path(workstation_resources_dir),
212
+ get_path(workstation_berks_vendor_dir),
213
+ ],
214
+ data_bags_path: get_path(workstation_data_bags_dir),
215
+ environment_path: get_path(workstation_chef_environments_dir),
216
+ node_path: get_path(workstation_nodes_dir),
217
+ policy_group_path: get_path(workstation_policy_group_dir),
218
+ policy_path: get_path(workstation_policy_dir),
219
+ role_path: get_path(workstation_roles_dir),
220
+ solo: is_solo?,
221
+ log_location: ::File.join(get_path(workstation_logs_dir), "#{project_name}_#{workstation_resource[:user]}.log"),
222
+ cache_options: {
223
+ path: get_path(workstation_cache_options_syntaxe_path),
224
+ },
225
+ cache_path: get_path(workstation_cache_path),
226
+ checksum_path: get_path(workstation_checksum_path),
227
+ acl_path: get_path(workstation_acl_path),
228
+ client_d_dir: get_path(workstation_client_d_dir),
229
+ client_key_path: get_path(workstation_client_key_path),
230
+ client_path: get_path(workstation_client_path),
231
+ color: true,
232
+ config_d_dir: get_path(workstation_config_d_dir),
233
+ config_dir: get_path(workstation_config_dir),
234
+ container_path: get_path(workstation_container_path),
235
+ cookbook_artifact_path: get_path(workstation_cookbook_artifact_path),
236
+ enable_reporting: false,
237
+ file_backup_path: get_path(workstation_file_backup_path),
238
+ file_cache_path: get_path(workstation_file_cache_path),
239
+ group: workstation_resource[:group],
240
+ group_path: get_path(workstation_group_path),
241
+ lockfile: ::File.join(get_path(workstation_file_cache_path), 'chef-client-running.pid'),
242
+ node_name: default_hostname,
243
+ ohai_segment_plugin_path: get_path(workstation_ohai_segment_plugin_path),
244
+ solo_d_dir: get_path(workstation_solo_d_dir),
245
+ user: workstation_resource[:user],
246
+ user_home: workstation_resource[:home],
247
+ user_path: get_path(workstation_user_path),
248
+ syntax_check_cache_path: get_path(workstation_syntax_check_cache_path),
249
+ trusted_certs_dir: get_path(workstation_trusted_certs_dir),
250
+ validation_client_name: "#{project_name}-chef-validator",
251
+ data_bag_encrypt_version: 3,
252
+ # # client_key "#{current_dir}/<%= @workstation_resource[:gitinfo]user %>.pem"
253
+ # # chef_server_url "https://chef.jimbodragon.qc.to/organizations/<%= @workstation_resource[:gitinfo]project_name %>"
254
+ # # acl_path: /root/acls,
255
+ # # allowed_automatic_attributes: nil,
256
+ # # allowed_default_attributes: nil,
257
+ # # allowed_normal_attributes: nil,
258
+ # # allowed_override_attributes: nil,
259
+ # # always_dump_stacktrace: false,
260
+ # # authentication_protocol_version: 1.1,
261
+ # # automatic_attribute_blacklist: nil,
262
+ # # automatic_attribute_whitelist: nil,
263
+ # # blocked_automatic_attributes: nil,
264
+ # # blocked_default_attributes: nil,
265
+ # # blocked_normal_attributes: nil,
266
+ # # blocked_override_attributes: nil,
267
+ # # cache_options: {
268
+ # # path: /root/.chef/syntaxcache
269
+ # # },
270
+ # # cache_path: /root/.chef/local-mode-cache,
271
+ # # checksum_path: /root/.chef/local-mode-cache/checksums,
272
+ # # chef_guid: nil,
273
+ # # chef_guid_path: /root/.chef/chef_guid,
274
+ # # chef_repo_path: /root,
275
+ # # chef_server_root: chefzero://localhost: 1,
276
+ # # chef_server_url: chefzero://localhost: 1,
277
+ # # chef_zero: {
278
+ # # enabled: true,
279
+ # # host: localhost,
280
+ # # osc_compat: false,
281
+ # # port: #<Enumerator: 0x000000000136d318>,
282
+ # # single_org: chef
283
+ # # },
284
+ # # chefcli: nil,
285
+ # # chefdk: nil,
286
+ # # clear_gem_sources: nil,
287
+ # # client_d_dir: /root/.chef/client.d,
288
+ # # client_fork: nil,
289
+ # # client_key: nil,
290
+ # # client_key_contents: nil,
291
+ # # client_key_path: /root/client_keys,
292
+ # # client_path: /root/clients,
293
+ # # client_registration_retries: 5,
294
+ # # color: true,
295
+ # # config_d_dir: /root/.chef/config.d,
296
+ # # config_dir: /root/.chef/,
297
+ # # config_file: nil,
298
+ # # container_path: /root/containers,
299
+ # # cookbook_artifact_path: /root/cookbook_artifacts,
300
+ # # cookbook_path: [
301
+ # # #{current_dir}/cookbooks,
302
+ # # #{current_dir}/libraries,
303
+ # # #{current_dir}/resources
304
+ # # ],
305
+ # # cookbook_sync_threads: 10,
306
+ # # count_log_resource_updates: false,
307
+ # # data_bag_decrypt_minimum_version: 0,
308
+ # # data_bag_encrypt_version: 3,
309
+ # # data_bags_path: /root/data_bags,
310
+ # # data_collector: {
311
+ # # mode: both,
312
+ # # organization: chef_solo,
313
+ # # raise_on_failure: false,
314
+ # # server_url: nil,
315
+ # # token: nil
316
+ # # },
317
+ # # default_attribute_blacklist: nil,
318
+ # # default_attribute_whitelist: nil,
319
+ # # deployment_group: nil,
320
+ # # diff_disabled: false,
321
+ # # diff_filesize_threshold: 10000000,
322
+ # # diff_output_threshold: 1000000,
323
+ # # disable_event_loggers: false,
324
+ # # download_progress_interval: 10,
325
+ # # enable_reporting: true,
326
+ # # enable_reporting_url_fatals: false,
327
+ # # enable_selinux_file_permission_fixup: true,
328
+ # # encrypted_data_bag_secret: nil,
329
+ # # enforce_default_paths: false,
330
+ # # enforce_path_sanity: false,
331
+ # # environment_path: /root/environments,
332
+ # # event_handlers: nil,
333
+ # # event_loggers: nil,
334
+ # # exception_handlers: nil,
335
+ # # ez: false,
336
+ # # file_atomic_update: true,
337
+ # # file_backup_path: /root/.chef/local-mode-cache/backup,
338
+ # # file_cache_path: /root/.chef/local-mode-cache/cache,
339
+ # # file_staging_uses_destdir: auto,
340
+ # # fips: false,
341
+ # # follow_client_key_symlink: false,
342
+ # # force_formatter: false,
343
+ # # force_logger: false,
344
+ # # formatter: null,
345
+ # # formatters: nil,
346
+ # # group: nil,
347
+ # # group_path: /root/groups,
348
+ # # group_valid_regex: (?-mix:^[^-+~: nil,\t\r\n\f\0]+[^: nil,\t\r\n\f\0]*$),
349
+ # # http_disable_auth_on_redirect: true,
350
+ # # http_retry_count: 5,
351
+ # # http_retry_delay: 5,
352
+ # # internal_locale: C.UTF-8,
353
+ # # interval: nil,
354
+ # # json_attribs: nil,
355
+ # # knife: {
356
+ # # hints: nil
357
+ # # },
358
+ # # listen: false,
359
+ # # local_key_generation: true,
360
+ # # local_mode: true,
361
+ # # lockfile: /root/.chef/local-mode-cache/cache/chef-client-running.pid,
362
+ # # log_level: info,
363
+ # # log_location: STDERR,
364
+ # # minimal_ohai: false,
365
+ # # named_run_list: nil,
366
+ # # no_lazy_load: true,
367
+ # # node_name: root,
368
+ # # node_path: /root/nodes,
369
+ # # normal_attribute_blacklist: nil,
370
+ # # normal_attribute_whitelist: nil,
371
+ # # ohai: {
372
+ # # critical_plugins: nil,
373
+ # # disabled_plugins: nil,
374
+ # # hints_path: /etc/chef/ohai/hints,
375
+ # # log_level: auto,
376
+ # # log_location: #<IO: 0x000000000097b7d8>,
377
+ # # optional_plugins: nil,
378
+ # # plugin: nil,
379
+ # # plugin_path: nil,
380
+ # # /opt/chef-workstation/embedded/lib/ruby/gems/2.7.0/gems/ohai-16.6.5/lib/ohai/plugins,
381
+ # # /etc/chef/ohai/plugins,
382
+ # # run_all_plugins: false,
383
+ # # shellout_timeout: 30
384
+ # # },
385
+ # # ohai_segment_plugin_path: /root/.chef/ohai/cookbook_plugins,
386
+ # # once: nil,
387
+ # # override_attribute_blacklist: nil,
388
+ # # override_attribute_whitelist: nil,
389
+ # # pid_file: nil,
390
+ # # policy_document_native_api: true,
391
+ # # policy_group: nil,
392
+ # # policy_group_path: /root/policy_groups,
393
+ # # policy_name: nil,
394
+ # # policy_path: /root/policies,
395
+ # # profile: nil,
396
+ # # recipe_url: nil,
397
+ # # repo_mode: hosted_everything,
398
+ # # report_handlers: nil,
399
+ # # resource_unified_mode_default: false,
400
+ # # rest_timeout: 300,
401
+ # # role_path: /root/roles,
402
+ # # ruby_encoding: UTF-8,
403
+ # # rubygems_cache_enabled: false,
404
+ # # rubygems_url: nil,
405
+ # # run_lock_timeout: nil,
406
+ # # script_path: nil,
407
+ # # show_download_progress: false,
408
+ # # silence_deprecation_warnings: nil,
409
+ # # solo: false,
410
+ # # solo_d_dir: /root/.chef/solo.d,
411
+ # # solo_legacy_mode: false,
412
+ # # splay: nil,
413
+ # # ssh_agent_signing: false,
414
+ # # ssl_ca_file: nil,
415
+ # # ssl_ca_path: nil,
416
+ # # ssl_client_cert: nil,
417
+ # # ssl_client_key: nil,
418
+ # # ssl_verify_mode: verify_peer,
419
+ # # start_handlers: nil,
420
+ # # stream_execute_output: false,
421
+ # # syntax_check_cache_path: /root/.chef/syntaxcache,
422
+ # # target_mode: {
423
+ # # enabled: false,
424
+ # # protocol: ssh
425
+ # # },
426
+ # # treat_deprecation_warnings_as_errors: false,
427
+ # # trusted_certs_dir: /root/.chef/trusted_certs,
428
+ # # umask: 18,
429
+ # # user: nil,
430
+ # # user_home: /root,
431
+ # # user_path: /root/users,
432
+ # # user_valid_regex: (?-mix:^[^-+~: nil,\t\r\n\f\0]+[^: nil,\t\r\n\f\0]*$),
433
+ # # validation_client_name: chef-validator,
434
+ # # validation_key: nil,
435
+ # # validation_key_contents: nil,
436
+ # # verbose_logging: true,
437
+ # # verify_api_cert: true,
438
+ # # why_run: false,
439
+ # # windows_service: {
440
+ # # watchdog_timeout: 7200
441
+ # # },
442
+ # # zypper_check_gpg: true,
443
+ }
444
+ end
445
+ end
446
+ end
447
+ end
448
+ end
449
+
450
+ #
451
+ # The module you have defined may be extended within the recipe to grant the
452
+ # recipe the helper methods you define.
453
+ #
454
+ # Within your recipe you would write:
455
+ #
456
+ # extend ChefWorkstationInitialize::WorkstationHelpers
457
+ #
458
+ # my_helper_method
459
+ #
460
+ # You may also add this to a single resource within a recipe:
461
+ #
462
+ # template '/etc/app.conf' do
463
+ # extend ChefWorkstationInitialize::WorkstationHelpers
464
+ # variables specific_key: my_helper_method
465
+ # end
466
+ #
467
+
@@ -0,0 +1,72 @@
1
+ #
2
+ # Chef Infra Documentation
3
+ # https://docs.chef.io/libraries/
4
+ #
5
+
6
+ #
7
+ # This module name was auto-generated from the cookbook name. This name is a
8
+ # single word that starts with a capital letter and then continues to use
9
+ # camel-casing throughout the remainder of the name.
10
+ #
11
+
12
+ require_relative 'commandline'
13
+
14
+ module ChefWorkstationInitialize
15
+ module SelfBootstrap
16
+ module NoChef
17
+ module SSHHelpers
18
+ include ChefWorkstationInitialize::SelfBootstrap::NoChef::CommandlineHelpers
19
+
20
+ def ssh(*args, **run_opts)
21
+ base_command('ssh', args, run_opts)
22
+ end
23
+
24
+ def ssh_keygen(*args, **run_opts)
25
+ base_command('ssh', args, run_opts)
26
+ end
27
+
28
+ def ssh_command(ip_or_name, user, command)
29
+ worklog('Running method ssh_command(ip_or_name, user, command)' + " for class #{self.class} inside file #{__FILE__}")
30
+
31
+ ssh "-o StrictHostKeyChecking=no -l #{user} #{ip_or_name} #{command}"
32
+ end
33
+
34
+ def delete_hostkey_ip_or_name(ip_or_name)
35
+ worklog('Running method delete_hostkey_ip_or_name(ip_or_name)' + " for class #{self.class} inside file #{__FILE__}")
36
+
37
+ debug_worklog 'Delete_ssh_machine_key of ' + ip_or_name.to_s
38
+ ssh_keygen "-R #{ip_or_name}"
39
+ end
40
+
41
+ def delete_hostkey
42
+ worklog('Running method delete_hostkey' + " for class #{self.class} inside file #{__FILE__}")
43
+
44
+ delete_hostkey_ip_or_name(node['fqdn'])
45
+ delete_hostkey_ip_or_name(node['ipaddress'])
46
+ end
47
+
48
+ def generate_private_key(privkey)
49
+ ssh_keygen "-m 'RFC4716' -N '' -P '' -f #{privkey}"
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ #
57
+ # The module you have defined may be extended within the recipe to grant the
58
+ # recipe the helper methods you define.
59
+ #
60
+ # Within your recipe you would write:
61
+ #
62
+ # extend ChefWorkstationInitialize::SshHelpers
63
+ #
64
+ # my_helper_method
65
+ #
66
+ # You may also add this to a single resource within a recipe:
67
+ #
68
+ # template '/etc/app.conf' do
69
+ # extend ChefWorkstationInitialize::SshHelpers
70
+ # variables specific_key: my_helper_method
71
+ # end
72
+ #