kameleon-builder 2.2.5 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.rst +21 -0
- data/{templates → contrib}/steps/bootstrap/debian/debootstrap_arm.yaml +1 -1
- data/{templates → contrib}/steps/export/clean_appliance.yaml +0 -0
- data/{templates → contrib}/steps/export/compact_qcow_img.yaml +0 -0
- data/{templates → contrib}/steps/setup/archlinux/configure_ruby.yaml +0 -0
- data/{templates → contrib}/steps/setup/archlinux/install_dev_tools.yaml +0 -0
- data/{templates → contrib}/steps/setup/archlinux/install_gnome.yaml +0 -0
- data/{templates → contrib}/steps/setup/archlinux/install_yaourt.yaml +0 -0
- data/{templates → contrib}/steps/setup/centos/6.5/configure_repo.yaml +0 -0
- data/{templates → contrib}/steps/setup/debian/install_gnome.yaml +0 -0
- data/{templates → contrib}/steps/setup/debian/install_kde.yaml +0 -0
- data/{templates → erb}/extend.erb +2 -2
- data/erb/userconf.erb +5 -0
- data/kameleon-builder.gemspec +6 -1
- data/lib/kameleon.rb +53 -3
- data/lib/kameleon/cli.rb +146 -99
- data/lib/kameleon/engine.rb +20 -8
- data/lib/kameleon/environment.rb +11 -10
- data/lib/kameleon/persistent_cache.rb +1 -9
- data/lib/kameleon/recipe.rb +52 -24
- data/lib/kameleon/repository.rb +46 -0
- data/lib/kameleon/utils.rb +49 -0
- data/{templates → tests/recipes}/steps/aliases/defaults.yaml +0 -0
- data/tests/recipes/steps/bootstrap/linux/bootstrap.yaml +2 -0
- data/tests/recipes/steps/checkpoints/test.yaml +14 -0
- data/tests/recipes/steps/enable_something.yaml +2 -0
- data/tests/recipes/steps/export/save_appliance.yaml +10 -0
- data/tests/recipes/steps/setup/linux/software_install.yaml +7 -0
- data/tests/recipes/test_recipe.yaml +41 -0
- data/version.txt +1 -1
- metadata +34 -139
- data/templates/COPYRIGHT +0 -21
- data/templates/chroot/debian7-amd64.yaml +0 -119
- data/templates/docker/debian7.yaml +0 -107
- data/templates/grid5000/debian7.yaml +0 -97
- data/templates/qemu/archlinux-desktop-i686.yaml +0 -25
- data/templates/qemu/archlinux-desktop-x86_64.yaml +0 -25
- data/templates/qemu/archlinux-i686.yaml +0 -25
- data/templates/qemu/archlinux-x86_64.yaml +0 -109
- data/templates/qemu/centos6.5-x86_64.yaml +0 -122
- data/templates/qemu/centos7-x86_64.yaml +0 -122
- data/templates/qemu/debian7-amd64.yaml +0 -134
- data/templates/qemu/debian7-desktop-amd64.yaml +0 -24
- data/templates/qemu/debian7-kameleon-amd64.yaml +0 -40
- data/templates/qemu/debian7-oar-amd64.yaml +0 -51
- data/templates/qemu/debian8-amd64.yaml +0 -25
- data/templates/qemu/fedora20-desktop-x86_64.yaml +0 -21
- data/templates/qemu/fedora20-x86_64.yaml +0 -119
- data/templates/qemu/ubuntu-12.04-amd64.yaml +0 -132
- data/templates/qemu/ubuntu-12.04-desktop-amd64.yaml +0 -25
- data/templates/qemu/ubuntu-14.04-amd64.yaml +0 -25
- data/templates/qemu/ubuntu-14.04-desktop-amd64.yaml +0 -27
- data/templates/steps/bootstrap/archlinux/arch_bootstrap.yaml +0 -211
- data/templates/steps/bootstrap/centos/6.5/yum_bootstrap.yaml +0 -67
- data/templates/steps/bootstrap/debian/debootstrap.yaml +0 -20
- data/templates/steps/bootstrap/fedora/init_pxeboot.yaml +0 -13
- data/templates/steps/bootstrap/fedora/yum_bootstrap.yaml +0 -45
- data/templates/steps/bootstrap/g5k_reserv.yaml +0 -70
- data/templates/steps/bootstrap/initialize_disk.yaml +0 -16
- data/templates/steps/bootstrap/initialize_disk_chroot.yaml +0 -80
- data/templates/steps/bootstrap/install_requirements.yaml +0 -3
- data/templates/steps/bootstrap/prepare_chroot.yaml +0 -126
- data/templates/steps/bootstrap/prepare_docker.yaml +0 -51
- data/templates/steps/bootstrap/prepare_qemu.yaml +0 -41
- data/templates/steps/bootstrap/prepare_virtualbox.yaml +0 -67
- data/templates/steps/bootstrap/start_chroot.yaml +0 -51
- data/templates/steps/bootstrap/start_docker.yaml +0 -16
- data/templates/steps/bootstrap/start_qemu.yaml +0 -74
- data/templates/steps/bootstrap/start_virtualbox.yaml +0 -38
- data/templates/steps/bootstrap/switch_context_qemu.yaml +0 -84
- data/templates/steps/bootstrap/switch_context_virtualbox.yaml +0 -86
- data/templates/steps/breakpoint.yaml +0 -3
- data/templates/steps/checkpoints/docker.yaml +0 -17
- data/templates/steps/checkpoints/qcow2.yaml +0 -40
- data/templates/steps/checkpoints/qemu.yaml +0 -33
- data/templates/steps/checkpoints/virtualbox.yaml +0 -21
- data/templates/steps/disable_checkpoint.yaml +0 -3
- data/templates/steps/enable_checkpoint.yaml +0 -5
- data/templates/steps/export/qemu_save_appliance.yaml +0 -52
- data/templates/steps/export/save_appliance_from_g5k.yaml +0 -47
- data/templates/steps/export/vagrant_save_appliance.yaml +0 -14
- data/templates/steps/export/virtualbox_save_appliance.yaml +0 -61
- data/templates/steps/setup/archlinux/configure_keyboard.yaml +0 -9
- data/templates/steps/setup/archlinux/configure_network.yaml +0 -9
- data/templates/steps/setup/archlinux/configure_system.yaml +0 -20
- data/templates/steps/setup/archlinux/install_bootloader.yaml +0 -23
- data/templates/steps/setup/archlinux/install_software.yaml +0 -9
- data/templates/steps/setup/autologin.yaml +0 -16
- data/templates/steps/setup/centos/6.5/configure_network.yaml +0 -33
- data/templates/steps/setup/centos/6.5/configure_system.yaml +0 -46
- data/templates/steps/setup/centos/6.5/minimal_install.yaml +0 -3
- data/templates/steps/setup/centos/6.5/setup_vagrant_box.yaml +0 -77
- data/templates/steps/setup/create_group.yaml +0 -12
- data/templates/steps/setup/create_user.yaml +0 -11
- data/templates/steps/setup/debian/configure_apt.yaml +0 -73
- data/templates/steps/setup/debian/configure_kernel.yaml +0 -13
- data/templates/steps/setup/debian/configure_keyboard.yaml +0 -10
- data/templates/steps/setup/debian/configure_network.yaml +0 -30
- data/templates/steps/setup/debian/configure_system.yaml +0 -12
- data/templates/steps/setup/debian/install_bootloader.yaml +0 -36
- data/templates/steps/setup/debian/install_software.yaml +0 -2
- data/templates/steps/setup/debian/oar/oar_debian_config_frontend.yaml +0 -8
- data/templates/steps/setup/debian/oar/oar_debian_config_node.yaml +0 -5
- data/templates/steps/setup/debian/oar/oar_debian_config_server.yaml +0 -5
- data/templates/steps/setup/debian/oar/oar_prereq_install.yaml +0 -16
- data/templates/steps/setup/debian/setup_vagrant_box.yaml +0 -80
- data/templates/steps/setup/debian/upgrade_system.yaml +0 -10
- data/templates/steps/setup/fedora/configure_kernel.yaml +0 -9
- data/templates/steps/setup/fedora/configure_keyboard.yaml +0 -12
- data/templates/steps/setup/fedora/configure_network.yaml +0 -38
- data/templates/steps/setup/fedora/configure_system.yaml +0 -52
- data/templates/steps/setup/fedora/install_bootloader.yaml +0 -53
- data/templates/steps/setup/fedora/install_software.yaml +0 -3
- data/templates/steps/setup/fedora/minimal_install.yaml +0 -3
- data/templates/steps/setup/fedora/update_system.yaml +0 -16
- data/templates/steps/setup/oar/oar_config_devel.yaml +0 -21
- data/templates/steps/setup/oar/oar_config_frontend.yaml +0 -38
- data/templates/steps/setup/oar/oar_config_node.yaml +0 -4
- data/templates/steps/setup/oar/oar_config_server.yaml +0 -25
- data/templates/steps/setup/oar/oar_config_system.yaml +0 -34
- data/templates/steps/setup/oar/oar_devel_prereq_install.yaml +0 -5
- data/templates/steps/setup/oar/oar_git_install.yaml +0 -21
- data/templates/steps/setup/ubuntu/configure_apt.yaml +0 -62
- data/templates/virtualbox/archlinux-desktop-i686.yaml +0 -25
- data/templates/virtualbox/archlinux-desktop-x86_64.yaml +0 -28
- data/templates/virtualbox/archlinux-i686.yaml +0 -28
- data/templates/virtualbox/archlinux-x86_64.yaml +0 -108
- data/templates/virtualbox/centos6.5-i386.yaml +0 -39
- data/templates/virtualbox/centos6.5-vagrant-x86_64.yaml +0 -33
- data/templates/virtualbox/centos6.5-x86_64.yaml +0 -121
- data/templates/virtualbox/centos7-x86_64.yaml +0 -118
- data/templates/virtualbox/debian7-amd64.yaml +0 -128
- data/templates/virtualbox/debian7-desktop-amd64.yaml +0 -25
- data/templates/virtualbox/debian7-i386.yaml +0 -31
- data/templates/virtualbox/debian7-kameleon-amd64.yaml +0 -38
- data/templates/virtualbox/debian7-oar-amd64.yaml +0 -51
- data/templates/virtualbox/debian7-vagrant-amd64.yaml +0 -32
- data/templates/virtualbox/debian8-amd64.yaml +0 -25
- data/templates/virtualbox/debian8-i386.yaml +0 -31
- data/templates/virtualbox/fedora20-x86_64.yaml +0 -118
- data/templates/virtualbox/ubuntu-12.04-amd64.yaml +0 -128
- data/templates/virtualbox/ubuntu-12.04-desktop-amd64.yaml +0 -25
- data/templates/virtualbox/ubuntu-14.04-amd64.yaml +0 -25
- data/templates/virtualbox/ubuntu-14.04-desktop-amd64.yaml +0 -27
- data/tests/recipes/dummy_recipe.yaml +0 -48
- data/tests/recipes/steps/bootstrap/dummy_distro/dummy_bootstrap_static.yaml +0 -4
- data/tests/recipes/steps/export/dummy_save_appliance.yaml +0 -9
- data/tests/recipes/steps/setup/default/dummy_root_passwd.yaml +0 -8
- data/tests/recipes/steps/setup/dummy_distro/dummy_software_install.yaml +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6a3d7e9962e22c223344369a554019b3ecdef6a
|
4
|
+
data.tar.gz: 25c90de017ffdb6e7f82dcdaa64a5ed7f2d621e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9846ad8bd70649a76ec8c8408228eb44a172030127361e117672d0076211680c3ee07dcf6829529d73cde1b81d28051b494d92794a23062c7907a28bde4399e
|
7
|
+
data.tar.gz: 5143fe65f730c5b2cefd5ded3c0b412c88cd6a0b8dfa85fe5bc30417deec36e650605c9c82e0b066637cd23a4b388d0f1a3d49416eb3ff986b66a2cbca8de51c
|
data/.gitignore
CHANGED
data/CHANGELOG.rst
CHANGED
@@ -2,6 +2,27 @@ Kameleon CHANGELOG
|
|
2
2
|
==================
|
3
3
|
|
4
4
|
|
5
|
+
version 2.3.0
|
6
|
+
-------------
|
7
|
+
|
8
|
+
Released on Oct 16th 2014
|
9
|
+
|
10
|
+
- Handled Ctrl-C to make a breakpoint instead of quitting. (Fixed #29)
|
11
|
+
- Stored kameleon user configuration file in ``~/.kameleon.d/config`` (Fixed #24)
|
12
|
+
- Fixed ``kameleon new`` to take an absolute or relative path and place the recipe in a subdir (Fixed #22)
|
13
|
+
- Moved builtin recipes to an external repository : See [http://kameleon.imag.fr/repository.html](Docs) (Fixed #24)
|
14
|
+
- Renamed ``--cache`` option to ``--enable-cache``
|
15
|
+
- Renamed ``--checkpoint`` option to ``--enable-checkpoint``
|
16
|
+
- Removed ``kameleon import`` command
|
17
|
+
- Removed ``kameleon templates`` command
|
18
|
+
- Added ``kameleon info`` to display detailed information about a recipe
|
19
|
+
- Added ``kameleon list`` to list all defined recipes in the current directory
|
20
|
+
- Added ``kameleon template info`` to display detailed information about a template
|
21
|
+
- Added ``kameleon template import`` to import a template
|
22
|
+
- Added ``kameleon template list`` to list all available templates
|
23
|
+
- Added ``kameleon template repository`` to manage external git recipes repositories
|
24
|
+
|
25
|
+
|
5
26
|
version 2.2.5
|
6
27
|
-------------
|
7
28
|
|
@@ -6,7 +6,7 @@
|
|
6
6
|
- check_cmd_out: qemu-arm-static
|
7
7
|
- exec_out:|
|
8
8
|
mkdir -p $$rootfs
|
9
|
-
debootstrap --no-check-gpg --foreign --
|
9
|
+
debootstrap --no-check-gpg --foreign --arch=$$arch --include="$$include_pkg" $$release $$rootfs $$repository
|
10
10
|
QEMU_USER_PATH=$(which qemu-arm-static)
|
11
11
|
cp $QEMU_USER_PATH $$rootfs/usr/bin/qemu-arm-static
|
12
12
|
chroot $$rootfs /usr/bin/qemu-arm-static -cpu cortex-a9 /bin/sh /debootstrap/debootstrap --second-stage
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -7,10 +7,10 @@
|
|
7
7
|
#==============================================================================
|
8
8
|
|
9
9
|
---
|
10
|
-
extend: <%= tpl.
|
10
|
+
extend: <%= tpl.relative_path_from_recipe(recipe_path) %>
|
11
11
|
|
12
12
|
global:
|
13
|
-
# You can see the base template `<%= tpl.
|
13
|
+
# You can see the base template `<%= tpl.relative_path_from_recipe(recipe_path) %>.yaml` to know the
|
14
14
|
# variables that you can override
|
15
15
|
|
16
16
|
bootstrap:
|
data/erb/userconf.erb
ADDED
data/kameleon-builder.gemspec
CHANGED
@@ -6,17 +6,20 @@ require 'kameleon/version'
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = 'kameleon-builder'
|
8
8
|
s.version = Kameleon::VERSION
|
9
|
+
s.date = Time.now.strftime('%Y-%m-%d')
|
9
10
|
s.authors = ['Salem Harrache',
|
10
11
|
'Michael Mercier',
|
11
12
|
'Cristan Ruiz',
|
13
|
+
'Pierre Neyron',
|
12
14
|
'Bruno Bzeznik']
|
13
15
|
s.email = ['salem.harrache@inria.fr',
|
14
16
|
'michael.mercier@inria.fr',
|
15
17
|
'cristian.ruiz@imag.fr',
|
18
|
+
'pierre.neyron@imag.fr',
|
16
19
|
'bruno.bzeznik@imag.fr']
|
17
20
|
s.description = %q{The mindful appliance builder}
|
18
21
|
s.summary = %q{Kameleon is a tool to build virtual machines from scratch}
|
19
|
-
s.homepage = 'http://kameleon.
|
22
|
+
s.homepage = 'http://kameleon.imag.fr/'
|
20
23
|
s.license = 'GPL-2'
|
21
24
|
|
22
25
|
s.files = `git ls-files`.split($/)
|
@@ -28,4 +31,6 @@ Gem::Specification.new do |s|
|
|
28
31
|
s.add_dependency 'childprocess', '~> 0.5.3', '>= 0.3.0'
|
29
32
|
s.add_dependency 'thor', '~> 0.19', '>= 0.15.0'
|
30
33
|
s.add_dependency 'table_print', '~> 1.5.2'
|
34
|
+
|
35
|
+
s.requirements = ['polipo 1.0.3, or greater']
|
31
36
|
end
|
data/lib/kameleon.rb
CHANGED
@@ -10,20 +10,70 @@ require 'pathname'
|
|
10
10
|
require 'table_print'
|
11
11
|
require 'yaml'
|
12
12
|
|
13
|
+
require 'kameleon/ui'
|
14
|
+
|
13
15
|
module Kameleon
|
14
16
|
class << self
|
15
17
|
attr_writer :env
|
16
18
|
attr_writer :ui
|
17
19
|
attr_writer :source_root
|
18
20
|
attr_writer :log_on_progress
|
21
|
+
attr_writer :userdir
|
22
|
+
attr_writer :userconf_path
|
23
|
+
attr_writer :repositories_path
|
24
|
+
attr_writer :default_values
|
19
25
|
|
20
26
|
# The source root is the path to the root directory of the kameleon gem.
|
21
27
|
def source_root
|
22
28
|
@source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
|
23
29
|
end
|
24
30
|
|
25
|
-
def
|
26
|
-
File.join(Kameleon.source_root, '
|
31
|
+
def erb_dirpath
|
32
|
+
File.join(Kameleon.source_root, 'erb')
|
33
|
+
end
|
34
|
+
|
35
|
+
def userdir
|
36
|
+
@userdir ||= Pathname.new(File.join('~', '.kameleon.d'))
|
37
|
+
Dir.mkdir(File.expand_path(@userdir.to_path)) unless File.exists?(File.expand_path(@userdir.to_path))
|
38
|
+
@userdir
|
39
|
+
end
|
40
|
+
|
41
|
+
def userconf_path
|
42
|
+
@userconf_path ||= Pathname.new(File.join(File.expand_path(userdir.to_path), 'config'))
|
43
|
+
end
|
44
|
+
|
45
|
+
def init_userconf()
|
46
|
+
if not File.exists?(Kameleon.userconf_path) or File.zero?(Kameleon.userconf_path)
|
47
|
+
File.open(Kameleon.userconf_path, 'w+') do |file|
|
48
|
+
userconf_erb = File.join(Kameleon.erb_dirpath, "userconf.erb")
|
49
|
+
erb = ERB.new(File.open(userconf_erb, 'rb') { |f| f.read })
|
50
|
+
result = erb.result(binding)
|
51
|
+
file.write(result)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def load_userconf
|
57
|
+
if File.exists?(Kameleon.userconf_path) and not File.zero?(Kameleon.userconf_path)
|
58
|
+
yaml_conf = YAML.load_file Kameleon.userconf_path
|
59
|
+
unless yaml_conf.kind_of? Hash
|
60
|
+
yaml_conf = {}
|
61
|
+
end
|
62
|
+
else
|
63
|
+
yaml_conf = {}
|
64
|
+
end
|
65
|
+
return yaml_conf
|
66
|
+
end
|
67
|
+
|
68
|
+
def default_values
|
69
|
+
userconf = load_userconf
|
70
|
+
@default_values ||= {
|
71
|
+
:color => userconf.fetch("color", true),
|
72
|
+
:debug => userconf.fetch("debug", false),
|
73
|
+
:script => userconf.fetch("script", false),
|
74
|
+
:repositories_path => userconf.fetch("repositories_path",
|
75
|
+
File.join(userdir.to_path, 'repos')),
|
76
|
+
}
|
27
77
|
end
|
28
78
|
|
29
79
|
def env
|
@@ -44,7 +94,7 @@ end
|
|
44
94
|
require 'kameleon/compat'
|
45
95
|
require 'kameleon/utils'
|
46
96
|
require 'kameleon/error'
|
97
|
+
require 'kameleon/repository'
|
47
98
|
require 'kameleon/cli'
|
48
99
|
require 'kameleon/environment'
|
49
100
|
require 'kameleon/version'
|
50
|
-
require 'kameleon/ui'
|
data/lib/kameleon/cli.rb
CHANGED
@@ -3,53 +3,138 @@ require 'kameleon/recipe'
|
|
3
3
|
require 'kameleon/utils'
|
4
4
|
|
5
5
|
module Kameleon
|
6
|
-
|
6
|
+
|
7
|
+
module CLI
|
8
|
+
|
9
|
+
class Repository < Thor
|
10
|
+
include Thor::Actions
|
11
|
+
|
12
|
+
desc "add [NAME] [URL]", "Adds a new named <name> repository at <url>."
|
13
|
+
method_option :branch, :type => :string ,
|
14
|
+
:default => nil,
|
15
|
+
:desc => "checkout <branch>",
|
16
|
+
:aliases => "-b"
|
17
|
+
def add(name, url)
|
18
|
+
Kameleon::Repository.add(name, url, options)
|
19
|
+
end
|
20
|
+
|
21
|
+
desc "list", "Lists available repositories."
|
22
|
+
def list
|
23
|
+
Kameleon::Repository.list
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "update [NAME]", "Updates a named <name> repository"
|
27
|
+
def update(name)
|
28
|
+
Kameleon::Repository.update(name)
|
29
|
+
end
|
30
|
+
map %w(-h --help) => :help
|
31
|
+
map %w(ls) => :list
|
32
|
+
end
|
33
|
+
|
34
|
+
class Template < Thor
|
35
|
+
include Thor::Actions
|
36
|
+
|
37
|
+
register CLI::Repository, 'repository', 'repository', 'Manages set of remote git repositories'
|
38
|
+
|
39
|
+
def self.source_root
|
40
|
+
Kameleon.env.repositories_path
|
41
|
+
end
|
42
|
+
|
43
|
+
desc "list", "Lists all available templates"
|
44
|
+
def list
|
45
|
+
Kameleon.ui.info "The following templates are available in " \
|
46
|
+
"#{ Kameleon.env.repositories_path }:"
|
47
|
+
Utils.list_recipes(Kameleon.env.repositories_path)
|
48
|
+
end
|
49
|
+
|
50
|
+
desc "import [TEMPLATE_NAME]", "Imports the given template"
|
51
|
+
def import(template_name)
|
52
|
+
template_path = File.join(Kameleon.env.repositories_path, template_name)
|
53
|
+
unless template_name.end_with? '.yaml'
|
54
|
+
template_path = template_path + '.yaml'
|
55
|
+
end
|
56
|
+
begin
|
57
|
+
tpl = RecipeTemplate.new(template_path)
|
58
|
+
rescue
|
59
|
+
raise TemplateNotFound, "Template '#{template_name}' not found. " \
|
60
|
+
"To see all templates, run the command "\
|
61
|
+
"`kameleon template ls`"
|
62
|
+
else
|
63
|
+
files2copy = tpl.base_recipes_files + tpl.files
|
64
|
+
files2copy.each do |path|
|
65
|
+
relative_path = path.relative_path_from(Kameleon.env.repositories_path)
|
66
|
+
dst = File.join(Kameleon.env.workspace, relative_path)
|
67
|
+
copy_file(path, dst)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
desc "info [TEMPLATE_NAME]", "Display detailed information about a template"
|
73
|
+
def info(template_name)
|
74
|
+
template_path = File.join(Kameleon.env.repositories_path, template_name)
|
75
|
+
unless template_name.end_with? '.yaml'
|
76
|
+
template_path = template_path + '.yaml'
|
77
|
+
end
|
78
|
+
tpl = RecipeTemplate.new(template_path)
|
79
|
+
tpl.display_info
|
80
|
+
end
|
81
|
+
map %w(-h --help) => :help
|
82
|
+
map %w(ls) => :list
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
class Main < Thor
|
7
88
|
include Thor::Actions
|
8
89
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
90
|
+
# register CLI::Recipe, 'recipe', 'recipe', 'Manages the local recipes'
|
91
|
+
register CLI::Template, 'template', 'template', 'Lists and imports templates'
|
92
|
+
|
93
|
+
class_option :color, :type => :boolean, :default => Kameleon.default_values[:color],
|
94
|
+
:desc => "Enables colorization in output"
|
95
|
+
class_option :debug, :type => :boolean, :default => Kameleon.default_values[:debug],
|
96
|
+
:desc => "Enables debug output"
|
97
|
+
class_option :script, :type => :boolean, :default => Kameleon.default_values[:script],
|
98
|
+
:desc => "Never prompts for user intervention",
|
15
99
|
:aliases => "-s"
|
16
100
|
map %w(-h --help) => :help
|
17
101
|
|
18
|
-
desc "
|
19
|
-
|
20
|
-
|
21
|
-
:desc => "Using another templates directory"
|
22
|
-
def import(template_name)
|
23
|
-
templates_path = Kameleon.env.templates_path
|
24
|
-
template_path = File.join(templates_path, template_name) + '.yaml'
|
25
|
-
begin
|
26
|
-
tpl = RecipeTemplate.new(template_path)
|
27
|
-
rescue
|
28
|
-
raise TemplateNotFound, "Template '#{template_name}' not found. " \
|
29
|
-
"To see all templates, run the command "\
|
30
|
-
"`kameleon templates`"
|
31
|
-
else
|
32
|
-
files2copy = tpl.base_recipes_files + tpl.files
|
33
|
-
files2copy.each do |path|
|
34
|
-
relative_path = path.relative_path_from(Kameleon.env.templates_path)
|
35
|
-
dst = File.join(Kameleon.env.workspace, relative_path)
|
36
|
-
copy_file(path, dst)
|
37
|
-
end
|
38
|
-
end
|
102
|
+
desc "version", "Prints the Kameleon's version information"
|
103
|
+
def version
|
104
|
+
puts "Kameleon version #{Kameleon::VERSION}"
|
39
105
|
end
|
106
|
+
map %w(-v --version) => :version
|
40
107
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
108
|
+
def self.source_root
|
109
|
+
Kameleon.env.repositories_path
|
110
|
+
end
|
111
|
+
|
112
|
+
desc "list", "Lists all defined recipes in the current directory"
|
113
|
+
def list
|
114
|
+
Utils.list_recipes(Kameleon.env.workspace)
|
115
|
+
end
|
116
|
+
map %w(ls) => :list
|
117
|
+
|
118
|
+
desc "new [RECIPE_PATH] [TEMPLATE_NAME]", "Creates a new recipe"
|
119
|
+
def new(recipe_path, template_name)
|
120
|
+
unless template_name.end_with? '.yaml'
|
121
|
+
template_name = template_name + '.yaml'
|
48
122
|
end
|
49
|
-
|
50
|
-
|
123
|
+
|
124
|
+
unless recipe_path.end_with? '.yaml'
|
125
|
+
recipe_path = recipe_path + '.yaml'
|
126
|
+
end
|
127
|
+
|
128
|
+
if recipe_path == template_name
|
129
|
+
fail RecipeError, "Recipe path should be different from template name"
|
130
|
+
end
|
131
|
+
|
132
|
+
template_path = File.join(Kameleon.env.repositories_path, template_name)
|
133
|
+
|
134
|
+
recipe_path = Pathname.new(Kameleon.env.workspace).join(recipe_path).to_path
|
135
|
+
|
51
136
|
begin
|
52
|
-
tpl = RecipeTemplate.new(template_path)
|
137
|
+
tpl = Kameleon::RecipeTemplate.new(template_path)
|
53
138
|
rescue
|
54
139
|
raise TemplateNotFound, "Template '#{template_name}' not found. " \
|
55
140
|
"To see all templates, run the command "\
|
@@ -57,87 +142,53 @@ module Kameleon
|
|
57
142
|
else
|
58
143
|
files2copy = tpl.base_recipes_files + tpl.files
|
59
144
|
files2copy.each do |path|
|
60
|
-
relative_path = path.relative_path_from(Kameleon.env.
|
145
|
+
relative_path = path.relative_path_from(Kameleon.env.repositories_path)
|
61
146
|
dst = File.join(Kameleon.env.workspace, relative_path)
|
62
147
|
copy_file(path, dst)
|
63
148
|
end
|
64
149
|
Dir::mktmpdir do |tmp_dir|
|
65
|
-
|
150
|
+
recipe_temp = File.join(tmp_dir, File.basename(recipe_path))
|
66
151
|
## copying recipe
|
67
|
-
File.open(
|
68
|
-
extend_erb_tpl = File.join(Kameleon.
|
152
|
+
File.open(recipe_temp, 'w+') do |file|
|
153
|
+
extend_erb_tpl = File.join(Kameleon.erb_dirpath, "extend.erb")
|
69
154
|
erb = ERB.new(File.open(extend_erb_tpl, 'rb') { |f| f.read })
|
70
155
|
result = erb.result(binding)
|
71
156
|
file.write(result)
|
72
157
|
end
|
73
|
-
|
74
|
-
copy_file(recipe_path, Pathname.new(recipe_dst))
|
158
|
+
copy_file(recipe_temp, recipe_path)
|
75
159
|
end
|
76
160
|
end
|
77
161
|
end
|
78
162
|
|
79
|
-
desc "
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
def templates
|
84
|
-
puts "The following templates are available in " \
|
85
|
-
"#{ Kameleon.env.templates_path }:"
|
86
|
-
templates_hash = []
|
87
|
-
templates_path = File.join(Kameleon.env.templates_path, "/")
|
88
|
-
all_yaml_files = Dir["#{templates_path}**/*.yaml"]
|
89
|
-
steps_files = Dir["#{templates_path}steps/**/*.yaml"]
|
90
|
-
templates_files = all_yaml_files - steps_files
|
91
|
-
templates_files.each do |f|
|
92
|
-
begin
|
93
|
-
recipe = RecipeTemplate.new(f)
|
94
|
-
templates_hash.push({
|
95
|
-
"name" => f.gsub(templates_path, "").chomp(".yaml"),
|
96
|
-
"description" => recipe.metainfo['description'],
|
97
|
-
})
|
98
|
-
rescue => e
|
99
|
-
raise e if Kameleon.env.debug
|
100
|
-
end
|
101
|
-
end
|
102
|
-
unless templates_hash.empty?
|
103
|
-
templates_hash = templates_hash.sort_by{ |k| k["name"] }
|
104
|
-
name_width = templates_hash.map { |k| k['name'].size }.max
|
105
|
-
desc_width = Kameleon.ui.shell.terminal_width - name_width - 3
|
106
|
-
end
|
107
|
-
tp(templates_hash,
|
108
|
-
{"name" => {:width => name_width}},
|
109
|
-
{ "description" => {:width => desc_width}})
|
110
|
-
end
|
111
|
-
|
112
|
-
desc "version", "Prints the Kameleon's version information"
|
113
|
-
def version
|
114
|
-
puts "Kameleon version #{Kameleon::VERSION}"
|
163
|
+
desc "info [RECIPE_PATH]", "Display detailed information about a recipe"
|
164
|
+
def info(recipe_path)
|
165
|
+
recipe = Kameleon::Recipe.new(recipe_path)
|
166
|
+
recipe.display_info
|
115
167
|
end
|
116
|
-
map %w(-v --version) => :version
|
117
168
|
|
118
|
-
desc "build [RECIPE_PATH]", "Builds the appliance from the given recipe"
|
169
|
+
desc "build [[RECIPE_PATH]]", "Builds the appliance from the given recipe"
|
119
170
|
method_option :build_path, :type => :string ,
|
120
171
|
:default => nil, :aliases => "-b",
|
121
|
-
:desc => "
|
172
|
+
:desc => "Sets the build directory path"
|
122
173
|
method_option :clean, :type => :boolean ,
|
123
174
|
:default => false,
|
124
|
-
:desc => "
|
175
|
+
:desc => "Runs the command `kameleon clean` first"
|
125
176
|
method_option :from_checkpoint, :type => :string ,
|
126
177
|
:default => nil,
|
127
|
-
:desc => "
|
178
|
+
:desc => "Uses specific checkpoint to build the image. " \
|
128
179
|
"Default value is the last checkpoint."
|
129
|
-
method_option :
|
180
|
+
method_option :enable_checkpoint, :type => :boolean ,
|
130
181
|
:default => false,
|
131
|
-
:desc => "
|
132
|
-
method_option :
|
182
|
+
:desc => "Enables checkpoint [experimental]"
|
183
|
+
method_option :enable_cache, :type => :boolean,
|
133
184
|
:default => false,
|
134
|
-
:desc => "
|
185
|
+
:desc => "Generates a persistent cache for the appliance."
|
135
186
|
method_option :cache_path, :type => :string ,
|
136
187
|
:default => nil,
|
137
|
-
:desc => "
|
188
|
+
:desc => "Sets the cache directory path"
|
138
189
|
method_option :from_cache, :type => :string ,
|
139
190
|
:default => nil,
|
140
|
-
:desc => "
|
191
|
+
:desc => "Uses a persistent cache tar file to build the image."
|
141
192
|
method_option :proxy_path, :type => :string ,
|
142
193
|
:default => nil,
|
143
194
|
:desc => "Full path of the proxy binary to use for the persistent cache."
|
@@ -172,10 +223,10 @@ module Kameleon
|
|
172
223
|
engine.pretty_checkpoints_list
|
173
224
|
end
|
174
225
|
|
175
|
-
desc "clean [RECIPE_PATH]", "
|
226
|
+
desc "clean [RECIPE_PATH]", "Cleans all contexts and removing the checkpoints"
|
176
227
|
method_option :build_path, :type => :string ,
|
177
228
|
:default => nil, :aliases => "-b",
|
178
|
-
:desc => "
|
229
|
+
:desc => "Sets the build directory path"
|
179
230
|
def clean(recipe_path)
|
180
231
|
opts = Hash.new.merge options
|
181
232
|
opts[:lazyload] = false
|
@@ -187,7 +238,7 @@ module Kameleon
|
|
187
238
|
|
188
239
|
desc "commands", "Lists all available commands", :hide => true
|
189
240
|
def commands
|
190
|
-
puts
|
241
|
+
puts Main.all_commands.keys - ["commands", "completions"]
|
191
242
|
end
|
192
243
|
|
193
244
|
desc "source_root", "Prints the kameleon directory path", :hide => true
|
@@ -207,7 +258,7 @@ module Kameleon
|
|
207
258
|
opts = args[1]
|
208
259
|
cmd_name = args[2][:current_command].name
|
209
260
|
if opts.include? "--help" or opts.include? "-h"
|
210
|
-
|
261
|
+
Main.command_help(Kameleon.ui.shell, cmd_name)
|
211
262
|
raise Kameleon::Exit
|
212
263
|
end
|
213
264
|
end
|
@@ -219,10 +270,6 @@ module Kameleon
|
|
219
270
|
raise e
|
220
271
|
end
|
221
272
|
|
222
|
-
def self.source_root
|
223
|
-
Kameleon.source_root
|
224
|
-
end
|
225
|
-
|
226
273
|
end
|
227
274
|
|
228
275
|
end
|