Add volume create function

This commit is contained in:
kyg516 2016-09-11 19:57:07 +09:00
parent 1b2fefebb3
commit 1f8e23e6a5
5 changed files with 475 additions and 348 deletions

View File

@ -11,7 +11,7 @@ class HomeController < ApplicationController
current_dir = params[:current_dir]
directory_name = params[:directory_name]
puts "mkdir #{current_dir}/#{directory_name}"
`mkdir #{current_dir}/#{directory_name}`
`sudo mkdir #{current_dir}/#{directory_name}`
redirect_to '/home/index'
end
@ -19,7 +19,7 @@ class HomeController < ApplicationController
def delete_file
file_name = params[:file_name]
puts "rm #{file_name} -rf"
`rm #{file_name} -rf`
`sudo rm #{file_name} -rf`
redirect_to '/home/index'
end
end

View File

@ -35,7 +35,8 @@ class VolumeController < ApplicationController
end
def get_volume_info
return `sshpass -p#{@config["host_password"]} ssh #{@config["host_port"]} #{@config["host_user"]}@#{@config["host_ip"]} gluster volume info`
return `sshpass -p#{@config["host_password"]} ssh #{@config["host_port"]} #{@config["host_user"]}@#{@config["host_ip"]} \
gluster volume info`
end
def file_upload
@ -62,11 +63,26 @@ class VolumeController < ApplicationController
redirect_to '/volume/index'
end
def volume_create
volume_name = params[:volume_name]
bricks = params[:bricks]
bricks_str = ""
bricks.each do |t|
bricks_str << t
bricks_str << " "
end
puts "gluster volume create " + volume_name + " " + bricks_str + "force"
`sshpass -p#{@config["host_password"]} ssh #{@config["host_port"]} #{@config["host_user"]}@#{@config["host_ip"]} \
gluster volume create #{volume_name} #{bricks_str} force`
redirect_to '/volume/index'
end
def volume_stop
@config = get_conf
volume_name = params[:volume_name]
puts "gluster volume stop " + volume_name
`yes | sshpass -p#{@config["host_password"]} ssh #{@config["host_port"]} #{@config["host_user"]}@#{@config["host_ip"]} gluster volume stop #{volume_name}`
`yes | sshpass -p#{@config["host_password"]} ssh #{@config["host_port"]} #{@config["host_user"]}@#{@config["host_ip"]} \
gluster volume stop #{volume_name}`
redirect_to '/volume/index'
end
@ -74,7 +90,8 @@ class VolumeController < ApplicationController
@config = get_conf
volume_name = params[:volume_name]
puts "gluster volume start " + volume_name
`sshpass -p#{@config["host_password"]} ssh #{@config["host_port"]} #{@config["host_user"]}@#{@config["host_ip"]} gluster volume start #{volume_name}`
`sshpass -p#{@config["host_password"]} ssh #{@config["host_port"]} #{@config["host_user"]}@#{@config["host_ip"]} \
gluster volume start #{volume_name}`
redirect_to '/volume/index'
end
@ -83,7 +100,8 @@ class VolumeController < ApplicationController
@config = get_conf
volume_name = params[:volume_name]
puts "gluster volume delete " + volume_name
`yes | sshpass -p#{@config["host_password"]} ssh #{@config["host_port"]} #{@config["host_user"]}@#{@config["host_ip"]} gluster volume delete #{volume_name}`
`yes | sshpass -p#{@config["host_password"]} ssh #{@config["host_port"]} #{@config["host_user"]}@#{@config["host_ip"]} \
gluster volume delete #{volume_name}`
redirect_to '/volume/index'
end
end

View File

