rbbt-image 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []