vagrant-g5k 0.0.15 → 0.0.16
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 +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +19 -0
- data/Vagrantfile +18 -31
- data/Vagrantfile.multisite +37 -0
- data/lib/vagrant-g5k/errors.rb +8 -3
- data/lib/vagrant-g5k/util/g5k_utils.rb +21 -13
- data/lib/vagrant-g5k/version.rb +1 -1
- data/locales/en.yml +5 -1
- data/results/.gitignore +2 -0
- data/results/README.md +43 -0
- data/results/Vagrantfile +126 -0
- data/results/ansible.cfg +2 -0
- data/results/boilerplate.retry +1 -0
- data/results/boilerplate.yml +248 -0
- data/results/files/grafana/dashboard.json +4572 -0
- data/results/files/grafana/dedicated.json +5486 -0
- data/results/files/grafana/haproxy.json +2632 -0
- data/results/files/heka/config.json +47 -0
- data/results/files/heka/heka-globals.toml +2 -0
- data/results/files/heka/lua_decoders/haproxy_log.lua +162 -0
- data/results/files/heka/lua_decoders/os_keystone_apache_log.lua +78 -0
- data/results/files/heka/lua_decoders/os_mysql_log.lua +56 -0
- data/results/files/heka/lua_decoders/os_openstack_log.lua +146 -0
- data/results/files/heka/lua_decoders/os_rabbitmq_log.lua +79 -0
- data/results/files/kibana/all_objects.json +81 -0
- data/results/files/nginx.conf +34 -0
- data/results/templates/heka-elasticsearch.toml.j2 +18 -0
- data/results/templates/heka-haproxy.toml.j2 +10 -0
- data/results/templates/heka-keystone.toml.j2 +14 -0
- data/results/templates/heka-mariadb.toml.j2 +14 -0
- data/results/templates/heka-openstack.toml.j2 +15 -0
- data/results/templates/heka-rabbitmq.toml.j2 +21 -0
- data/results/test.rb +32 -0
- metadata +28 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1df4a32a68cbad5242e82101c86660aec6edf0b
|
4
|
+
data.tar.gz: 2978fdaf2984face9272df254040893082497a7d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 24b08525b133f8f58a185315f8553322b57c1cf16b544634dd3df56695d496a632e073fb5c790cd4a1c0a11a724d5ff9371e40bcb659d0dd3294f35fb47b795a
|
7
|
+
data.tar.gz: 1229bd98b6478fb89a7d68cb486d6c089b88682a2493558d87d9519bd47a3cdb7e955402ac9d345634d97d53c7b1196b4af95fa641ad471216b738b8db65ae50
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -45,5 +45,24 @@ to back the disk image of the virtual machines :
|
|
45
45
|
* `vagrant halt`
|
46
46
|
* `vagrant provision`
|
47
47
|
* `vagrant ssh`
|
48
|
+
* `vagrant ssh-config`
|
48
49
|
* `vagrant status`
|
49
50
|
* `vagrant up`
|
51
|
+
|
52
|
+
## Use ceph as backing strategy
|
53
|
+
|
54
|
+
Vagrant-g5k will look into `~/.ceph/config` on each frontend where VMs are started.
|
55
|
+
You can read[1] for further information on how to configure ceph on grid'5000.
|
56
|
+
|
57
|
+
[1] : https://www.grid5000.fr/mediawiki/index.php/Ceph
|
58
|
+
|
59
|
+
## Developping
|
60
|
+
|
61
|
+
* clone the repository
|
62
|
+
* use `$ bundle` to install all the dependencies (this may take some time)
|
63
|
+
* then test your code against the provided (or modified) Vagrantfile using :
|
64
|
+
```
|
65
|
+
VAGRANT_LOG=debug VAGRANT_DEFAULT_PROVIDER=g5k bundle exec vagrant up
|
66
|
+
```
|
67
|
+
|
68
|
+
|
data/Vagrantfile
CHANGED
@@ -3,12 +3,12 @@
|
|
3
3
|
#
|
4
4
|
# Testing purpose only
|
5
5
|
#Vagrant.require_plugin "vagrant-g5k"
|
6
|
-
|
7
|
-
|
6
|
+
|
7
|
+
SITES=['rennes']
|
8
8
|
|
9
9
|
Vagrant.configure(2) do |config|
|
10
|
-
|
11
|
-
config.vm.define "vm
|
10
|
+
SITES.each do |site|
|
11
|
+
config.vm.define "vm-#{site}" do |my|
|
12
12
|
my.vm.box = "dummy"
|
13
13
|
|
14
14
|
my.ssh.username = "root"
|
@@ -16,37 +16,24 @@ Vagrant.configure(2) do |config|
|
|
16
16
|
|
17
17
|
my.vm.provider "g5k" do |g5k|
|
18
18
|
g5k.project_id = "vagrant-g5k"
|
19
|
-
g5k.site = "
|
19
|
+
g5k.site = "#{site}"
|
20
20
|
g5k.gateway = "access.grid5000.fr"
|
21
|
-
g5k.image = {
|
22
|
-
"pool" => "msimonin_rbds",
|
23
|
-
"rbd" => "bases/alpine_docker",
|
24
|
-
"snapshot" => "parent",
|
25
|
-
"id" => "$USER",
|
26
|
-
|
27
|
-
|
28
|
-
}
|
29
|
-
g5k.
|
30
|
-
|
31
|
-
end #vm
|
32
|
-
end # each
|
33
|
-
|
34
|
-
|
35
|
-
(0..NB_IGRIDA-1).each do |i|
|
36
|
-
config.vm.define "vm-igrida-#{i}" do |my|
|
37
|
-
my.vm.box = "dummy"
|
38
|
-
|
39
|
-
my.vm.provider "g5k" do |g5k|
|
40
|
-
g5k.project_id = "vagrant-g5k"
|
41
|
-
g5k.site = "igrida-oar-frontend"
|
42
|
-
g5k.gateway = "transit.irisa.fr"
|
43
|
-
g5k.image = {
|
44
|
-
"path" => "/udd/msimonin/precise.qcow2",
|
21
|
+
# g5k.image = {
|
22
|
+
# "pool" => "msimonin_rbds",
|
23
|
+
# "rbd" => "bases/alpine_docker",
|
24
|
+
# "snapshot" => "parent",
|
25
|
+
# "id" => "$USER",
|
26
|
+
# "conf" => "$HOME/.ceph/config",
|
27
|
+
# "backing" => "snapshot"
|
28
|
+
# }
|
29
|
+
g5k.image = {
|
30
|
+
"path" => "/grid5000/virt-images/alpine_docker.qcow2",
|
45
31
|
"backing" => "snapshot"
|
46
|
-
|
32
|
+
}
|
47
33
|
g5k.ports = ['2222-:22']
|
34
|
+
g5k.oar = "virtual != 'none'"
|
48
35
|
end #g5k
|
49
|
-
end #
|
36
|
+
end #vm
|
50
37
|
end # each
|
51
38
|
|
52
39
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
# vi: set ft=ruby :
|
3
|
+
#
|
4
|
+
# Testing purpose only
|
5
|
+
#Vagrant.require_plugin "vagrant-g5k"
|
6
|
+
|
7
|
+
SITES=['rennes', 'nancy', 'nantes', 'lille', 'luxembourg', 'grenoble', 'lyon']
|
8
|
+
|
9
|
+
Vagrant.configure(2) do |config|
|
10
|
+
SITES.each do |site|
|
11
|
+
config.vm.define "vm-#{site}" do |my|
|
12
|
+
my.vm.box = "dummy"
|
13
|
+
|
14
|
+
my.ssh.username = "root"
|
15
|
+
my.ssh.password = ""
|
16
|
+
|
17
|
+
my.vm.provider "g5k" do |g5k|
|
18
|
+
g5k.project_id = "vagrant-g5k"
|
19
|
+
g5k.site = "#{site}"
|
20
|
+
g5k.gateway = "access.grid5000.fr"
|
21
|
+
g5k.image = {
|
22
|
+
"pool" => "msimonin_rbds",
|
23
|
+
"rbd" => "bases/alpine_docker",
|
24
|
+
"snapshot" => "parent",
|
25
|
+
"id" => "$USER",
|
26
|
+
"conf" => "$HOME/.ceph/config",
|
27
|
+
"backing" => "snapshot"
|
28
|
+
}
|
29
|
+
g5k.ports = ['2222-:22']
|
30
|
+
g5k.oar = "virtual != 'none'"
|
31
|
+
end #g5k
|
32
|
+
end #vm
|
33
|
+
end # each
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
|
data/lib/vagrant-g5k/errors.rb
CHANGED
@@ -8,15 +8,20 @@ module VagrantPlugins
|
|
8
8
|
end
|
9
9
|
|
10
10
|
class TimeoutOnJobSubmissionError < VagrantG5KError
|
11
|
-
error_key("
|
11
|
+
error_key("tired_of_waiting")
|
12
12
|
end
|
13
13
|
|
14
14
|
class JobNotRunning < VagrantG5KError
|
15
|
-
error_key("
|
15
|
+
error_key("tired_of_waiting")
|
16
16
|
end
|
17
17
|
|
18
|
+
class JobError < VagrantG5KError
|
19
|
+
error_key("job_error")
|
20
|
+
end
|
21
|
+
|
22
|
+
|
18
23
|
class CommandError < VagrantG5KError
|
19
|
-
error_key("
|
24
|
+
error_key("remote_command_error")
|
20
25
|
end
|
21
26
|
|
22
27
|
|
@@ -18,7 +18,7 @@ module VagrantPlugins
|
|
18
18
|
class Connection
|
19
19
|
include Vagrant::Util::Retryable
|
20
20
|
|
21
|
-
attr_accessor :
|
21
|
+
attr_accessor :driver
|
22
22
|
|
23
23
|
attr_accessor :username
|
24
24
|
|
@@ -74,19 +74,24 @@ module VagrantPlugins
|
|
74
74
|
|
75
75
|
|
76
76
|
def check_job(job_id)
|
77
|
-
oarstat = exec("oarstat --json")
|
78
|
-
|
79
|
-
|
80
|
-
r = oarstat
|
81
|
-
@logger.debug(r.inspect)
|
82
|
-
# update the assigned hostname
|
83
|
-
# this will be used to reach the vm
|
77
|
+
oarstat = exec("oarstat -j #{job_id} --json")
|
78
|
+
# json is
|
79
|
+
# { "job_id" : {description}}
|
80
|
+
r = JSON.load(oarstat)["#{job_id}"]
|
84
81
|
if !r.nil?
|
85
82
|
@node = r["assigned_network_address"].first
|
86
83
|
end
|
87
84
|
return r
|
88
85
|
end
|
89
86
|
|
87
|
+
def process_errors(job_id)
|
88
|
+
job = check_job(job_id)
|
89
|
+
stderr_file = job["stderr_file"]
|
90
|
+
stderr = exec("cat #{stderr_file}")
|
91
|
+
@ui.error("#{stderr_file}: #{stderr}")
|
92
|
+
raise VagrantPlugins::G5K::Errors::JobError
|
93
|
+
end
|
94
|
+
|
90
95
|
def delete_job(job_id)
|
91
96
|
@ui.info("Deleting the associated job")
|
92
97
|
exec("oardel -c -s 12 #{job_id}")
|
@@ -145,10 +150,13 @@ module VagrantPlugins
|
|
145
150
|
job_id = exec("oarsub --json -t allow_classic_ssh -l \"#{@oar}nodes=1,walltime=#{@walltime}\" --name #{env[:machine].name} --checkpoint 60 --signal 12 \"#{launcher_remote_path} #{args}\" | grep \"job_id\"| cut -d':' -f2").gsub(/"/,"").strip
|
146
151
|
|
147
152
|
begin
|
148
|
-
retryable(:on => VagrantPlugins::G5K::Errors::JobNotRunning, :tries => 100, :sleep =>
|
149
|
-
@ui.info("Waiting for the job to be running")
|
153
|
+
retryable(:on => VagrantPlugins::G5K::Errors::JobNotRunning, :tries => 100, :sleep => 1) do
|
150
154
|
job = check_job(job_id)
|
151
|
-
if job.nil?
|
155
|
+
if !job.nil? and ["Error", "Terminated"].include?(job["state"])
|
156
|
+
process_errors(job_id)
|
157
|
+
end
|
158
|
+
if job.nil? or (!job.nil? and job["state"] != "Running")
|
159
|
+
@ui.info("Waiting for the job to be running")
|
152
160
|
raise VagrantPlugins::G5K::Errors::JobNotRunning
|
153
161
|
end
|
154
162
|
# saving the id
|
@@ -159,7 +167,7 @@ module VagrantPlugins
|
|
159
167
|
@ui.error("Tired of waiting")
|
160
168
|
raise VagrantPlugins::G5K::Errors::JobNotRunning
|
161
169
|
end
|
162
|
-
@ui.info("
|
170
|
+
@ui.info("booted @#{@site} on #{@node}")
|
163
171
|
|
164
172
|
end
|
165
173
|
|
@@ -229,7 +237,7 @@ module VagrantPlugins
|
|
229
237
|
file = _rbd_clone_or_copy_image(env, clone = false)
|
230
238
|
end
|
231
239
|
# encapsulate the file to a qemu ready disk description
|
232
|
-
file = "rbd:#{file}:id=#{@image["id"]}:conf=#{@image["conf"]}"
|
240
|
+
file = "rbd:#{file}:id=#{@image["id"]}:conf=#{@image["conf"]}:rbd_cache=true,cache=writeback"
|
233
241
|
@logger.debug("Generated drive string : #{file}")
|
234
242
|
return file
|
235
243
|
end
|
data/lib/vagrant-g5k/version.rb
CHANGED
data/locales/en.yml
CHANGED
@@ -80,7 +80,11 @@ en:
|
|
80
80
|
One or more of the needed AWS credentials are missing. No environment variables
|
81
81
|
are set nor profile '%{profile}' exists at '%{location}'
|
82
82
|
|
83
|
-
errors:
|
83
|
+
errors:
|
84
|
+
job_error: Job error
|
85
|
+
tired_of_waiting: Tired of waiting
|
86
|
+
remote_command_error: Remote command error
|
87
|
+
|
84
88
|
fog_error: |-
|
85
89
|
There was an error talking to AWS. The error message is shown
|
86
90
|
below:
|
data/results/.gitignore
ADDED
data/results/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# Post-Mortem analysis
|
2
|
+
|
3
|
+
## What's inside the VMs ?
|
4
|
+
|
5
|
+
Each virtual machine (VM) offer a toolbox to analyse various datas from the experimentation made with kolla-g5k. The datas themselves are also located inside the VM during the creation of the VM.
|
6
|
+
|
7
|
+
You'll find :
|
8
|
+
|
9
|
+
* Nginx exposed on port 8000. It allows you to browse Rally reports, confs and logs.
|
10
|
+
* Grafana exposed on port 3000. It gives access of all the metrics collected during the experimentation
|
11
|
+
* Kibana exposed on port 5601. It let you explores the logs.
|
12
|
+
|
13
|
+
|
14
|
+
## List of provided experimentation
|
15
|
+
|
16
|
+
* idle : *todo wiki url*
|
17
|
+
* load-ded : *todo wiki url*
|
18
|
+
* load-default : *todo wiki url*
|
19
|
+
* [load-clust-rabbit](https://github.com/BeyondTheClouds/kolla-g5k/wiki/load-clust-rabbitmq)
|
20
|
+
* concurrency : *todo wiki url*
|
21
|
+
|
22
|
+
## Accessing the results
|
23
|
+
|
24
|
+
Start a specific virtual machine :
|
25
|
+
|
26
|
+
```
|
27
|
+
vagrant up <experimentation>
|
28
|
+
```
|
29
|
+
|
30
|
+
Shutdown the virtual machine
|
31
|
+
```
|
32
|
+
vagrant halt <experimentation>
|
33
|
+
```
|
34
|
+
|
35
|
+
## Creating new results
|
36
|
+
|
37
|
+
*todo*
|
38
|
+
|
39
|
+
## Known limitation
|
40
|
+
|
41
|
+
* The current implementation is tight to Grid'5000.
|
42
|
+
* When creating a new set of result, indexing all the logs in elasticsearch will take some time.
|
43
|
+
* From time to time VMs root filesystem goes read-only. Manually fsck the root partition and reboot may solve the issue `fsck /dev/vg0/lv_root`.
|
data/results/Vagrantfile
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# -*- mode: ruby -*-
|
3
|
+
# vi: set ft=ruby :
|
4
|
+
|
5
|
+
|
6
|
+
# This Vagrantfile makes use of the plugin vagrant-g5k
|
7
|
+
# https://github.com/msimonin/vagrant-g5k
|
8
|
+
#
|
9
|
+
# version 0.0.13
|
10
|
+
|
11
|
+
# The list of experimentation. There will be one VM per
|
12
|
+
# experimentation. You can access it thought eg, `vagrant ssh idle`.
|
13
|
+
XPS =[
|
14
|
+
{
|
15
|
+
:name => "idle",
|
16
|
+
:confs => [ "cpt20-nfk05", "cpt20-nfk10", "cpt20-nfk25", "cpt20-nfk50" ]
|
17
|
+
},
|
18
|
+
{
|
19
|
+
# dedicated 1 node for each mariadb, haproxy, conductor, rabbitmq, memcached
|
20
|
+
# with rally benchmark
|
21
|
+
:name => "load-ded",
|
22
|
+
:confs => [ "cpt20-nfk05", "cpt20-nfk10", "cpt20-nfk25", "cpt20-nfk50-stopped"]
|
23
|
+
},
|
24
|
+
{
|
25
|
+
# default topology
|
26
|
+
# with rally benchmark
|
27
|
+
:name => "load-default",
|
28
|
+
:confs => [ "cpt20-nfk05", "cpt20-nfk10", 'cpt20-nfk25']
|
29
|
+
},
|
30
|
+
{
|
31
|
+
:name => "concurrency",
|
32
|
+
:confs => [ "ccy0001-0015-cpt20-nfk50",
|
33
|
+
"ccy0025-0045-cpt20-nfk50",
|
34
|
+
"ccy0100-1000-cpt20-nfk05" ]
|
35
|
+
},
|
36
|
+
{
|
37
|
+
# load test with a clustered rabbitmq
|
38
|
+
:name => "load-clust-rabbit",
|
39
|
+
:confs => [ "cpt20-nfk50",
|
40
|
+
"cpt20-nfk50-tuned-report-sync-intervals",
|
41
|
+
"cpt20-nfk50-tuned-report-sync-intervals-handshake-timeout",
|
42
|
+
"cpt20-nfk50-cond10-tuned-handshake-timeout"]
|
43
|
+
}
|
44
|
+
# Add another experimentation
|
45
|
+
# ,{ :name => "vanilla",
|
46
|
+
# :confs => [ "cpt20-nfk05", "cpt20-nfk10", "cpt20-nfk25", "cpt20-nfk50" ]}
|
47
|
+
]
|
48
|
+
|
49
|
+
Vagrant.configure(2) do |config|
|
50
|
+
# user to log with inside the vm
|
51
|
+
# config.ssh.username = "root"
|
52
|
+
# password to use to log inside the vm
|
53
|
+
|
54
|
+
config.vm.provider "g5k" do |g5k|
|
55
|
+
# The project id.
|
56
|
+
# It is used to generate uniq remote storage for images
|
57
|
+
# It must be uniq accros all project managed by vagrant.
|
58
|
+
g5k.project_id = "vagrant-g5k"
|
59
|
+
|
60
|
+
# user name used to connect to g5k
|
61
|
+
g5k.username = "msimonin"
|
62
|
+
|
63
|
+
# private key
|
64
|
+
# g5k.private_key = File.join(ENV['HOME'], ".ssh/id_rsa_discovery")
|
65
|
+
|
66
|
+
# site to use
|
67
|
+
g5k.site = "rennes"
|
68
|
+
g5k.gateway = "access.grid5000.fr"
|
69
|
+
|
70
|
+
# walltime to use
|
71
|
+
g5k.walltime = "03:00:00"
|
72
|
+
|
73
|
+
# image location
|
74
|
+
# g5k.image = {
|
75
|
+
# "path" => "$HOME/public/ubuntu1404.qcow2",
|
76
|
+
# "backing" => "copy"
|
77
|
+
#}
|
78
|
+
|
79
|
+
# it could be backed by the ceph
|
80
|
+
g5k.image = {
|
81
|
+
"pool" => "msimonin_rbds",
|
82
|
+
"rbd" => "bases/bocutter-ubuntu1404_home_ceph",
|
83
|
+
"id" => "msimonin",
|
84
|
+
"conf" => "/home/msimonin/.ceph/config",
|
85
|
+
"backing" => "copy"
|
86
|
+
}
|
87
|
+
|
88
|
+
# ports to expose (at least ssh has to be forwarded)
|
89
|
+
g5k.ports = ['2222-:22','3000-:3000', '8000-:80', '5601-:5601']
|
90
|
+
end
|
91
|
+
|
92
|
+
XPS.each do |xp|
|
93
|
+
config.vm.define xp[:name] do |my|
|
94
|
+
# box isn't used
|
95
|
+
my.vm.box = "dummy"
|
96
|
+
|
97
|
+
# From `boilerplate.yml`: this playbook relies on an `xps` variable.
|
98
|
+
# The `xps` variable is a list that contains the name of all
|
99
|
+
# experimentation. For instance, this list is as following for the
|
100
|
+
# idle experimentation:
|
101
|
+
# - idle-cpt20-nfk05
|
102
|
+
# - idle-cpt20-nfk10
|
103
|
+
# - idle-cpt20-nfk25
|
104
|
+
# - idle-cpt20-nfk50
|
105
|
+
#
|
106
|
+
# This ruby method computes this list and gives it to
|
107
|
+
# `ansible-playbook`. The construction of the list is based on the
|
108
|
+
# name of the experimentation `xp[:name]` and the list of
|
109
|
+
# experimentation done `xp[:confs]`
|
110
|
+
xps = {:xps => xp[:confs].map { |cfg| xp[:name] + "-" + cfg } }
|
111
|
+
|
112
|
+
# For the provision to run a dedicated proxy command seems necessary
|
113
|
+
# in your ssh config (the provisionner seems to not take into account
|
114
|
+
# the ssh-config of vagrant)
|
115
|
+
# Host *.grid5000.fr
|
116
|
+
# User <login>
|
117
|
+
# StrictHostKeyChecking no
|
118
|
+
# ProxyCommand ssh <login>@194.254.60.4 "nc %h %p"
|
119
|
+
my.vm.provision :ansible do |ansible|
|
120
|
+
ansible.playbook = "boilerplate.yml"
|
121
|
+
ansible.extra_vars = xps
|
122
|
+
ansible.verbose = "-vvvv"
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|