dev-lxc 1.7.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,478 +1,165 @@
1
1
  require "json"
2
2
  require "dev-lxc/container"
3
- require "dev-lxc/cluster"
4
3
 
5
4
  module DevLXC
6
5
  class Server
7
- attr_reader :server, :platform_image_name, :platform_image_options, :shared_image_name
6
+ attr_reader :container
8
7
 
9
- def initialize(name, server_type, cluster_config)
10
- unless cluster_config[server_type]["servers"].keys.include?(name)
11
- puts "ERROR: Server '#{name}' is not defined in the cluster config"
12
- exit 1
13
- end
14
- @server_type = server_type
15
- cluster = DevLXC::Cluster.new(cluster_config)
16
- @lxc_config_path = cluster.lxc_config_path
17
- @api_fqdn = cluster.api_fqdn
18
- @analytics_fqdn = cluster.analytics_fqdn
19
- @compliance_fqdn = cluster.compliance_fqdn
20
- @supermarket_fqdn = cluster.supermarket_fqdn
21
- @chef_server_bootstrap_backend = cluster.chef_server_bootstrap_backend
22
- @analytics_bootstrap_backend = cluster.analytics_bootstrap_backend
23
- @chef_server_config = cluster.chef_server_config
24
- @analytics_config = cluster.analytics_config
25
-
26
- @server = DevLXC::Container.new(name, @lxc_config_path)
27
- @config = cluster_config[@server_type]["servers"][@server.name]
28
- @ipaddress = @config["ipaddress"]
29
- @role = @config["role"]
30
- @role ||= cluster_config[@server_type]['topology']
31
- @role ||= 'standalone'
32
- @mounts = cluster_config[@server_type]["mounts"]
33
- @mounts ||= cluster_config["mounts"]
34
- @ssh_keys = cluster_config[@server_type]["ssh-keys"]
35
- @ssh_keys ||= cluster_config["ssh-keys"]
36
- @platform_image_name = cluster_config[@server_type]["platform_image"]
37
- @platform_image_name ||= cluster_config["platform_image"]
38
- @platform_image_options = cluster_config[@server_type]["platform_image_options"]
39
- @platform_image_options ||= cluster_config["platform_image_options"]
40
- @packages = cluster_config[@server_type]["packages"]
41
-
42
- case @server_type
43
- when 'adhoc', 'compliance', 'supermarket'
44
- @shared_image_name = ''
45
- when 'analytics'
46
- @shared_image_name = "s#{@platform_image_name[1..-1]}"
47
- @shared_image_name += "-analytics-#{Regexp.last_match[1].gsub(".", "-")}" if @packages["analytics"].to_s.match(/[_-]((\d+\.?){3,})/)
48
- when 'chef-server'
49
- if File.basename(@packages["server"]).match(/^(\w+-\w+.*)[_-]((?:\d+\.?){3,})/)
50
- @chef_server_type = Regexp.last_match[1]
51
- @chef_server_version = Regexp.last_match[2].gsub(".", "-")
52
- end
8
+ def initialize(name, ipaddress, additional_fqdn, mounts, ssh_keys)
9
+ @container = DevLXC::Container.new(name)
10
+ @ipaddress = ipaddress
11
+ @additional_fqdn = additional_fqdn
12
+ @mounts = mounts
13
+ @ssh_keys = ssh_keys
14
+ end
53
15
 
54
- @shared_image_name = "s#{@platform_image_name[1..-1]}"
55
- case @chef_server_type
56
- when 'chef-server-core'
57
- @shared_image_name += '-cs'
58
- @server_ctl = 'chef-server'
59
- when 'private-chef'
60
- @shared_image_name += '-ec'
61
- @server_ctl = 'private-chef'
62
- when 'chef-server'
63
- @shared_image_name += '-osc'
64
- @server_ctl = 'chef-server'
65
- end
66
- @shared_image_name += "-#{@chef_server_version}"
67
- @shared_image_name += "-reporting-#{Regexp.last_match[1].gsub(".", "-")}" if @packages["reporting"].to_s.match(/[_-]((\d+\.?){3,})/)
68
- @shared_image_name += "-pushy-#{Regexp.last_match[1].gsub(".", "-")}" if @packages["push-jobs-server"].to_s.match(/[_-]((\d+\.?){3,})/)
69
- end
16
+ def name
17
+ @container.name
70
18
  end
