thanthus 0.2.3
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/LICENSE +21 -0
- data/README.md +289 -0
- data/bin/xanthus +32 -0
- data/lib/utils/os.rb +16 -0
- data/lib/xanthus.rb +15 -0
- data/lib/xanthus/configuration.rb +94 -0
- data/lib/xanthus/dataverse.rb +179 -0
- data/lib/xanthus/default.rb +21 -0
- data/lib/xanthus/github.rb +90 -0
- data/lib/xanthus/init.rb +156 -0
- data/lib/xanthus/job.rb +135 -0
- data/lib/xanthus/repository.rb +28 -0
- data/lib/xanthus/script.rb +31 -0
- data/lib/xanthus/version.rb +7 -0
- data/lib/xanthus/virtual_machine.rb +119 -0
- metadata +104 -0
@@ -0,0 +1,179 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module Xanthus
|
5
|
+
class Dataverse < Repository
|
6
|
+
attr_accessor :server
|
7
|
+
attr_accessor :repo
|
8
|
+
attr_accessor :token
|
9
|
+
attr_accessor :dataset_name
|
10
|
+
attr_accessor :author
|
11
|
+
attr_accessor :affiliation
|
12
|
+
attr_accessor :email
|
13
|
+
attr_accessor :description
|
14
|
+
attr_accessor :subject
|
15
|
+
attr_accessor :doi
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
super
|
19
|
+
@server = 'default_server'
|
20
|
+
@repo = 'default_repo'
|
21
|
+
@token = 'default_token'
|
22
|
+
@dataset_name = 'default_name'
|
23
|
+
@author = 'default_author'
|
24
|
+
@affiliation = 'default_affiliation'
|
25
|
+
@email = 'default_email'
|
26
|
+
@description = 'default_description'
|
27
|
+
@subject = 'default_subject'
|
28
|
+
@doi = 'not_set'
|
29
|
+
end
|
30
|
+
|
31
|
+
def dataset_json
|
32
|
+
json = %Q{
|
33
|
+
{
|
34
|
+
"datasetVersion": {
|
35
|
+
"metadataBlocks": {
|
36
|
+
"citation": {
|
37
|
+
"fields": [
|
38
|
+
{
|
39
|
+
"value": "#{@dataset_name}",
|
40
|
+
"typeClass": "primitive",
|
41
|
+
"multiple": false,
|
42
|
+
"typeName": "title"
|
43
|
+
},
|
44
|
+
{
|
45
|
+
"value": [
|
46
|
+
{
|
47
|
+
"authorName": {
|
48
|
+
"value": "#{@author}",
|
49
|
+
"typeClass": "primitive",
|
50
|
+
"multiple": false,
|
51
|
+
"typeName": "authorName"
|
52
|
+
},
|
53
|
+
"authorAffiliation": {
|
54
|
+
"value": "#{@affiliation}",
|
55
|
+
"typeClass": "primitive",
|
56
|
+
"multiple": false,
|
57
|
+
"typeName": "authorAffiliation"
|
58
|
+
}
|
59
|
+
}
|
60
|
+
],
|
61
|
+
"typeClass": "compound",
|
62
|
+
"multiple": true,
|
63
|
+
"typeName": "author"
|
64
|
+
},
|
65
|
+
{
|
66
|
+
"value": [
|
67
|
+
{ "datasetContactEmail" : {
|
68
|
+
"typeClass": "primitive",
|
69
|
+
"multiple": false,
|
70
|
+
"typeName": "datasetContactEmail",
|
71
|
+
"value" : "#{@email}"
|
72
|
+
},
|
73
|
+
"datasetContactName" : {
|
74
|
+
"typeClass": "primitive",
|
75
|
+
"multiple": false,
|
76
|
+
"typeName": "datasetContactName",
|
77
|
+
"value": "#{@author}"
|
78
|
+
}
|
79
|
+
}],
|
80
|
+
"typeClass": "compound",
|
81
|
+
"multiple": true,
|
82
|
+
"typeName": "datasetContact"
|
83
|
+
},
|
84
|
+
{
|
85
|
+
"value": [ {
|
86
|
+
"dsDescriptionValue":{
|
87
|
+
"value": "#{@description.gsub(/\r/," ").gsub(/\n/," ")}",
|
88
|
+
"multiple":false,
|
89
|
+
"typeClass": "primitive",
|
90
|
+
"typeName": "dsDescriptionValue"
|
91
|
+
}}],
|
92
|
+
"typeClass": "compound",
|
93
|
+
"multiple": true,
|
94
|
+
"typeName": "dsDescription"
|
95
|
+
},
|
96
|
+
{
|
97
|
+
"value": [
|
98
|
+
"#{@subject}"
|
99
|
+
],
|
100
|
+
"typeClass": "controlledVocabulary",
|
101
|
+
"multiple": true,
|
102
|
+
"typeName": "subject"
|
103
|
+
}
|
104
|
+
],
|
105
|
+
"displayName": "Citation Metadata"
|
106
|
+
}
|
107
|
+
}
|
108
|
+
}
|
109
|
+
}
|
110
|
+
}
|
111
|
+
return json
|
112
|
+
end
|
113
|
+
|
114
|
+
def create_dataset
|
115
|
+
Dir.chdir 'dataverse_dataset' do
|
116
|
+
File.open('dataset.json', 'w+') do |f|
|
117
|
+
f.write(self.dataset_json)
|
118
|
+
end
|
119
|
+
puts "Creating dataverse #{@dataset_name} in #{@repo} at #{@server}..."
|
120
|
+
output = `curl --speed-time 15 --speed-limit 1000 --retry 50 --retry-max-time 0 -H X-Dataverse-key:#{@token} -X POST #{@server}/api/dataverses/#{@repo}/datasets --upload-file dataset.json`
|
121
|
+
puts output # needed to escape curl output
|
122
|
+
parsed = JSON.parse(output)
|
123
|
+
@doi = parsed['data']['persistentId']
|
124
|
+
puts "Dataverse #{@doi} created."
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def init config
|
129
|
+
# initialize with config information
|
130
|
+
@author = config.authors
|
131
|
+
@affiliation = config.affiliation
|
132
|
+
@email = config.email
|
133
|
+
@description = config.description
|
134
|
+
@dataset_name = config.name+'-'+Time.now.strftime("%Y-%m-%d_%H-%M")
|
135
|
+
|
136
|
+
FileUtils.mkdir_p 'dataverse_dataset'
|
137
|
+
self.create_dataset
|
138
|
+
Dir.chdir 'dataverse_dataset' do
|
139
|
+
FileUtils.mkdir_p 'repo'
|
140
|
+
Dir.chdir 'repo' do
|
141
|
+
self.xanthus_file
|
142
|
+
self.readme_file config
|
143
|
+
self.inputs_file config
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
def add_file_to_dataverse name, description, folder
|
149
|
+
output = `curl --speed-time 15 --speed-limit 1000 --retry 50 --retry-max-time 0 -H X-Dataverse-key:#{@token} -X POST -F "file=@#{name}" -F 'jsonData={"description":"#{description}","directoryLabel":"#{folder}","categories":["Data"], "restrict":"false"}' "#{@server}/api/datasets/:persistentId/add?persistentId=#{@doi}"`
|
150
|
+
puts output
|
151
|
+
end
|
152
|
+
|
153
|
+
def xanthus_file
|
154
|
+
self.prepare_xanthus_file
|
155
|
+
self.add_file_to_dataverse '.xanthus', 'xanthus file used to generate the data.', 'metadata'
|
156
|
+
end
|
157
|
+
|
158
|
+
def readme_file config
|
159
|
+
self.prepare_readme_file config
|
160
|
+
self.add_file_to_dataverse 'README.md', 'readme describing the dataset.', 'metadata'
|
161
|
+
end
|
162
|
+
|
163
|
+
def inputs_file config
|
164
|
+
config.jobs.each do |name,job|
|
165
|
+
job.inputs.each do |k, files|
|
166
|
+
files.each do |file|
|
167
|
+
system('cp', '-f', "../../#{file}", "#{file}")
|
168
|
+
self.add_file_to_dataverse file, 'Job input file.', 'metadata'
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
def add content
|
175
|
+
self.add_file_to_dataverse content, "#{content} is a Xanthus generated file (check metadata for description)", 'data'
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Xanthus
|
2
|
+
CAMFLOW_START = %q{%{
|
3
|
+
camflow -a true
|
4
|
+
sleep 1
|
5
|
+
}}
|
6
|
+
|
7
|
+
CAMFLOW_STOP = %q{%{
|
8
|
+
camflow -a false
|
9
|
+
sleep 20
|
10
|
+
}}
|
11
|
+
|
12
|
+
SPADE_START = %q{%{
|
13
|
+
echo spade | sudo -H -u spade ../SPADE/bin/spade start
|
14
|
+
sleep 20
|
15
|
+
}}
|
16
|
+
|
17
|
+
SPADE_STOP = %q{%{
|
18
|
+
echo spade | sudo -H -u spade ../SPADE/bin/spade stop
|
19
|
+
sleep 20
|
20
|
+
}}
|
21
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Xanthus
|
4
|
+
class GitHub < Repository
|
5
|
+
attr_accessor :repo
|
6
|
+
attr_accessor :token
|
7
|
+
attr_accessor :folder
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
super
|
11
|
+
@repo = ''
|
12
|
+
@token = ''
|
13
|
+
@folder = Time.now.strftime("%Y-%m-%d_%H-%M")
|
14
|
+
end
|
15
|
+
|
16
|
+
def lfs
|
17
|
+
system('git', 'lfs', 'install')
|
18
|
+
system('git', 'lfs', 'track', '*.tar.gz')
|
19
|
+
system('git', 'add', '.gitattributes')
|
20
|
+
system('git', 'push', "https://#{@token}@github.com/#{@repo}", 'master')
|
21
|
+
end
|
22
|
+
|
23
|
+
def xanthus_file
|
24
|
+
self.prepare_xanthus_file
|
25
|
+
system('git', 'add', '.xanthus')
|
26
|
+
system('git', 'commit', '-m', "[Xanthus] :horse: pushed #{@folder}/.xanthus :horse:")
|
27
|
+
system('git', 'push', "https://#{@token}@github.com/#{@repo}", 'master')
|
28
|
+
end
|
29
|
+
|
30
|
+
def readme_file config
|
31
|
+
self.prepare_readme_file config
|
32
|
+
system('git', 'add', 'README.md')
|
33
|
+
system('git', 'commit', '-m', "[Xanthus] :horse: pushed #{@folder}/README.md :horse:")
|
34
|
+
system('git', 'push', "https://#{@token}@github.com/#{@repo}", 'master')
|
35
|
+
end
|
36
|
+
|
37
|
+
def inputs_file config
|
38
|
+
config.jobs.each do |name,job|
|
39
|
+
job.inputs.each do |k, files|
|
40
|
+
files.each do |file|
|
41
|
+
system('cp', '-f', "../../#{file}", "#{file}")
|
42
|
+
system('git', 'add', "#{file}")
|
43
|
+
system('git', 'commit', '-m', "[Xanthus] :horse: pushed #{@folder}/#{file} :horse:")
|
44
|
+
system('git', 'push', "https://#{@token}@github.com/#{@repo}", 'master')
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def init config
|
51
|
+
system('git', 'clone', "https://#{@token}@github.com/#{@repo}", 'repo')
|
52
|
+
Dir.chdir 'repo' do
|
53
|
+
self.lfs
|
54
|
+
FileUtils.mkdir_p @folder
|
55
|
+
Dir.chdir @folder do
|
56
|
+
self.xanthus_file
|
57
|
+
self.readme_file config
|
58
|
+
self.inputs_file config
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def add content
|
64
|
+
Dir.chdir 'repo' do
|
65
|
+
FileUtils.mkdir_p @folder
|
66
|
+
system('mv', "../#{content}", "#{@folder}/#{content}")
|
67
|
+
system('git', 'add', "#{@folder}/#{content}")
|
68
|
+
system('git', 'commit', '-m', "[Xanthus] :horse: pushed #{@folder}/#{content} :horse:")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def push
|
73
|
+
Dir.chdir 'repo' do
|
74
|
+
system('git', 'push', "https://#{@token}@github.com/#{@repo}", 'master')
|
75
|
+
system('rm', '-rf', @folder)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def tag
|
80
|
+
Dir.chdir 'repo' do
|
81
|
+
system('git', 'tag', '-a', "xanthus-#{@folder}", '-m', '"Xanthus automated dataset generation."')
|
82
|
+
system('git', 'push', '--tags', "https://#{@token}@github.com/#{@repo}")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def clean
|
87
|
+
system('rm', '-rf', 'repo')
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/lib/xanthus/init.rb
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Xanthus
|
4
|
+
class Init
|
5
|
+
@@name
|
6
|
+
|
7
|
+
def self.header file
|
8
|
+
file.write("# -*- mode: ruby -*-\n")
|
9
|
+
file.write("# vi: set ft=ruby\n\n")
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.config file
|
13
|
+
script = %Q{
|
14
|
+
# -*- mode: ruby -*-
|
15
|
+
# vi: set ft=ruby
|
16
|
+
|
17
|
+
Xanthus.configure do |config|
|
18
|
+
config.name = '#{@@name}'
|
19
|
+
config.authors = 'John Doe'
|
20
|
+
config.affiliation = 'Somewhere University'
|
21
|
+
config.email = 'john.doe@somewhere.edu'
|
22
|
+
config.description = %q{
|
23
|
+
Describe my super experiment.
|
24
|
+
|
25
|
+
It is very cool and interesting!
|
26
|
+
}
|
27
|
+
config.seed = #{Random.new_seed}
|
28
|
+
|
29
|
+
config.script :pre do
|
30
|
+
%q{%{
|
31
|
+
mkdir wgets
|
32
|
+
cd wgets
|
33
|
+
}}
|
34
|
+
end
|
35
|
+
|
36
|
+
config.script :camflow_start do
|
37
|
+
Xanthus::CAMFLOW_START
|
38
|
+
end
|
39
|
+
|
40
|
+
config.script :spade_start do
|
41
|
+
Xanthus::SPADE_START
|
42
|
+
end
|
43
|
+
|
44
|
+
config.script :normal do
|
45
|
+
%q{
|
46
|
+
2.times.collect do
|
47
|
+
'wget http://www.google.com'
|
48
|
+
end
|
49
|
+
}
|
50
|
+
end
|
51
|
+
|
52
|
+
config.script :attack do
|
53
|
+
%q{
|
54
|
+
2.times.collect do
|
55
|
+
'wget http://www.google.com'
|
56
|
+
end
|
57
|
+
}
|
58
|
+
end
|
59
|
+
|
60
|
+
config.script :camflow_stop do
|
61
|
+
Xanthus::CAMFLOW_STOP
|
62
|
+
end
|
63
|
+
|
64
|
+
config.script :spade_stop do
|
65
|
+
Xanthus::SPADE_STOP
|
66
|
+
end
|
67
|
+
|
68
|
+
config.script :post do
|
69
|
+
%q{%{
|
70
|
+
cd ..
|
71
|
+
rm -rf wgets
|
72
|
+
}}
|
73
|
+
end
|
74
|
+
|
75
|
+
config.script :server do
|
76
|
+
%q{%{
|
77
|
+
mkdir test
|
78
|
+
}}
|
79
|
+
end
|
80
|
+
|
81
|
+
config.vm :camflow do |vm|
|
82
|
+
vm.box = 'michaelh/ubuncam'
|
83
|
+
vm.version = '0.0.3'
|
84
|
+
vm.ip = '192.168.33.8'
|
85
|
+
end
|
86
|
+
|
87
|
+
config.vm :spade do |vm|
|
88
|
+
vm.box = 'michaelh/spade'
|
89
|
+
vm.memory = 8192
|
90
|
+
vm.version = '0.0.3'
|
91
|
+
vm.ip = '192.168.33.8'
|
92
|
+
end
|
93
|
+
|
94
|
+
config.vm :server do |vm|
|
95
|
+
vm.box = 'bento/ubuntu-18.04'
|
96
|
+
vm.version = '201812.27.0'
|
97
|
+
vm.ip = '192.168.33.3'
|
98
|
+
end
|
99
|
+
|
100
|
+
config.job :normal_camflow do |job|
|
101
|
+
job.iterations = 2
|
102
|
+
job.tasks = {camflow: [:pre, :camflow_start, :normal, :camflow_stop, :post]}
|
103
|
+
job.outputs = {camflow: {config: '/etc/camflow.ini', trace: '/tmp/audit.log'}}
|
104
|
+
end
|
105
|
+
|
106
|
+
config.job :attack_camflow do |job|
|
107
|
+
job.iterations = 2
|
108
|
+
job.tasks = {server: [:server], camflow: [:pre, :camflow_start, :attack, :camflow_stop, :post]}
|
109
|
+
job.outputs = {camflow: {config: '/etc/camflow.ini', trace: '/tmp/audit.log'}}
|
110
|
+
end
|
111
|
+
|
112
|
+
config.job :normal_spade do |job|
|
113
|
+
job.iterations = 2
|
114
|
+
job.tasks = {spade: [:pre, :spade_start, :normal, :spade_stop, :post]}
|
115
|
+
job.outputs = {spade: {trace: '/tmp/audit_cdm.avro'}}
|
116
|
+
end
|
117
|
+
|
118
|
+
config.job :attack_spade do |job|
|
119
|
+
job.iterations = 2
|
120
|
+
job.tasks = {server: [:server], spade: [:pre, :spade_start, :attack, :spade_stop, :post]}
|
121
|
+
job.outputs = {spade: {trace: '/tmp/audit_cdm.avro'}}
|
122
|
+
end
|
123
|
+
|
124
|
+
config.dataverse do |dataverse|
|
125
|
+
dataverse.server = <ADD DATAVERSE BASE URL>
|
126
|
+
dataverse.repo = <PROVIDE DATAVERSE NAME>
|
127
|
+
dataverse.token = <PROVIDE DATAVERSE TOKEN>
|
128
|
+
dataverse.subject = <PROVIDE DATAVERSE SUBJECT (e.g. engineering)>
|
129
|
+
end
|
130
|
+
|
131
|
+
# config.github do |github|
|
132
|
+
# github.repo = '<ADD GITHUB REPO user/name>'
|
133
|
+
# github.token = '<ADD GITHUB TOKEN>'
|
134
|
+
# end
|
135
|
+
end
|
136
|
+
}
|
137
|
+
file.write(script)
|
138
|
+
end
|
139
|
+
|
140
|
+
def self.init name
|
141
|
+
@@name = name
|
142
|
+
abort("Error: #{@@name} already exists.") unless !File.exists? name
|
143
|
+
FileUtils.mkdir_p @@name
|
144
|
+
Dir.chdir @@name do
|
145
|
+
puts "Creating experiment #{@@name}..."
|
146
|
+
File.open('.xanthus', 'w+') do |f|
|
147
|
+
self.header f
|
148
|
+
self.config f
|
149
|
+
end
|
150
|
+
end
|
151
|
+
puts 'Experiment created.'
|
152
|
+
puts "Edit #{@@name}/.xanthus to configure your experiment."
|
153
|
+
puts 'To run your experiment "xanthus run".'
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
data/lib/xanthus/job.rb
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require_relative '../utils/os'
|
3
|
+
|
4
|
+
module Xanthus
|
5
|
+
class Job
|
6
|
+
attr_accessor :name
|
7
|
+
attr_accessor :iterations
|
8
|
+
attr_accessor :tasks
|
9
|
+
attr_accessor :outputs
|
10
|
+
attr_accessor :inputs
|
11
|
+
attr_accessor :pre_instructions
|
12
|
+
attr_accessor :post_instructions
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@iterations = 0
|
16
|
+
@tasks = Hash.new
|
17
|
+
@outputs = Hash.new
|
18
|
+
@inputs = Hash.new
|
19
|
+
@pre_instructions = nil
|
20
|
+
@post_instructions = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def output_script machine, outputs
|
24
|
+
script = "vagrant plugin install vagrant-scp\n"
|
25
|
+
outputs.each do |name, path|
|
26
|
+
script += "vagrant scp :#{path} output/#{name}.data\n"
|
27
|
+
end
|
28
|
+
return script
|
29
|
+
end
|
30
|
+
|
31
|
+
def setup_env machine, scripts, config
|
32
|
+
puts 'Setting up task on machine '+machine.to_s+'...'
|
33
|
+
FileUtils.mkdir_p machine.to_s
|
34
|
+
Dir.chdir machine.to_s do
|
35
|
+
if !@inputs[machine].nil?
|
36
|
+
@inputs[machine].each do |name|
|
37
|
+
system('cp', '-f', "../../#{name}", "#{name}")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
FileUtils.mkdir_p 'output'
|
41
|
+
puts 'Creating provision files...'
|
42
|
+
File.open('Vagrantfile', 'w+') do |f|
|
43
|
+
f.write(config.vms[machine].to_vagrant)
|
44
|
+
end
|
45
|
+
script = Script.new(scripts, config).to_s
|
46
|
+
File.open('provision.sh', 'w+') do |f|
|
47
|
+
f.write(script)
|
48
|
+
end
|
49
|
+
script = 'echo "nothing to do"'
|
50
|
+
script = self.output_script(machine, @outputs[machine]) unless @outputs[machine].nil?
|
51
|
+
# add simple support for Windows
|
52
|
+
before_halt_hook = "before_halt.#{sys_script_ext}"
|
53
|
+
File.open(before_halt_hook, 'w+') do |f|
|
54
|
+
f.write(script)
|
55
|
+
end
|
56
|
+
system('chmod', '+x', before_halt_hook)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def host_scripts config
|
61
|
+
puts 'Setting up host scripts...'
|
62
|
+
if !@pre_instructions.nil?
|
63
|
+
script = Script.new(@pre_instructions, config).to_s
|
64
|
+
File.open('pre.sh', 'w+') do |f|
|
65
|
+
f.write(script)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
if !@post_instructions.nil?
|
70
|
+
script = Script.new(@post_instructions, config).to_s
|
71
|
+
File.open('post.sh', 'w+') do |f|
|
72
|
+
f.write(script)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def execute_pre_instructions
|
78
|
+
puts 'Running pre instructions...'
|
79
|
+
system('sh', './pre.sh')
|
80
|
+
end
|
81
|
+
|
82
|
+
def run machine
|
83
|
+
Dir.chdir machine.to_s do
|
84
|
+
system('vagrant', 'up')
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def execute_post_instructions
|
89
|
+
puts 'Running post instructions...'
|
90
|
+
system('sh', './post.sh')
|
91
|
+
end
|
92
|
+
|
93
|
+
def halt machine
|
94
|
+
Dir.chdir machine.to_s do
|
95
|
+
system('vagrant', 'halt')
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def destroy machine
|
100
|
+
Dir.chdir machine.to_s do
|
101
|
+
system('vagrant', 'destroy', '-f')
|
102
|
+
system('rm', '-rf', '.vagrant')
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def execute config, iteration
|
107
|
+
puts "Running job #{name.to_s}-#{iteration.to_s}..."
|
108
|
+
FileUtils.mkdir_p 'tmp'
|
109
|
+
Dir.chdir 'tmp' do
|
110
|
+
self.host_scripts config
|
111
|
+
@tasks.each do |machine, templates|
|
112
|
+
self.setup_env machine, templates, config
|
113
|
+
end
|
114
|
+
self.execute_pre_instructions unless @pre_instructions.nil?
|
115
|
+
@tasks.each do |machine, templates|
|
116
|
+
self.run machine
|
117
|
+
end
|
118
|
+
self.execute_post_instructions unless @post_instructions.nil?
|
119
|
+
@tasks.each do |machine, templates|
|
120
|
+
self.halt machine
|
121
|
+
end
|
122
|
+
@tasks.each do |machine, templates|
|
123
|
+
self.destroy machine
|
124
|
+
end
|
125
|
+
end
|
126
|
+
system('mv', 'tmp', "#{name.to_s}-#{iteration.to_s}")
|
127
|
+
system('tar', '-czvf', "#{name.to_s}-#{iteration.to_s}.tar.gz", "#{name.to_s}-#{iteration.to_s}")
|
128
|
+
system('rm', '-rf', "#{name.to_s}-#{iteration.to_s}")
|
129
|
+
config.github_conf.add("#{name.to_s}-#{iteration.to_s}.tar.gz") unless config.github_conf.nil?
|
130
|
+
config.github_conf.push unless config.github_conf.nil?
|
131
|
+
config.dataverse_conf.add("#{name.to_s}-#{iteration.to_s}.tar.gz") unless config.dataverse_conf.nil?
|
132
|
+
puts "Job #{name.to_s}-#{iteration.to_s} done."
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|