linecook-gem 0.6.10 → 0.7.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 +4 -4
- data/lib/linecook-gem.rb +4 -6
- data/lib/linecook-gem/baker.rb +110 -0
- data/lib/linecook-gem/baker/docker.rb +114 -0
- data/lib/linecook-gem/cli.rb +63 -115
- data/lib/linecook-gem/config.rb +45 -0
- data/lib/linecook-gem/image.rb +77 -0
- data/lib/linecook-gem/image/crypt.rb +7 -40
- data/lib/linecook-gem/image/s3.rb +14 -14
- data/lib/linecook-gem/packager.rb +30 -0
- data/lib/linecook-gem/packager/packer.rb +249 -0
- data/lib/linecook-gem/packager/route53.rb +62 -0
- data/lib/linecook-gem/packager/squashfs.rb +51 -0
- data/lib/linecook-gem/util/downloader.rb +3 -42
- data/lib/linecook-gem/util/secrets.rb +47 -0
- data/lib/linecook-gem/version.rb +1 -1
- data/man/LINECOOK.1 +117 -86
- metadata +62 -110
- data/lib/linecook-gem/builder/build.rb +0 -44
- data/lib/linecook-gem/builder/darwin_backend.rb +0 -98
- data/lib/linecook-gem/builder/linux_backend.rb +0 -11
- data/lib/linecook-gem/builder/lxc.rb +0 -286
- data/lib/linecook-gem/builder/manager.rb +0 -79
- data/lib/linecook-gem/image/github.rb +0 -27
- data/lib/linecook-gem/image/manager.rb +0 -73
- data/lib/linecook-gem/packager/ebs.rb +0 -373
- data/lib/linecook-gem/packager/manager.rb +0 -23
- data/lib/linecook-gem/provisioner/chef-zero.rb +0 -149
- data/lib/linecook-gem/provisioner/manager.rb +0 -47
- data/lib/linecook-gem/provisioner/packer.rb +0 -82
- data/lib/linecook-gem/util/config.rb +0 -134
- data/lib/linecook-gem/util/executor.rb +0 -33
- data/lib/linecook-gem/util/ssh.rb +0 -190
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: linecook-gem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dale Hamel
|
@@ -11,201 +11,145 @@ cert_chain: []
|
|
11
11
|
date: 2015-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - '='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.0.6
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - '='
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.0.6
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: sshkit
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - '='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 1.7.1
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - '='
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 1.7.1
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: sshkey
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - '='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 1.8.0
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - '='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 1.8.0
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: octokit
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - '='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 4.2.0
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - '='
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 4.2.0
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: chefdepartie
|
14
|
+
name: activesupport
|
71
15
|
requirement: !ruby/object:Gem::Requirement
|
72
16
|
requirements:
|
73
17
|
- - '='
|
74
18
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
19
|
+
version: 4.2.5
|
76
20
|
type: :runtime
|
77
21
|
prerelease: false
|
78
22
|
version_requirements: !ruby/object:Gem::Requirement
|
79
23
|
requirements:
|
80
24
|
- - '='
|
81
25
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
26
|
+
version: 4.2.5
|
83
27
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
28
|
+
name: ruby-progressbar
|
85
29
|
requirement: !ruby/object:Gem::Requirement
|
86
30
|
requirements:
|
87
|
-
- -
|
31
|
+
- - "~>"
|
88
32
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
33
|
+
version: '1.7'
|
90
34
|
type: :runtime
|
91
35
|
prerelease: false
|
92
36
|
version_requirements: !ruby/object:Gem::Requirement
|
93
37
|
requirements:
|
94
|
-
- -
|
38
|
+
- - "~>"
|
95
39
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
40
|
+
version: '1.7'
|
97
41
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
42
|
+
name: ejson
|
99
43
|
requirement: !ruby/object:Gem::Requirement
|
100
44
|
requirements:
|
101
45
|
- - '='
|
102
46
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
47
|
+
version: 1.0.1
|
104
48
|
type: :runtime
|
105
49
|
prerelease: false
|
106
50
|
version_requirements: !ruby/object:Gem::Requirement
|
107
51
|
requirements:
|
108
52
|
- - '='
|
109
53
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
54
|
+
version: 1.0.1
|
111
55
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
56
|
+
name: aws-sdk
|
113
57
|
requirement: !ruby/object:Gem::Requirement
|
114
58
|
requirements:
|
115
|
-
- -
|
59
|
+
- - "~>"
|
116
60
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
61
|
+
version: '2.3'
|
118
62
|
type: :runtime
|
119
63
|
prerelease: false
|
120
64
|
version_requirements: !ruby/object:Gem::Requirement
|
121
65
|
requirements:
|
122
|
-
- -
|
66
|
+
- - "~>"
|
123
67
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
68
|
+
version: '2.3'
|
125
69
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
70
|
+
name: rubyzip
|
127
71
|
requirement: !ruby/object:Gem::Requirement
|
128
72
|
requirements:
|
129
73
|
- - '='
|
130
74
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
75
|
+
version: 1.1.7
|
132
76
|
type: :runtime
|
133
77
|
prerelease: false
|
134
78
|
version_requirements: !ruby/object:Gem::Requirement
|
135
79
|
requirements:
|
136
80
|
- - '='
|
137
81
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
82
|
+
version: 1.1.7
|
139
83
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
84
|
+
name: rbnacl
|
141
85
|
requirement: !ruby/object:Gem::Requirement
|
142
86
|
requirements:
|
143
87
|
- - '='
|
144
88
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
89
|
+
version: 3.2.0
|
146
90
|
type: :runtime
|
147
91
|
prerelease: false
|
148
92
|
version_requirements: !ruby/object:Gem::Requirement
|
149
93
|
requirements:
|
150
94
|
- - '='
|
151
95
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
96
|
+
version: 3.2.0
|
153
97
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
98
|
+
name: docker-api
|
155
99
|
requirement: !ruby/object:Gem::Requirement
|
156
100
|
requirements:
|
157
101
|
- - '='
|
158
102
|
- !ruby/object:Gem::Version
|
159
|
-
version: 1.0
|
103
|
+
version: 1.28.0
|
160
104
|
type: :runtime
|
161
105
|
prerelease: false
|
162
106
|
version_requirements: !ruby/object:Gem::Requirement
|
163
107
|
requirements:
|
164
108
|
- - '='
|
165
109
|
- !ruby/object:Gem::Version
|
166
|
-
version: 1.0
|
110
|
+
version: 1.28.0
|
167
111
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
112
|
+
name: test-kitchen
|
169
113
|
requirement: !ruby/object:Gem::Requirement
|
170
114
|
requirements:
|
171
115
|
- - '='
|
172
116
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
117
|
+
version: 1.9.0
|
174
118
|
type: :runtime
|
175
119
|
prerelease: false
|
176
120
|
version_requirements: !ruby/object:Gem::Requirement
|
177
121
|
requirements:
|
178
122
|
- - '='
|
179
123
|
- !ruby/object:Gem::Version
|
180
|
-
version:
|
124
|
+
version: 1.9.0
|
181
125
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
126
|
+
name: kitchen-sync
|
183
127
|
requirement: !ruby/object:Gem::Requirement
|
184
128
|
requirements:
|
185
|
-
- -
|
129
|
+
- - "~>"
|
186
130
|
- !ruby/object:Gem::Version
|
187
|
-
version:
|
131
|
+
version: '2.1'
|
188
132
|
type: :runtime
|
189
133
|
prerelease: false
|
190
134
|
version_requirements: !ruby/object:Gem::Requirement
|
191
135
|
requirements:
|
192
|
-
- -
|
136
|
+
- - "~>"
|
193
137
|
- !ruby/object:Gem::Version
|
194
|
-
version:
|
138
|
+
version: '2.1'
|
195
139
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
140
|
+
name: kitchen-docker
|
197
141
|
requirement: !ruby/object:Gem::Requirement
|
198
142
|
requirements:
|
199
143
|
- - '='
|
200
144
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
145
|
+
version: 2.4.0
|
202
146
|
type: :runtime
|
203
147
|
prerelease: false
|
204
148
|
version_requirements: !ruby/object:Gem::Requirement
|
205
149
|
requirements:
|
206
150
|
- - '='
|
207
151
|
- !ruby/object:Gem::Version
|
208
|
-
version:
|
152
|
+
version: 2.4.0
|
209
153
|
- !ruby/object:Gem::Dependency
|
210
154
|
name: rbnacl-libsodium
|
211
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -276,8 +220,22 @@ dependencies:
|
|
276
220
|
- - '='
|
277
221
|
- !ruby/object:Gem::Version
|
278
222
|
version: 4.0.0
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: pry
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - "~>"
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0.10'
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - "~>"
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '0.10'
|
279
237
|
description: Build and snapshot a system image for distribution, CI, or both using
|
280
|
-
real chef cookbooks and a fake server.
|
238
|
+
real chef cookbooks and a fake server using test kitchen.
|
281
239
|
email: dale.hamel@srvthe.net
|
282
240
|
executables:
|
283
241
|
- linecook
|
@@ -286,25 +244,19 @@ extra_rdoc_files: []
|
|
286
244
|
files:
|
287
245
|
- bin/linecook
|
288
246
|
- lib/linecook-gem.rb
|
289
|
-
- lib/linecook-gem/
|
290
|
-
- lib/linecook-gem/
|
291
|
-
- lib/linecook-gem/builder/linux_backend.rb
|
292
|
-
- lib/linecook-gem/builder/lxc.rb
|
293
|
-
- lib/linecook-gem/builder/manager.rb
|
247
|
+
- lib/linecook-gem/baker.rb
|
248
|
+
- lib/linecook-gem/baker/docker.rb
|
294
249
|
- lib/linecook-gem/cli.rb
|
250
|
+
- lib/linecook-gem/config.rb
|
251
|
+
- lib/linecook-gem/image.rb
|
295
252
|
- lib/linecook-gem/image/crypt.rb
|
296
|
-
- lib/linecook-gem/image/github.rb
|
297
|
-
- lib/linecook-gem/image/manager.rb
|
298
253
|
- lib/linecook-gem/image/s3.rb
|
299
|
-
- lib/linecook-gem/packager
|
300
|
-
- lib/linecook-gem/packager/
|
301
|
-
- lib/linecook-gem/
|
302
|
-
- lib/linecook-gem/
|
303
|
-
- lib/linecook-gem/provisioner/packer.rb
|
304
|
-
- lib/linecook-gem/util/config.rb
|
254
|
+
- lib/linecook-gem/packager.rb
|
255
|
+
- lib/linecook-gem/packager/packer.rb
|
256
|
+
- lib/linecook-gem/packager/route53.rb
|
257
|
+
- lib/linecook-gem/packager/squashfs.rb
|
305
258
|
- lib/linecook-gem/util/downloader.rb
|
306
|
-
- lib/linecook-gem/util/
|
307
|
-
- lib/linecook-gem/util/ssh.rb
|
259
|
+
- lib/linecook-gem/util/secrets.rb
|
308
260
|
- lib/linecook-gem/version.rb
|
309
261
|
- man/LINECOOK.1
|
310
262
|
homepage: http://rubygems.org/gems/linecook
|
@@ -330,5 +282,5 @@ rubyforge_project:
|
|
330
282
|
rubygems_version: 2.4.8
|
331
283
|
signing_key:
|
332
284
|
specification_version: 4
|
333
|
-
summary: Build system images using
|
285
|
+
summary: Build system images using test kitchen
|
334
286
|
test_files: []
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'forwardable'
|
2
|
-
require 'linecook-gem/builder/manager'
|
3
|
-
|
4
|
-
module Linecook
|
5
|
-
class Build
|
6
|
-
extend Forwardable
|
7
|
-
USERNAME = 'linecook'
|
8
|
-
|
9
|
-
def_instance_delegators :@container, :start, :stop, :ip, :info
|
10
|
-
attr_reader :type
|
11
|
-
|
12
|
-
def initialize(name, tag: nil, image: nil, id: nil)
|
13
|
-
Linecook::Builder.start
|
14
|
-
@type = tag ? "#{name}-#{tag}" : name
|
15
|
-
@id = id ? "#{@type}-#{id}" : @type
|
16
|
-
@id = @id.gsub(/[\/|\.]/,'_')
|
17
|
-
@image = image || Linecook.config[:provisioner][:default_image]
|
18
|
-
@container = Linecook::Lxc::Container.new(name: @id, image: @image, remote: Linecook::Builder.ssh, tmp: Linecook.config[:tmp])
|
19
|
-
end
|
20
|
-
|
21
|
-
def clean
|
22
|
-
Linecook::ImageManager.clean(type: @image[:type]) if @image.is_a?(Hash) && @image[:type]
|
23
|
-
end
|
24
|
-
|
25
|
-
def ssh
|
26
|
-
@ssh ||= Linecook::SSH.new(@container.ip, username: USERNAME, proxy: Linecook::Builder.ssh, keyfile: Linecook::SSH.private_key, setup: false)
|
27
|
-
end
|
28
|
-
|
29
|
-
def snapshot(save: false, resume: false)
|
30
|
-
path = "/tmp/#{@id}-#{Time.now.to_i}.squashfs"
|
31
|
-
@container.stop(destroy: false)
|
32
|
-
Linecook::Builder.ssh.run("sudo mksquashfs #{@container.root} #{path} -wildcards -e 'usr/src' 'var/lib/apt/lists/archive*' 'var/cache/apt/archives'") # FIXME make these excludes dynamic based on OS
|
33
|
-
@container.resume if resume
|
34
|
-
path = if save
|
35
|
-
local_path = File.join(Linecook::ImageManager::IMAGE_PATH, File.basename(path))
|
36
|
-
Linecook::Builder.ssh.download(path, local: local_path)
|
37
|
-
Linecook::Builder.ssh.run("sudo rm -f #{path}")
|
38
|
-
local_path
|
39
|
-
else
|
40
|
-
path
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,98 +0,0 @@
|
|
1
|
-
require 'securerandom'
|
2
|
-
require 'linecook-gem/image/manager'
|
3
|
-
# FIXME: read config values from config file
|
4
|
-
# - create cache loopback image
|
5
|
-
# - dd, based on config file.
|
6
|
-
|
7
|
-
|
8
|
-
module Linecook
|
9
|
-
module OSXBuilder
|
10
|
-
extend self
|
11
|
-
def backend
|
12
|
-
XhyveBackend.new
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class XhyveBackend
|
17
|
-
RUN_SPEC_PATH = File.join(Linecook::Config::LINECOOK_HOME, 'xhyve.yml').freeze
|
18
|
-
LINUX_CMDLINE = 'boot=live root=/dev/ram0 live-media=initramfs console=ttyS1,115200 console=tty0 net.ifnames=0 biosdevname=0'.freeze
|
19
|
-
|
20
|
-
attr_reader :ip
|
21
|
-
def initialize
|
22
|
-
spec = load_run_spec
|
23
|
-
@pid = spec[:pid]
|
24
|
-
@ip = spec[:ip]
|
25
|
-
@uuid = spec[:uuid]
|
26
|
-
end
|
27
|
-
|
28
|
-
def info
|
29
|
-
{ip: @ip, pid: @pid, uuid: @uuid}
|
30
|
-
end
|
31
|
-
|
32
|
-
def start
|
33
|
-
launch_guest unless running?
|
34
|
-
end
|
35
|
-
|
36
|
-
def stop
|
37
|
-
return false unless @pid
|
38
|
-
Process.kill('KILL', @pid)
|
39
|
-
@ip = nil
|
40
|
-
@pid = nil
|
41
|
-
save_run_spec
|
42
|
-
end
|
43
|
-
|
44
|
-
def running?
|
45
|
-
return false unless @pid
|
46
|
-
(true if Process.kill(0, @pid) rescue false)
|
47
|
-
end
|
48
|
-
|
49
|
-
private
|
50
|
-
|
51
|
-
def launch_guest
|
52
|
-
get_iso
|
53
|
-
boot_path = File.join(mount_iso, 'BOOT')
|
54
|
-
puts "Starting xhyve guest..."
|
55
|
-
@uuid ||= SecureRandom.uuid
|
56
|
-
guest = Xhyve::Guest.new(
|
57
|
-
kernel: File.join(boot_path, 'VMLINUZ'),
|
58
|
-
initrd: File.join(boot_path, 'INITRD'),
|
59
|
-
cmdline: LINUX_CMDLINE, # boot flags to linux
|
60
|
-
#blockdevs: 'loop.img', # path to img files to use as block devs # FIXME
|
61
|
-
uuid: @uuid,
|
62
|
-
serial: 'com2',
|
63
|
-
memory: '4G', # FIXME
|
64
|
-
processors: 1, # number of processors #FIXME
|
65
|
-
networking: true, # Enable networking? (requires sudo)
|
66
|
-
acpi: true, # set up acpi? (required for clean shutdown)
|
67
|
-
)
|
68
|
-
guest.start
|
69
|
-
puts "Started with #{guest.mac}... waiting for network"
|
70
|
-
@ip = guest.ip
|
71
|
-
@pid = guest.pid
|
72
|
-
unless @ip
|
73
|
-
@guest.kill
|
74
|
-
fail 'Could not acquire ip'
|
75
|
-
end
|
76
|
-
puts "Network acquired, IP is #{@ip}"
|
77
|
-
save_run_spec
|
78
|
-
# wait_ssh # FIXME: we need to wait until SSH is actually up or we will sometimes timeout
|
79
|
-
end
|
80
|
-
|
81
|
-
# get and mount the iso
|
82
|
-
def get_iso
|
83
|
-
@image_path = Linecook::ImageManager.fetch(:live_iso, profile: :public)
|
84
|
-
end
|
85
|
-
|
86
|
-
def mount_iso
|
87
|
-
`hdiutil mount #{@image_path}`.strip.split(/\s+/).last
|
88
|
-
end
|
89
|
-
|
90
|
-
def save_run_spec
|
91
|
-
File.write(RUN_SPEC_PATH, YAML.dump(info))
|
92
|
-
end
|
93
|
-
|
94
|
-
def load_run_spec
|
95
|
-
File.exists?(RUN_SPEC_PATH) ? YAML.load(File.read(RUN_SPEC_PATH)) : {}
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|