71
19
 
72
- def realpath(rootfs_path)
73
- "#{@server.config_item('lxc.rootfs')}#{rootfs_path}" if @server.defined?
20
+ def status
21
+ @container.status
74
22
  end
75
23
 
76
24
  def run_command(command)
77
- if @server.running?
78
- puts "Running '#{command}' in '#{@server.name}'"
79
- @server.run_command(command)
25
+ if @container.running?
26
+ puts "Running '#{command}' in '#{@container.name}'"
27
+ @container.run_command(command)
80
28
  else
81
- puts "'#{@server.name}' is not running"
29
+ puts "'#{@container.name}' is not running"
82
30
  end
83
31
  end
84
32
 
33
+ def install_package(package_path)
34
+ @container.install_package(package_path)
35
+ end
36
+
85
37
  def start
86
- create
87
- hwaddr = @server.config_item("lxc.network.0.hwaddr")
88
- DevLXC.assign_ip_address(@ipaddress, @server.name, hwaddr)
89
- unless @role == 'backend'
90
- case @server_type
91
- when 'analytics'
92
- DevLXC.create_dns_record(@analytics_fqdn, @server.name, @ipaddress)
93
- when 'chef-server'
94
- DevLXC.create_dns_record(@api_fqdn, @server.name, @ipaddress)
95
- when 'compliance'
96
- DevLXC.create_dns_record(@compliance_fqdn, @server.name, @ipaddress)
97
- when 'supermarket'
98
- DevLXC.create_dns_record(@supermarket_fqdn, @server.name, @ipaddress)
99
- end
38
+ hwaddr = @container.config_item("lxc.network.0.hwaddr")
39
+ if @ipaddress
40
+ DevLXC.assign_ip_address(@ipaddress, @container.name, hwaddr)
41
+ DevLXC.create_dns_record(@additional_fqdn, @container.name, @ipaddress) unless @additional_fqdn.nil?
100
42
  end
101
- @server.sync_mounts(@mounts)
102
- @server.start
103
- @server.sync_ssh_keys(@ssh_keys)
43
+ @container.sync_mounts(@mounts)
44
+ @container.start
45
+ @container.sync_ssh_keys(@ssh_keys)
104
46
  end
105
47
 
106
48
  def stop
107
- hwaddr = @server.config_item("lxc.network.0.hwaddr") if @server.defined?
108
- @server.stop
49
+ hwaddr = @container.config_item("lxc.network.0.hwaddr") if @container.defined?
50
+ @container.stop
109
51
  deregister_from_dnsmasq(hwaddr)
110
52
  end
111
53
 
112
- def snapshot(force=nil)
113
- unless @server.defined?
114
- puts "WARNING: Skipping snapshot of '#{@server.name}' because it is not created"
54
+ def snapshot(comment=nil)
55
+ unless @container.defined?
56
+ puts "WARNING: Skipping snapshot of '#{@container.name}' because it does not exist"
115
57
  return
116
58
  end
117
- if @server.state != :stopped
118
- puts "WARNING: Skipping snapshot of '#{@server.name}' because it is not stopped"
59
+ if @container.running?
60
+ puts "WARNING: Skipping snapshot of '#{@container.name}' because it is running"
119
61
  return
120
62
  end
