linecook-gem 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/linecook/builder/build.rb +7 -4
- data/lib/linecook/builder/lxc.rb +9 -1
- data/lib/linecook/cli.rb +2 -0
- data/lib/linecook/image/manager.rb +5 -1
- data/lib/linecook/provisioner/manager.rb +5 -2
- data/lib/linecook/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ad8c9eb3eb01a5e5578360ba001fac59a8723f3
|
4
|
+
data.tar.gz: 1237ff044167090a98b47bd7961b420215a4a98e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5685db5fa8d4eb2bc6f7b154f18c877638328cb08b36bc5ad55b369f8c10b65ea06e75550a4a8ffd72dff99396b7e94b2d4930186919f2a1d7742290998dc63a
|
7
|
+
data.tar.gz: 0a4f8b340dc8226e8107eb484ceffd08d0f0f701be8c80c967c8318e1ffd42aa5dedec1387dbe80a11f5dd446853e684b3f9130b2c7a9f47453bb453a46f7bef
|
@@ -7,11 +7,11 @@ module Linecook
|
|
7
7
|
|
8
8
|
def_instance_delegators :@container, :stop, :start, :ip, :info
|
9
9
|
|
10
|
-
def initialize(name, image: nil)
|
10
|
+
def initialize(name, tag: nil, image: nil)
|
11
11
|
Linecook::Builder.start
|
12
|
-
@
|
12
|
+
@id = tag ? "#{name}-#{tag}" : name
|
13
13
|
@image = image || Linecook.config[:provisioner][:default_image]
|
14
|
-
@container = Linecook::Lxc::Container.new(name: @
|
14
|
+
@container = Linecook::Lxc::Container.new(name: @id, image: @image, remote: Linecook::Builder.ssh)
|
15
15
|
end
|
16
16
|
|
17
17
|
def ssh
|
@@ -19,9 +19,12 @@ module Linecook
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def snapshot(save: false)
|
22
|
-
path = "/tmp/#{@
|
22
|
+
path = "/tmp/#{@id}-#{Time.now.to_i}.squashfs"
|
23
|
+
@container.pause
|
23
24
|
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
|
25
|
+
@container.resume
|
24
26
|
Linecook::Builder.ssh.download(path, local: File.join(Linecook::ImageManager::IMAGE_PATH, File.basename(path))) if save
|
27
|
+
Linecook::Builder.ssh.run("sudo rm -f #{path}")
|
25
28
|
path
|
26
29
|
end
|
27
30
|
end
|
data/lib/linecook/builder/lxc.rb
CHANGED
@@ -36,9 +36,17 @@ module Linecook
|
|
36
36
|
unmount unless running?
|
37
37
|
end
|
38
38
|
|
39
|
+
def pause
|
40
|
+
execute("lxc-stop #{container_str} -k") if running?
|
41
|
+
end
|
42
|
+
|
43
|
+
def resume
|
44
|
+
execute("lxc-start #{container_str} -d") unless running?
|
45
|
+
end
|
46
|
+
|
39
47
|
def stop
|
40
48
|
setup_dirs
|
41
|
-
execute("lxc-stop #{container_str} -k")
|
49
|
+
execute("lxc-stop #{container_str} -k") if running?
|
42
50
|
unmount
|
43
51
|
end
|
44
52
|
|
data/lib/linecook/cli.rb
CHANGED
@@ -108,8 +108,10 @@ class Linecook::CLI < Thor
|
|
108
108
|
|
109
109
|
desc 'bake', 'Bake a new image.'
|
110
110
|
method_option :name, type: :string, required: true, banner: 'ROLE_NAME', desc: 'Name of the role to build', aliases: '-n'
|
111
|
+
method_option :tag, type: :string, required: false, banner: 'TAG', desc: 'Optional tag for a build', aliases: '-t'
|
111
112
|
method_option :image, type: :string, banner: 'SOURCE_IMAGE', desc: 'Source image to seed the build.', aliases: '-i'
|
112
113
|
method_option :keep, type: :boolean, default: true, desc: 'Keep the build running when done', aliases: '-k'
|
114
|
+
method_option :clean, type: :boolean, default: false, desc: 'Clean up all build artifacts', aliases: '-c'
|
113
115
|
method_option :build, type: :boolean, default: true, desc: 'Build the image', aliases: '-b'
|
114
116
|
method_option :snapshot, type: :boolean, default: false, desc: 'Snapshot the resulting build to create an image', aliases: '-s'
|
115
117
|
method_option :upload, type: :boolean, default: false, desc: 'Upload the resulting build. Implies --snapshot and --encrypt.', aliases: '-u'
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
1
3
|
require 'linecook/image/crypt'
|
2
4
|
require 'linecook/image/github'
|
3
5
|
require 'linecook/image/s3'
|
@@ -19,7 +21,9 @@ module Linecook
|
|
19
21
|
def upload(image, profile: :private)
|
20
22
|
path = File.join(IMAGE_PATH, File.basename(image))
|
21
23
|
puts "Encrypting and uploading image #{path}"
|
22
|
-
|
24
|
+
encrypted = Linecook::Crypto.new.encrypt_file(path)
|
25
|
+
provider(profile).upload(encrypted)
|
26
|
+
FileUtils.rm_f(encrypted)
|
23
27
|
end
|
24
28
|
|
25
29
|
def url(image, profile: :private)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'securerandom'
|
2
|
+
require 'fileutils'
|
2
3
|
|
3
4
|
require 'linecook/builder/build'
|
4
5
|
require 'linecook/provisioner/chef-zero'
|
@@ -8,13 +9,15 @@ module Linecook
|
|
8
9
|
module Baker
|
9
10
|
extend self
|
10
11
|
|
11
|
-
def bake(name: nil, image: nil, snapshot: nil, upload: nil, package: nil, build: nil, keep: nil)
|
12
|
-
build_agent = Linecook::Build.new(name, image: image)
|
12
|
+
def bake(name: nil, tag: nil, image: nil, snapshot: nil, upload: nil, package: nil, build: nil, keep: nil, clean: nil)
|
13
|
+
build_agent = Linecook::Build.new(name, tag: tag, image: image)
|
13
14
|
provider(name).provision(build_agent, name) if build
|
14
15
|
snapshot = build_agent.snapshot(save: true) if snapshot || upload || package
|
15
16
|
Linecook::ImageManager.upload(snapshot) if upload || package
|
16
17
|
Linecook::Packager.package(snapshot) if package
|
18
|
+
ensure
|
17
19
|
build_agent.stop unless keep
|
20
|
+
FileUtils.rm_f(snapshot) if clean
|
18
21
|
end
|
19
22
|
|
20
23
|
private
|
data/lib/linecook/version.rb
CHANGED