xanthus 0.1.2 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c4832454eeff21b2bf3013e37d38adaf16c2e3b1e71ec902361cba7b25e63be5
4
- data.tar.gz: be923875ac163b8d946f36623b0751436d67b0332d1a76880213f9f9470567cb
3
+ metadata.gz: 3b32bb667df960d2a565943f27d57c28462cfc37e6ffd8e56f1fddb817afa828
4
+ data.tar.gz: 772ac67b093aae2ee190481888405b97f08639494a86266c4017750b0da89fcb
5
5
  SHA512:
6
- metadata.gz: ea5ba69726815f5156300bae089e4b996cd724752089656288c039649d917f2c215ff8e9cdd3e499ccc2c09dc01784094838dea0d3b2118d7c7928014a4f0fa9
7
- data.tar.gz: 76cb3e1fcdafecb9f4f1fcfe514ea8cebc50e30b0af28e55130cc10eb2980734c29ded9491fb6a212a69ad86d3e1858cbe584e6e98272b3398986ee4b8d96aad
6
+ metadata.gz: d2f02645f8141275b74adf7b1b70c3a36609fc9172be148a949ed1b0c1acb18bec134eb13e9ed7717cf098f6fda40289a82b38066f650d49c0c2abcaac56a924
7
+ data.tar.gz: 379c8d188ac86ee7abf532ef43f05458f541033abe4d97a4087c5026a72c01dd1c0db5da1b03bffbe0822cc9315b624db7e3dae30f654c12746851eac7c3ca6d
data/lib/xanthus.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "xanthus/version"
2
2
  require "xanthus/init"
3
+ require "xanthus/script"
3
4
  require "xanthus/virtual_machine"
4
5
  require "xanthus/job"
5
6
  require "xanthus/default"
@@ -61,6 +61,9 @@ Seed: #{@seed}
61
61
  yield(config)
62
62
  puts "Running experiment #{config.name} with seed #{config.seed}."
63
63
  srand config.seed
64
+ config.vms.each do |k, v|
65
+ v.generate_box config
66
+ end
64
67
  config.github_conf.init(config) unless config.github_conf.nil?
65
68
  config.jobs.each do |name,job|
66
69
  for i in 0..(job.iterations-1) do
data/lib/xanthus/init.rb CHANGED
@@ -110,7 +110,7 @@ It is very cool and interesting!
110
110
  config.job :normal_spade do |job|
111
111
  job.iterations = 2
112
112
  job.tasks = {spade: [:pre, :spade_start, :normal, :spade_stop, :post]}
113
- job.outputs = {spade: {trace: '/tmp/audit_cmd.avro'}}
113
+ job.outputs = {spade: {trace: '/tmp/audit_cdm.avro'}}
114
114
  end
115
115
 
116
116
  config.job :attack_spade do |job|
data/lib/xanthus/job.rb CHANGED
@@ -7,12 +7,16 @@ module Xanthus
7
7
  attr_accessor :tasks
8
8
  attr_accessor :outputs
9
9
  attr_accessor :inputs
10
+ attr_accessor :pre_instructions
11
+ attr_accessor :post_instructions
10
12
 
11
13
  def initialize
12
14
  @iterations = 0
13
15
  @tasks = Hash.new
14
16
  @outputs = Hash.new
15
17
  @inputs = Hash.new
18
+ @pre_instructions = nil
19
+ @post_instructions = nil
16
20
  end
17
21
 
18
22
  def output_script outputs
@@ -25,26 +29,6 @@ module Xanthus
25
29
 
26
30
  def setup_env machine, scripts, config
27
31
  puts 'Setting up task on machine '+machine.to_s+'...'
28
- script = ''
29
- scripts.each do |t|
30
- v = eval(config.scripts[t])
31
- if v.kind_of?(Array)
32
- v.each do |w|
33
- script+=w+"\n"
34
- end
35
- else
36
- script+=v
37
- end
38
- end
39
- script += self.output_script(@outputs[machine]) unless @outputs[machine].nil?
40
-
41
- script_to_clean = script
42
- script = ''
43
- script_to_clean.each_line do |s|
44
- script += s.strip + "\n" unless s=="\n"
45
- end
46
- script = script.gsub "\n\n", "\n"
47
-
48
32
  FileUtils.mkdir_p machine.to_s
49
33
  Dir.chdir machine.to_s do
50
34
  if !@inputs[machine].nil?
@@ -57,18 +41,47 @@ module Xanthus
57
41
  File.open('Vagrantfile', 'w+') do |f|
58
42
  f.write(config.vms[machine].to_vagrant)
59
43
  end
44
+ script = Script.new(scripts, config).to_s
45
+ script += self.output_script(@outputs[machine]) unless @outputs[machine].nil?
60
46
  File.open('provision.sh', 'w+') do |f|
61
47
  f.write(script)
62
48
  end
63
49
  end
64
50
  end
65
51
 
52
+ def host_scripts config
53
+ puts 'Setting up host scripts...'
54
+ if !@pre_instructions.nil?
55
+ script = Script.new(@pre_instructions, config).to_s
56
+ File.open('pre.sh', 'w+') do |f|
57
+ f.write(script)
58
+ end
59
+ end
60
+
61
+ if !@post_instructions.nil?
62
+ script = Script.new(@post_instructions, config).to_s
63
+ File.open('post.sh', 'w+') do |f|
64
+ f.write(script)
65
+ end
66
+ end
67
+ end
68
+
69
+ def execute_pre_instructions
70
+ puts 'Running pre instructions...'
71
+ system('sh', './pre.sh')
72
+ end
73
+
66
74
  def run machine
