selfbootstrap 0.1.0
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.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data/LICENSE +3 -0
- data/README.md +12 -0
- data/bin/selfbootstrap +10 -0
- data/certs/public/jimbodragon.pem +26 -0
- data/lib/selfbootstrap/nochef/berks.rb +108 -0
- data/lib/selfbootstrap/nochef/chef.rb +63 -0
- data/lib/selfbootstrap/nochef/chefrepo.rb +237 -0
- data/lib/selfbootstrap/nochef/commandline.rb +114 -0
- data/lib/selfbootstrap/nochef/defaultvalues.rb +258 -0
- data/lib/selfbootstrap/nochef/defaultworkstationresource.rb +95 -0
- data/lib/selfbootstrap/nochef/git.rb +128 -0
- data/lib/selfbootstrap/nochef/kitchen.rb +84 -0
- data/lib/selfbootstrap/nochef/knife.rb +95 -0
- data/lib/selfbootstrap/nochef/platforms.rb +54 -0
- data/lib/selfbootstrap/nochef/provisioners.rb +68 -0
- data/lib/selfbootstrap/nochef/selfbootstrap.rb +467 -0
- data/lib/selfbootstrap/nochef/ssh.rb +72 -0
- data/lib/selfbootstrap/nochef/suites.rb +46 -0
- data/lib/selfbootstrap/nochef/update.rb +62 -0
- data/lib/selfbootstrap/nochef/users.rb +106 -0
- data/lib/selfbootstrap/nochef/verifiers.rb +59 -0
- data/lib/selfbootstrap/nochef/workstation.rb +250 -0
- data/lib/selfbootstrap/nochef/workstationresource.rb +140 -0
- data/lib/selfbootstrap/nochef.rb +52 -0
- data/lib/selfbootstrap/withchef/chef.rb +120 -0
- data/lib/selfbootstrap/withchef/chefrepo.rb +84 -0
- data/lib/selfbootstrap/withchef/commandline.rb +40 -0
- data/lib/selfbootstrap/withchef/defaultvalues.rb +39 -0
- data/lib/selfbootstrap/withchef/git.rb +86 -0
- data/lib/selfbootstrap/withchef/selfbootstrap.rb +41 -0
- data/lib/selfbootstrap/withchef/users.rb +161 -0
- data/lib/selfbootstrap/withchef/workstation.rb +77 -0
- data/lib/selfbootstrap/withchef/workstationresource.rb +60 -0
- data/lib/selfbootstrap/withchef.rb +55 -0
- data/lib/selfbootstrap/withlogger/defaultvalues.rb +33 -0
- data/lib/selfbootstrap/withlogger/selfbootstrap.rb +41 -0
- data/lib/selfbootstrap/withlogger/workstationresource.rb +59 -0
- data/lib/selfbootstrap/withlogger.rb +52 -0
- data/lib/selfbootstrap.rb +132 -0
- data.tar.gz.sig +0 -0
- metadata +117 -0
- metadata.gz.sig +0 -0
@@ -0,0 +1,258 @@
|
|
1
|
+
# name 'Helper file for chef_workstation_initialize'
|
2
|
+
# maintainer 'Jimbo Dragon'
|
3
|
+
# maintainer_email 'jimbo_dragon@hotmail.com'
|
4
|
+
# license 'MIT'
|
5
|
+
# description 'Helper file for chef_workstation_initialize'
|
6
|
+
# version '0.1.0'
|
7
|
+
# chef_version '>= 16.6.14'
|
8
|
+
# issues_url 'https://github.com/jimbodragon/chef_workstation_initialize/issues'
|
9
|
+
# source_url 'https://github.com/jimbodragon/chef_workstation_initialize'
|
10
|
+
#
|
11
|
+
# Chef Infra Documentation
|
12
|
+
# https://docs.chef.io/libraries/
|
13
|
+
#
|
14
|
+
|
15
|
+
#
|
16
|
+
# This module name was auto-generated from the cookbook name. This name is a
|
17
|
+
# single word that starts with a capital letter and then continues to use
|
18
|
+
# camel-casing throughout the remainder of the name.
|
19
|
+
#
|
20
|
+
|
21
|
+
require 'json'
|
22
|
+
require 'date'
|
23
|
+
require 'fileutils'
|
24
|
+
require 'yaml'
|
25
|
+
require 'socket'
|
26
|
+
|
27
|
+
module ChefWorkstationInitialize
|
28
|
+
module SelfBootstrap
|
29
|
+
module NoChef
|
30
|
+
module DefaultValuesHelpers
|
31
|
+
def define_resource_requirements
|
32
|
+
end
|
33
|
+
|
34
|
+
def worklog_counter
|
35
|
+
@worklog_counter ||= 0
|
36
|
+
@worklog_counter += 1
|
37
|
+
end
|
38
|
+
|
39
|
+
def worklog(logstr)
|
40
|
+
# if skip_boostrap?
|
41
|
+
# create_chef_additionnal_dir unless ::File.exist?(workstation_logs_dir)
|
42
|
+
# ::File.open(::File.join(get_path(workstation_logs_dir), 'knife.log'), 'a+') do |file|
|
43
|
+
# file.puts logstr
|
44
|
+
# end
|
45
|
+
# els
|
46
|
+
puts("#{DateTime.now}(#{worklog_counter}):: #{logstr}\n")
|
47
|
+
end
|
48
|
+
|
49
|
+
def error_worklog(logstr)
|
50
|
+
worklog("ERROR:: #{logstr}")
|
51
|
+
end
|
52
|
+
|
53
|
+
def warning_worklog(logstr)
|
54
|
+
worklog("WARN:: #{logstr}")
|
55
|
+
end
|
56
|
+
|
57
|
+
def debug_worklog(logstr)
|
58
|
+
worklog("DEBUG:: #{logstr}")
|
59
|
+
end
|
60
|
+
|
61
|
+
def require_implement_method(method_name, *arguments)
|
62
|
+
warning_worklog("Method '#{method_name}' need to be implement from another module or class with arguments '#{arguments.join(', ')}'")
|
63
|
+
end
|
64
|
+
|
65
|
+
def get_path(dir_obj)
|
66
|
+
dir_obj.is_a?(::Dir) ? dir_obj.path : dir_obj
|
67
|
+
end
|
68
|
+
|
69
|
+
def parent_nil?(hashobject, *names)
|
70
|
+
hashobject.nil? ? true : hashobject.depth_nil?(names)
|
71
|
+
end
|
72
|
+
|
73
|
+
def default_hostname
|
74
|
+
respond_to?('node') ? node['hostname'] : Socket.gethostname
|
75
|
+
end
|
76
|
+
|
77
|
+
def default_chefzero_portrange
|
78
|
+
'48999-49999'
|
79
|
+
end
|
80
|
+
|
81
|
+
def generate_directory(dir_path)
|
82
|
+
corrected_dir_path = get_path(dir_path)
|
83
|
+
FileUtils.mkdir_p(corrected_dir_path) unless ::File.exist?(corrected_dir_path)
|
84
|
+
FileUtils.chown_R(workstation_resource[:user], workstation_resource[:group], corrected_dir_path)
|
85
|
+
FileUtils.chmod_R(0775, corrected_dir_path)
|
86
|
+
corrected_dir_path
|
87
|
+
end
|
88
|
+
|
89
|
+
def get_out_of_folder(folderpath, folder_to_get_out)
|
90
|
+
if get_path(folderpath).include?(folder_to_get_out)
|
91
|
+
get_out_of_folder(::File.dirname(folderpath))
|
92
|
+
else
|
93
|
+
folderpath
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def get_out_of_cache_path(cachepath)
|
98
|
+
get_out_of_folder(cachepath, 'cache')
|
99
|
+
end
|
100
|
+
|
101
|
+
def get_out_of_local_chef_path(projectpath)
|
102
|
+
get_out_of_folder(projectpath, '.chef')
|
103
|
+
end
|
104
|
+
|
105
|
+
def search_local_project_folder(projectpath)
|
106
|
+
get_out_of_local_chef_path(get_out_of_cache_path(projectpath))
|
107
|
+
end
|
108
|
+
|
109
|
+
def check_install_dir(dir_to_check)
|
110
|
+
if ::File.basename(get_path(dir_to_check)) == project_name
|
111
|
+
search_local_project_folder(dir_to_check)
|
112
|
+
else
|
113
|
+
::File.join(get_path(dir_to_check), project_name)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def generate_default_install_dir
|
118
|
+
generic_install_dir = '/usr/local/chef/repo'
|
119
|
+
# generate_directory default_install_dir
|
120
|
+
::Dir.exist?(generic_install_dir) ? ::Dir.new(generic_install_dir) : generic_install_dir
|
121
|
+
end
|
122
|
+
|
123
|
+
def default_install_dir
|
124
|
+
if @workstation.nil?
|
125
|
+
working_dir = ENV['default_install_dir'].nil? ? ::Dir.getwd : ENV['default_install_dir']
|
126
|
+
install_path = search_local_project_folder(working_dir)
|
127
|
+
if ::Dir.exist?(install_path)
|
128
|
+
::Dir.new(install_path)
|
129
|
+
else
|
130
|
+
error_worklog("Unable to get the project from '#{install_path}' while in the folder #{working_dir}")
|
131
|
+
end
|
132
|
+
# elsif respond_to?('node')
|
133
|
+
# check_install_dir ::Dir.new("/usr/local/chef/repo/#{node['infra_chef']['project_name']}")
|
134
|
+
elsif workstation_resource[:install_dir].nil?
|
135
|
+
debug_worklog('workstation defined but install_dir not define')
|
136
|
+
generate_default_install_dir
|
137
|
+
else
|
138
|
+
check_install_dir workstation_resource[:install_dir]
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def analyse_object(object)
|
143
|
+
begin
|
144
|
+
debug_worklog("Analyzing object = #{object.class.name}")
|
145
|
+
rescue StandardError => exception
|
146
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
147
|
+
end
|
148
|
+
begin
|
149
|
+
debug_worklog("#{object.class.name}.methods = #{object.methods}")
|
150
|
+
debug_worklog("Empty = \n\n\n")
|
151
|
+
rescue StandardError => exception
|
152
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
153
|
+
end
|
154
|
+
begin
|
155
|
+
debug_worklog("#{object.class.name}.singleton_methods = #{object.singleton_methods}")
|
156
|
+
debug_worklog("Empty = \n\n\n")
|
157
|
+
rescue StandardError => exception
|
158
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
159
|
+
end
|
160
|
+
begin
|
161
|
+
debug_worklog("#{object.class.name}.public_constant = #{object.public_constant}")
|
162
|
+
debug_worklog("Empty = \n\n\n")
|
163
|
+
rescue StandardError => exception
|
164
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
165
|
+
end
|
166
|
+
begin
|
167
|
+
debug_worklog("#{object.class.name}.public_class_method = #{object.public_class_method}")
|
168
|
+
debug_worklog("Empty = \n\n\n")
|
169
|
+
rescue StandardError => exception
|
170
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
171
|
+
end
|
172
|
+
begin
|
173
|
+
debug_worklog("#{object.class.name}.singleton_methods = #{object.singleton_methods}")
|
174
|
+
debug_worklog("Empty = \n\n\n")
|
175
|
+
rescue StandardError => exception
|
176
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
177
|
+
end
|
178
|
+
begin
|
179
|
+
debug_worklog("#{object.class.name}.public_methods = #{object.public_methods}")
|
180
|
+
debug_worklog("Empty = \n\n\n")
|
181
|
+
rescue StandardError => exception
|
182
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
183
|
+
end
|
184
|
+
begin
|
185
|
+
debug_worklog("#{object.class.name}.included_modules = #{object.included_modules}")
|
186
|
+
debug_worklog("Empty = \n\n\n")
|
187
|
+
rescue StandardError => exception
|
188
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
189
|
+
end
|
190
|
+
begin
|
191
|
+
debug_worklog("#{object.class.name}.local_variables = #{object.local_variables}")
|
192
|
+
debug_worklog("Empty = \n\n\n")
|
193
|
+
rescue StandardError => exception
|
194
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
195
|
+
end
|
196
|
+
begin
|
197
|
+
debug_worklog("#{object.class.name}.instance_variables = #{object.instance_variables}")
|
198
|
+
debug_worklog("Empty = \n\n\n")
|
199
|
+
rescue StandardError => exception
|
200
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
201
|
+
end
|
202
|
+
begin
|
203
|
+
debug_worklog("#{object.class.name}.global_variables = #{object.global_variables}")
|
204
|
+
debug_worklog("Empty = \n\n\n")
|
205
|
+
rescue StandardError => exception
|
206
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
207
|
+
end
|
208
|
+
begin
|
209
|
+
debug_worklog("#{object.class.name}.class_variables = #{object.class_variables}")
|
210
|
+
debug_worklog("Empty = \n\n\n")
|
211
|
+
rescue StandardError => exception
|
212
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
213
|
+
end
|
214
|
+
begin
|
215
|
+
debug_worklog("#{object.class.name}.constants = #{object.constants}")
|
216
|
+
rescue StandardError => exception
|
217
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
218
|
+
end
|
219
|
+
begin
|
220
|
+
debug_worklog("#{object.class.name}.params = #{object.resource_name}")
|
221
|
+
rescue StandardError => exception
|
222
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
223
|
+
end
|
224
|
+
begin
|
225
|
+
debug_worklog("#{object.class.name}.resource_initializing = #{object.resource_initializing}")
|
226
|
+
rescue StandardError => exception
|
227
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
228
|
+
end
|
229
|
+
begin
|
230
|
+
debug_worklog("#{object.class.name}.resources = #{object.resources}")
|
231
|
+
rescue StandardError => exception
|
232
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
233
|
+
end
|
234
|
+
begin
|
235
|
+
debug_worklog("#{object.class.name}.params = #{object.params}")
|
236
|
+
rescue StandardError => exception
|
237
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
238
|
+
end
|
239
|
+
begin
|
240
|
+
debug_worklog("#{object.class.name}.find_resource(\"git_resource[YP]\") = #{object.find_resource(:git_resource, "YP")}")
|
241
|
+
rescue StandardError => exception
|
242
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
243
|
+
end
|
244
|
+
# begin
|
245
|
+
# analyse_object(object.find_resource(:git_resource, "YP"), logger)
|
246
|
+
# rescue StandardError => exception
|
247
|
+
# debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
248
|
+
# end
|
249
|
+
begin
|
250
|
+
debug_worklog("Chef::Provider::GitResource.public_class_method(:init_git) = #{Chef::Provider::GitResource.public_class_method(:init_git)}")
|
251
|
+
rescue StandardError => exception
|
252
|
+
debug_worklog("StandardError catch for: (#{exception.class.name}): #{exception.message}")
|
253
|
+
end
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
end
|
@@ -0,0 +1,95 @@
|
|
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
|
+
module ChefWorkstationInitialize
|
12
|
+
module SelfBootstrap
|
13
|
+
module NoChef
|
14
|
+
module WorkstationResourceHelpers
|
15
|
+
class DefaultWorkstationResource
|
16
|
+
include ChefWorkstationInitialize::SelfBootstrap::NoChef
|
17
|
+
|
18
|
+
def workstation_resource_keys
|
19
|
+
@selfbootstrap_resource.keys
|
20
|
+
end
|
21
|
+
|
22
|
+
def [](key)
|
23
|
+
@selfbootstrap_resource ||= {
|
24
|
+
install_dir: ::Dir.getwd,
|
25
|
+
project_name: ::File.basename(::Dir.getwd),
|
26
|
+
cookbook_source: 'infra_chef',
|
27
|
+
project_description: nil,
|
28
|
+
environments: nil,
|
29
|
+
initial_command: nil,
|
30
|
+
cron_chef_solo_command: nil,
|
31
|
+
chef_boostrapped: nil,
|
32
|
+
environment: nil,
|
33
|
+
user: ENV['USER'],
|
34
|
+
group: ENV['GROUP'].nil? ? ENV['USER'] : ENV['GROUP'],
|
35
|
+
home: ENV['HOME'],
|
36
|
+
run_for_type: nil,
|
37
|
+
gitinfo: nil,
|
38
|
+
cron: nil,
|
39
|
+
provisioners: nil,
|
40
|
+
verifiers: nil,
|
41
|
+
platforms: nil,
|
42
|
+
suites: nil,
|
43
|
+
default_attributes: nil,
|
44
|
+
override_attributes: nil,
|
45
|
+
solo: true,
|
46
|
+
data_bag_encrypt_version: 3,
|
47
|
+
file_cache_path: '',
|
48
|
+
debug: false,
|
49
|
+
}
|
50
|
+
if @selfbootstrap_resource.key?(key.to_sym)
|
51
|
+
@selfbootstrap_resource[key.to_sym]
|
52
|
+
elsif @selfbootstrap_resource.key?(key.to_s)
|
53
|
+
@selfbootstrap_resource[key.to_s]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_workstation_property(property_name)
|
58
|
+
debug_worklog("Get property #{property_name}") # if property_name == 'group'
|
59
|
+
self[property_name]
|
60
|
+
end
|
61
|
+
|
62
|
+
def set_workstation_property(property_name, value)
|
63
|
+
debug_worklog("Assign property #{property_name} is value #{value.is_a?(::Dir) ? get_path(value) : value}")
|
64
|
+
self[property_name] = value
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
#
|
70
|
+
# Define the methods that you would like to assist the work you do in recipes,
|
71
|
+
# resources, or templates.
|
72
|
+
#
|
73
|
+
# def my_helper_method
|
74
|
+
# # help method implementation
|
75
|
+
# end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
#
|
80
|
+
# The module you have defined may be extended within the recipe to grant the
|
81
|
+
# recipe the helper methods you define.
|
82
|
+
#
|
83
|
+
# Within your recipe you would write:
|
84
|
+
#
|
85
|
+
# extend ChefWorkstationInitialize::SelfbootstrapNochefDefaultworkstationresourceHelpers
|
86
|
+
#
|
87
|
+
# my_helper_method
|
88
|
+
#
|
89
|
+
# You may also add this to a single resource within a recipe:
|
90
|
+
#
|
91
|
+
# template '/etc/app.conf' do
|
92
|
+
# extend ChefWorkstationInitialize::SelfbootstrapNochefDefaultworkstationresourceHelpers
|
93
|
+
# variables specific_key: my_helper_method
|
94
|
+
# end
|
95
|
+
#
|
@@ -0,0 +1,128 @@
|
|
1
|
+
# name 'Helper file for chef_workstation_initialize'
|
2
|
+
# maintainer 'Jimbo Dragon'
|
3
|
+
# maintainer_email 'jimbo_dragon@hotmail.com'
|
4
|
+
# license 'MIT'
|
5
|
+
# description 'Helper file for chef_workstation_initialize'
|
6
|
+
# version '0.1.0'
|
7
|
+
# chef_version '>= 16.6.14'
|
8
|
+
# issues_url 'https://github.com/jimbodragon/chef_workstation_initialize/issues'
|
9
|
+
# source_url 'https://github.com/jimbodragon/chef_workstation_initialize'
|
10
|
+
#
|
11
|
+
# Chef Infra Documentation
|
12
|
+
# https://docs.chef.io/libraries/
|
13
|
+
#
|
14
|
+
|
15
|
+
#
|
16
|
+
# This module name was auto-generated from the cookbook name. This name is a
|
17
|
+
# single word that starts with a capital letter and then continues to use
|
18
|
+
# camel-casing throughout the remainder of the name.
|
19
|
+
#
|
20
|
+
|
21
|
+
require_relative 'ssh'
|
22
|
+
|
23
|
+
module ChefWorkstationInitialize
|
24
|
+
module SelfBootstrap
|
25
|
+
module NoChef
|
26
|
+
module GitHelpers
|
27
|
+
include ChefWorkstationInitialize::SelfBootstrap::NoChef::SSHHelpers
|
28
|
+
|
29
|
+
def get_git_submodule(git_name, git_info, action, compile_time)
|
30
|
+
require_implement_method('get_git_submodule', %w(git_name git_info action compile_time))
|
31
|
+
end
|
32
|
+
|
33
|
+
def get_git_server(git_action)
|
34
|
+
require_implement_method('get_git_server', %w(git_action))
|
35
|
+
end
|
36
|
+
|
37
|
+
def git_exec(*args, **run_opts)
|
38
|
+
base_command('git', args, run_opts)
|
39
|
+
end
|
40
|
+
|
41
|
+
def git_submodule_init
|
42
|
+
git_exec('submodule' + 'init')
|
43
|
+
git_exec('submodule' + 'update')
|
44
|
+
end
|
45
|
+
|
46
|
+
def repository_list
|
47
|
+
if parent_nil?(workstation_resource, 'gitinfo', 'submodules')
|
48
|
+
worklog('Use default repository')
|
49
|
+
[project_name, "#{project_name}_generator", new_cookbook_name]
|
50
|
+
else
|
51
|
+
worklog("workstation_resource[:gitinfo][\"submodules\"] = #{JSON.pretty_generate(workstation_resource[:gitinfo]['submodules'])}")
|
52
|
+
[project_name, "#{project_name}_generator", new_cookbook_name] + workstation_resource[:gitinfo]['submodules'].keys
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def all_cookbooks
|
57
|
+
cookbooks_Arr = []
|
58
|
+
workstation_resource[:gitinfo]['submodules'].each do |gitname, git_info|
|
59
|
+
case git_info['type']
|
60
|
+
when 'cookbooks', 'libraries', 'resources'
|
61
|
+
cookbooks_Arr.push(gitname)
|
62
|
+
end
|
63
|
+
end unless parent_nil?(workstation_resource[:gitinfo], 'submodules')
|
64
|
+
cookbooks_Arr
|
65
|
+
end
|
66
|
+
|
67
|
+
def get_git_relative_path(gitname)
|
68
|
+
if gitname == project_name
|
69
|
+
''
|
70
|
+
elsif workstation_resource[:gitinfo]['submodules'][gitname].nil?
|
71
|
+
''
|
72
|
+
else
|
73
|
+
::File.join(workstation_resource[:gitinfo]['submodules'][gitname]['type'], gitname)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def get_git_path(gitname)
|
78
|
+
::File.join(get_path(workstation_chef_repo_path), get_git_relative_path(gitname))
|
79
|
+
end
|
80
|
+
|
81
|
+
def get_self_git(action, compile_time)
|
82
|
+
get_git_submodule(project_name, workstation_resource[:gitinfo], action, compile_time)
|
83
|
+
end
|
84
|
+
|
85
|
+
def generate_json_repo(type, repository, revision = 'master', remote = 'origin', submodule_list = nil, additional_remotes = nil)
|
86
|
+
json_output = {
|
87
|
+
type: type,
|
88
|
+
repository: repository,
|
89
|
+
revision: revision,
|
90
|
+
remote: remote,
|
91
|
+
submodules: submodule_list,
|
92
|
+
additional_remotes: additional_remotes,
|
93
|
+
}
|
94
|
+
worklog("Generate json for #{JSON.pretty_generate(json_output)}")
|
95
|
+
json_output
|
96
|
+
end
|
97
|
+
|
98
|
+
def generate_git_submodules(modules)
|
99
|
+
json_submodules = {}
|
100
|
+
modules.each do |module_name, module_info|
|
101
|
+
json_submodules[module_name] = { path: get_git_path(module_name), repository: module_info['repository'] }
|
102
|
+
end
|
103
|
+
json_submodules
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
#
|
111
|
+
# The module you have defined may be extended within the recipe to grant the
|
112
|
+
# recipe the helper methods you define.
|
113
|
+
#
|
114
|
+
# Within your recipe you would write:
|
115
|
+
#
|
116
|
+
# extend ChefWorkstationInitialize::ChefHelpers
|
117
|
+
#
|
118
|
+
# my_helper_method
|
119
|
+
#
|
120
|
+
# You may also add this to a single resource within a recipe:
|
121
|
+
#
|
122
|
+
# template '/etc/app.conf' do
|
123
|
+
# extend ChefWorkstationInitialize::ChefHelpers
|
124
|
+
# variables specific_key: my_helper_method
|
125
|
+
# end
|
126
|
+
#
|
127
|
+
|
128
|
+
# require_relative "../providers/git_resource"
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# name 'Helper file for chef_workstation_initialize'
|
2
|
+
# maintainer 'Jimbo Dragon'
|
3
|
+
# maintainer_email 'jimbo_dragon@hotmail.com'
|
4
|
+
# license 'MIT'
|
5
|
+
# description 'Helper file for chef_workstation_initialize'
|
6
|
+
# version '0.1.0'
|
7
|
+
# chef_version '>= 16.6.14'
|
8
|
+
# issues_url 'https://github.com/jimbodragon/chef_workstation_initialize/issues'
|
9
|
+
# source_url 'https://github.com/jimbodragon/chef_workstation_initialize'
|
10
|
+
#
|
11
|
+
# Chef Infra Documentation
|
12
|
+
# https://docs.chef.io/libraries/
|
13
|
+
#
|
14
|
+
|
15
|
+
#
|
16
|
+
# This module name was auto-generated from the cookbook name. This name is a
|
17
|
+
# single word that starts with a capital letter and then continues to use
|
18
|
+
# camel-casing throughout the remainder of the name.
|
19
|
+
#
|
20
|
+
|
21
|
+
require_relative 'chef'
|
22
|
+
require_relative 'provisioners'
|
23
|
+
|
24
|
+
module ChefWorkstationInitialize
|
25
|
+
module SelfBootstrap
|
26
|
+
module NoChef
|
27
|
+
module KitchenHelpers
|
28
|
+
include ChefWorkstationInitialize::SelfBootstrap::NoChef::ChefHelpers
|
29
|
+
include ChefWorkstationInitialize::SelfBootstrap::NoChef::ProvisionersHelpers
|
30
|
+
|
31
|
+
def kitchen(*args, **run_opts)
|
32
|
+
base_command('kitchen', args, run_opts)
|
33
|
+
end
|
34
|
+
|
35
|
+
def kitchen_root
|
36
|
+
get_path(workstation_chef_repo_path)
|
37
|
+
end
|
38
|
+
|
39
|
+
def generate_kitchen(machine_name)
|
40
|
+
kitchen_machine(machine_name, workstation_resource[:user], workstation_resource[:group], workstation_chef_repo_path)
|
41
|
+
end
|
42
|
+
|
43
|
+
def generate_machine(machine_name)
|
44
|
+
kitchen_machine(machine_name, workstation_resource[:user], workstation_resource[:group], workstation_chef_repo_path)
|
45
|
+
end
|
46
|
+
|
47
|
+
def building_kitchen
|
48
|
+
worklog 'kitchen converge'
|
49
|
+
kitchen 'converge', cwd: workstation_chef_repo_path
|
50
|
+
end
|
51
|
+
|
52
|
+
def kitchen_machine(machine_name, kitchen_user, kitchen_group, kitchen_dir)
|
53
|
+
change_unix_permission
|
54
|
+
|
55
|
+
worklog "kitchen converge #{machine_name}"
|
56
|
+
kitchen "converge #{machine_name}"
|
57
|
+
|
58
|
+
change_unix_permission
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# The module you have defined may be extended within the recipe to grant the
|
67
|
+
# recipe the helper methods you define.
|
68
|
+
#
|
69
|
+
# Within your recipe you would write:
|
70
|
+
#
|
71
|
+
# extend ChefWorkstationInitialize::ChefHelpers
|
72
|
+
#
|
73
|
+
# my_helper_method
|
74
|
+
#
|
75
|
+
# You may also add this to a single resource within a recipe:
|
76
|
+
#
|
77
|
+
# template '/etc/app.conf' do
|
78
|
+
# extend ChefWorkstationInitialize::ChefHelpers
|
79
|
+
# variables specific_key: my_helper_method
|
80
|
+
# end
|
81
|
+
#
|
82
|
+
|
83
|
+
# require_relative "../providers/git_resource"
|
84
|
+
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# name 'Helper file for chef_workstation_initialize'
|
2
|
+
# maintainer 'Jimbo Dragon'
|
3
|
+
# maintainer_email 'jimbo_dragon@hotmail.com'
|
4
|
+
# license 'MIT'
|
5
|
+
# description 'Helper file for chef_workstation_initialize'
|
6
|
+
# version '0.1.0'
|
7
|
+
# chef_version '>= 16.6.14'
|
8
|
+
# issues_url 'https://github.com/jimbodragon/chef_workstation_initialize/issues'
|
9
|
+
# source_url 'https://github.com/jimbodragon/chef_workstation_initialize'
|
10
|
+
#
|
11
|
+
# Chef Infra Documentation
|
12
|
+
# https://docs.chef.io/libraries/
|
13
|
+
#
|
14
|
+
|
15
|
+
#
|
16
|
+
# This module name was auto-generated from the cookbook name. This name is a
|
17
|
+
# single word that starts with a capital letter and then continues to use
|
18
|
+
# camel-casing throughout the remainder of the name.
|
19
|
+
#
|
20
|
+
|
21
|
+
require_relative 'chefrepo'
|
22
|
+
|
23
|
+
module ChefWorkstationInitialize
|
24
|
+
module SelfBootstrap
|
25
|
+
module NoChef
|
26
|
+
module KnifeHelpers
|
27
|
+
include ChefWorkstationInitialize::SelfBootstrap::NoChef::ChefRepoHelpers
|
28
|
+
|
29
|
+
def knife(*args, **run_opts)
|
30
|
+
base_command('knife', *args, **run_opts)
|
31
|
+
end
|
32
|
+
|
33
|
+
def get_solo_cmd
|
34
|
+
worklog 'Get solo from knife'
|
35
|
+
knife 'config show solo --format json', live: true
|
36
|
+
end
|
37
|
+
|
38
|
+
def knife_search_self_cmd
|
39
|
+
knife_options = ['search']
|
40
|
+
knife_options << 'node'
|
41
|
+
knife_options << "name:#{default_hostname}"
|
42
|
+
knife_options << '--format json'
|
43
|
+
knife_options << '-z' if is_solo?
|
44
|
+
knife knife_options
|
45
|
+
end
|
46
|
+
|
47
|
+
def self_bootstrap_options
|
48
|
+
"-N #{default_hostname}"
|
49
|
+
end
|
50
|
+
|
51
|
+
def knife_get_node_attribute(nodename, attribute)
|
52
|
+
knife "node show #{nodename} -a #{attribute}"
|
53
|
+
end
|
54
|
+
|
55
|
+
def knife_self_bootstrap_cmd
|
56
|
+
knife "bootstrap #{self_bootstrap_options} --policy-group #{project_name} --policy-name #{project_name} #{default_hostname}"
|
57
|
+
end
|
58
|
+
|
59
|
+
def chef_client_self_bootstrap_cmd
|
60
|
+
chef_client_options = [self_bootstrap_options]
|
61
|
+
chef_client_options << "--runlist #{project_name}"
|
62
|
+
if ::File.exist?('solo.rb')
|
63
|
+
chef_client_options << '-c solo.rb'
|
64
|
+
else
|
65
|
+
chef_client_options << chef_solo_options_command
|
66
|
+
chef_client_options << "--chef-zero-host #{default_hostname}"
|
67
|
+
chef_client_options << "--chef-zero-port #{default_chefzero_portrange}"
|
68
|
+
end
|
69
|
+
chef_client chef_client_options, debug: true
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
#
|
77
|
+
# The module you have defined may be extended within the recipe to grant the
|
78
|
+
# recipe the helper methods you define.
|
79
|
+
#
|
80
|
+
# Within your recipe you would write:
|
81
|
+
#
|
82
|
+
# extend ChefWorkstationInitialize::ChefHelpers
|
83
|
+
#
|
84
|
+
# my_helper_method
|
85
|
+
#
|
86
|
+
# You may also add this to a single resource within a recipe:
|
87
|
+
#
|
88
|
+
# template '/etc/app.conf' do
|
89
|
+
# extend ChefWorkstationInitialize::ChefHelpers
|
90
|
+
# variables specific_key: my_helper_method
|
91
|
+
# end
|
92
|
+
#
|
93
|
+
|
94
|
+
# require_relative "../providers/git_resource"
|
95
|
+
|