121
- custom_image = DevLXC::Container.new("c-#{@server.name}", @lxc_config_path)
122
- if custom_image.defined?
123
- if force
124
- custom_image.destroy
125
- else
126
- puts "WARNING: Skipping snapshot of '#{@server.name}' because a custom image already exists"
127
- return
128
- end
129
- end
130
- puts "Creating snapshot of container '#{@server.name}' in custom image '#{custom_image.name}'"
131
- @server.clone("#{custom_image.name}", {:flags => LXC::LXC_CLONE_SNAPSHOT|LXC::LXC_CLONE_KEEPMACADDR})
132
- end
133
-
134
- def destroy
135
- hwaddr = @server.config_item("lxc.network.0.hwaddr") if @server.defined?
136
- @server.destroy
137
- deregister_from_dnsmasq(hwaddr)
138
- end
139
-
140
- def deregister_from_dnsmasq(hwaddr)
141
- DevLXC.search_file_delete_line("/etc/lxc/addn-hosts.conf", /^#{@ipaddress}\s/)
142
- DevLXC.search_file_delete_line("/etc/lxc/dhcp-hosts.conf", /,#{@ipaddress}$/)
143
- unless hwaddr.nil?
144
- DevLXC.search_file_delete_line("/etc/lxc/dhcp-hosts.conf", /^#{hwaddr}/)
145
- end
146
- DevLXC.reload_dnsmasq
147
- end
148
-
149
- def destroy_image(type)
150
- case type
151
- when :custom
152
- DevLXC::Container.new("c-#{@server.name}", @lxc_config_path).destroy
153
- when :unique
154
- DevLXC::Container.new("u-#{@server.name}", @lxc_config_path).destroy
155
- when :shared
156
- DevLXC::Container.new(@shared_image_name, @lxc_config_path).destroy unless @shared_image_name.empty?
157
- when :platform
158
- DevLXC::Container.new(@platform_image_name, @lxc_config_path).destroy
63
+ puts "Creating snapshot of container '#{@container.name}'"
64
+ snapname = @container.snapshot
65
+ unless comment.nil?
66
+ snapshot = @container.snapshot_list.select { |sn| sn.first == snapname }
67
+ snapshot_comment_file = snapshot.flatten[1]
68
+ IO.write(snapshot_comment_file, comment) unless snapshot_comment_file.nil?
159
69
  end
160
70
  end
161
71
 
162
- def create
163
- if @server.defined?
164
- puts "Using existing container '#{@server.name}'"
72
+ def snapshot_destroy(snapname=nil)
73
+ unless @container.defined?
74
+ puts "Skipping container '#{@container.name}' because it does not exist"
165
75
  return
166
76
  end
167
- custom_image = DevLXC::Container.new("c-#{@server.name}", @lxc_config_path)
168
- unique_image = DevLXC::Container.new("u-#{@server.name}", @lxc_config_path)
169
- if custom_image.defined?
170
- puts "Cloning custom image '#{custom_image.name}' into container '#{@server.name}'"
171
- custom_image.clone(@server.name, {:flags => LXC::LXC_CLONE_SNAPSHOT|LXC::LXC_CLONE_KEEPMACADDR})
172
- @server = DevLXC::Container.new(@server.name, @lxc_config_path)
173
- return
174
- elsif unique_image.defined?
175
- puts "Cloning unique image '#{unique_image.name}' into container '#{@server.name}'"
176
- unique_image.clone(@server.name, {:flags => LXC::LXC_CLONE_SNAPSHOT|LXC::LXC_CLONE_KEEPMACADDR})
177
- @server = DevLXC::Container.new(@server.name, @lxc_config_path)
178
- return
179
- else
180
- puts "Creating container '#{@server.name}'"
181
- if %w(adhoc compliance supermarket).include?(@server_type)
182
- if @server_type == 'supermarket' && (@chef_server_bootstrap_backend && ! DevLXC::Container.new(@chef_server_bootstrap_backend, @lxc_config_path).defined?)
183
- puts "ERROR: The bootstrap backend server '#{@chef_server_bootstrap_backend}' must be created first."
184
- exit 1
185
- end
186
- platform_image = DevLXC.create_platform_image(@platform_image_name, @platform_image_options, @lxc_config_path)
187
- puts "Cloning platform image '#{platform_image.name}' into container '#{@server.name}'"
188
- platform_image.clone(@server.name, {:flags => LXC::LXC_CLONE_SNAPSHOT})
77
+ if snapname == "ALL"
78
+ if @container.snapshot_list.empty?
79
+ puts "Container '#{@container.name}' does not have any snapshots"
189
80
  else
190
- unless @server.name == @chef_server_bootstrap_backend || DevLXC::Container.new(@chef_server_bootstrap_backend, @lxc_config_path).defined?
191
- puts "ERROR: The bootstrap backend server '#{@chef_server_bootstrap_backend}' must be created first."
192
- exit 1
193
- end
194
- shared_image = create_shared_image
195
- puts "Cloning shared image '#{shared_image.name}' into container '#{@server.name}'"
196
- shared_image.clone(@server.name, {:flags => LXC::LXC_CLONE_SNAPSHOT})
197
- end
198
- @server = DevLXC::Container.new(@server.name, @lxc_config_path)
199
- puts "Deleting SSH Server Host Keys"
200
- FileUtils.rm_f(Dir.glob("#{@server.config_item('lxc.rootfs')}/etc/ssh/ssh_host*_key*"))
201
- puts "Adding lxc.hook.post-stop hook"
202
- @server.set_config_item("lxc.hook.post-stop", "/usr/local/share/lxc/hooks/post-stop-dhcp-release")
203
- @server.save_config
204
- hwaddr = @server.config_item("lxc.network.0.hwaddr")
205
- if hwaddr.empty?
206
- puts "ERROR: '#{@server.name}' needs to have an lxc.network.hwaddr entry"
207
- exit 1
208
- end
209
- DevLXC.assign_ip_address(@ipaddress, @server.name, hwaddr)
210
- unless @role == 'backend'
211
- case @server_type
212
- when 'analytics'
213
- DevLXC.create_dns_record(@analytics_fqdn, @server.name, @ipaddress)
214
- when 'chef-server'
215
- DevLXC.create_dns_record(@api_fqdn, @server.name, @ipaddress)
216
- when 'compliance'
217
- DevLXC.create_dns_record(@compliance_fqdn, @server.name, @ipaddress)
218
- when 'supermarket'
219
- DevLXC.create_dns_record(@supermarket_fqdn, @server.name, @ipaddress)
81
+ @container.snapshot_list.each do |snapshot|
82
+ puts "Destroying snapshot '#{snapshot.first}' of container '#{@container.name}'"
83
+ @container.snapshot_destroy(snapshot.first)
220
84
  end
221
85
  end
222
- @server.sync_mounts(@mounts)
223
- # if platform image is centos then `/etc/hosts` file needs to be modified so `hostname -f`
224
- # provides the FQDN instead of `localhost`
225
- if @platform_image_name.start_with?('p-centos-')
226
- IO.write("#{@server.config_item('lxc.rootfs')}/etc/hosts", "127.0.0.1 localhost\n127.0.1.1 #{@server.name}\n")
227
- end
228
- @server.start
229
- # Allow adhoc servers time to generate SSH Server Host Keys
230
- sleep 5 if @server_type == 'adhoc'
231
- case @server_type
232
- when 'compliance'
233
- @server.install_package(@packages["compliance"]) unless @packages["compliance"].nil?
234
- when 'supermarket'
235
- @server.install_package(@packages["supermarket"]) unless @packages["supermarket"].nil?
86
+ elsif snapname == "LAST"
87
+ if @container.snapshot_list.empty?
88
+ puts "Container '#{@container.name}' does not have any snapshots"
89
+ else
90
+ snapname = @container.snapshot_list.last.first
91
+ puts "Destroying snapshot '#{snapname}' of container '#{@container.name}'"
92
+ @container.snapshot_destroy(snapname)
236
93
  end
237
- configure_analytics if @server_type == 'analytics'
238
- configure_compliance if @server_type == 'compliance'
239
- configure_supermarket if @server_type == 'supermarket'
240
- if @server_type == 'chef-server' && ! @packages["server"].nil?
241
- configure_server
242
- create_users if @server.name == @chef_server_bootstrap_backend
243
- if %w(standalone frontend).include?(@role) && ! @packages["manage"].nil?
244
- @server.install_package(@packages["manage"])
245
- configure_manage
246
- end
247
- unless @role == 'open-source'
248
- configure_reporting unless @packages["reporting"].nil?
249
- configure_push_jobs_server unless @packages["push-jobs-server"].nil?
250
- end
94
+ else
95
+ snapshot = @container.snapshot_list.select { |sn| sn.first == snapname }
96
+ if snapshot.flatten.empty?
97
+ puts "Container '#{@container.name}' does not have a '#{snapname}' snapshot"
98
+ else
99
+ puts "Destroying snapshot '#{snapname}' of container '#{@container.name}'"
100
+ @container.snapshot_destroy(snapname)
251
101
  end
252
- @server.stop
253
- puts "Cloning container '#{@server.name}' into unique image '#{unique_image.name}'"
254
- @server.clone("#{unique_image.name}", {:flags => LXC::LXC_CLONE_SNAPSHOT|LXC::LXC_CLONE_KEEPMACADDR})
255
102
  end
256
103
  end
257
104
 
258
- def create_shared_image
259
- shared_image = DevLXC::Container.new(@shared_image_name, @lxc_config_path)
260
- if shared_image.defined?
261
- puts "Using existing shared image '#{shared_image.name}'"
262
- return shared_image
105
+ def snapshot_list
106
+ snapshots = Array.new
107
+ return snapshots unless @container.defined?
108
+ @container.snapshot_list.each do |snapshot|
109
+ (snapname, snap_comment_file, snaptime) = snapshot
110
+ snap_comment = IO.read(snap_comment_file).chomp if File.exist?(snap_comment_file)
111
+ snapshots << [snapname, snaptime, snap_comment]
263
112
  end
264
- platform_image = DevLXC.create_platform_image(@platform_image_name, @platform_image_options, @lxc_config_path)
265
- puts "Cloning platform image '#{platform_image.name}' into shared image '#{shared_image.name}'"
266
- platform_image.clone(shared_image.name, {:flags => LXC::LXC_CLONE_SNAPSHOT})
267
- shared_image = DevLXC::Container.new(shared_image.name, @lxc_config_path)
268
- puts "Deleting SSH Server Host Keys"
269
- FileUtils.rm_f(Dir.glob("#{shared_image.config_item('lxc.rootfs')}/etc/ssh/ssh_host*_key*"))
113
+ snapshots
114
+ end
270
115
 
271
- # Disable certain sysctl.d files in Ubuntu 10.04, they cause `start procps` to fail
272
- # Enterprise Chef server's postgresql recipe expects to be able to `start procps`
273
- if platform_image.name == "p-ubuntu-1004"
274
- if File.exist?("#{shared_image.config_item('lxc.rootfs')}/etc/sysctl.d/10-console-messages.conf")
275
- FileUtils.mv("#{shared_image.config_item('lxc.rootfs')}/etc/sysctl.d/10-console-messages.conf",
276
- "#{shared_image.config_item('lxc.rootfs')}/etc/sysctl.d/10-console-messages.conf.orig")
277
- end
278
- end
279
- unless shared_image.config_item("lxc.mount.auto").nil?
280
- shared_image.set_config_item("lxc.mount.auto", "proc:rw sys:rw")
281
- shared_image.save_config
116
+ def snapshot_restore(snapname=nil)
117
+ unless @container.defined?
118
+ puts "WARNING: Skipping container '#{@container.name}' because it does not exist"
119
+ return
282
120
  end
283
- shared_image.sync_mounts(@mounts)
284
- shared_image.start
285
- case @server_type
286
- when 'analytics'
287
- shared_image.install_package(@packages["analytics"]) unless @packages["analytics"].nil?
288
- when 'chef-server'
289
- shared_image.install_package(@packages["server"]) unless @packages["server"].nil?
290
- shared_image.install_package(@packages["reporting"]) unless @packages["reporting"].nil?
291
- shared_image.install_package(@packages["push-jobs-server"]) unless @packages["push-jobs-server"].nil?
121
+ if @container.running?
122
+ puts "WARNING: Skipping container '#{@container.name}' because it is running"
123
+ return
292
124
  end
293
- shared_image.stop
294
- return shared_image
295
- end
296
-
297
- def configure_server
298
- case @role
299
- when "open-source"
300
- puts "Creating /etc/chef-server/chef-server.rb"
301
- FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/etc/chef-server")
302
- IO.write("#{@server.config_item('lxc.rootfs')}/etc/chef-server/chef-server.rb", @chef_server_config)
303
- when "standalone", "backend"
304
- case @chef_server_type
305
- when 'private-chef'
306
- puts "Creating /etc/opscode/private-chef.rb"
307
- FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/etc/opscode")
308
- IO.write("#{@server.config_item('lxc.rootfs')}/etc/opscode/private-chef.rb", @chef_server_config)
309
- when 'chef-server-core'
310
- puts "Creating /etc/opscode/chef-server.rb"
311
- FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/etc/opscode")
312
- IO.write("#{@server.config_item('lxc.rootfs')}/etc/opscode/chef-server.rb", @chef_server_config)
125
+ if snapname == "LAST"
126
+ if @container.snapshot_list.empty?
127
+ puts "WARNING: Skipping container '#{@container.name}' because it does not have any snapshots"
128
+ else
129
+ snapname = @container.snapshot_list.last.first
130
+ puts "Restoring snapshot '#{snapname}' of container '#{@container.name}'"
131
+ @container.snapshot_restore(snapname)
132
+ end
133
+ else
134
+ snapshot = @container.snapshot_list.select { |sn| sn.first == snapname }
135
+ if snapshot.flatten.empty?
136
+ puts "WARNING: Skipping container '#{@container.name}' because it does not have a '#{snapname}' snapshot"
137
+ else
138
+ puts "Restoring snapshot '#{snapname}' of container '#{@container.name}'"
139
+ @container.snapshot_restore(snapname)
313
140
  end
314
- when "frontend"
315
- puts "Copying /etc/opscode from bootstrap backend '#{@chef_server_bootstrap_backend}'"
316
- FileUtils.cp_r("#{LXC::Container.new(@chef_server_bootstrap_backend, @lxc_config_path).config_item('lxc.rootfs')}/etc/opscode",
317
- "#{@server.config_item('lxc.rootfs')}/etc")
318
- end
319
- run_ctl(@server_ctl, "reconfigure")
320
- end
321
-
322
- def configure_reporting
323
- FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/var/opt/opscode-reporting")
324
- FileUtils.touch("#{@server.config_item('lxc.rootfs')}/var/opt/opscode-reporting/.license.accepted")
325
- if @role == 'frontend'
326
- puts "Copying /etc/opscode-reporting from bootstrap backend '#{@chef_server_bootstrap_backend}'"
327
- FileUtils.cp_r("#{LXC::Container.new(@chef_server_bootstrap_backend, @lxc_config_path).config_item('lxc.rootfs')}/etc/opscode-reporting",
328
- "#{@server.config_item('lxc.rootfs')}/etc")
329
141
  end
330
- run_ctl(@server_ctl, "reconfigure")
331
- run_ctl("opscode-reporting", "reconfigure")
332
- end
333
-
334
- def configure_push_jobs_server
335
- run_ctl("opscode-push-jobs-server", "reconfigure")
336
- run_ctl(@server_ctl, "reconfigure")
337
142
  end
338
143
 
339
- def configure_manage
340
- FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/var/opt/chef-manage")
341
- FileUtils.touch("#{@server.config_item('lxc.rootfs')}/var/opt/chef-manage/.license.accepted")
342
- if @chef_server_type == 'private-chef'
343
- puts "Disabling old opscode-webui in /etc/opscode/private-chef.rb"
344
- DevLXC.search_file_delete_line("#{@server.config_item('lxc.rootfs')}/etc/opscode/private-chef.rb", /opscode_webui[.enable.]/)
345
- DevLXC.append_line_to_file("#{@server.config_item('lxc.rootfs')}/etc/opscode/private-chef.rb", "\nopscode_webui['enable'] = false\n")
346
- run_ctl(@server_ctl, "reconfigure")
144
+ def destroy
145
+ if @container.defined?
146
+ hwaddr = @container.config_item("lxc.network.0.hwaddr")
147
+ @container.snapshot_list.each { |snapshot| @container.snapshot_destroy(snapshot.first) }
347
148
  end
348
- run_ctl("opscode-manage", "reconfigure")
149
+ @container.destroy
150
+ deregister_from_dnsmasq(hwaddr)
349
151
  end
350
152
 
351
- def configure_analytics
352
- FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/var/opt/opscode-analytics")
353
- FileUtils.touch("#{@server.config_item('lxc.rootfs')}/var/opt/opscode-analytics/.license.accepted")
354
- case @role
355
- when "standalone", "backend"
356
- puts "Copying /etc/opscode-analytics from Chef Server bootstrap backend '#{@chef_server_bootstrap_backend}'"
357
- FileUtils.cp_r("#{LXC::Container.new(@chef_server_bootstrap_backend, @lxc_config_path).config_item('lxc.rootfs')}/etc/opscode-analytics",
358
- "#{@server.config_item('lxc.rootfs')}/etc")
359
-
360
- IO.write("#{@server.config_item('lxc.rootfs')}/etc/opscode-analytics/opscode-analytics.rb", @analytics_config)
361
- when "frontend"
362
- puts "Copying /etc/opscode-analytics from Analytics bootstrap backend '#{@analytics_bootstrap_backend}'"
363
- FileUtils.cp_r("#{LXC::Container.new(@analytics_bootstrap_backend, @lxc_config_path).config_item('lxc.rootfs')}/etc/opscode-analytics",
364
- "#{@server.config_item('lxc.rootfs')}/etc")
153
+ def deregister_from_dnsmasq(hwaddr)
154
+ if @ipaddress
155
+ DevLXC.search_file_delete_line("/etc/lxc/addn-hosts.conf", /^#{@ipaddress}\s/)
156
+ DevLXC.search_file_delete_line("/etc/lxc/dhcp-hosts.conf", /,#{@ipaddress}$/)
365
157
  end
366
- run_ctl("opscode-analytics", "reconfigure")
367
- end
368
-
369
- def configure_compliance
370
- FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/var/opt/chef-compliance")
371
- FileUtils.touch("#{@server.config_item('lxc.rootfs')}/var/opt/chef-compliance/.license.accepted")
372
- run_ctl("chef-compliance", "reconfigure")
373
- end
374
-
375
- def configure_supermarket
376
- if @chef_server_bootstrap_backend && DevLXC::Container.new(@chef_server_bootstrap_backend, @lxc_config_path).defined?
377
- chef_server_supermarket_config = JSON.parse(IO.read("#{LXC::Container.new(@chef_server_bootstrap_backend, @lxc_config_path).config_item('lxc.rootfs')}/etc/opscode/oc-id-applications/supermarket.json"))
378
- supermarket_config = {
379
- 'chef_server_url' => "https://#{@api_fqdn}/",
380
- 'chef_oauth2_app_id' => chef_server_supermarket_config['uid'],
381
- 'chef_oauth2_secret' => chef_server_supermarket_config['secret'],
382
- 'chef_oauth2_verify_ssl' => false
383
- }
384
- FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/etc/supermarket")
385
- IO.write("#{@server.config_item('lxc.rootfs')}/etc/supermarket/supermarket.json", JSON.pretty_generate(supermarket_config))
158
+ unless hwaddr.nil?
159
+ DevLXC.search_file_delete_line("/etc/lxc/dhcp-hosts.conf", /^#{hwaddr}/)
386
160
  end
387
- run_ctl("supermarket", "reconfigure")
388
- end
389
-
390
- def run_ctl(component, subcommand)
391
- puts "Running `#{component}-ctl #{subcommand}` in '#{@server.name}'"
392
- @server.run_command("#{component}-ctl #{subcommand}")
161
+ DevLXC.reload_dnsmasq
393
162
  end
394
163
 
395
- def create_users
396
- puts "Creating org, user, keys and knife.rb in /root/chef-repo/.chef"
397
- FileUtils.mkdir_p("#{@server.config_item('lxc.rootfs')}/root/chef-repo/.chef")
398
-
399
- case @chef_server_type
400
- when 'chef-server'
401
- chef_server_url = "https://127.0.0.1"
402
- admin_username = "admin"
403
- validator_name = "chef-validator"
404
-
405
- FileUtils.cp( Dir.glob("#{@server.config_item('lxc.rootfs')}/etc/chef-server/{admin,chef-validator}.pem"), "#{@server.config_item('lxc.rootfs')}/root/chef-repo/.chef" )
406
- when 'private-chef', 'chef-server-core'
407
- chef_server_root = "https://127.0.0.1"
408
- chef_server_url = "https://127.0.0.1/organizations/demo"
409
- admin_username = "mary-admin"
410
- username = "joe-user"
411
- validator_name = "demo-validator"
412
-
413
- FileUtils.cp( "#{@server.config_item('lxc.rootfs')}/etc/opscode/pivotal.pem", "#{@server.config_item('lxc.rootfs')}/root/chef-repo/.chef" )
414
-
415
- pivotal_rb = %Q(
416
- current_dir = File.dirname(__FILE__)
417
-
418
- chef_server_root "#{chef_server_root}"
419
- chef_server_url "#{chef_server_root}"
420
-
421
- node_name "pivotal"
422
- client_key "\#{current_dir}/pivotal.pem"
423
-
424
- cookbook_path Dir.pwd + "/cookbooks"
425
- knife[:chef_repo_path] = Dir.pwd
426
-
427
- ssl_verify_mode :verify_none
428
- )
429
- IO.write("#{@server.config_item('lxc.rootfs')}/root/chef-repo/.chef/pivotal.rb", pivotal_rb)
430
- end
431
-
432
- knife_rb = %Q(
433
- current_dir = File.dirname(__FILE__)
434
-
435
- chef_server_url "#{chef_server_url}"
436
-
437
- node_name "#{admin_username}"
438
- client_key "\#{current_dir}/#{admin_username}.pem"
439
- )
440
-
441
- knife_rb += %Q(
442
- #node_name "#{username}"
443
- #client_key "\#{current_dir}/#{username}.pem"
444
- ) unless username.nil?
445
-
446
- knife_rb += %Q(
447
- validation_client_name "#{validator_name}"
448
- validation_key "\#{current_dir}/#{validator_name}.pem"
449
-
450
- cookbook_path Dir.pwd + "/cookbooks"
451
- knife[:chef_repo_path] = Dir.pwd
452
-
453
- ssl_verify_mode :verify_none
454
- )
455
- IO.write("#{@server.config_item('lxc.rootfs')}/root/chef-repo/.chef/knife.rb", knife_rb)
456
-
457
- case @chef_server_type
458
- when 'private-chef'
459
- # give time for all services to come up completely
460
- sleep 60
461
- @server.run_command("/opt/opscode/embedded/bin/gem install knife-opc --no-ri --no-rdoc")
462
- @server.run_command("/opt/opscode/embedded/bin/knife opc org create demo demo --filename /root/chef-repo/.chef/demo-validator.pem -c /root/chef-repo/.chef/pivotal.rb")
463
- @server.run_command("/opt/opscode/embedded/bin/knife opc user create mary-admin mary admin mary-admin@noreply.com mary-admin --filename /root/chef-repo/.chef/mary-admin.pem -c /root/chef-repo/.chef/pivotal.rb")
464
- @server.run_command("/opt/opscode/embedded/bin/knife opc org user add demo mary-admin --admin -c /root/chef-repo/.chef/pivotal.rb")
465
- @server.run_command("/opt/opscode/embedded/bin/knife opc user create joe-user joe user joe-user@noreply.com joe-user --filename /root/chef-repo/.chef/joe-user.pem -c /root/chef-repo/.chef/pivotal.rb")
466
- @server.run_command("/opt/opscode/embedded/bin/knife opc org user add demo joe-user -c /root/chef-repo/.chef/pivotal.rb")
467
- when 'chef-server-core'
468
- # give time for all services to come up completely
469
- sleep 10
470
- run_ctl(@server_ctl, "org-create demo demo --filename /root/chef-repo/.chef/demo-validator.pem")
471
- run_ctl(@server_ctl, "user-create mary-admin mary admin mary-admin@noreply.com mary-admin --filename /root/chef-repo/.chef/mary-admin.pem")
472
- run_ctl(@server_ctl, "org-user-add demo mary-admin --admin")
473
- run_ctl(@server_ctl, "user-create joe-user joe user joe-user@noreply.com joe-user --filename /root/chef-repo/.chef/joe-user.pem")
474
- run_ctl(@server_ctl, "org-user-add demo joe-user")
475
- end
476
- end
477
164
  end
478
165
  end
@@ -1,3 +1,3 @@
1
1
  module DevLXC
2
- VERSION = "1.7.0"
2
+ VERSION = "2.0.0"
3
3
  end