vagrant-g5k 0.9.0 → 0.9.1
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 +4 -0
- data/README.md +2 -0
- data/Vagrantfile +49 -35
- data/lib/vagrant-g5k/config.rb +16 -3
- data/lib/vagrant-g5k/g5k_connection.rb +21 -4
- data/lib/vagrant-g5k/oar.rb +1 -1
- data/lib/vagrant-g5k/util/launch_vm.sh +32 -11
- data/lib/vagrant-g5k/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bad549f807cf2aa5b7c6bc5bef799e00ea8bc5e7
|
4
|
+
data.tar.gz: 8b56db026b2a0712f338a8a983c6540bfa8ed865
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4cec907465a00958ab204513169098326701d52b1b19869b78dba7864739a394c260c5c3844b28db9c4d3d6f1007fe65e0bfbeb12dc467e3d22f2723d2afefd
|
7
|
+
data.tar.gz: 7214b015047e8ec53868471c99477e6054a6543dc8ae0920a28c64b41e0128951c846c1e63faa38d248c9c6abd69331fff6e925996d65005cb6d68c5f3674b0f
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
> The plugin is updated often, this may include breaking changes.
|
2
|
+
|
1
3
|
# Vagrant G5K Provider
|
2
4
|
This is a [Vagrant](http://www.vagrantup.com) 1.2+ plugin that adds an [G5K](https://www.grid5000.fr)
|
3
5
|
provider to Vagrant, allowing Vagrant to control and provision **virtual machines** on Grid5000.
|
data/Vagrantfile
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
# -*- mode: ruby -*-
|
2
2
|
# vi: set ft=ruby :
|
3
3
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
|
4
|
+
# Sample Vagrantfile
|
5
|
+
#
|
7
6
|
Vagrant.configure(2) do |config|
|
8
7
|
|
9
8
|
config.vm.provider "g5k" do |g5k|
|
@@ -16,49 +15,64 @@ Vagrant.configure(2) do |config|
|
|
16
15
|
g5k.gateway = "access.grid5000.fr"
|
17
16
|
g5k.walltime = "01:00:00"
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
18
|
+
## Image backed by the ceph cluster
|
19
|
+
#g5k.image = {
|
20
|
+
# :pool => "msimonin_rbds",
|
21
|
+
# :rbd => "bases/ubuntu1404-9p",
|
22
|
+
# :snapshot => "parent",
|
23
|
+
# :id => "$USER",
|
24
|
+
# :conf => "$HOME/.ceph/config",
|
25
|
+
# :backing => "copy"
|
26
|
+
#}
|
27
|
+
|
29
28
|
# Image backed on the frontend filesystem
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
29
|
+
g5k.image = {
|
30
|
+
:path => "/grid5000/virt-images/alpine_docker.qcow2",
|
31
|
+
:backing => "copy"
|
32
|
+
}
|
34
33
|
|
35
|
-
|
36
|
-
#
|
37
|
-
#
|
34
|
+
## Bridged network : this allow VMs to communicate
|
35
|
+
#g5k.net = {
|
36
|
+
# :type => "bridge"
|
37
|
+
#}
|
38
|
+
|
39
|
+
## Nat network : VMs will only have access to the external world
|
40
|
+
## Forwarding ports will allow you to access services hosted inside the
|
41
|
+
## VM.
|
38
42
|
g5k.net = {
|
39
43
|
:type => "nat",
|
40
44
|
:ports => ["2222-:22"]
|
41
45
|
}
|
42
46
|
|
43
|
-
|
44
|
-
# oar selection of resource
|
47
|
+
## OAR selection of resource
|
45
48
|
g5k.oar = "virtual != 'none'"
|
46
|
-
end #g5k
|
47
49
|
|
50
|
+
## VM size customization default values are
|
51
|
+
## cpu => -1 -> all the cpu of the reserved node
|
52
|
+
## mem => -1 -> all the mem of the reserved node
|
53
|
+
##
|
54
|
+
#g5k.resources = {
|
55
|
+
# :cpu => 1,
|
56
|
+
# :mem => 2048
|
57
|
+
#}
|
58
|
+
end #g5k
|
48
59
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
60
|
+
## This define a VM.
|
61
|
+
## a g5k provider section will override top level options
|
62
|
+
## To define multiple VMs you can
|
63
|
+
## * either repeat the block
|
64
|
+
## * loop over using (1..N).each block
|
65
|
+
config.vm.define "vm" do |my|
|
66
|
+
my.vm.box = "dummy"
|
67
|
+
|
68
|
+
## Access to the vm
|
69
|
+
## This is specific to alpine_docker
|
70
|
+
## It's better to use a vagrant image
|
71
|
+
## converted to qcow2
|
72
|
+
my.ssh.username = "root"
|
73
|
+
my.ssh.password = ""
|
55
74
|
|
56
|
-
|
57
|
-
end
|
58
|
-
# Repeat block to define another vm
|
59
|
-
# config.vm.define "vm2" do |my|
|
60
|
-
#
|
61
|
-
# end
|
75
|
+
end #vm
|
62
76
|
|
63
77
|
end
|
64
78
|
|
data/lib/vagrant-g5k/config.rb
CHANGED
@@ -52,6 +52,12 @@ module VagrantPlugins
|
|
52
52
|
# @return [String]
|
53
53
|
attr_accessor :oar
|
54
54
|
|
55
|
+
# VM resource demand
|
56
|
+
#
|
57
|
+
#
|
58
|
+
# @return [Hash]
|
59
|
+
attr_accessor :resources
|
60
|
+
|
55
61
|
def initialize()
|
56
62
|
@username = ENV['USER']
|
57
63
|
@project_id = nil
|
@@ -60,13 +66,19 @@ module VagrantPlugins
|
|
60
66
|
@walltime = "01:00:00"
|
61
67
|
@oar = ""
|
62
68
|
@net = {
|
63
|
-
:type => 'nat'
|
64
|
-
|
69
|
+
:type => 'nat'
|
70
|
+
}
|
71
|
+
@resources = {
|
65
72
|
}
|
66
73
|
end
|
67
74
|
|
68
75
|
def finalize!()
|
69
|
-
#
|
76
|
+
# set default ssh redirection
|
77
|
+
if @net[:type] == 'nat' && @net[:ports].nil?
|
78
|
+
@net[:ports] = ["2222-:22"]
|
79
|
+
end
|
80
|
+
@resources[:cpu] = -1 if @resources[:cpu].nil?
|
81
|
+
@resources[:mem] = -1 if @resources[:mem].nil?
|
70
82
|
end
|
71
83
|
|
72
84
|
|
@@ -78,6 +90,7 @@ module VagrantPlugins
|
|
78
90
|
errors << "g5k image is required" if @image.nil?
|
79
91
|
errors << "g5k image must be a Hash" if !@image.is_a?(Hash)
|
80
92
|
errors << "g5k net must be a Hash" if !@net.is_a?(Hash)
|
93
|
+
errors << "g5k resources must be a Hash" if !@resources.is_a?(Hash)
|
81
94
|
|
82
95
|
{ "G5K Provider" => errors }
|
83
96
|
end
|
@@ -28,7 +28,8 @@ module VagrantPlugins
|
|
28
28
|
@walltime = @provider_config.walltime
|
29
29
|
@image= @provider_config.image
|
30
30
|
@oar = "{#{@provider_config.oar}}/" if @provider_config.oar != ""
|
31
|
-
|
31
|
+
@resources = @provider_config.resources
|
32
|
+
@oar_unit = init_oar_unit(@resources[:cpu], @resources[:mem])
|
32
33
|
@cwd = cwd
|
33
34
|
@driver = driver
|
34
35
|
@oar_driver = oar_driver
|
@@ -36,6 +37,15 @@ module VagrantPlugins
|
|
36
37
|
@disk_driver = disk_driver
|
37
38
|
end
|
38
39
|
|
40
|
+
def init_oar_unit(cpu, mem)
|
41
|
+
if cpu != -1 and mem != -1
|
42
|
+
unit = "core=#{cpu}"
|
43
|
+
else
|
44
|
+
unit = "nodes=1"
|
45
|
+
end
|
46
|
+
return unit
|
47
|
+
end
|
48
|
+
|
39
49
|
|
40
50
|
def create_local_working_dir()
|
41
51
|
exec("mkdir -p #{@cwd}")
|
@@ -86,12 +96,19 @@ module VagrantPlugins
|
|
86
96
|
net = @net_driver.generate_net()
|
87
97
|
drive = _generate_drive(env)
|
88
98
|
|
89
|
-
args = [net, drive].join(" ")
|
99
|
+
args = [@resources[:cpu], @resources[:mem], net, drive].join(" ")
|
90
100
|
# Submitting a new job
|
91
101
|
# Getting the job_id as a ruby string
|
102
|
+
options = []
|
103
|
+
|
104
|
+
if @oar_unit =~ /core/
|
105
|
+
# allow classic ssh only work when the node is reserved as a whole
|
106
|
+
# this implies that nat networking won't work when core is the unit of
|
107
|
+
# deployment
|
108
|
+
options << '-t allow_classic_ssh'
|
109
|
+
end
|
92
110
|
options = [
|
93
|
-
"-
|
94
|
-
"-l \"#{@oar}nodes=1, walltime=#{@walltime}\"",
|
111
|
+
"-l \"#{@oar}#{@oar_unit}, walltime=#{@walltime}\"",
|
95
112
|
"--name #{env[:machine].name}",
|
96
113
|
"--checkpoint 60",
|
97
114
|
"--signal 12"
|
data/lib/vagrant-g5k/oar.rb
CHANGED
@@ -78,7 +78,7 @@ module VagrantPlugins
|
|
78
78
|
def _process_errors(job_id)
|
79
79
|
job = check_job(job_id)
|
80
80
|
stderr_file = job["stderr_file"]
|
81
|
-
stderr = exec("cat #{stderr_file}")
|
81
|
+
stderr = @driver.exec("cat #{stderr_file}")
|
82
82
|
@ui.error("#{stderr_file}: #{stderr}")
|
83
83
|
raise VagrantPlugins::G5K::Errors::JobError
|
84
84
|
end
|
@@ -4,8 +4,15 @@
|
|
4
4
|
# Thanks to him !
|
5
5
|
# I've made some addition though :)
|
6
6
|
|
7
|
-
#
|
7
|
+
# ARGS
|
8
|
+
# $1: cpu demand
|
9
|
+
# $2: mem demand
|
10
|
+
# $3: net type {BRIDGE, NAT}
|
11
|
+
# BRIDGE | NAT
|
12
|
+
# $4 subnet_file | $left other net, drive options
|
13
|
+
# $left net/drive options
|
8
14
|
|
15
|
+
set -x
|
9
16
|
|
10
17
|
function net_bridge() {
|
11
18
|
SUBNET_FILE=$1
|
@@ -23,6 +30,29 @@ function net_bridge() {
|
|
23
30
|
echo "-net nic,model=virtio,macaddr=$MAC_ADDR -net tap,ifname=$TAP,script=no"
|
24
31
|
}
|
25
32
|
|
33
|
+
# CPU demand
|
34
|
+
if [ "$1" == "-1" ]
|
35
|
+
then
|
36
|
+
SMP=$(nproc)
|
37
|
+
else
|
38
|
+
SMP=$1
|
39
|
+
fi
|
40
|
+
echo "SMP = $SMP"
|
41
|
+
shift
|
42
|
+
|
43
|
+
# Memory demand
|
44
|
+
KEEP_SYSTEM_MEM=1 # Gb
|
45
|
+
if [ "$1" == "-1" ]
|
46
|
+
then
|
47
|
+
TOTAL_MEM=$(cat /proc/meminfo | grep -e '^MemTotal:' | awk '{print $2}')
|
48
|
+
VM_MEM=$(( ($TOTAL_MEM / 1024) - $KEEP_SYSTEM_MEM * 1024 ))
|
49
|
+
else
|
50
|
+
VM_MEM=$1
|
51
|
+
fi
|
52
|
+
echo "VM_MEM = $VM_MEM"
|
53
|
+
shift
|
54
|
+
|
55
|
+
# net demand
|
26
56
|
net=""
|
27
57
|
if [ "$1" == "BRIDGE" ]
|
28
58
|
then
|
@@ -40,14 +70,6 @@ fi
|
|
40
70
|
# Directory for qcow2 snapshots
|
41
71
|
export TMPDIR=/tmp
|
42
72
|
|
43
|
-
# Memory allocation
|
44
|
-
KEEP_SYSTEM_MEM=1 # Gb
|
45
|
-
TOTAL_MEM=$(cat /proc/meminfo | grep -e '^MemTotal:' | awk '{print $2}')
|
46
|
-
VM_MEM=$(( ($TOTAL_MEM / 1024) - $KEEP_SYSTEM_MEM * 1024 ))
|
47
|
-
|
48
|
-
# CPU
|
49
|
-
SMP=$(nproc)
|
50
|
-
|
51
73
|
# Clean shutdown of the VM at the end of the OAR job
|
52
74
|
clean_shutdown() {
|
53
75
|
echo "Caught shutdown signal at $(date)"
|
@@ -57,8 +79,7 @@ clean_shutdown() {
|
|
57
79
|
trap clean_shutdown 12
|
58
80
|
|
59
81
|
# Launch virtual machine
|
60
|
-
|
61
|
-
kvm -m $VM_MEM -smp $SMP -fsdev local,security_model=none,id=fsdev0,path=$HOME -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare -nographic -monitor unix:/tmp/vagrant-g5k.mon,server,nowait -localtime -enable-kvm $net $@ &
|
82
|
+
kvm -m $VM_MEM -smp cores=$SMP,threads=1,sockets=1 -fsdev local,security_model=none,id=fsdev0,path=$HOME -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare -nographic -monitor unix:/tmp/vagrant-g5k.mon,server,nowait -localtime -enable-kvm $net $@ &
|
62
83
|
|
63
84
|
wait
|
64
85
|
|
data/lib/vagrant-g5k/version.rb
CHANGED