claudius 0.0.3 → 0.0.4
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.
- data/README.md +56 -2
- data/claudius.gemspec +10 -5
- data/examples/distributed_app.rb +47 -0
- data/examples/distributed_montage.rb +84 -0
- data/examples/montage.rb +88 -0
- data/examples/ping.rb +6 -6
- data/lib/remote_execution/provider.rb +8 -1
- data/lib/tree_building/claudius.rb +1 -0
- data/lib/tree_building/execution_node.rb +0 -1
- data/lib/tree_building/node.rb +0 -1
- data/test/test_local_execution.rb +2 -1
- metadata +17 -6
data/README.md
CHANGED
@@ -11,11 +11,66 @@ Install it as:
|
|
11
11
|
|
12
12
|
If you want export execution tree to image you need [Graphivz](http://www.graphviz.org).
|
13
13
|
|
14
|
+
## Keywords
|
15
|
+
|
16
|
+
* **experiment** - central part of claudius. Method defines a new experiment. Parameters:
|
17
|
+
* **experiment_name**
|
18
|
+
* **body** - block of code describing performed experiment
|
19
|
+
|
20
|
+
You may call the following methods on returned experiment object:
|
21
|
+
|
22
|
+
* **run** - method starts previously defined experiment,
|
23
|
+
* **export_tree(path = 'execution_tree_path')** - method creates an execution graph of experiment and save it as an image
|
24
|
+
|
25
|
+
* **define_providers** - method takes as a parameter description of machines used in experiment. In experiments You are allowed to use 2 different types of machines
|
26
|
+
|
27
|
+
* **manual** - those machines have been created before experiment start, You should possess appropriate credentials such as: ip address, login, password etc.
|
28
|
+
|
29
|
+
* **cloud** - if You like to perform your experiment in cloud, You should firstly provide necessary information to authenticate to Your cloud provider ( e.g. AWS). After successfully authentication, please define instances which You are going to use in your experiment by create_instances method.
|
30
|
+
|
31
|
+
* **foreach** - keyword is similar to ruby ‘each’ method, but in contrast to ordinary ‘each’, you may provide adjectives describing how parameters should be process
|
32
|
+
Currently supported adjectives are.
|
33
|
+
* **asynchronously** - each parameter is processed in separate thread. Execution of instructions after foreach block is pursued when each loop is finished.
|
34
|
+
* **safely** - experiment is continued even if some exception occurs during loop execution,
|
35
|
+
* **on** - specify on which machine instructions should be executed, by default it is localhost. It takes instance name as a parameter.
|
36
|
+
|
37
|
+
* **before**, **after** - keywords are used to construct metrics
|
38
|
+
|
39
|
+
* **concurrent** - if elements (such as execute or foreach) are in common concurrent block, they are executed each in separate thread.
|
40
|
+
|
41
|
+
* **execute** - method takes as a parameter block of code (which contain ssh methods calls), end perform instructions sequentially
|
42
|
+
|
43
|
+
* **ssh** - specify instruction(s) which are going to be invoked on machine. As a parameter takes a string representing shell command.
|
44
|
+
|
45
|
+
## Credentials
|
46
|
+
|
47
|
+
In order to authenticate in AWS services (at other cloud providers also) you are obligated to provide some credentials data, which are: aws_access_key_id, aws_secret_access_key, and so on. It is recomended to store configuration in json file and refer to them, when they are require. Sample config file looks like one below:
|
48
|
+
|
49
|
+
|
50
|
+
``` javascript
|
51
|
+
{
|
52
|
+
"provider" : "AWS",
|
53
|
+
"region" : "eu-west-1",
|
54
|
+
"aws_access_key_id" : "XXXXXXXXXXXXXXXXXXXX",
|
55
|
+
"aws_secret_access_key" : "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
|
56
|
+
"key_name" : "My-irleand-key",
|
57
|
+
"groups" : "My-irleand-group"
|
58
|
+
"path_to_pem_file" : "./pems/my-irleand-key.pem"
|
59
|
+
}
|
60
|
+
```
|
61
|
+
|
62
|
+
After creation, You could load your file, assign it to variable and use freely as dictionary.
|
63
|
+
|
64
|
+
``` ruby
|
65
|
+
config = load_config('./user_config.json')
|
66
|
+
aws_key = config['aws_access_key_id']
|
67
|
+
```
|
68
|
+
|
69
|
+
|
14
70
|
## Usage
|
15
71
|
|
16
72
|
Check doc [here](http://blostic.github.io/claudius).
|
17
73
|
|
18
|
-
|
19
74
|
## Documentation
|
20
75
|
|
21
76
|
Documemtation is autogenerated from examples by [Groc](https://github.com/nevir/groc).
|
@@ -31,7 +86,6 @@ Generate to GitHub page:
|
|
31
86
|
|
32
87
|
groc --gh examples/* README.md
|
33
88
|
|
34
|
-
|
35
89
|
## Contributing
|
36
90
|
|
37
91
|
1. Fork it
|
data/claudius.gemspec
CHANGED
@@ -4,11 +4,16 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "claudius"
|
7
|
-
spec.version = "0.0.
|
7
|
+
spec.version = "0.0.4"
|
8
8
|
spec.authors = ["radk0s", "blost"]
|
9
|
-
spec.email = ["rachamot@gmail.com"]
|
10
|
-
spec.description =
|
11
|
-
|
9
|
+
spec.email = ["rachamot@gmail.com", "piotr.skibiak@gmail.com"]
|
10
|
+
spec.description = 'Claudius is an easy-to-use domain specific language for cloud experiments. ' +
|
11
|
+
'It has been designed to speed up process of building distributed experiments and highly reduce time of ' +
|
12
|
+
'remote machines configuration. To avoid vendor lock-in, Claudius was build on top of fog.io library, ' +
|
13
|
+
'which enables flexible and powerful way to manage machine instances at various cloud providers. Remote ' +
|
14
|
+
'commands execution is based on SSH protocol (SSH-2). DLS allow users to generate readable execution graph, ' +
|
15
|
+
'which is extremely useful for experiment flow verification and help avoid wasting your money.'
|
16
|
+
spec.summary = "DSL for cloud experiments"
|
12
17
|
spec.homepage = "https://github.com/blostic/claudius"
|
13
18
|
spec.license = "MIT"
|
14
19
|
spec.files = `git ls-files`.split($/)
|
@@ -18,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
18
23
|
|
19
24
|
spec.add_development_dependency "bundler", "~> 1.3"
|
20
25
|
spec.add_development_dependency "rake"
|
21
|
-
spec.add_runtime_dependency "fog", "
|
26
|
+
spec.add_runtime_dependency "fog", "1.22.0"
|
22
27
|
spec.add_runtime_dependency "net-ssh", "2.9.1"
|
23
28
|
spec.add_runtime_dependency "graph", "2.7.0"
|
24
29
|
spec.add_runtime_dependency "awesome_print", "1.2.0"
|
@@ -0,0 +1,47 @@
|
|
1
|
+
|
2
|
+
# Distributed app
|
3
|
+
# ---------
|
4
|
+
# Set up distributed key-value store Etcd using Docker.
|
5
|
+
#
|
6
|
+
|
7
|
+
require "claudius"
|
8
|
+
config = load_config('./user_config.json')
|
9
|
+
$discovery_token = "https://discovery.etcd.io/c4c7919104cbf432d2a92036cddd8d33"
|
10
|
+
|
11
|
+
execution_tree = experiment 'Hello' do
|
12
|
+
define_providers do
|
13
|
+
cloud('aws', :provider => config['provider'],
|
14
|
+
:region =>config['region'],
|
15
|
+
:endpoint => 'https://ec2.eu-west-1.amazonaws.com/',
|
16
|
+
:aws_access_key_id => config['aws_access_key_id'],
|
17
|
+
:aws_secret_access_key => config['aws_secret_access_key'])
|
18
|
+
.create_instances(
|
19
|
+
['t1.micro=>in1'],
|
20
|
+
:username => 'ubuntu',
|
21
|
+
:private_key_path =>config['path_to_pem_file'],
|
22
|
+
:key_name => config['key_name'],
|
23
|
+
:groups => config['groups'])
|
24
|
+
end
|
25
|
+
foreach ['in1', 'in2'] do |instance_name|
|
26
|
+
on instance_name do
|
27
|
+
before "set up docker" do
|
28
|
+
# ssh "curl -sSL https://get.docker.io/ubuntu/ | sudo sh"
|
29
|
+
# ssh "sudo apt-get install git -y"
|
30
|
+
# ssh "wget https://github.com/coreos/etcd/archive/v0.4.6.tar.gz"
|
31
|
+
# ssh "tar xzvf v0.4.6.tar.gz"
|
32
|
+
# ssh "mv etcd-0.4.6 etcd"
|
33
|
+
# ssh "rm v0.4.6.tar.gz"
|
34
|
+
end
|
35
|
+
execute do
|
36
|
+
# ssh "sudo docker build -t etcd etcd"
|
37
|
+
# ssh "sudo docker run --name etcd1 -d -p 4001:4001 -p 7001:7001 -v /data/etcd1:/etcd-data etcd -name #{instance_name} -peer-addr #{getOtherInstances(instance_name).hosts}:7001 -addr #{getInstance(instance_name).host}:4001 -discovery %s" % $discovery_token
|
38
|
+
end
|
39
|
+
after "clean up docker containers" do
|
40
|
+
# ssh "docker stop $(docker ps -a -q)"
|
41
|
+
# ssh "docker rm $(docker ps -a -q)"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
ap execution_tree.run
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require "claudius"
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
config = load_config('./user_config.json')
|
5
|
+
|
6
|
+
execution_tree = experiment 'Helloo' do
|
7
|
+
define_providers do
|
8
|
+
cloud('aws', :provider => config['provider'],
|
9
|
+
:region =>config['region'],
|
10
|
+
:endpoint => 'https://ec2.eu-west-1.amazonaws.com/',
|
11
|
+
:aws_access_key_id => config['aws_access_key_id'],
|
12
|
+
:aws_secret_access_key => config['aws_secret_access_key'])
|
13
|
+
.create_instances(
|
14
|
+
['m3.medium=>in1', 'm3.large=>in2'],
|
15
|
+
:username => 'ubuntu',
|
16
|
+
:private_key_path =>config['path_to_pem_file'],
|
17
|
+
:key_name => config['key_name'],
|
18
|
+
:image_id => config['image_id'],
|
19
|
+
:groups => config['groups'])
|
20
|
+
end
|
21
|
+
foreach ['in1', 'in2'] do |instance_name|
|
22
|
+
on instance_name do
|
23
|
+
execute do
|
24
|
+
ssh "yes | sudo apt-get update"
|
25
|
+
ssh "yes | sudo apt-get install build-essential"
|
26
|
+
|
27
|
+
ssh "yes | sudo apt-get install python-software-properties python g++ make"
|
28
|
+
ssh "yes | sudo add-apt-repository ppa:chris-lea/node.js"
|
29
|
+
ssh "yes | sudo apt-get update"
|
30
|
+
ssh "yes | sudo apt-get install nodejs"
|
31
|
+
|
32
|
+
ssh "yes | sudo apt-get install git-core"
|
33
|
+
|
34
|
+
ssh "yes | sudo apt-get -y install build-essential zlib1g-dev libssl-dev libreadline6-dev libyaml-dev"
|
35
|
+
ssh "yes | sudo apt-get install ruby2.0 ruby2.0-dev build-essential libxml2-dev libxslt1-dev"
|
36
|
+
ssh "yes | sudo apt-get install rabbitmq-server"
|
37
|
+
ssh "yes | sudo apt-get install redis-server"
|
38
|
+
|
39
|
+
ssh "echo 'Git:'"
|
40
|
+
ssh "git --version"
|
41
|
+
ssh "echo 'Ruby'"
|
42
|
+
ssh "ruby --version"
|
43
|
+
ssh "echo 'Nodejs'"
|
44
|
+
ssh "nodejs --version"
|
45
|
+
ssh "echo 'Redis'"
|
46
|
+
ssh "redis-server --version"
|
47
|
+
|
48
|
+
ssh "curl -O http://pegasus.isi.edu/montage/Montage_v3.3_patched_4.tar.gz"
|
49
|
+
ssh "tar zxvf Montage_v3.3_patched_4.tar.gz"
|
50
|
+
ssh "cd Montage_v3.3_patched_4 && make"
|
51
|
+
|
52
|
+
ssh "curl -O https://dl.dropboxusercontent.com/u/81819/hyperflow-amqp-executor.gem"
|
53
|
+
ssh "sudo gem2.0 install --no-ri --no-rdoc hyperflow-amqp-executor.gem"
|
54
|
+
|
55
|
+
ssh "wget https://github.com/dice-cyfronet/hyperflow/archive/v1.0.0-beta-6.tar.gz"
|
56
|
+
ssh "tar zxvf v1.0.0-beta-6.tar.gz"
|
57
|
+
ssh "mv hyperflow-1.0.0-beta-6 hyperflow"
|
58
|
+
ssh "cd hyperflow && npm install"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
on 'in1' do
|
63
|
+
execute do
|
64
|
+
ssh "cd hyperflow && echo 'amqp_url: amqp://localhost\nstorage: local\nthreads: <%= Executor::cpu_count %>' > executor_config.yml"
|
65
|
+
ssh "export PATH=$PATH:~/Montage_v3.3_patched_4/bin; nohup hyperflow-amqp-executor $(pwd)/hyperflow/executor_config.yml > amqp.out 2>&1 &"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
on 'in2' do
|
69
|
+
execute do
|
70
|
+
ssh "mkdir data"
|
71
|
+
ssh "cd data && wget https://gist.github.com/kfigiela/9075623/raw/dacb862176e9d576c1b23f6a243f9fa318c74bce/bootstrap.sh"
|
72
|
+
ssh "cd data && chmod +x bootstrap.sh"
|
73
|
+
ssh "export PATH=$PATH:~/Montage_v3.3_patched_4/bin && ./data/bootstrap.sh 0.25"
|
74
|
+
ssh "cd hyperflow && echo \"var AMQP_URL=process.env.AMQP_URL?process.env.AMQP_URL:'amqp://#{getInstance('in1').host}:5672';exports.amqp_url=AMQP_URL;exports.options={'storage':'local','workdir':'/home/ubuntu/0.25/input'}\" > functions/amqpCommand.config.js"
|
75
|
+
ssh "nodejs hyperflow/scripts/dax_convert_amqp.js 0.25/workdir/dag.xml > 0.25/workdir/dag.json"
|
76
|
+
ssh "nohup nodejs hyperflow/scripts/runwf.js -f 0.25/workdir/dag.json -s > amqp.out 2>&1 &"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
result = execution_tree.run
|
82
|
+
ap result
|
83
|
+
|
84
|
+
puts result.to_json
|
data/examples/montage.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
require "claudius"
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
config = load_config('./user_config.json')
|
5
|
+
|
6
|
+
execution_tree = experiment 'Helloo' do
|
7
|
+
define_providers do
|
8
|
+
cloud('aws', :provider => config['provider'],
|
9
|
+
:region =>config['region'],
|
10
|
+
:endpoint => 'https://ec2.eu-west-1.amazonaws.com/',
|
11
|
+
:aws_access_key_id => config['aws_access_key_id'],
|
12
|
+
:aws_secret_access_key => config['aws_secret_access_key'])
|
13
|
+
.create_instances(
|
14
|
+
['m3.medium=>in2', 'm3.large=>in3', 'c3.large=>in4', 'c3.xlarge=>in5'],
|
15
|
+
:username => 'ubuntu',
|
16
|
+
:private_key_path =>config['path_to_pem_file'],
|
17
|
+
:key_name => config['key_name'],
|
18
|
+
:image_id => config['image_id'],
|
19
|
+
:groups => config['groups'])
|
20
|
+
end
|
21
|
+
foreach ['in2', 'in3', 'in4', 'in5'] do |instance_name|
|
22
|
+
on instance_name do
|
23
|
+
before "set up docker" do
|
24
|
+
ssh "yes | sudo apt-get update"
|
25
|
+
ssh "yes | sudo apt-get install build-essential"
|
26
|
+
|
27
|
+
ssh "yes | sudo apt-get install python-software-properties python g++ make"
|
28
|
+
ssh "yes | sudo add-apt-repository ppa:chris-lea/node.js"
|
29
|
+
ssh "yes | sudo apt-get update"
|
30
|
+
ssh "yes | sudo apt-get install nodejs"
|
31
|
+
|
32
|
+
ssh "yes | sudo apt-get install git-core"
|
33
|
+
|
34
|
+
ssh "yes | sudo apt-get -y install build-essential zlib1g-dev libssl-dev libreadline6-dev libyaml-dev"
|
35
|
+
ssh "yes | sudo apt-get install ruby2.0 ruby2.0-dev build-essential libxml2-dev libxslt1-dev"
|
36
|
+
ssh "yes | sudo apt-get install rabbitmq-server"
|
37
|
+
ssh "yes | sudo apt-get install redis-server"
|
38
|
+
|
39
|
+
ssh "echo 'Git:'"
|
40
|
+
ssh "git --version"
|
41
|
+
ssh "echo 'Ruby'"
|
42
|
+
ssh "ruby --version"
|
43
|
+
ssh "echo 'Nodejs'"
|
44
|
+
ssh "nodejs --version"
|
45
|
+
ssh "echo 'Redis'"
|
46
|
+
ssh "redis-server --version"
|
47
|
+
|
48
|
+
ssh "curl -O http://pegasus.isi.edu/montage/Montage_v3.3_patched_4.tar.gz"
|
49
|
+
ssh "tar zxvf Montage_v3.3_patched_4.tar.gz"
|
50
|
+
ssh "cd Montage_v3.3_patched_4 && make"
|
51
|
+
|
52
|
+
ssh "curl -O https://dl.dropboxusercontent.com/u/81819/hyperflow-amqp-executor.gem"
|
53
|
+
ssh "sudo gem2.0 install --no-ri --no-rdoc hyperflow-amqp-executor.gem"
|
54
|
+
|
55
|
+
ssh "wget https://github.com/dice-cyfronet/hyperflow/archive/v1.0.0-beta-6.tar.gz"
|
56
|
+
ssh "tar zxvf v1.0.0-beta-6.tar.gz"
|
57
|
+
ssh "mv hyperflow-1.0.0-beta-6 hyperflow"
|
58
|
+
ssh "cd hyperflow && npm install"
|
59
|
+
|
60
|
+
ssh "cd hyperflow && echo 'amqp_url: amqp://localhost\nstorage: local\nthreads: <%= Executor::cpu_count %>' > executor_config.yml"
|
61
|
+
|
62
|
+
ssh "mkdir data"
|
63
|
+
ssh "cd data && wget https://gist.github.com/kfigiela/9075623/raw/dacb862176e9d576c1b23f6a243f9fa318c74bce/bootstrap.sh"
|
64
|
+
ssh "cd data && chmod +x bootstrap.sh"
|
65
|
+
|
66
|
+
end
|
67
|
+
foreach [1, 2, 3] do |a|
|
68
|
+
foreach [0.1, 0.25, 0.4] do |size|
|
69
|
+
execute do
|
70
|
+
|
71
|
+
ssh "export PATH=$PATH:~/Montage_v3.3_patched_4/bin && ./data/bootstrap.sh #{size}#{a}"
|
72
|
+
|
73
|
+
ssh "cd hyperflow && echo \"var AMQP_URL=process.env.AMQP_URL?process.env.AMQP_URL:'amqp://localhost:5672';exports.amqp_url=AMQP_URL;exports.options={'storage':'local','workdir':'/home/ubuntu/#{size}#{a}/input'}\" > functions/amqpCommand.config.js"
|
74
|
+
|
75
|
+
ssh "export PATH=$PATH:~/Montage_v3.3_patched_4/bin; nohup hyperflow-amqp-executor $(pwd)/hyperflow/executor_config.yml > amqp.out 2>&1 &"
|
76
|
+
ssh "nodejs hyperflow/scripts/dax_convert_amqp.js #{size}#{a}/workdir/dag.xml > #{size}#{a}/workdir/dag.json"
|
77
|
+
# ssh "nohup nodejs hyperflow/scripts/runwf.js -f #{size}/workdir/dag.json -s > amqp.out 2>&1 &"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
result = execution_tree.run
|
86
|
+
ap result
|
87
|
+
|
88
|
+
puts result.to_json
|
data/examples/ping.rb
CHANGED
@@ -13,14 +13,14 @@ execution_tree = experiment 'Hello' do
|
|
13
13
|
:endpoint => 'https://ec2.eu-west-1.amazonaws.com/',
|
14
14
|
:aws_access_key_id => config['aws_access_key_id'],
|
15
15
|
:aws_secret_access_key => config['aws_secret_access_key'])
|
16
|
-
.create_instances(['
|
16
|
+
.create_instances(['t2.micro=>in1'],
|
17
17
|
:username => 'ubuntu',
|
18
|
-
:private_key_path =>'
|
19
|
-
:key_name => '
|
20
|
-
:
|
21
|
-
|
18
|
+
:private_key_path =>config['path_to_pem_file'],
|
19
|
+
:key_name => config['key_name'],
|
20
|
+
:image_id => config['image_id'],
|
21
|
+
:groups => config['groups'])
|
22
22
|
end
|
23
|
-
foreach ['
|
23
|
+
foreach ['in1'] do |instance_name|
|
24
24
|
concurrent do
|
25
25
|
on 'localhost' do
|
26
26
|
execute do
|
@@ -3,6 +3,7 @@ require 'cloud_provider.rb'
|
|
3
3
|
require 'json'
|
4
4
|
|
5
5
|
$virtual_machines = Hash.new
|
6
|
+
$vms_manager
|
6
7
|
|
7
8
|
class MachineManager
|
8
9
|
attr_accessor :cloud_providers
|
@@ -40,6 +41,12 @@ class MachineManager
|
|
40
41
|
end
|
41
42
|
end
|
42
43
|
|
44
|
+
def destroy_machines
|
45
|
+
cloud_providers.each do |provider|
|
46
|
+
provider.destroy
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
43
50
|
end
|
44
51
|
|
45
52
|
def load_config( filename )
|
@@ -49,7 +56,7 @@ def load_config( filename )
|
|
49
56
|
end
|
50
57
|
|
51
58
|
def define_providers (&block)
|
52
|
-
MachineManager.new &block
|
59
|
+
$vms_manager = MachineManager.new &block
|
53
60
|
end
|
54
61
|
|
55
62
|
def getInstance(name)
|
data/lib/tree_building/node.rb
CHANGED
@@ -8,11 +8,12 @@ class Test_local_execution < Test::Unit::TestCase
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def test_simple
|
11
|
-
experiment 'Hello' do
|
11
|
+
helloExp = experiment 'Hello' do
|
12
12
|
execute do
|
13
13
|
ssh 'mkdir Hello123456'
|
14
14
|
end
|
15
15
|
end
|
16
|
+
helloExp.run()
|
16
17
|
result = `ls -la`
|
17
18
|
assert_equal(true, result.include?('Hello123456'), 'Test should create a folder in current directory')
|
18
19
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: claudius
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-
|
13
|
+
date: 2014-12-17 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -49,7 +49,7 @@ dependencies:
|
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 1.22.0
|
55
55
|
type: :runtime
|
@@ -57,7 +57,7 @@ dependencies:
|
|
57
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
58
|
none: false
|
59
59
|
requirements:
|
60
|
-
- -
|
60
|
+
- - '='
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: 1.22.0
|
63
63
|
- !ruby/object:Gem::Dependency
|
@@ -108,9 +108,17 @@ dependencies:
|
|
108
108
|
- - '='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 1.2.0
|
111
|
-
description:
|
111
|
+
description: Claudius is an easy-to-use domain specific language for cloud experiments.
|
112
|
+
It has been designed to speed up process of building distributed experiments and
|
113
|
+
highly reduce time of remote machines configuration. To avoid vendor lock-in, Claudius
|
114
|
+
was build on top of fog.io library, which enables flexible and powerful way to manage
|
115
|
+
machine instances at various cloud providers. Remote commands execution is based
|
116
|
+
on SSH protocol (SSH-2). DLS allow users to generate readable execution graph,
|
117
|
+
which is extremely useful for experiment flow verification and help avoid wasting
|
118
|
+
your money.
|
112
119
|
email:
|
113
120
|
- rachamot@gmail.com
|
121
|
+
- piotr.skibiak@gmail.com
|
114
122
|
executables: []
|
115
123
|
extensions: []
|
116
124
|
extra_rdoc_files: []
|
@@ -122,6 +130,9 @@ files:
|
|
122
130
|
- Rakefile
|
123
131
|
- claudius.gemspec
|
124
132
|
- examples/_
|
133
|
+
- examples/distributed_app.rb
|
134
|
+
- examples/distributed_montage.rb
|
135
|
+
- examples/montage.rb
|
125
136
|
- examples/on_instance.rb
|
126
137
|
- examples/ping.rb
|
127
138
|
- examples/simple_program.rb
|
@@ -163,7 +174,7 @@ rubyforge_project:
|
|
163
174
|
rubygems_version: 1.8.23
|
164
175
|
signing_key:
|
165
176
|
specification_version: 3
|
166
|
-
summary:
|
177
|
+
summary: DSL for cloud experiments
|
167
178
|
test_files:
|
168
179
|
- test/execution_test.rb
|
169
180
|
- test/gem_usage_test.rb
|