@ -1,5 +1,5 @@
<!-- create overlay page -->
<div id="popup_create" class="overlay">
<!-- create overlay page -->
<div id="popup_create" class="overlay">
<div class="popup">
<h2> Choose mount point </h2>
<a class="close" href="#">&times;</a>
@ -10,7 +10,7 @@
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="volume-name">Volume Name <span class="required">*</span>
</label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type="text" id="volume-name" required="required" class="form-control col-md-7 col-xs-12">
<input type="text" required="required" class="form-control col-md-7 col-xs-12">
</div>
</div>
@ -19,50 +19,59 @@
</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<select class="form-control">
<option>Distribute</option>
<option>Stripe</option>
<option>Replica</option>
<option>Arbiter</option>
<option>Disperse</option>
<option>Disperse-data</option>
<option>Redundancy</option>
<% ['Distribute', 'Stripe', 'Replica', 'Arbiter', 'Disperse', 'Disperse-data', 'Redundancy'].each do |types|%>
<option><%=types%></option>
<% end %>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12">Bricks <span class="required">*</span>
<label class="control-label col-md-3 col-sm-3 col-xs-12">Number of brick <span class="required">*</span>
</label>
<div class="col-md-3 col-sm-3 col-xs-3">
<div class="col-md-9 col-sm-9 col-xs-12">
<select class="form-control">
<option><%=@config['server_name']%></option>
<% for i in 1...11 do %>
<option><%=i%></option>
<% end %>
</select>
</div>
<div class="col-md-5 col-sm-5 col-xs-5">
<input type="text" id="bricks" required="required" class="form-control col-md-7 col-xs-12">
</div>
<div class="col-md-1 col-sm-1 col-xs-1">
<a href="#/plus" class="form-control"><i class="fa fa-plus"></i></a>
</div>
<div class="form-group">
<div class="row" style="margin:0 0 10px 0">
<label class="control-label col-md-3 col-sm-3 col-xs-12">Bricks <span class="required">*</span>
</label>
<div class="col-md-3 col-sm-3 col-xs-4">
<select class="form-control">
<option><%=@config["server_name"]%></option>
</select>
</div>
<div class="col-md-1 col-sm-1 col-xs-1">
<label class="control-label col-md-12 col-sm-12 col-xs-12">/
</label>
</div>
<div class="col-md-5 col-sm-5 col-xs-7">
<input type="text" required="required" class="form-control col-md-7 col-xs-12">
</div>
</div>
</div>
<div class="ln_solid"></div>
<div class="form-group">
<div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">
<button type="submit" class="btn btn-primary">Cancel</button>
<a href="#" class="btn btn-primary">Cancel</a>
<button type="submit" class="btn btn-success">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
<!-- mount overlay page -->
<div id="popup_mount" class="overlay">
<!-- mount overlay page -->
<div id="popup_mount" class="overlay">
<div class="popup">
<h2> Choose mount point </h2>
<a class="close" href="#">&times;</a>
@ -197,9 +206,6 @@
<!-- volume functions -->
<script>
function volume_create() {
}
function volume_mount(mnt_point) {
var url = window.location + '';
var vol_name = url.match(/volume_name=([^#]+)/)[1];
@ -241,7 +247,7 @@
$("#datatable_body").empty();
var new_tr = "";
new_tr += "<tr role='row' class='odd'> <td><i class='fa fa-reply'></i>";
new_tr += "<a style='cursor: pointer' onclick='change_upper(" + '"' + directory + '"' +")'> ..</a>";
nrailew_tr += "<a style='cursor: pointer' onclick='change_upper(" + '"' + directory + '"' +")'> ..</a>";
new_tr += "</td><td> </td><td> </td><td> </td></tr>";
for( var i = 0; i < result.file.length; i++){
if(result.file[i].auth[0] != "d") continue;
@ -262,7 +268,109 @@
</script>
<script>
$("#form_volume_create").change(function (){
console.log($("#form_volume_create option:selected").val());
// Volume type changed
$("#form_volume_create .form-group").eq(1).change(function (){
var $type = $(this).find("option:selected").val();
switch ($type) {
case "Distribute":
case "Stripe":
case "Replica":
case "Arbiter":
case "Disperse":
case "Disperse-data":
case "Redundancy":
console.log($type);
break;
default:
console.log("something goes wrong");
break;
}
})
// Number of bricks changed
$("#form_volume_create .form-group").eq(2).change(function (){
var $num_of_brick = $(this).find("option:selected").val();
var $body = $("#form_volume_create .form-group").eq(3);
$body.empty();
var new_body = "";
for(var i = 0; i < $num_of_brick; ++i) {
new_body += "<div class='row' style='margin:0 0 10px 0'>";
new_body += "<label class='control-label col-md-3 col-sm-3 col-xs-12'>";
if(i == 0)
new_body += "Bricks <span class='required'>*</span>";
new_body += "</label>";
new_body += "<div class='col-md-3 col-sm-3 col-xs-4'>";
new_body += "<select class='form-control'>";
new_body += "<option><%=@config['server_name']%></option>";
new_body += "</select>";
new_body += "</div>";
new_body += "<div class='col-md-1 col-sm-1 col-xs-1'>"
new_body += "<label class='control-label col-md-12 col-sm-12 col-xs-12'>/"
new_body += "</label>"
new_body += "</div>"
new_body += "<div class='col-md-5 col-sm-5 col-xs-7'>";
new_body += "<input type='text' required='required' class='form-control col-md-7 col-xs-12'>";
new_body += "</div>";
new_body += "</div>";
}
$body.append(new_body);
})
$("#form_volume_create").submit(function(){
var volume_name = $(this).find(".form-group:eq(0) input").val();
var volume_type = $(this).find(".form-group:eq(1) option:selected").val();
var num_of_brick = $(this).find(".form-group:eq(2) option:selected").val() * 1; // convert to Number type
var bricks = [];
// error check
if(volume_name.indexOf(' ') >= 0){
alert("Volume name can't contains white spaces");
return;
}
<% @volumes.each do |t| %>
if(volume_name == "<%=t["Volume Name"].delete(' ')%>"){
alert("Already has a volume which name is same");
return;
}
<% end %>
for(var i = 0; i < num_of_brick; i++){
var server_name = $(this).find(".form-group .row").eq(i).find("option:selected").val();
var brick_name = $(this).find(".form-group .row").eq(i).find("input").val();
if(brick_name.indexOf(' ') >= 0) {
alert("Brick name can't contain white spaces");
return;
}
if(brick_name.indexOf('/') == 0) {
alert("Brick name can't start with slash");
return;
}
var brick = "";
if(server_name == "<%=@config['server_name']%>"){
brick += "<%=@config['host_ip']%>";
brick += "/";
brick += brick_name;
bricks.push(brick);
console.log(brick);
}
else{
alert("Something goes wrong!");
return;
}
}
console.log("Create volume..");
$.ajax({
method: "POST",
url: "/volume/create",
data: { volume_name : volume_name, bricks : bricks },
success : function(result){
console.log("volume create success");
}
})
});
</script>

View File

@ -20,6 +20,7 @@ Rails.application.routes.draw do
get 'volume/index' => 'volume#index'
post 'file_upload' => 'volume#file_upload'
post 'volume/mount' => "volume#volume_mount"
post 'volume/create' => "volume#volume_create"
get 'volume/unmount/:volume_name' => "volume#volume_unmount"
get 'volume/start/:volume_name' => "volume#volume_start"
get 'volume/stop/:volume_name' => "volume#volume_stop"