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 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: []