67
75
  Dir.chdir machine.to_s do
68
76
  system('vagrant', 'up')
69
77
  end
70
78
  end
71
79
 
80
+ def execute_post_instructions
81
+ puts 'Running post instructions...'
82
+ system('sh', './post.sh')
83
+ end
84
+
72
85
  def halt machine
73
86
  Dir.chdir machine.to_s do
74
87
  system('vagrant', 'halt')
@@ -86,12 +99,15 @@ module Xanthus
86
99
  puts "Running job #{name.to_s}-#{iteration.to_s}..."
87
100
  FileUtils.mkdir_p 'tmp'
88
101
  Dir.chdir 'tmp' do
102
+ self.host_scripts config
89
103
  @tasks.each do |machine, templates|
90
104
  self.setup_env machine, templates, config
91
105
  end
106
+ self.execute_pre_instructions unless @pre_instructions.nil?
92
107
  @tasks.each do |machine, templates|
93
108
  self.run machine
94
109
  end
110
+ self.execute_post_instructions unless @post_instructions.nil?
95
111
  @tasks.each do |machine, templates|
96
112
  self.halt machine
97
113
  end
@@ -0,0 +1,31 @@
1
+ module Xanthus
2
+ class Script
3
+ attr_accessor :script
4
+
5
+
6
+ def initialize array, config
7
+ script = ''
8
+ array.each do |t|
9
+ v = eval(config.scripts[t])
10
+ if v.kind_of?(Array)
11
+ v.each do |w|
12
+ script+=w+"\n"
13
+ end
14
+ else
15
+ script+=v
16
+ end
17
+ end
18
+ script_to_clean = script
19
+ script = ''
20
+ script_to_clean.each_line do |s|
21
+ script += s.strip + "\n" unless s=="\n"
22
+ end
23
+ script = script.gsub "\n\n", "\n"
24
+ @script = script
25
+ end
26
+
27
+ def to_s
28
+ @script
29
+ end
30
+ end
31
+ end
@@ -1,5 +1,5 @@
1
1
  module Xanthus
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
 
4
4
  def self.version
5
5
  puts VERSION
@@ -8,6 +8,9 @@ module Xanthus
8
8
  attr_accessor :memory
9
9
  attr_accessor :ip
10
10
  attr_accessor :gui
11
+ attr_accessor :boxing
12
+ attr_accessor :ssh_username
13
+ attr_accessor :ssh_key_path
11
14
 
12
15
  def initialize
13
16
  @name = :default
@@ -18,15 +21,25 @@ module Xanthus
18
21
  @cpus = 2
19
22
  @cpu_cap = 70
20
23
  @gui = false
24
+ @boxing = nil
25
+ @ssh_username = nil
26
+ @ssh_key_path = nil
21
27
  end
22
28
 
23
29
  def to_vagrant
24
- %Q{
30
+ script = %Q{
25
31
  Vagrant.configure(2) do |config|
26
32
  config.vm.box = "#{@box}"
27
33
  config.vm.box_version = "#{@version}"
28
34
  config.vm.network "private_network", ip: "#{@ip}"
29
-
35
+ }
36
+ script += %Q{
37
+ config.ssh.username = "#{@ssh_username}"
38
+ } unless ssh_username.nil?
39
+ script += %Q{
40
+ config.ssh.private_key_path = "#{@ssh_key_path}"
41
+ } unless ssh_key_path.nil?
42
+ script += %Q{
30
43
  config.vm.provider "virtualbox" do |vb|
31
44
  vb.gui = #{@gui}
32
45
  vb.memory = #{@memory}
@@ -37,6 +50,33 @@ Vagrant.configure(2) do |config|
37
50
  config.vm.provision "shell", path: "provision.sh"
38
51
  end
39
52
  }
53
+ return script
54
+ end
55
+
56
+ def generate_box config
57
+ return unless !boxing.nil?
58
+ puts 'Generating box...'
59
+
60
+ FileUtils.mkdir_p 'boxing'
61
+ Dir.chdir 'boxing' do
62
+ File.open('Vagrantfile', 'w+') do |f|
63
+ f.write(self.to_vagrant)
64
+ end
65
+
66
+ script = Script.new(boxing, config).to_s
67
+ File.open('provision.sh', 'w+') do |f|
68
+ f.write(script)
69
+ end
70
+
71
+ system('vagrant', 'up')
72
+ system('vagrant', 'halt')
73
+ system('vagrant', 'package', '--output', "#{name}.box")
74
+ puts "#{name}.box created."
75
+ system('vagrant', 'box', 'add', '--force', "local/#{name}", "#{name}.box")
76
+ system('vagrant', 'destroy', '-f')
77
+ @box = "local/#{name}"
78
+ @version = '0'
79
+ end
40
80
  end
41
81
  end
42
82
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xanthus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Pasquier
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-03-06 00:00:00.000000000 Z
12
+ date: 2019-03-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -56,6 +56,7 @@ files:
56
56
  - lib/xanthus/github.rb
57
57
  - lib/xanthus/init.rb
58
58
  - lib/xanthus/job.rb
59
+ - lib/xanthus/script.rb
59
60
  - lib/xanthus/version.rb
60
61
  - lib/xanthus/virtual_machine.rb
61
62
  homepage: http://camflow.org