kameleon-builder 2.1.3 → 2.2.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.
- data/.editorconfig +0 -0
- data/.env +2 -6
- data/CHANGELOG.rst +74 -1
- data/Gemfile +20 -2
- data/README.rst +35 -25
- data/Thorfile +29 -0
- data/contrib/kameleon_bashrc.sh +61 -0
- data/contrib/polipo_env.sh +3 -2
- data/kameleon-builder.gemspec +3 -10
- data/lib/kameleon.rb +10 -14
- data/lib/kameleon/cli.rb +92 -105
- data/lib/kameleon/context.rb +76 -43
- data/lib/kameleon/engine.rb +147 -103
- data/lib/kameleon/environment.rb +10 -5
- data/lib/kameleon/error.rb +1 -32
- data/lib/kameleon/persistent_cache.rb +127 -29
- data/lib/kameleon/recipe.rb +63 -106
- data/lib/kameleon/shell.rb +32 -17
- data/lib/kameleon/step.rb +18 -1
- data/lib/kameleon/ui.rb +141 -0
- data/lib/kameleon/utils.rb +9 -0
- data/templates/{debian7-chroot.yaml → chroot/debian7-amd64.yaml} +29 -21
- data/templates/{docker-debian7.yaml → docker/debian7.yaml} +5 -5
- data/templates/extend.erb +2 -2
- data/templates/{debian7-g5k.yaml → grid5000/debian7.yaml} +1 -1
- data/templates/{archlinux-desktop.yaml → qemu/archlinux-desktop-i686.yaml} +2 -2
- data/templates/qemu/archlinux-desktop-x86_64.yaml +25 -0
- data/templates/qemu/archlinux-i686.yaml +25 -0
- data/templates/{archlinux.yaml → qemu/archlinux-x86_64.yaml} +37 -34
- data/templates/qemu/centos6.5-x86_64.yaml +113 -0
- data/templates/qemu/centos7-x86_64.yaml +119 -0
- data/templates/{debian7.yaml → qemu/debian7-amd64.yaml} +45 -40
- data/templates/{debian7-desktop.yaml → qemu/debian7-desktop-amd64.yaml} +2 -3
- data/templates/{debian7-kameleon.yaml → qemu/debian7-kameleon-amd64.yaml} +3 -6
- data/templates/{debian7-oar-dev.yaml → qemu/debian7-oar-amd64.yaml} +2 -2
- data/templates/qemu/debian8-amd64.yaml +25 -0
- data/templates/{fedora20-desktop.yaml → qemu/fedora20-desktop-x86_64.yaml} +2 -2
- data/templates/qemu/fedora20-x86_64.yaml +116 -0
- data/templates/{ubuntu-12.04.yaml → qemu/ubuntu-12.04-amd64.yaml} +42 -38
- data/templates/{ubuntu-12.04-desktop.yaml → qemu/ubuntu-12.04-desktop-amd64.yaml} +3 -3
- data/templates/{ubuntu-14.04.yaml → qemu/ubuntu-14.04-amd64.yaml} +2 -2
- data/templates/{ubuntu-14.04-desktop.yaml → qemu/ubuntu-14.04-desktop-amd64.yaml} +2 -2
- data/templates/steps/aliases/defaults.yaml +19 -13
- data/templates/steps/bootstrap/archlinux/arch_bootstrap.yaml +11 -19
- data/templates/steps/bootstrap/debian/debootstrap.yaml +10 -11
- data/templates/steps/bootstrap/debian/debootstrap_arm.yaml +11 -19
- data/templates/steps/bootstrap/fedora/init_pxeboot.yaml +13 -0
- data/templates/steps/bootstrap/fedora/yum_bootstrap.yaml +45 -0
- data/templates/steps/bootstrap/initialize_disk.yaml +16 -0
- data/templates/steps/bootstrap/initialize_disk_chroot.yaml +10 -14
- data/templates/steps/bootstrap/install_requirements.yaml +3 -0
- data/templates/steps/bootstrap/prepare_docker.yaml +7 -7
- data/templates/steps/bootstrap/prepare_qemu.yaml +20 -26
- data/templates/steps/bootstrap/prepare_virtualbox.yaml +63 -0
- data/templates/steps/bootstrap/start_chroot.yaml +2 -13
- data/templates/steps/bootstrap/start_qemu.yaml +50 -53
- data/templates/steps/bootstrap/start_virtualbox.yaml +37 -0
- data/templates/steps/bootstrap/switch_context_qemu.yaml +64 -0
- data/templates/steps/bootstrap/switch_context_virtualbox.yaml +66 -0
- data/templates/steps/breakpoint.yaml +2 -1
- data/templates/steps/checkpoints/docker.yaml +14 -11
- data/templates/steps/checkpoints/qcow2.yaml +26 -24
- data/templates/steps/checkpoints/qemu.yaml +30 -36
- data/templates/steps/checkpoints/virtualbox.yaml +21 -0
- data/templates/steps/disable_checkpoint.yaml +3 -0
- data/templates/steps/enable_checkpoint.yaml +5 -0
- data/templates/steps/export/qemu_save_appliance.yaml +52 -0
- data/templates/steps/export/virtualbox_save_appliance.yaml +67 -0
- data/templates/steps/setup/archlinux/install_bootloader.yaml +23 -0
- data/templates/steps/setup/centos/6.5/configure_network.yaml +31 -0
- data/templates/steps/setup/centos/6.5/configure_system.yaml +27 -0
- data/templates/steps/setup/debian/configure_apt.yaml +1 -6
- data/templates/steps/setup/debian/configure_kernel.yaml +0 -5
- data/templates/steps/setup/debian/install_bootloader.yaml +36 -0
- data/templates/steps/setup/debian/setup_vagrant_box.yaml +48 -18
- data/templates/steps/setup/debian/upgrade_system.yaml +2 -7
- data/templates/steps/setup/fedora/configure_kernel.yaml +9 -0
- data/templates/steps/setup/fedora/configure_keyboard.yaml +12 -0
- data/templates/steps/setup/fedora/configure_network.yaml +9 -1
- data/templates/steps/setup/fedora/configure_system.yaml +20 -45
- data/templates/steps/setup/fedora/install_bootloader.yaml +58 -0
- data/templates/steps/setup/fedora/minimal_install.yaml +3 -0
- data/templates/steps/setup/fedora/update_system.yaml +13 -5
- data/templates/steps/setup/ubuntu/configure_apt.yaml +4 -9
- data/templates/vagrant/debian7-amd64.yaml +130 -0
- data/templates/virtualbox/archlinux-desktop-i686.yaml +25 -0
- data/templates/virtualbox/archlinux-desktop-x86_64.yaml +28 -0
- data/templates/virtualbox/archlinux-i686.yaml +28 -0
- data/templates/virtualbox/archlinux-x86_64.yaml +109 -0
- data/templates/virtualbox/centos6.5-i386.yaml +39 -0
- data/templates/virtualbox/centos6.5-x86_64.yaml +111 -0
- data/templates/virtualbox/centos7-x86_64.yaml +116 -0
- data/{docs/source/debian7.yaml → templates/virtualbox/debian7-amd64.yaml} +53 -52
- data/templates/virtualbox/debian7-desktop-amd64.yaml +25 -0
- data/templates/{fedora-rawhide.yaml → virtualbox/debian7-i386.yaml} +12 -11
- data/templates/virtualbox/debian7-kameleon-amd64.yaml +38 -0
- data/templates/virtualbox/debian7-oar-amd64.yaml +51 -0
- data/templates/{debian-testing.yaml → virtualbox/debian8-amd64.yaml} +3 -3
- data/templates/virtualbox/debian8-i386.yaml +31 -0
- data/templates/virtualbox/fedora20-x86_64.yaml +116 -0
- data/templates/virtualbox/ubuntu-12.04-amd64.yaml +128 -0
- data/templates/virtualbox/ubuntu-12.04-desktop-amd64.yaml +25 -0
- data/templates/virtualbox/ubuntu-14.04-amd64.yaml +25 -0
- data/templates/virtualbox/ubuntu-14.04-desktop-amd64.yaml +27 -0
- data/version.txt +1 -1
- metadata +67 -212
- data/Rakefile +0 -24
- data/docs/.gitignore +0 -1
- data/docs/Makefile +0 -181
- data/docs/README.md +0 -17
- data/docs/make.bat +0 -242
- data/docs/source/_static/.gitignore +0 -0
- data/docs/source/_static/centos.png +0 -0
- data/docs/source/_static/debian.png +0 -0
- data/docs/source/_static/kameleon-logo.png +0 -0
- data/docs/source/_static/kameleon-logo.xcf +0 -0
- data/docs/source/_static/kameleon-long.png +0 -0
- data/docs/source/_static/ubuntu.png +0 -0
- data/docs/source/_themes/sphinx_rtd_theme/__init__.py +0 -17
- data/docs/source/_themes/sphinx_rtd_theme/breadcrumbs.html +0 -19
- data/docs/source/_themes/sphinx_rtd_theme/footer.html +0 -32
- data/docs/source/_themes/sphinx_rtd_theme/layout.html +0 -160
- data/docs/source/_themes/sphinx_rtd_theme/layout_old.html +0 -205
- data/docs/source/_themes/sphinx_rtd_theme/search.html +0 -50
- data/docs/source/_themes/sphinx_rtd_theme/searchbox.html +0 -7
- data/docs/source/_themes/sphinx_rtd_theme/static/css/badge_only.css +0 -1
- data/docs/source/_themes/sphinx_rtd_theme/static/css/theme.css +0 -4
- data/docs/source/_themes/sphinx_rtd_theme/static/fonts/FontAwesome.otf +0 -0
- data/docs/source/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.eot +0 -0
- data/docs/source/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.svg +0 -414
- data/docs/source/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.ttf +0 -0
- data/docs/source/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.woff +0 -0
- data/docs/source/_themes/sphinx_rtd_theme/static/js/theme.js +0 -47
- data/docs/source/_themes/sphinx_rtd_theme/theme.conf +0 -8
- data/docs/source/_themes/sphinx_rtd_theme/versions.html +0 -37
- data/docs/source/aliases.rst +0 -31
- data/docs/source/atlas_debian_g5k.yaml +0 -36
- data/docs/source/checkpoint.rst +0 -30
- data/docs/source/commands.rst +0 -63
- data/docs/source/conf.py +0 -262
- data/docs/source/context.rst +0 -47
- data/docs/source/debian_customized.yaml +0 -28
- data/docs/source/debian_customized_g5k.yaml +0 -21
- data/docs/source/faq.rst +0 -43
- data/docs/source/getting_started.rst +0 -260
- data/docs/source/grid5000_tutorial.rst +0 -525
- data/docs/source/index.rst +0 -53
- data/docs/source/install_atlas.yaml +0 -25
- data/docs/source/install_hpl.yaml +0 -24
- data/docs/source/installation.rst +0 -51
- data/docs/source/persistent_cache.rst +0 -34
- data/docs/source/recipe.rst +0 -177
- data/docs/source/tau_install.yaml +0 -19
- data/docs/source/tau_install_g5k.yaml +0 -25
- data/docs/source/use_cases.rst +0 -93
- data/docs/source/workspace.rst +0 -13
- data/lib/kameleon/logger.rb +0 -56
- data/omnibus/.gitignore +0 -11
- data/omnibus/.kitchen.yml +0 -25
- data/omnibus/Berksfile +0 -9
- data/omnibus/Berksfile.lock +0 -25
- data/omnibus/Gemfile +0 -12
- data/omnibus/README.md +0 -94
- data/omnibus/config/projects/kameleon.rb +0 -23
- data/omnibus/config/software/kameleon.rb +0 -24
- data/omnibus/config/software/polipo.rb +0 -30
- data/omnibus/config/software/ruby.rb +0 -158
- data/omnibus/files/mac_dmg/Resources/background.png +0 -0
- data/omnibus/files/mac_dmg/Resources/icon.png +0 -0
- data/omnibus/files/mac_pkg/Resources/background.png +0 -0
- data/omnibus/files/mac_pkg/Resources/license.html +0 -1
- data/omnibus/files/mac_pkg/Resources/welcome.html +0 -9
- data/omnibus/omnibus.rb +0 -27
- data/omnibus/package-scripts/kameleon/makeselfinst +0 -27
- data/omnibus/package-scripts/kameleon/postrm +0 -9
- data/templates/fedora20.yaml +0 -105
- data/templates/steps/bootstrap/archlinux/install_bootloader.yaml +0 -46
- data/templates/steps/bootstrap/archlinux/populate_disk.yaml +0 -39
- data/templates/steps/bootstrap/fedora/liveos_bootstrap.yaml +0 -123
- data/templates/steps/bootstrap/initialize_disk_qemu.yaml +0 -72
- data/templates/steps/bootstrap/install_bootloader.yaml +0 -42
- data/templates/steps/bootstrap/ubuntu/debootstrap.yaml +0 -27
- data/templates/steps/export/save_appliance.yaml +0 -58
- data/templates/steps/export/save_vagrant_box.yaml +0 -29
- data/templates/vagrant-debian7.yaml +0 -31
data/.editorconfig
CHANGED
|
File without changes
|
data/.env
CHANGED
|
@@ -13,11 +13,7 @@ QEMU_MONITOR_PORT=11023
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
function kameleon {
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function runtest {
|
|
20
|
-
sudo -E BUNDLE_GEMFILE=$ROOT_PROJECT/Gemfile bundle exec rake $@
|
|
16
|
+
BUNDLE_GEMFILE=$ROOT_PROJECT/Gemfile bundle exec kameleon $@
|
|
21
17
|
}
|
|
22
18
|
|
|
23
19
|
function devrun_chroot_clean() {
|
|
@@ -88,7 +84,7 @@ function devrun_qemu() {
|
|
|
88
84
|
function devrun_build() {
|
|
89
85
|
KAMELEON_WORKDIR=${KAMELEON_WORKDIR:-"/tmp/kameleon/"}
|
|
90
86
|
RECIPE_DEV_NAME=${RECIPE_DEV_NAME:-"mymachine"}
|
|
91
|
-
TEMPLATE=${1:-"debian7"}
|
|
87
|
+
TEMPLATE=${1:-"chroot/debian7"}
|
|
92
88
|
mkdir -p $KAMELEON_WORKDIR && cd $KAMELEON_WORKDIR
|
|
93
89
|
cmd="kameleon new $RECIPE_DEV_NAME $TEMPLATE \
|
|
94
90
|
&& kameleon build $RECIPE_DEV_NAME.yaml"
|
data/CHANGELOG.rst
CHANGED
|
@@ -1,9 +1,81 @@
|
|
|
1
1
|
Kameleon CHANGELOG
|
|
2
2
|
==================
|
|
3
3
|
|
|
4
|
+
version 2.2.0
|
|
5
|
+
-------------
|
|
6
|
+
|
|
7
|
+
Released on July 20th 2014
|
|
8
|
+
|
|
9
|
+
- [proxy cache] Added ``proxy_cache`` recipe option to context_in/out to enable
|
|
10
|
+
persistant cache for every context
|
|
11
|
+
- [proxy cache] Added ``--cache-path`` CLI option to set different cache directory
|
|
12
|
+
- [proxy cache] Shared cache directory between recipes by default
|
|
13
|
+
- [proxy cache] No more internal cache for debootstrap
|
|
14
|
+
- [proxy_cache] Polipo does not use default config file anymore
|
|
15
|
+
- [proxy_cache] Recipe is now stored in cache at the end
|
|
16
|
+
- [package] Removed diffy from dependencies
|
|
17
|
+
- [package] Removed log4r-color from dependencies
|
|
18
|
+
- [core] Rewrote checkpoint mechanism. (allow to run multiple commands)
|
|
19
|
+
- [core] Added ``--script`` CLI option to enable non-interactive mode
|
|
20
|
+
- [core] Added ``reload_context`` command that reloads the context from the recipe
|
|
21
|
+
- [core] From now on, Kameleon tries to clean all contexts without blocking the shell
|
|
22
|
+
- [core] Improved cleaning contexts upon interruption
|
|
23
|
+
- [core] If microstep is marked as ``redo`` or ``skip`` (on checkpoint), the ID will be independent from other steps
|
|
24
|
+
- [template] Grouped templates by virtualization tools
|
|
25
|
+
- [template] Removed extlinux timeout for debian
|
|
26
|
+
- [template] Configured apt to install recommended packages by default
|
|
27
|
+
- [template] Added architecture type in templates description
|
|
28
|
+
- [template] Forced killing qemu with sigterm signal
|
|
29
|
+
- [template] Removed ssh ControlPath option
|
|
30
|
+
- [template] Used parted tool in script mode
|
|
31
|
+
- [template] Added a timeout during startup and shutdown VMs
|
|
32
|
+
- [template] Restored eth0 as default interface in Fedora (net.ifnames=0 biosdevname=0)
|
|
33
|
+
- [template] Ensured that the checkpoint was disabled at the beginning of the recipe
|
|
34
|
+
- [template] Make sure that qemu is stopped at the end
|
|
35
|
+
- [template] Replaced netcat by socat
|
|
36
|
+
- [template] Removed duplicated ubuntu repository (restricted)
|
|
37
|
+
- [template] Used a debian-jessie iso to bootstrap the out_context with a minimal linux system
|
|
38
|
+
- [template] Hide default kameleon state files
|
|
39
|
+
- [template] Enabled debug mode with ``KAMELEON_DEBUG=1`` environment variable
|
|
40
|
+
- [template] Added ``download_file`` alias that uses curl/wget or python to download files
|
|
41
|
+
- [template] Enabled kvm only if available
|
|
42
|
+
- [template] Do not run qemu with nohup (Use ``-daemonize`` instead)
|
|
43
|
+
- [template] Improved context_out/in log readability
|
|
44
|
+
- [template] Removed fedora-rawhide templates
|
|
45
|
+
- [template] Added new templates :
|
|
46
|
+
|
|
47
|
+
- qemu/archlinux-desktop-i686
|
|
48
|
+
- qemu/archlinux-i686
|
|
49
|
+
- qemu/centos6.5-x86_64
|
|
50
|
+
- qemu/centos7-x86_64
|
|
51
|
+
- qemu/debian8-amd64
|
|
52
|
+
- vagrant/debian7-amd64
|
|
53
|
+
- virtualbox/archlinux-desktop-i686
|
|
54
|
+
- virtualbox/archlinux-desktop-x86_64
|
|
55
|
+
- virtualbox/archlinux-i686
|
|
56
|
+
- virtualbox/archlinux-x86_64
|
|
57
|
+
- virtualbox/centos6.5-i386
|
|
58
|
+
- virtualbox/centos6.5-x86_64
|
|
59
|
+
- virtualbox/centos7-x86_64
|
|
60
|
+
- virtualbox/debian7-amd64
|
|
61
|
+
- virtualbox/debian7-desktop-amd64
|
|
62
|
+
- virtualbox/debian7-i386
|
|
63
|
+
- virtualbox/debian7-kameleon-amd64
|
|
64
|
+
- virtualbox/debian7-oar-amd64
|
|
65
|
+
- virtualbox/debian8-amd64
|
|
66
|
+
- virtualbox/debian8-i386
|
|
67
|
+
- virtualbox/fedora20-x86_64
|
|
68
|
+
- virtualbox/ubuntu-12.04-amd64
|
|
69
|
+
- virtualbox/ubuntu-12.04-desktop-amd64
|
|
70
|
+
- virtualbox/ubuntu-14.04-amd64
|
|
71
|
+
- virtualbox/ubuntu-14.04-desktop-amd64
|
|
72
|
+
|
|
73
|
+
|
|
4
74
|
version 2.1.3
|
|
5
75
|
-------------
|
|
6
76
|
|
|
77
|
+
Released on June 16th 2014
|
|
78
|
+
|
|
7
79
|
- [core] Loading dependent gems based on the users ruby version
|
|
8
80
|
- [core] Getting back compatibility with ruby 1.8.7
|
|
9
81
|
- [core] Don't fail if context is not ready
|
|
@@ -14,7 +86,7 @@ version 2.1.3
|
|
|
14
86
|
version 2.1.0
|
|
15
87
|
-------------
|
|
16
88
|
|
|
17
|
-
Released on
|
|
89
|
+
Released on June 12th 2014
|
|
18
90
|
|
|
19
91
|
- [core] Fixed psych yaml parsing (#1)
|
|
20
92
|
- [core] Changed option ``--no-no-color`` to ``--color``
|
|
@@ -95,3 +167,4 @@ version 2.0.0
|
|
|
95
167
|
Released on February 17th 2014
|
|
96
168
|
|
|
97
169
|
Initial public release of kameleon 2
|
|
170
|
+
|
data/Gemfile
CHANGED
|
@@ -1,4 +1,22 @@
|
|
|
1
|
-
source
|
|
1
|
+
source "https://rubygems.org"
|
|
2
|
+
|
|
3
|
+
gem "syck", :platforms => [:ruby_20, :ruby_21]
|
|
4
|
+
|
|
5
|
+
group :development do
|
|
6
|
+
gem "pry"
|
|
7
|
+
gem "rake"
|
|
8
|
+
platforms :ruby_19, :ruby_20 do
|
|
9
|
+
gem "pry-debugger"
|
|
10
|
+
gem "pry-stack_explorer"
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
group :test do
|
|
15
|
+
gem "coveralls", ">= 0.5.7", :require => false
|
|
16
|
+
gem "rspec", ">= 3"
|
|
17
|
+
gem "rspec-mocks", ">= 3"
|
|
18
|
+
gem "rubocop", ">= 0.19", :platforms => [:ruby_19, :ruby_20, :ruby_21]
|
|
19
|
+
gem "simplecov", :require => false
|
|
20
|
+
end
|
|
2
21
|
|
|
3
|
-
# Specify your gem's dependencies in kameleon.gemspec
|
|
4
22
|
gemspec
|
data/README.rst
CHANGED
|
@@ -11,23 +11,36 @@ you can probably do a lot more than that.
|
|
|
11
11
|
Installation
|
|
12
12
|
------------
|
|
13
13
|
|
|
14
|
+
Gem package
|
|
15
|
+
-----------
|
|
16
|
+
|
|
14
17
|
To install the latest release from `RubyGems`_:
|
|
15
18
|
|
|
16
19
|
.. _RubyGems: https://rubygems.org/gems/kameleon-builder
|
|
17
20
|
|
|
18
21
|
::
|
|
19
22
|
|
|
20
|
-
gem install kameleon-builder
|
|
21
|
-
|
|
22
|
-
Or from source:
|
|
23
|
+
gem install kameleon-builder
|
|
23
24
|
|
|
24
|
-
::
|
|
25
|
+
Or from source::
|
|
25
26
|
|
|
26
|
-
git clone https://github.com/oar-team/kameleon.git
|
|
27
|
-
cd kameleon
|
|
27
|
+
git clone https://github.com/oar-team/kameleon.git && cd kameleon
|
|
28
28
|
gem build kameleon-builder.gemspec
|
|
29
|
-
gem install kameleon-builder
|
|
29
|
+
gem install kameleon-builder-*.gem
|
|
30
|
+
|
|
31
|
+
On debian based distribution be sure to install the ``ruby-dev`` package first
|
|
32
|
+
|
|
30
33
|
|
|
34
|
+
Dist packages
|
|
35
|
+
-------------
|
|
36
|
+
|
|
37
|
+
These packages contain Kameleon and all its dependencies (Ruby, polipo and all
|
|
38
|
+
gems with their native extensions already compiled). These packages are made
|
|
39
|
+
with `omnibus project`_.
|
|
40
|
+
|
|
41
|
+
.. _`omnibus project`: https://github.com/opscode/omnibus-ruby
|
|
42
|
+
|
|
43
|
+
Please download the package in the following `page <http://kameleon.imag.fr/installation.html#dist-packages>`_
|
|
31
44
|
|
|
32
45
|
-----
|
|
33
46
|
Usage
|
|
@@ -44,19 +57,19 @@ Just type
|
|
|
44
57
|
::
|
|
45
58
|
|
|
46
59
|
Commands:
|
|
47
|
-
kameleon build [
|
|
48
|
-
kameleon checkpoints [
|
|
49
|
-
kameleon
|
|
50
|
-
kameleon help [COMMAND]
|
|
51
|
-
kameleon
|
|
52
|
-
kameleon
|
|
53
|
-
kameleon
|
|
60
|
+
kameleon build [RECIPE_PATH] # Builds the appliance from the given recipe
|
|
61
|
+
kameleon checkpoints [RECIPE_PATH] # Lists all availables checkpoints
|
|
62
|
+
kameleon clean [RECIPE_PATH] # Cleaning 'out' and 'local' contexts and removing all checkpoints
|
|
63
|
+
kameleon help [COMMAND] # Describe available commands or one specific command
|
|
64
|
+
kameleon import [TEMPLATE_NAME] # Imports the given template
|
|
65
|
+
kameleon new [RECIPE_NAME] [TEMPLATE_NAME] # Creates a new recipe
|
|
66
|
+
kameleon templates # Lists all defined templates
|
|
67
|
+
kameleon version # Prints the Kameleon's version information
|
|
54
68
|
|
|
55
69
|
Options:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
# recipes folder). Default : ./
|
|
70
|
+
[--color], [--no-color] # Enable colorization in output
|
|
71
|
+
# Default: true
|
|
72
|
+
[--debug], [--no-debug] # Enable debug output
|
|
60
73
|
|
|
61
74
|
First, you should select a template. To see the available templates use:
|
|
62
75
|
|
|
@@ -64,13 +77,11 @@ First, you should select a template. To see the available templates use:
|
|
|
64
77
|
|
|
65
78
|
kameleon templates
|
|
66
79
|
|
|
67
|
-
Then, create a new recipe from the template you've just choose.
|
|
68
|
-
create a `recipes` folder in the current directory. (use `-w` option to set a
|
|
69
|
-
different workspace).
|
|
80
|
+
Then, create a new recipe from the template you've just choose.
|
|
70
81
|
|
|
71
82
|
::
|
|
72
83
|
|
|
73
|
-
kameleon new my_test_recipe
|
|
84
|
+
kameleon new my_test_recipe template_name
|
|
74
85
|
|
|
75
86
|
Then build your new recipe with the build command:
|
|
76
87
|
|
|
@@ -78,18 +89,17 @@ Then build your new recipe with the build command:
|
|
|
78
89
|
|
|
79
90
|
kameleon build my_test_recipe
|
|
80
91
|
|
|
81
|
-
A
|
|
92
|
+
A ``builds`` directory will be created and will contain your new image!
|
|
82
93
|
|
|
83
94
|
To go further, it is highly recommended you start with the `Getting Started`_ guide.
|
|
84
95
|
|
|
85
96
|
|
|
86
|
-
.. _Getting Started: http://kameleon.
|
|
97
|
+
.. _Getting Started: http://kameleon.imag.fr/getting_started.html
|
|
87
98
|
|
|
88
99
|
------------
|
|
89
100
|
Contributing
|
|
90
101
|
------------
|
|
91
102
|
|
|
92
|
-
|
|
93
103
|
1. Fork it
|
|
94
104
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
95
105
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
data/Thorfile
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
|
2
|
+
|
|
3
|
+
require "bundler"
|
|
4
|
+
require "thor/rake_compat"
|
|
5
|
+
|
|
6
|
+
class Default < Thor
|
|
7
|
+
include Thor::RakeCompat
|
|
8
|
+
Bundler::GemHelper.install_tasks
|
|
9
|
+
|
|
10
|
+
desc "build", "Build kameleon-#{Kameleon::VERSION}.gem into the pkg directory"
|
|
11
|
+
def build
|
|
12
|
+
Rake::Task["build"].execute
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
desc "install", "Build and install kameleon-#{Kameleon::VERSION}.gem into system gems"
|
|
16
|
+
def install
|
|
17
|
+
Rake::Task["install"].execute
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
desc "release", "Create tag #{Kameleon::VERSION} and build and push kameleon-#{Kameleon::VERSION}.gem to Rubygems"
|
|
21
|
+
def release
|
|
22
|
+
Rake::Task["release"].execute
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
desc "spec", "Run RSpec code examples"
|
|
26
|
+
def spec
|
|
27
|
+
exec "rspec spec"
|
|
28
|
+
end
|
|
29
|
+
end
|
data/contrib/kameleon_bashrc.sh
CHANGED
|
@@ -136,3 +136,64 @@ else
|
|
|
136
136
|
alias ls='ls -G'
|
|
137
137
|
fi
|
|
138
138
|
fi
|
|
139
|
+
|
|
140
|
+
function __download {
|
|
141
|
+
echo "Downloading: $1..."
|
|
142
|
+
if which curl >/dev/null; then
|
|
143
|
+
curl -# -L --retry 999 --retry-max-time 0 "$1" -o "$2" 2>&1
|
|
144
|
+
else
|
|
145
|
+
fail "curl is missing, trying with wget..."
|
|
146
|
+
if which wget >/dev/null; then
|
|
147
|
+
wget --progress=bar:force "$1" -O "$2" 2>&1
|
|
148
|
+
else
|
|
149
|
+
fail "wget is missing, trying with python..."
|
|
150
|
+
if which python >/dev/null; then
|
|
151
|
+
python -c "
|
|
152
|
+
import sys
|
|
153
|
+
import time
|
|
154
|
+
if sys.version_info >= (3,):
|
|
155
|
+
import urllib.request as urllib
|
|
156
|
+
else:
|
|
157
|
+
import urllib
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def reporthook(count, block_size, total_size):
|
|
161
|
+
global start_time
|
|
162
|
+
if count == 0:
|
|
163
|
+
start_time = time.time()
|
|
164
|
+
return
|
|
165
|
+
duration = time.time() - start_time
|
|
166
|
+
progress_size = float(count * block_size)
|
|
167
|
+
if duration != 0:
|
|
168
|
+
if total_size == -1:
|
|
169
|
+
total_size = block_size
|
|
170
|
+
percent = 'Unknown size, '
|
|
171
|
+
else:
|
|
172
|
+
percent = '%.0f%%, ' % float(count * block_size * 100 / total_size)
|
|
173
|
+
speed = int(progress_size / (1024 * duration))
|
|
174
|
+
sys.stdout.write('\r%s%.2f MB, %d KB/s, %d seconds passed'
|
|
175
|
+
% (percent, progress_size / (1024 * 1024), speed, duration))
|
|
176
|
+
sys.stdout.flush()
|
|
177
|
+
|
|
178
|
+
urllib.urlretrieve('$1', '$2', reporthook=reporthook)
|
|
179
|
+
print('\n')
|
|
180
|
+
"
|
|
181
|
+
true
|
|
182
|
+
else
|
|
183
|
+
fail "Cannot download $1"
|
|
184
|
+
fi
|
|
185
|
+
fi
|
|
186
|
+
fi
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function __find_linux_boot_device() {
|
|
190
|
+
local PDEVICE=`stat -c %04D /boot`
|
|
191
|
+
for file in $(find /dev -type b 2>/dev/null) ; do
|
|
192
|
+
local CURRENT_DEVICE=$(stat -c "%02t%02T" $file)
|
|
193
|
+
if [ $CURRENT_DEVICE = $PDEVICE ]; then
|
|
194
|
+
ROOTDEVICE="$file"
|
|
195
|
+
break;
|
|
196
|
+
fi
|
|
197
|
+
done
|
|
198
|
+
echo "$ROOTDEVICE"
|
|
199
|
+
}
|
data/contrib/polipo_env.sh
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export http_proxy=http
|
|
2
|
-
export ftp_proxy=http
|
|
1
|
+
export http_proxy=http://<%= @proxy_cache %>:<%= @cache.polipo_port %>
|
|
2
|
+
export ftp_proxy=http://<%= @proxy_cache %>:<%= @cache.polipo_port %>
|
|
3
|
+
export https_proxy=https://<%= @proxy_cache %>:<%= @cache.polipo_port %>
|
data/kameleon-builder.gemspec
CHANGED
|
@@ -20,25 +20,18 @@ Gem::Specification.new do |s|
|
|
|
20
20
|
s.license = "GPL-2"
|
|
21
21
|
|
|
22
22
|
s.files = `git ls-files`.split($/)
|
|
23
|
+
s.files.reject! { |file| file.start_with?("docs/") }
|
|
24
|
+
s.files.reject! { |file| file.start_with?("omnibus/") }
|
|
23
25
|
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
24
26
|
s.test_files = s.files.grep(%r{^(tests|s|features)/})
|
|
25
27
|
s.require_paths = ["lib"]
|
|
26
28
|
|
|
27
|
-
s.add_dependency 'childprocess', '~> 0.
|
|
29
|
+
s.add_dependency 'childprocess', '~> 0.3'
|
|
28
30
|
s.add_dependency 'thor', '~> 0.15'
|
|
29
31
|
s.add_dependency 'table_print', '~> 1.5'
|
|
30
|
-
s.add_dependency 'log4r-color', '~> 1.2'
|
|
31
|
-
s.add_dependency 'diffy', '~> 3.0'
|
|
32
32
|
# Syck is also a dependency for Ruby 2 environments.
|
|
33
33
|
# It is installed at install-time if necessary,
|
|
34
34
|
# via ext/mkrf_conf.rb
|
|
35
|
-
|
|
36
|
-
s.add_development_dependency 'pry', '~> 0.9'
|
|
37
|
-
s.add_development_dependency 'pry-debugger', '~> 0.2'
|
|
38
|
-
s.add_development_dependency 'rake', '~> 10.1'
|
|
39
|
-
s.add_development_dependency 'minitest', '~> 4.7'
|
|
40
|
-
s.add_development_dependency 'coveralls', '~> 0.7'
|
|
41
|
-
|
|
42
35
|
# To allow installing the Syck gem when Ruby version is >2.0.0
|
|
43
36
|
s.extensions = ["ext/mkrf_conf.rb"]
|
|
44
37
|
end
|
data/lib/kameleon.rb
CHANGED
|
@@ -6,25 +6,18 @@ require 'tempfile'
|
|
|
6
6
|
require 'pp'
|
|
7
7
|
require 'thor'
|
|
8
8
|
require 'childprocess'
|
|
9
|
-
require 'log4r-color'
|
|
10
|
-
require 'log4r-color/configurator'
|
|
11
9
|
require 'pathname'
|
|
12
10
|
require 'table_print'
|
|
13
|
-
require 'diffy'
|
|
14
11
|
|
|
15
12
|
module Kameleon
|
|
16
|
-
# add a PROGRESS and NOTICE level
|
|
17
|
-
Log4r::Configurator.custom_levels(:DEBUG, :INFO, :NOTICE,
|
|
18
|
-
:PROGRESS, :WARN, :ERROR,
|
|
19
|
-
:FATAL)
|
|
20
|
-
|
|
21
13
|
class << self
|
|
22
|
-
attr_writer :logger
|
|
23
14
|
attr_writer :env
|
|
15
|
+
attr_writer :ui
|
|
24
16
|
attr_writer :source_root
|
|
25
17
|
attr_writer :templates_path
|
|
26
18
|
attr_writer :templates_names
|
|
27
19
|
attr_writer :templates_files
|
|
20
|
+
attr_writer :log_on_progress
|
|
28
21
|
|
|
29
22
|
# The source root is the path to the root directory of the kameleon gem.
|
|
30
23
|
def source_root
|
|
@@ -55,14 +48,17 @@ module Kameleon
|
|
|
55
48
|
@templates_names
|
|
56
49
|
end
|
|
57
50
|
|
|
58
|
-
def logger
|
|
59
|
-
@logger ||= Log4r::Logger.new("kameleon::[kameleon]")
|
|
60
|
-
end
|
|
61
|
-
|
|
62
51
|
def env
|
|
63
52
|
@env ||= Environment.new
|
|
64
53
|
end
|
|
65
54
|
|
|
55
|
+
def ui
|
|
56
|
+
@ui ||= UI::Shell.new
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def log_on_progress
|
|
60
|
+
@log_on_progress ||= false
|
|
61
|
+
end
|
|
66
62
|
end
|
|
67
63
|
end
|
|
68
64
|
|
|
@@ -73,4 +69,4 @@ require 'kameleon/error'
|
|
|
73
69
|
require 'kameleon/cli'
|
|
74
70
|
require 'kameleon/environment'
|
|
75
71
|
require 'kameleon/version'
|
|
76
|
-
require 'kameleon/
|
|
72
|
+
require 'kameleon/ui'
|
data/lib/kameleon/cli.rb
CHANGED
|
@@ -4,43 +4,37 @@ require 'kameleon/utils'
|
|
|
4
4
|
|
|
5
5
|
module Kameleon
|
|
6
6
|
class CLI < Thor
|
|
7
|
-
|
|
7
|
+
include Thor::Actions
|
|
8
8
|
|
|
9
9
|
class_option :color, :type => :boolean, :default => true,
|
|
10
10
|
:desc => "Enable colorization in output"
|
|
11
11
|
class_option :debug, :type => :boolean, :default => false,
|
|
12
12
|
:desc => "Enable debug output"
|
|
13
|
+
class_option :script, :type => :boolean, :default => false,
|
|
14
|
+
:desc => "never prompts for user intervention",
|
|
15
|
+
:aliases => "-s"
|
|
13
16
|
map %w(-h --help) => :help
|
|
14
17
|
|
|
15
|
-
no_commands do
|
|
16
|
-
def logger
|
|
17
|
-
@logger ||= Log4r::Logger.new("kameleon::[kameleon]")
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
method_option :force,:type => :boolean,
|
|
22
|
-
:default => false, :aliases => "-f",
|
|
23
|
-
:desc => "Overwrite all existing files"
|
|
24
18
|
desc "import [TEMPLATE_NAME]", "Imports the given template"
|
|
25
19
|
def import(template_name)
|
|
26
20
|
templates_path = Kameleon.env.templates_path
|
|
27
21
|
template_path = File.join(templates_path, template_name) + '.yaml'
|
|
28
22
|
begin
|
|
29
|
-
|
|
23
|
+
tpl = RecipeTemplate.new(template_path)
|
|
30
24
|
rescue
|
|
31
25
|
raise TemplateNotFound, "Template '#{template_name}' not found. " \
|
|
32
26
|
"To see all templates, run the command "\
|
|
33
27
|
"`kameleon templates`"
|
|
34
28
|
else
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
29
|
+
files2copy = tpl.base_recipes_files + tpl.files
|
|
30
|
+
files2copy.each do |path|
|
|
31
|
+
relative_path = path.relative_path_from(Kameleon.env.templates_path)
|
|
32
|
+
dst = File.join(Kameleon.env.workspace, relative_path)
|
|
33
|
+
copy_file(path, dst)
|
|
34
|
+
end
|
|
38
35
|
end
|
|
39
36
|
end
|
|
40
37
|
|
|
41
|
-
method_option :force,:type => :boolean,
|
|
42
|
-
:default => false, :aliases => "-f",
|
|
43
|
-
:desc => "Overwrite all existing files"
|
|
44
38
|
desc "new [RECIPE_NAME] [TEMPLATE_NAME]", "Creates a new recipe"
|
|
45
39
|
def new(recipe_name, template_name)
|
|
46
40
|
if recipe_name == template_name
|
|
@@ -49,31 +43,47 @@ module Kameleon
|
|
|
49
43
|
templates_path = Kameleon.env.templates_path
|
|
50
44
|
template_path = File.join(templates_path, template_name) + '.yaml'
|
|
51
45
|
begin
|
|
52
|
-
|
|
46
|
+
tpl = RecipeTemplate.new(template_path)
|
|
53
47
|
rescue
|
|
54
48
|
raise TemplateNotFound, "Template '#{template_name}' not found. " \
|
|
55
49
|
"To see all templates, run the command "\
|
|
56
50
|
"`kameleon templates`"
|
|
57
51
|
else
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
52
|
+
files2copy = tpl.base_recipes_files + tpl.files
|
|
53
|
+
files2copy.each do |path|
|
|
54
|
+
relative_path = path.relative_path_from(Kameleon.env.templates_path)
|
|
55
|
+
dst = File.join(Kameleon.env.workspace, relative_path)
|
|
56
|
+
copy_file(path, dst)
|
|
57
|
+
end
|
|
58
|
+
Dir::mktmpdir do |tmp_dir|
|
|
59
|
+
recipe_path = File.join(tmp_dir, recipe_name + '.yaml')
|
|
60
|
+
## copying recipe
|
|
61
|
+
File.open(recipe_path, 'w+') do |file|
|
|
62
|
+
extend_erb_tpl = File.join(Kameleon.env.templates_path, "extend.erb")
|
|
63
|
+
erb = ERB.new(File.open(extend_erb_tpl, 'rb') { |f| f.read })
|
|
64
|
+
result = erb.result(binding)
|
|
65
|
+
file.write(result)
|
|
66
|
+
end
|
|
67
|
+
recipe_dst = File.join(Kameleon.env.workspace, recipe_name + '.yaml')
|
|
68
|
+
copy_file(recipe_path, Pathname.new(recipe_dst))
|
|
69
|
+
end
|
|
63
70
|
end
|
|
64
71
|
end
|
|
65
72
|
|
|
66
73
|
desc "templates", "Lists all defined templates"
|
|
67
74
|
def templates
|
|
68
|
-
Log4r::Outputter['console'].level = Log4r::ERROR unless Kameleon.env.debug
|
|
69
75
|
puts "The following templates are available in " \
|
|
70
76
|
"#{ Kameleon.templates_path }:"
|
|
71
77
|
templates_hash = []
|
|
72
|
-
Kameleon.
|
|
78
|
+
templates_path = File.join(Kameleon.env.templates_path, "/")
|
|
79
|
+
all_yaml_files = Dir["#{templates_path}**/*.yaml"]
|
|
80
|
+
steps_files = Dir["#{templates_path}steps/**/*.yaml"]
|
|
81
|
+
templates_files = all_yaml_files - steps_files
|
|
82
|
+
templates_files.each do |f|
|
|
73
83
|
begin
|
|
74
|
-
recipe = RecipeTemplate.new(f
|
|
84
|
+
recipe = RecipeTemplate.new(f)
|
|
75
85
|
templates_hash.push({
|
|
76
|
-
"name" =>
|
|
86
|
+
"name" => f.gsub(templates_path, "").chomp(".yaml"),
|
|
77
87
|
"description" => recipe.metainfo['description'],
|
|
78
88
|
})
|
|
79
89
|
rescue => e
|
|
@@ -81,12 +91,15 @@ module Kameleon
|
|
|
81
91
|
end
|
|
82
92
|
end
|
|
83
93
|
templates_hash = templates_hash.sort_by{ |k| k["name"] }
|
|
84
|
-
|
|
94
|
+
name_width = templates_hash.map { |k| k['name'].size }.max
|
|
95
|
+
desc_width = Kameleon.ui.shell.terminal_width - name_width - 3
|
|
96
|
+
tp(templates_hash,
|
|
97
|
+
{"name" => {:width => name_width}},
|
|
98
|
+
{ "description" => {:width => desc_width}})
|
|
85
99
|
end
|
|
86
100
|
|
|
87
101
|
desc "version", "Prints the Kameleon's version information"
|
|
88
102
|
def version
|
|
89
|
-
Log4r::Outputter['console'].level = Log4r::OFF unless Kameleon.env.debug
|
|
90
103
|
puts "Kameleon version #{Kameleon::VERSION}"
|
|
91
104
|
end
|
|
92
105
|
map %w(-v --version) => :version
|
|
@@ -103,11 +116,14 @@ module Kameleon
|
|
|
103
116
|
:desc => "Using specific checkpoint to build the image. " \
|
|
104
117
|
"Default value is the last checkpoint."
|
|
105
118
|
method_option :checkpoint, :type => :boolean ,
|
|
106
|
-
:default =>
|
|
107
|
-
:desc => "
|
|
119
|
+
:default => false,
|
|
120
|
+
:desc => "Enable checkpoint"
|
|
108
121
|
method_option :cache, :type => :boolean,
|
|
109
122
|
:default => false,
|
|
110
123
|
:desc => "Generate a persistent cache for the appliance."
|
|
124
|
+
method_option :cache_path, :type => :string ,
|
|
125
|
+
:default => nil,
|
|
126
|
+
:desc => "Set the cache directory path"
|
|
111
127
|
method_option :from_cache, :type => :string ,
|
|
112
128
|
:default => nil,
|
|
113
129
|
:desc => "Using a persistent cache tar file to build the image."
|
|
@@ -115,19 +131,24 @@ module Kameleon
|
|
|
115
131
|
:default => nil,
|
|
116
132
|
:desc => "Full path of the proxy binary to use for the persistent cache."
|
|
117
133
|
|
|
118
|
-
def build(recipe_path)
|
|
134
|
+
def build(recipe_path=nil)
|
|
135
|
+
if recipe_path.nil? && !options[:from_cache].nil?
|
|
136
|
+
Kameleon.ui.info("Using the cached recipe")
|
|
137
|
+
@cache = Kameleon::Persistent_cache.instance
|
|
138
|
+
@cache.cache_path = options[:from_cache]
|
|
139
|
+
recipe_path = @cache.get_recipe
|
|
140
|
+
end
|
|
141
|
+
raise BuildError, "A recipe file or a persistent cache archive " \
|
|
142
|
+
"is required to run this command." if recipe_path.nil?
|
|
119
143
|
clean(recipe_path) if options[:clean]
|
|
120
144
|
engine = Kameleon::Engine.new(Recipe.new(recipe_path), options)
|
|
121
|
-
|
|
145
|
+
Kameleon.ui.info("Starting build recipe '#{recipe_path}'")
|
|
122
146
|
start_time = Time.now.to_i
|
|
123
147
|
engine.build
|
|
124
148
|
total_time = Time.now.to_i - start_time
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
logger.notice("Build directory : #{engine.cwd}")
|
|
129
|
-
logger.notice("Build recipe file : #{engine.build_recipe_path}")
|
|
130
|
-
logger.notice("Log file : #{Kameleon.env.log_file}")
|
|
149
|
+
Kameleon.ui.info("")
|
|
150
|
+
Kameleon.ui.info("Successfully built '#{recipe_path}'")
|
|
151
|
+
Kameleon.ui.info("Total duration : #{total_time} secs")
|
|
131
152
|
end
|
|
132
153
|
|
|
133
154
|
desc "checkpoints [RECIPE_PATH]", "Lists all availables checkpoints"
|
|
@@ -135,25 +156,27 @@ module Kameleon
|
|
|
135
156
|
:default => nil, :aliases => "-b",
|
|
136
157
|
:desc => "Set the build directory path"
|
|
137
158
|
def checkpoints(recipe_path)
|
|
138
|
-
|
|
159
|
+
Kameleon.ui.level = "error"
|
|
139
160
|
engine = Kameleon::Engine.new(Recipe.new(recipe_path), options)
|
|
140
161
|
engine.pretty_checkpoints_list
|
|
141
162
|
end
|
|
142
163
|
|
|
143
|
-
desc "clean [RECIPE_PATH]", "Cleaning
|
|
164
|
+
desc "clean [RECIPE_PATH]", "Cleaning all contexts and removing the checkpoints"
|
|
144
165
|
method_option :build_path, :type => :string ,
|
|
145
166
|
:default => nil, :aliases => "-b",
|
|
146
167
|
:desc => "Set the build directory path"
|
|
147
168
|
def clean(recipe_path)
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
169
|
+
opts = Hash.new.merge options
|
|
170
|
+
opts[:lazyload] = false
|
|
171
|
+
opts[:fail_silently] = true
|
|
172
|
+
engine = Kameleon::Engine.new(Recipe.new(recipe_path), opts)
|
|
173
|
+
engine.clean(:with_checkpoint => true)
|
|
151
174
|
end
|
|
152
175
|
map %w(clear) => :clean
|
|
153
176
|
|
|
154
177
|
desc "commands", "Lists all available commands", :hide => true
|
|
155
178
|
def commands
|
|
156
|
-
|
|
179
|
+
Kameleon.ui.info CLI.all_commands.keys - ["commands", "completions"]
|
|
157
180
|
end
|
|
158
181
|
|
|
159
182
|
desc "source_root", "Prints the kameleon directory path", :hide => true
|
|
@@ -161,70 +184,34 @@ module Kameleon
|
|
|
161
184
|
puts Kameleon.source_root
|
|
162
185
|
end
|
|
163
186
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
ENV["KAMELEON_LOG"] = "debug" if env_options["debug"]
|
|
171
|
-
if ENV["KAMELEON_LOG"] && ENV["KAMELEON_LOG"] != ""
|
|
172
|
-
level_name = ENV["KAMELEON_LOG"]
|
|
173
|
-
else
|
|
174
|
-
level_name = "info"
|
|
175
|
-
end
|
|
176
|
-
# Require Log4r and define the levels we'll be using
|
|
177
|
-
require 'log4r-color/config'
|
|
178
|
-
Log4r.define_levels(*Log4r::Log4rConfig::LogLevels)
|
|
179
|
-
|
|
180
|
-
begin
|
|
181
|
-
level = Log4r.const_get(level_name.upcase)
|
|
182
|
-
rescue NameError
|
|
183
|
-
level = Log4r.const_get("INFO")
|
|
184
|
-
$stderr << "Invalid KAMELEON_LOG level is set: #{level_name}.\n" \
|
|
185
|
-
"Please use one of the standard log levels: debug," \
|
|
186
|
-
" info, warn, or error\n"
|
|
187
|
-
raise KameleonError
|
|
187
|
+
def initialize(*args)
|
|
188
|
+
super
|
|
189
|
+
self.options ||= {}
|
|
190
|
+
Kameleon.env = Kameleon::Environment.new(self.options)
|
|
191
|
+
if !$stdout.tty? or !options["color"]
|
|
192
|
+
Thor::Base.shell = Thor::Shell::Basic
|
|
188
193
|
end
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
console_output = Log4r::ColorOutputter.new 'console', {
|
|
197
|
-
:colors => { :debug => :light_black,
|
|
198
|
-
:info => :green,
|
|
199
|
-
:progress_info => :green,
|
|
200
|
-
:notice => :light_blue,
|
|
201
|
-
:progress_notice => :light_blue,
|
|
202
|
-
:warn => :yellow,
|
|
203
|
-
:error => :red,
|
|
204
|
-
:progress_error => :red,
|
|
205
|
-
:fatal => :red,
|
|
206
|
-
},
|
|
207
|
-
:formatter => format,
|
|
208
|
-
}
|
|
209
|
-
Diffy::Diff.default_format = :color
|
|
194
|
+
Kameleon.ui = Kameleon::UI::Shell.new(self.options)
|
|
195
|
+
Kameleon.ui.level = "debug" if self.options["debug"]
|
|
196
|
+
opts = args[1]
|
|
197
|
+
cmd_name = args[2][:current_command].name
|
|
198
|
+
if opts.include? "--help"
|
|
199
|
+
CLI.command_help(Kameleon.ui.shell, cmd_name)
|
|
200
|
+
raise Kameleon::Exit
|
|
210
201
|
end
|
|
211
|
-
logger = Log4r::Logger.new('kameleon')
|
|
212
|
-
logger.level = level
|
|
213
|
-
logger.outputters << console_output
|
|
214
|
-
format_file = FileFormatter.new
|
|
215
|
-
Kameleon.logger.debug("`kameleon` invoked: #{ARGV.inspect}")
|
|
216
|
-
Kameleon.env = Kameleon::Environment.new(env_options)
|
|
217
|
-
filelog = Log4r::FileOutputter.new('logfile',
|
|
218
|
-
:trunc=>false,
|
|
219
|
-
:filename => Kameleon.env.log_file.to_s,
|
|
220
|
-
:formatter => format_file)
|
|
221
|
-
logger.outputters << filelog
|
|
222
|
-
logger = nil
|
|
223
202
|
end
|
|
224
203
|
|
|
225
|
-
def self.start(
|
|
226
|
-
|
|
227
|
-
|
|
204
|
+
def self.start(*)
|
|
205
|
+
super
|
|
206
|
+
rescue Exception => e
|
|
207
|
+
Kameleon.ui = Kameleon::UI::Shell.new
|
|
208
|
+
raise e
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def self.source_root
|
|
212
|
+
Kameleon.source_root
|
|
228
213
|
end
|
|
214
|
+
|
|
229
215
|
end
|
|
216
|
+
|
|
230
217
|
end
|