rbbt-image 0.1.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 +7 -0
- data/README.md +21 -0
- data/bin/build_rbbt_provision_sh.rb +163 -0
- data/bin/run_rbbt_docker.rb +68 -0
- metadata +63 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: bd48d97fc8707d8d5134f72b06e1952afe55a90d
|
|
4
|
+
data.tar.gz: b0522b2cae2fc954546c2252f90187caf5235a56
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 37369385d4fc586d0f8385793304ceff96dafefe2cf79ad3553e203d97cf700f999591617fcbee317cce90482944258b1b1b868d6a088848a27e57a3c538f495
|
|
7
|
+
data.tar.gz: 7782bfcea40ad56f099d327afd1324bed69cb121b4004638e3aa009933ca11bb79680c9ae87b1d8ce1dcc5d714f7b28f22774768b5f5e41cefebceacf0b9bbac
|
data/README.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Vagrant file for Rbbt
|
|
2
|
+
|
|
3
|
+
## Instructions
|
|
4
|
+
|
|
5
|
+
* Install [Vagrant](http://www.vagrantup.com)
|
|
6
|
+
* Clone repo
|
|
7
|
+
* `vagrant up`
|
|
8
|
+
|
|
9
|
+
To retrieve special provisions for apps etc. check the branches. You may use
|
|
10
|
+
the `bin/build_provision_sh` to build a provision script that you can use in
|
|
11
|
+
Docker (see example)
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
bin/build_provision_sh -w Translation,Sequence > mydocker_image/provision.sh
|
|
15
|
+
cp Dockerfile mydocker_image/
|
|
16
|
+
docker build -t <repo:tag> mydocker_image/
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The `bin/build_provision_sh` script is documented, try the `-h` flag for
|
|
20
|
+
options, these include options for specifying which workflows to bootstrap, or
|
|
21
|
+
configuring remote servers for resources and for workflows.
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# -*- mode: ruby -*-
|
|
3
|
+
# vi: set ft=ruby :
|
|
4
|
+
|
|
5
|
+
require 'rbbt-util'
|
|
6
|
+
require 'rbbt/util/simpleopt'
|
|
7
|
+
require 'rbbt/util/cmd'
|
|
8
|
+
|
|
9
|
+
$0 = "rbbt #{$previous_commands*""} #{ File.basename(__FILE__) }" if $previous_commands
|
|
10
|
+
|
|
11
|
+
options = SOPT.setup <<EOF
|
|
12
|
+
|
|
13
|
+
Build a provision script
|
|
14
|
+
|
|
15
|
+
$ #{$0} [options]
|
|
16
|
+
|
|
17
|
+
-h--help Print this help
|
|
18
|
+
-u--user* System user to bootstrap
|
|
19
|
+
-w--workflow* Workflows to bootstrap (has defaults specify 'none' to avoid them)
|
|
20
|
+
-s--server* Main Rbbt remote server (file-server and workflow server)
|
|
21
|
+
-fs--file_server* Rbbt remote file server
|
|
22
|
+
-ws--workflow_server* Rbbt remote workflow server
|
|
23
|
+
-rr--remote_resources* Remote resources to gather from file-server
|
|
24
|
+
-rw--remote_workflows* Remote workflows server from workflow-server
|
|
25
|
+
-ss--skip_base_system Skip base system installation
|
|
26
|
+
-sr--skip_ruby Skip ruby setup installation
|
|
27
|
+
-su--skip_user_setup Skip user setup
|
|
28
|
+
-sb--skip_bootstrap Skip user bootstrap
|
|
29
|
+
-c--concurrent Prepare system for high-concurrency
|
|
30
|
+
-dt--docker* Build docker image using the provided name
|
|
31
|
+
-df--docker_file* Use a Dockerfile different than the default
|
|
32
|
+
-dd--docker_dependency* Use a different image in the Dockerfile FROM
|
|
33
|
+
EOF
|
|
34
|
+
if options[:help]
|
|
35
|
+
if defined? rbbt_usage
|
|
36
|
+
rbbt_usage and exit 0
|
|
37
|
+
else
|
|
38
|
+
puts SOPT.doc
|
|
39
|
+
exit
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
USER = options[:user] || 'rbbt'
|
|
44
|
+
SKIP_BASE_SYSTEM = options[:skip_base_system]
|
|
45
|
+
SKIP_RUBY = options[:skip_ruby]
|
|
46
|
+
SKIP_BOOT = options[:skip_bootstrap]
|
|
47
|
+
SKIP_USER = options[:skip_user_setup]
|
|
48
|
+
|
|
49
|
+
VARIABLES={
|
|
50
|
+
:RBBT_LOG => 0,
|
|
51
|
+
:BOOTSTRAP_WORKFLOWS => (options[:workflow] || "Enrichment Translation Sequence MutationEnrichment").split(/[\s,]+/)*" ",
|
|
52
|
+
:REMOTE_RESOURCES => (options[:remote_resources] || "KEGG").split(/[\s,]+/)*" "
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
VARIABLES[:BOOTSTRAP_WORKFLOWS] = "" if VARIABLES[:BOOTSTRAP_WORKFLOWS] == 'none'
|
|
56
|
+
|
|
57
|
+
VARIABLES[:RBBT_NO_LOCKFILE_ID] = "true" if options[:concurrent]
|
|
58
|
+
VARIABLES[:RBBT_SERVER] = options[:server] if options[:server]
|
|
59
|
+
VARIABLES[:RBBT_FILE_SERVER] = options[:file_server] if options[:file_server]
|
|
60
|
+
VARIABLES[:RBBT_WORKFLOW_SERVER] = options[:workflow_server] if options[:workflow_server]
|
|
61
|
+
VARIABLES[:REMOTE_WORKFLOWS] = options[:remote_workflows].split(/[\s,]+/)*" " if options[:remote_workflows]
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
provision_script =<<EOF
|
|
65
|
+
cat "$0"
|
|
66
|
+
echo "Running provisioning"
|
|
67
|
+
echo
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
# BASE SYSTEM
|
|
71
|
+
echo "1. Provisioning base system"
|
|
72
|
+
#{File.read("share/provision_scripts/ubuntu_setup.sh") unless SKIP_BASE_SYSTEM}
|
|
73
|
+
|
|
74
|
+
# BASE SYSTEM
|
|
75
|
+
echo "2. Setting up ruby"
|
|
76
|
+
#{File.read("share/provision_scripts/ruby_setup.sh") unless SKIP_RUBY}
|
|
77
|
+
|
|
78
|
+
#{"exit" if SKIP_USER}
|
|
79
|
+
|
|
80
|
+
####################
|
|
81
|
+
# USER CONFIGURATION
|
|
82
|
+
|
|
83
|
+
if [[ '#{ USER }' == 'root' ]] ; then
|
|
84
|
+
home_dir='/root'
|
|
85
|
+
else
|
|
86
|
+
useradd -ms /bin/bash #{USER}
|
|
87
|
+
home_dir='/home/#{USER}'
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
user_script=$home_dir/.rbbt/bin/provision
|
|
91
|
+
mkdir -p $(dirname $user_script)
|
|
92
|
+
chown -R #{USER} /home/#{USER}/.rbbt/
|
|
93
|
+
cat > $user_script <<'EUSER'
|
|
94
|
+
|
|
95
|
+
. /etc/profile
|
|
96
|
+
|
|
97
|
+
echo "2.1. Custom variables"
|
|
98
|
+
#{
|
|
99
|
+
VARIABLES.collect do |variable,value|
|
|
100
|
+
"export " << ([variable,'"' << value.to_s << '"'] * "=")
|
|
101
|
+
end * "\n"
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
echo "2.2. Default variables"
|
|
105
|
+
#{ File.read("share/provision_scripts/variables.sh") }
|
|
106
|
+
|
|
107
|
+
echo "2.3. Configuring rbbt"
|
|
108
|
+
#{File.read("share/provision_scripts/user_setup.sh")}
|
|
109
|
+
|
|
110
|
+
#{"exit" if SKIP_BOOT}
|
|
111
|
+
|
|
112
|
+
echo "2.4. Bootstrap system"
|
|
113
|
+
#{File.read("share/provision_scripts/bootstrap.sh")}
|
|
114
|
+
|
|
115
|
+
EUSER
|
|
116
|
+
####################
|
|
117
|
+
echo "2. Running user configuration as '#{USER}'"
|
|
118
|
+
chown #{USER} $user_script;
|
|
119
|
+
su -l -c "bash $user_script" #{USER}
|
|
120
|
+
|
|
121
|
+
# DONE
|
|
122
|
+
echo
|
|
123
|
+
echo "Installation done."
|
|
124
|
+
|
|
125
|
+
#--------------------------------------------------------
|
|
126
|
+
|
|
127
|
+
EOF
|
|
128
|
+
|
|
129
|
+
docker_dependency = options[:docker_dependency]
|
|
130
|
+
|
|
131
|
+
if options[:docker]
|
|
132
|
+
dockerfile = options[:dockerfile] || File.join(File.dirname(File.dirname(__FILE__)), 'Dockerfile')
|
|
133
|
+
dockerfile_text = Open.read(dockerfile)
|
|
134
|
+
dockerfile_text.sub!(/^FROM.*/,'FROM ' + docker_dependency) if docker_dependency
|
|
135
|
+
TmpFile.with_file(nil, false) do |dir|
|
|
136
|
+
FileUtils.mkdir_p dir
|
|
137
|
+
Path.setup(dir)
|
|
138
|
+
Open.write(dir["Dockerfile"].find, dockerfile_text)
|
|
139
|
+
Open.write(dir['provision.sh'], provision_script)
|
|
140
|
+
|
|
141
|
+
puts
|
|
142
|
+
puts "provision.sh"
|
|
143
|
+
puts "=========="
|
|
144
|
+
puts provision_script
|
|
145
|
+
|
|
146
|
+
puts
|
|
147
|
+
puts "Dockerfile"
|
|
148
|
+
puts "=========="
|
|
149
|
+
puts dockerfile_text
|
|
150
|
+
|
|
151
|
+
puts
|
|
152
|
+
puts "RUN"
|
|
153
|
+
puts "=========="
|
|
154
|
+
puts "docker build -t #{options[:docker]} '#{dir}'"
|
|
155
|
+
io = CMD.cmd("docker build -t #{options[:docker]} '#{dir}'", :pipe => true, :log => true)
|
|
156
|
+
while line = io.gets
|
|
157
|
+
puts line
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
else
|
|
161
|
+
puts provision_script
|
|
162
|
+
end
|
|
163
|
+
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rbbt-util'
|
|
4
|
+
require 'rbbt/util/simpleopt'
|
|
5
|
+
|
|
6
|
+
$0 = "rbbt #{$previous_commands*""} #{ File.basename(__FILE__) }" if $previous_commands
|
|
7
|
+
|
|
8
|
+
options = SOPT.setup <<EOF
|
|
9
|
+
|
|
10
|
+
Runs a docker image from an infrastructure definition file
|
|
11
|
+
|
|
12
|
+
$ #{ $0 } [options] <infrastructure.yaml> <command> <args>
|
|
13
|
+
|
|
14
|
+
Infrastruture definition comes in YAML
|
|
15
|
+
|
|
16
|
+
-h--help Print this help
|
|
17
|
+
|
|
18
|
+
EOF
|
|
19
|
+
infrastructure_file, cmd, *cmd_args = ARGV
|
|
20
|
+
|
|
21
|
+
cmd_args.collect!{|a| "'" << a << "'" }
|
|
22
|
+
|
|
23
|
+
if options[:help] or infrastructure_file.nil?
|
|
24
|
+
if defined? rbbt_usage
|
|
25
|
+
rbbt_usage
|
|
26
|
+
else
|
|
27
|
+
puts SOPT.usage
|
|
28
|
+
end
|
|
29
|
+
exit 0
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
infrastructure = File.open(infrastructure_file){|io| YAML.load io }
|
|
34
|
+
IndiferentHash.setup(infrastructure)
|
|
35
|
+
|
|
36
|
+
image = infrastructure[:image]
|
|
37
|
+
|
|
38
|
+
if user = infrastructure[:user]
|
|
39
|
+
user_conf = "-u #{user} -e HOME=/home/#{user}/ "
|
|
40
|
+
else
|
|
41
|
+
user_conf = ""
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
mount_conf = ""
|
|
45
|
+
if infrastructure[:mounts]
|
|
46
|
+
infrastructure[:mounts].each do |target,source|
|
|
47
|
+
target = target.gsub("USER", user)
|
|
48
|
+
if source.nil? or source.empty?
|
|
49
|
+
mount_conf << " -v #{target}"
|
|
50
|
+
else
|
|
51
|
+
mount_conf << " -v #{File.expand_path(source)}:#{target}"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
if infrastructure[:workflow_autoinstall] and infrastructure[:workflow_autoinstall].to_s == 'true'
|
|
57
|
+
cmd = "env RBBT_WORKFLOW_AUTOINSTALL=true " + cmd
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
cmd_str = "docker run #{mount_conf} #{user_conf} #{image} #{cmd} #{cmd_args*" "} "
|
|
61
|
+
Log.info "Running docker: \n" << cmd_str
|
|
62
|
+
Log.severity = 0
|
|
63
|
+
io = CMD.cmd(cmd_str, :pipe => true, :log => true, :stderr => 0)
|
|
64
|
+
|
|
65
|
+
while line = io.gets
|
|
66
|
+
puts line
|
|
67
|
+
end
|
|
68
|
+
|
metadata
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rbbt-image
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Miguel Vazquez
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2015-10-28 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: rbbt-util
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
27
|
+
description: Builds provision files for docker and Vagrant and helps run them
|
|
28
|
+
email: miguel.vazquez@cnio.es
|
|
29
|
+
executables:
|
|
30
|
+
- build_rbbt_provision_sh.rb
|
|
31
|
+
- run_rbbt_docker.rb
|
|
32
|
+
extensions: []
|
|
33
|
+
extra_rdoc_files:
|
|
34
|
+
- README.md
|
|
35
|
+
files:
|
|
36
|
+
- README.md
|
|
37
|
+
- bin/build_rbbt_provision_sh.rb
|
|
38
|
+
- bin/run_rbbt_docker.rb
|
|
39
|
+
homepage: http://github.com/mikisvaz/rbbt-image
|
|
40
|
+
licenses:
|
|
41
|
+
- MIT
|
|
42
|
+
metadata: {}
|
|
43
|
+
post_install_message:
|
|
44
|
+
rdoc_options: []
|
|
45
|
+
require_paths:
|
|
46
|
+
- lib
|
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
48
|
+
requirements:
|
|
49
|
+
- - ">="
|
|
50
|
+
- !ruby/object:Gem::Version
|
|
51
|
+
version: '0'
|
|
52
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
53
|
+
requirements:
|
|
54
|
+
- - ">="
|
|
55
|
+
- !ruby/object:Gem::Version
|
|
56
|
+
version: '0'
|
|
57
|
+
requirements: []
|
|
58
|
+
rubyforge_project:
|
|
59
|
+
rubygems_version: 2.4.6
|
|
60
|
+
signing_key:
|
|
61
|
+
specification_version: 4
|
|
62
|
+
summary: Build docker and Vagrant (VM) images
|
|
63
|
+
test_files: []
|