dev-lxc 2.3.0 → 2.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/lib/dev-lxc/cli.rb +1 -1
- data/lib/dev-lxc/cluster.rb +66 -59
- data/lib/dev-lxc/container.rb +4 -4
- data/lib/dev-lxc/server.rb +37 -6
- data/lib/dev-lxc/version.rb +1 -1
- data/lib/dev-lxc.rb +1 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 380d44e7d8a00e55126697a912e6137dfa5fdd07
|
4
|
+
data.tar.gz: 51efc2c299e10e4ebd8df1e8ac2f0407ce122c72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb04423d93d681ea9830d5b11bb5ed3c4cbbc9f1dc5e9c3f85d91683b5110c0fa1d630a7bb8dfb9dbe9e26a0ced508c6675c9369405c122a4cce8e0cb733d28d
|
7
|
+
data.tar.gz: f7ad42408a5123e111f622ba7c138af98c9e3c00d05e6b627aed85a8cde85e0ac35d49c673c3a5f203bc5922c1c02c4cdacccd270a1310088537d18f26648ae5
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# dev-lxc Change Log
|
2
2
|
|
3
|
+
## 2.3.1 (2016-11-28)
|
4
|
+
|
5
|
+
* Create DevLXC::Cluster.abort_up to help with code clarity
|
6
|
+
* Shutdown container gracefully instead of doing a hard stop
|
7
|
+
* Skip container start if it is already running
|
8
|
+
* Refactor DevLXC.assign_ip_address to DevLXC::Server.assign_static_ip_address
|
9
|
+
* Change DevLXC::Server.deregister_from_dhcp to DevLXC::Server.remove_static_ip_address
|
10
|
+
* Remove dhcp release post-stop hook since it is not the most reliable solution
|
11
|
+
* Remove lingering DHCP IP addresses before starting a server
|
12
|
+
* Remove lingering DHCP IP addresses after destroying or shutting down a server
|
13
|
+
* Comment out data_collector config in a node's client.rb
|
14
|
+
* Add a clarifying comment to DevLXC::Cluster.up
|
15
|
+
|
3
16
|
## 2.3.0 (2016-11-22)
|
4
17
|
|
5
18
|
* Create DNS records for all servers before starting a server
|
data/lib/dev-lxc/cli.rb
CHANGED
@@ -343,7 +343,7 @@ nodes:
|
|
343
343
|
print_elapsed_time(Time.now - start_time)
|
344
344
|
end
|
345
345
|
|
346
|
-
desc "halt [SERVER_NAME_REGEX]", "
|
346
|
+
desc "halt [SERVER_NAME_REGEX]", "Shutdown servers"
|
347
347
|
option :config, :desc => "Specify a cluster's YAML config file. `./dev-lxc.yml` will be used by default"
|
348
348
|
def halt(server_name_regex=nil)
|
349
349
|
start_time = Time.now
|
data/lib/dev-lxc/cluster.rb
CHANGED
@@ -315,7 +315,7 @@ module DevLXC
|
|
315
315
|
|
316
316
|
def halt(server_name_regex=nil)
|
317
317
|
servers = get_sorted_servers(server_name_regex)
|
318
|
-
servers.reverse_each { |s| s.
|
318
|
+
servers.reverse_each { |s| s.shutdown; puts }
|
319
319
|
delete_dns_records unless get_sorted_servers.any? { |s| s.container.state != :stopped }
|
320
320
|
end
|
321
321
|
|
@@ -325,9 +325,68 @@ module DevLXC
|
|
325
325
|
end
|
326
326
|
|
327
327
|
def up(server_name_regex=nil)
|
328
|
-
abort_up = false
|
329
328
|
configured_servers = Array.new
|
330
329
|
servers = get_sorted_servers(server_name_regex)
|
330
|
+
exit 1 if abort_up(servers)
|
331
|
+
prep_product_cache(servers)
|
332
|
+
servers.each do |server|
|
333
|
+
clone_from_base_container(server) unless server.container.defined?
|
334
|
+
end
|
335
|
+
# get_sorted_servers is called again in order to ensure the container objects are initialized properly in case they were just cloned from the base container
|
336
|
+
servers = get_sorted_servers(server_name_regex)
|
337
|
+
create_dns_records unless servers.empty?
|
338
|
+
servers.each do |server|
|
339
|
+
if %w(build-nodes runners).include?(@server_configs[server.name][:server_type])
|
340
|
+
next if @server_configs[server.name][:required_products]["chefdk"] && @server_configs[server.name][:required_products].length == 1
|
341
|
+
end
|
342
|
+
install_products(server) unless @server_configs[server.name][:required_products].empty?
|
343
|
+
end
|
344
|
+
servers.each do |server|
|
345
|
+
if server.snapshot_list.select { |sn| sn[2].to_s.start_with?("dev-lxc build: completed") }.empty?
|
346
|
+
if server.name == @config["chef-backend"][:bootstrap_frontend]
|
347
|
+
running_backends = Array.new
|
348
|
+
@config["chef-backend"][:backends].reverse_each do |server_name|
|
349
|
+
backend = get_server(server_name)
|
350
|
+
if backend.container.defined? && backend.snapshot_list.select { |sn| sn[2].to_s.start_with?("dev-lxc build: backend cluster configured but frontend not bootstrapped") }.empty?
|
351
|
+
if backend.container.running?
|
352
|
+
running_backends << backend.name
|
353
|
+
backend.shutdown
|
354
|
+
end
|
355
|
+
backend.snapshot("dev-lxc build: backend cluster configured but frontend not bootstrapped")
|
356
|
+
snapshot = backend.snapshot_list.select { |sn| sn[2].to_s.start_with?("dev-lxc build: completed") }.first
|
357
|
+
backend.snapshot_destroy(snapshot.first) if snapshot
|
358
|
+
end
|
359
|
+
end
|
360
|
+
@config["chef-backend"][:backends].each do |server_name|
|
361
|
+
if running_backends.include?(server_name)
|
362
|
+
get_server(server_name).start
|
363
|
+
configured_servers << server_name unless configured_servers.include?(server_name)
|
364
|
+
end
|
365
|
+
end
|
366
|
+
end
|
367
|
+
configure_products(server)
|
368
|
+
configured_servers << server.name
|
369
|
+
end
|
370
|
+
if server.container.running?
|
371
|
+
puts "Container '#{server.name}' is already running"
|
372
|
+
puts
|
373
|
+
else
|
374
|
+
server.start
|
375
|
+
end
|
376
|
+
end
|
377
|
+
configured_servers.reverse_each do |server_name|
|
378
|
+
server = get_server(server_name)
|
379
|
+
server.shutdown if server.container.running?
|
380
|
+
server.snapshot("dev-lxc build: completed")
|
381
|
+
end
|
382
|
+
configured_servers.each do |server_name|
|
383
|
+
server = get_server(server_name)
|
384
|
+
server.start if server.container.defined?
|
385
|
+
end
|
386
|
+
end
|
387
|
+
|
388
|
+
def abort_up(servers)
|
389
|
+
abort_up = false
|
331
390
|
servers.each do |server|
|
332
391
|
next if server.container.defined?
|
333
392
|
if (@config['chef-server'][:frontends] && @config['chef-server'][:frontends].include?(server.name)) || server.name == @config['analytics'][:bootstrap_backend]
|
@@ -424,56 +483,7 @@ module DevLXC
|
|
424
483
|
end
|
425
484
|
end
|
426
485
|
end
|
427
|
-
|
428
|
-
prep_product_cache(servers)
|
429
|
-
servers.each do |server|
|
430
|
-
clone_from_base_container(server) unless server.container.defined?
|
431
|
-
end
|
432
|
-
servers = get_sorted_servers(server_name_regex)
|
433
|
-
create_dns_records unless servers.empty?
|
434
|
-
servers.each do |server|
|
435
|
-
if %w(build-nodes runners).include?(@server_configs[server.name][:server_type])
|
436
|
-
next if @server_configs[server.name][:required_products]["chefdk"] && @server_configs[server.name][:required_products].length == 1
|
437
|
-
end
|
438
|
-
install_products(server) unless @server_configs[server.name][:required_products].empty?
|
439
|
-
end
|
440
|
-
servers.each do |server|
|
441
|
-
if server.snapshot_list.select { |sn| sn[2].to_s.start_with?("dev-lxc build: completed") }.empty?
|
442
|
-
if server.name == @config["chef-backend"][:bootstrap_frontend]
|
443
|
-
running_backends = Array.new
|
444
|
-
@config["chef-backend"][:backends].reverse_each do |server_name|
|
445
|
-
backend = get_server(server_name)
|
446
|
-
if backend.container.defined? && backend.snapshot_list.select { |sn| sn[2].to_s.start_with?("dev-lxc build: backend cluster configured but frontend not bootstrapped") }.empty?
|
447
|
-
if backend.container.running?
|
448
|
-
running_backends << backend.name
|
449
|
-
backend.stop
|
450
|
-
end
|
451
|
-
backend.snapshot("dev-lxc build: backend cluster configured but frontend not bootstrapped")
|
452
|
-
snapshot = backend.snapshot_list.select { |sn| sn[2].to_s.start_with?("dev-lxc build: completed") }.first
|
453
|
-
backend.snapshot_destroy(snapshot.first) if snapshot
|
454
|
-
end
|
455
|
-
end
|
456
|
-
@config["chef-backend"][:backends].each do |server_name|
|
457
|
-
if running_backends.include?(server_name)
|
458
|
-
get_server(server_name).start
|
459
|
-
configured_servers << server_name unless configured_servers.include?(server_name)
|
460
|
-
end
|
461
|
-
end
|
462
|
-
end
|
463
|
-
configure_products(server)
|
464
|
-
configured_servers << server.name
|
465
|
-
end
|
466
|
-
server.start unless server.container.running?
|
467
|
-
end
|
468
|
-
configured_servers.reverse_each do |server_name|
|
469
|
-
server = get_server(server_name)
|
470
|
-
server.stop if server.container.running?
|
471
|
-
server.snapshot("dev-lxc build: completed")
|
472
|
-
end
|
473
|
-
configured_servers.each do |server_name|
|
474
|
-
server = get_server(server_name)
|
475
|
-
server.start if server.container.defined?
|
476
|
-
end
|
486
|
+
return abort_up
|
477
487
|
end
|
478
488
|
|
479
489
|
def create_dns_records
|
@@ -498,9 +508,6 @@ module DevLXC
|
|
498
508
|
server.container.load_config
|
499
509
|
puts "Deleting SSH Server Host Keys"
|
500
510
|
FileUtils.rm_f(Dir.glob("#{server.container.config_item('lxc.rootfs')}/etc/ssh/ssh_host*_key*"))
|
501
|
-
puts "Adding lxc.hook.post-stop hook"
|
502
|
-
server.container.set_config_item("lxc.hook.post-stop", "/usr/local/share/lxc/hooks/post-stop-dhcp-release")
|
503
|
-
server.container.save_config
|
504
511
|
end
|
505
512
|
|
506
513
|
def get_product_download_info(server, product_name, product_options)
|
@@ -605,14 +612,14 @@ module DevLXC
|
|
605
612
|
next if %w(build-nodes runners).include?(@server_configs[server.name][:server_type]) && product_name == "chefdk"
|
606
613
|
server.install_package(package_source)
|
607
614
|
end
|
608
|
-
server.
|
615
|
+
server.shutdown
|
609
616
|
server.snapshot("dev-lxc build: products installed")
|
610
617
|
server.start if server_was_running
|
611
618
|
end
|
612
619
|
|
613
620
|
def configure_products(server)
|
614
621
|
puts "Configuring container '#{server.name}'"
|
615
|
-
server.start
|
622
|
+
server.start
|
616
623
|
required_products = @server_configs[server.name][:required_products].keys if @server_configs[server.name][:required_products]
|
617
624
|
required_products ||= Array.new
|
618
625
|
server_type = @server_configs[server.name][:server_type]
|
@@ -770,8 +777,8 @@ ssl_verify_mode :verify_none
|
|
770
777
|
automate_server_name = @server_configs.select {|name, config| config[:server_type] == 'automate'}.keys.first
|
771
778
|
if automate_server_name
|
772
779
|
client_rb += %Q(
|
773
|
-
data_collector.server_url "https://#{automate_server_name}/data-collector/v0/"
|
774
|
-
data_collector.token "93a49a4f2482c64126f7b6015e6b0f30284287ee4054ff8807fb63d9cbd1c506"
|
780
|
+
# data_collector.server_url "https://#{automate_server_name}/data-collector/v0/"
|
781
|
+
# data_collector.token "93a49a4f2482c64126f7b6015e6b0f30284287ee4054ff8807fb63d9cbd1c506"
|
775
782
|
)
|
776
783
|
end
|
777
784
|
|
data/lib/dev-lxc/container.rb
CHANGED
@@ -31,14 +31,14 @@ module DevLXC
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
def
|
35
|
-
puts "
|
34
|
+
def shutdown
|
35
|
+
puts "Shutting down container '#{self.name}'"
|
36
36
|
super
|
37
|
-
wait(
|
37
|
+
wait(:stopped, 3)
|
38
38
|
end
|
39
39
|
|
40
40
|
def destroy
|
41
|
-
|
41
|
+
shutdown if running?
|
42
42
|
puts "Destroying container '#{self.name}'"
|
43
43
|
super if self.defined?
|
44
44
|
end
|
data/lib/dev-lxc/server.rb
CHANGED
@@ -35,18 +35,21 @@ module DevLXC
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def start
|
38
|
+
return if @container.running?
|
38
39
|
hwaddr = @container.config_item("lxc.network.0.hwaddr")
|
39
|
-
|
40
|
+
release_lingering_dhcp_ip_addresses(hwaddr)
|
41
|
+
assign_static_ip_address(hwaddr) if @ipaddress
|
40
42
|
@container.sync_mounts(@mounts)
|
41
43
|
@container.start
|
42
44
|
@container.sync_ssh_keys(@ssh_keys)
|
43
45
|
puts
|
44
46
|
end
|
45
47
|
|
46
|
-
def
|
48
|
+
def shutdown
|
47
49
|
hwaddr = @container.config_item("lxc.network.0.hwaddr") if @container.defined?
|
48
|
-
@container.
|
49
|
-
|
50
|
+
@container.shutdown
|
51
|
+
remove_static_ip_address(hwaddr)
|
52
|
+
release_lingering_dhcp_ip_addresses(hwaddr)
|
50
53
|
end
|
51
54
|
|
52
55
|
def snapshot(comment=nil)
|
@@ -145,10 +148,38 @@ module DevLXC
|
|
145
148
|
@container.snapshot_list.each { |snapshot| @container.snapshot_destroy(snapshot.first) }
|
146
149
|
end
|
147
150
|
@container.destroy
|
148
|
-
|
151
|
+
remove_static_ip_address(hwaddr)
|
152
|
+
release_lingering_dhcp_ip_addresses(hwaddr)
|
149
153
|
end
|
150
154
|
|
151
|
-
def
|
155
|
+
def release_lingering_dhcp_ip_addresses(hwaddr)
|
156
|
+
dhcp_leases = IO.readlines('/var/lib/misc/dnsmasq.lxcbr0.leases')
|
157
|
+
dhcp_leases.each do |dhcp_lease|
|
158
|
+
if m = dhcp_lease.match(/ #{hwaddr} (\d+\.\d+\.\d+\.\d+) /)
|
159
|
+
mac_addr = hwaddr
|
160
|
+
ip_addr = m[1]
|
161
|
+
elsif m = dhcp_lease.match(/ (\w\w:\w\w:\w\w:\w\w:\w\w:\w\w) #{@ipaddress} /)
|
162
|
+
mac_addr = m[1]
|
163
|
+
ip_addr = @ipaddress
|
164
|
+
elsif m = dhcp_lease.match(/ (\w\w:\w\w:\w\w:\w\w:\w\w:\w\w) (\d+\.\d+\.\d+\.\d+) #{@container.name.sub(/\.lxc$/, '')} /)
|
165
|
+
mac_addr = m[1]
|
166
|
+
ip_addr = m[2]
|
167
|
+
end
|
168
|
+
if mac_addr && ip_addr
|
169
|
+
puts "Releasing lingering DHCP lease: #{dhcp_lease}"
|
170
|
+
system("dhcp_release lxcbr0 #{ip_addr} #{mac_addr}")
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def assign_static_ip_address(hwaddr)
|
176
|
+
puts "Assigning IP address #{@ipaddress} to '#{@container.name}' container's lxc.network.hwaddr #{hwaddr}"
|
177
|
+
DevLXC.search_file_delete_line("/etc/lxc/dhcp-hosts.conf", /(^#{hwaddr}|,#{@ipaddress}$)/)
|
178
|
+
DevLXC.append_line_to_file("/etc/lxc/dhcp-hosts.conf", "#{hwaddr},#{@ipaddress}\n")
|
179
|
+
DevLXC.reload_dnsmasq
|
180
|
+
end
|
181
|
+
|
182
|
+
def remove_static_ip_address(hwaddr)
|
152
183
|
if @ipaddress
|
153
184
|
DevLXC.search_file_delete_line("/etc/lxc/dhcp-hosts.conf", /,#{@ipaddress}$/)
|
154
185
|
end
|
data/lib/dev-lxc/version.rb
CHANGED
data/lib/dev-lxc.rb
CHANGED
@@ -93,17 +93,10 @@ module DevLXC
|
|
93
93
|
|
94
94
|
IO.write("#{base_container.config_item('lxc.rootfs')}/etc/sudoers.d/dev-lxc", "dev-lxc ALL=NOPASSWD:ALL\n")
|
95
95
|
FileUtils.chmod(0440, "#{base_container.config_item('lxc.rootfs')}/etc/sudoers.d/dev-lxc")
|
96
|
-
base_container.
|
96
|
+
base_container.shutdown
|
97
97
|
return base_container
|
98
98
|
end
|
99
99
|
|
100
|
-
def self.assign_ip_address(ipaddress, container_name, hwaddr)
|
101
|
-
puts "Assigning IP address #{ipaddress} to '#{container_name}' container's lxc.network.hwaddr #{hwaddr}"
|
102
|
-
search_file_delete_line("/etc/lxc/dhcp-hosts.conf", /(^#{hwaddr}|,#{ipaddress}$)/)
|
103
|
-
append_line_to_file("/etc/lxc/dhcp-hosts.conf", "#{hwaddr},#{ipaddress}\n")
|
104
|
-
reload_dnsmasq
|
105
|
-
end
|
106
|
-
|
107
100
|
def self.reload_dnsmasq
|
108
101
|
system("pkill -HUP dnsmasq")
|
109
102
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dev-lxc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
4
|
+
version: 2.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremiah Snapp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|