mirror of
https://github.com/OpenNebula/one.git
synced 2025-01-11 05:17:41 +03:00
F #1147: Permit to rename disk snapshot names in Sunstone
Author: Abel Coronado <acoronado@opennebula.systems> Author: Christian González <cgonzalez@opennebula.systems>
This commit is contained in:
parent
c3af68655b
commit
2e410af2ce
@ -76,7 +76,8 @@ public:
|
|||||||
DISK_SNAPSHOT_REVERT_ACTION = 41, // "one.vm.disksnapshotrevert"
|
DISK_SNAPSHOT_REVERT_ACTION = 41, // "one.vm.disksnapshotrevert"
|
||||||
RECOVER_ACTION = 42, // "one.vm.recover"
|
RECOVER_ACTION = 42, // "one.vm.recover"
|
||||||
RETRY_ACTION = 43, // "one.vm.recover"
|
RETRY_ACTION = 43, // "one.vm.recover"
|
||||||
MONITOR_ACTION = 44 // internal, monitoring process
|
MONITOR_ACTION = 44, // internal, monitoring process
|
||||||
|
DISK_SNAPSHOT_RENAME_ACTION = 45 // "one.vm.disksnapshotrename"
|
||||||
};
|
};
|
||||||
|
|
||||||
static string action_to_str(VMAction action);
|
static string action_to_str(VMAction action);
|
||||||
|
@ -523,6 +523,28 @@ private:
|
|||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
class VirtualMachineDiskSnapshotRename: public RequestManagerVirtualMachine
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
VirtualMachineDiskSnapshotRename():
|
||||||
|
RequestManagerVirtualMachine("one.vm.disksnapshotrename",
|
||||||
|
"Rename a disk snapshot",
|
||||||
|
"A:siiis"){
|
||||||
|
Nebula& nd = Nebula::instance();
|
||||||
|
|
||||||
|
//All VM disk snapshot operations are set to the same auth value
|
||||||
|
auth_op = nd.get_vm_auth_op(History::DISK_SNAPSHOT_RENAME_ACTION);
|
||||||
|
};
|
||||||
|
|
||||||
|
~VirtualMachineDiskSnapshotRename(){};
|
||||||
|
|
||||||
|
void request_execute(xmlrpc_c::paramList const& _paramList,
|
||||||
|
RequestAttributes& att);
|
||||||
|
};
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
class VirtualMachineUpdateConf: public RequestManagerVirtualMachine
|
class VirtualMachineUpdateConf: public RequestManagerVirtualMachine
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -101,6 +101,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
int active_snapshot(int id);
|
int active_snapshot(int id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rename the given snapshot by the given name
|
||||||
|
*/
|
||||||
|
|
||||||
|
int rename_snapshot(int id, const string& name, string& str_error);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear all the snapshots in the list
|
* Clear all the snapshots in the list
|
||||||
*/
|
*/
|
||||||
|
@ -1491,6 +1491,19 @@ public:
|
|||||||
disks.delete_snapshot(disk_id, snap_id, ds_quotas, vm_quotas, io, vo);
|
disks.delete_snapshot(disk_id, snap_id, ds_quotas, vm_quotas, io, vo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renames the snap_id from the list
|
||||||
|
* @param disk_id of the disk
|
||||||
|
* @param snap_id of the snapshot
|
||||||
|
* @param new_name of the snapshot
|
||||||
|
* @return 0 on success
|
||||||
|
*/
|
||||||
|
int rename_disk_snapshot(int disk_id, int snap_id, const string& new_name,
|
||||||
|
string& error_str)
|
||||||
|
{
|
||||||
|
return disks.rename_snapshot(disk_id, snap_id, new_name, error_str);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes all the disk snapshots for non-persistent disks and for persistent
|
* Deletes all the disk snapshots for non-persistent disks and for persistent
|
||||||
* disks in no shared system ds.
|
* disks in no shared system ds.
|
||||||
|
@ -256,6 +256,24 @@ public:
|
|||||||
return (snapshots != 0);
|
return (snapshots != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renames a snapshot
|
||||||
|
*
|
||||||
|
* @param id_snap of the snapshot
|
||||||
|
* @param new_name of the snapshot
|
||||||
|
* @return 0 on success
|
||||||
|
*/
|
||||||
|
int rename_snapshot(int snap_id, const string& new_name, string& str_error)
|
||||||
|
{
|
||||||
|
if (!snapshots)
|
||||||
|
{
|
||||||
|
str_error = "The VM does not have any snapshot";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return snapshots->rename_snapshot(snap_id, new_name, str_error);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new snapshot of the disk
|
* Creates a new snapshot of the disk
|
||||||
* @param name a description for this snapshot
|
* @param name a description for this snapshot
|
||||||
@ -740,6 +758,15 @@ public:
|
|||||||
void delete_snapshot(int disk_id, int snap_id, Template **ds_quota,
|
void delete_snapshot(int disk_id, int snap_id, Template **ds_quota,
|
||||||
Template **vm_quota, bool& io, bool& vo);
|
Template **vm_quota, bool& io, bool& vo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renames a given snapshot
|
||||||
|
* @param disk_id of the disk
|
||||||
|
* @param snap_id of the snapshot
|
||||||
|
* @param new_name of the snapshot
|
||||||
|
* @return 0 on success
|
||||||
|
*/
|
||||||
|
int rename_snapshot(int disk_id, int snap_id, const string& new_name, string& str_error);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes all the disk snapshots for non-persistent disks and for persistent
|
* Deletes all the disk snapshots for non-persistent disks and for persistent
|
||||||
* disks in no shared system ds.
|
* disks in no shared system ds.
|
||||||
|
@ -76,6 +76,7 @@
|
|||||||
RECOVER_ACTION = 42
|
RECOVER_ACTION = 42
|
||||||
RETRY_ACTION = 43
|
RETRY_ACTION = 43
|
||||||
MONITOR_ACTION = 44
|
MONITOR_ACTION = 44
|
||||||
|
DISK_SNAPSHOT_RENAME_ACTION = 45
|
||||||
-->
|
-->
|
||||||
<xs:element name="ACTION" type="xs:integer"/>
|
<xs:element name="ACTION" type="xs:integer"/>
|
||||||
<xs:element name="UID" type="xs:integer"/>
|
<xs:element name="UID" type="xs:integer"/>
|
||||||
|
@ -181,6 +181,7 @@
|
|||||||
RECOVER_ACTION = 42
|
RECOVER_ACTION = 42
|
||||||
RETRY_ACTION = 43
|
RETRY_ACTION = 43
|
||||||
MONITOR_ACTION = 44
|
MONITOR_ACTION = 44
|
||||||
|
DISK_SNAPSHOT_RENAME_ACTION = 45
|
||||||
-->
|
-->
|
||||||
<xs:element name="ACTION" type="xs:integer"/>
|
<xs:element name="ACTION" type="xs:integer"/>
|
||||||
<xs:element name="UID" type="xs:integer"/>
|
<xs:element name="UID" type="xs:integer"/>
|
||||||
|
@ -876,6 +876,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|||||||
|
|
||||||
States: RUNNING, POWEROFF, SUSPENDED
|
States: RUNNING, POWEROFF, SUSPENDED
|
||||||
EOT
|
EOT
|
||||||
|
|
||||||
command :"disk-snapshot-delete", disk_snapshot_delete_desc,
|
command :"disk-snapshot-delete", disk_snapshot_delete_desc,
|
||||||
:vmid, :diskid, :disk_snapshot_id do
|
:vmid, :diskid, :disk_snapshot_id do
|
||||||
helper.perform_action(args[0],options,"disk snapshot deleted") do |o|
|
helper.perform_action(args[0],options,"disk snapshot deleted") do |o|
|
||||||
@ -883,6 +884,23 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
disk_snapshot_rename_desc = <<-EOT.unindent
|
||||||
|
Renames a disk snapshot.
|
||||||
|
EOT
|
||||||
|
|
||||||
|
command :"disk-snapshot-rename", disk_snapshot_rename_desc,
|
||||||
|
:vmid, :diskid, :disk_snapshot_id, :new_snapshot_name do
|
||||||
|
helper.perform_action(args[0],options,"disk snapshot rename") do |o|
|
||||||
|
is_num = true if Integer(args[2]) rescue false
|
||||||
|
|
||||||
|
if !is_num
|
||||||
|
OpenNebula::Error.new("The disk snapshot ID must be an integer")
|
||||||
|
else
|
||||||
|
o.disk_snapshot_rename(args[1].to_i, args[2].to_i, args[3].to_s)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
disk_resize_desc = <<-EOT.unindent
|
disk_resize_desc = <<-EOT.unindent
|
||||||
Resizes a VM disk. The new size should be larger than the old one.
|
Resizes a VM disk. The new size should be larger than the old one.
|
||||||
The valid units are:
|
The valid units are:
|
||||||
|
@ -794,6 +794,7 @@ static int _set_vm_auth_ops(const std::string& ops_str,
|
|||||||
ops_set.set(History::DISK_SNAPSHOT_CREATE_ACTION);
|
ops_set.set(History::DISK_SNAPSHOT_CREATE_ACTION);
|
||||||
ops_set.set(History::DISK_SNAPSHOT_DELETE_ACTION);
|
ops_set.set(History::DISK_SNAPSHOT_DELETE_ACTION);
|
||||||
ops_set.set(History::DISK_SNAPSHOT_REVERT_ACTION);
|
ops_set.set(History::DISK_SNAPSHOT_REVERT_ACTION);
|
||||||
|
ops_set.set(History::DISK_SNAPSHOT_RENAME_ACTION);
|
||||||
}
|
}
|
||||||
else if ( the_op == "terminate" )
|
else if ( the_op == "terminate" )
|
||||||
{
|
{
|
||||||
|
@ -691,6 +691,12 @@ func (vm *VM) SnapshotRevert(snapID int) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DiskSnapshotRename renames a snapshot
|
||||||
|
func (vm *VM) DiskSnapshotRename(diskID, snapID int, newName string) error {
|
||||||
|
_, err := client.Call("one.vm.disksnapshotrename", vm.ID, diskID, snapID, newName)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Attach a new disk to the virtual machine. diskTemplate is a string containing
|
// Attach a new disk to the virtual machine. diskTemplate is a string containing
|
||||||
// a single DISK vector attribute. Syntax can be the usual attribute=value or
|
// a single DISK vector attribute. Syntax can be the usual attribute=value or
|
||||||
// XML
|
// XML
|
||||||
|
@ -51,6 +51,7 @@ public class VirtualMachine extends PoolElement{
|
|||||||
private static final String DISKSNAPSHOTCREATE = METHOD_PREFIX + "disksnapshotcreate";
|
private static final String DISKSNAPSHOTCREATE = METHOD_PREFIX + "disksnapshotcreate";
|
||||||
private static final String DISKSNAPSHOTREVERT = METHOD_PREFIX + "disksnapshotrevert";
|
private static final String DISKSNAPSHOTREVERT = METHOD_PREFIX + "disksnapshotrevert";
|
||||||
private static final String DISKSNAPSHOTDELETE = METHOD_PREFIX + "disksnapshotdelete";
|
private static final String DISKSNAPSHOTDELETE = METHOD_PREFIX + "disksnapshotdelete";
|
||||||
|
private static final String DISKSNAPSHOTRENAME = METHOD_PREFIX + "disksnapshotrename";
|
||||||
private static final String DISKRESIZE = METHOD_PREFIX + "diskresize";
|
private static final String DISKRESIZE = METHOD_PREFIX + "diskresize";
|
||||||
private static final String UPDATECONF = METHOD_PREFIX + "updateconf";
|
private static final String UPDATECONF = METHOD_PREFIX + "updateconf";
|
||||||
|
|
||||||
@ -575,6 +576,23 @@ public class VirtualMachine extends PoolElement{
|
|||||||
return client.call(DISKSNAPSHOTDELETE, id, diskId, snapId);
|
return client.call(DISKSNAPSHOTDELETE, id, diskId, snapId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes a disk snapshot
|
||||||
|
*
|
||||||
|
* @param client XML-RPC Client.
|
||||||
|
* @param id The VM id of the target VM.
|
||||||
|
* @param diskId Id of the disk
|
||||||
|
* @param snapId Id of the snapshot
|
||||||
|
* @param new_name New name of the snapshot
|
||||||
|
* @return If an error occurs the error message contains the reason.
|
||||||
|
*/
|
||||||
|
public static OneResponse diskSnapshotRename(Client client, int id,
|
||||||
|
int diskId, int snapId, String new_name)
|
||||||
|
{
|
||||||
|
return client.call(DISKSNAPSHOTRENAME, id, diskId, snapId, new_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resize VM disk
|
* Resize VM disk
|
||||||
*
|
*
|
||||||
|
@ -46,6 +46,7 @@ module OpenNebula
|
|||||||
:disksnapshotcreate => "vm.disksnapshotcreate",
|
:disksnapshotcreate => "vm.disksnapshotcreate",
|
||||||
:disksnapshotrevert => "vm.disksnapshotrevert",
|
:disksnapshotrevert => "vm.disksnapshotrevert",
|
||||||
:disksnapshotdelete => "vm.disksnapshotdelete",
|
:disksnapshotdelete => "vm.disksnapshotdelete",
|
||||||
|
:disksnapshotrename => "vm.disksnapshotrename",
|
||||||
:diskresize => "vm.diskresize",
|
:diskresize => "vm.diskresize",
|
||||||
:updateconf => "vm.updateconf",
|
:updateconf => "vm.updateconf",
|
||||||
:lock => "vm.lock",
|
:lock => "vm.lock",
|
||||||
@ -211,7 +212,7 @@ module OpenNebula
|
|||||||
disk-snapshot-create disk-snapshot-delete terminate terminate-hard
|
disk-snapshot-create disk-snapshot-delete terminate terminate-hard
|
||||||
disk-resize deploy chown chmod updateconf rename resize update
|
disk-resize deploy chown chmod updateconf rename resize update
|
||||||
snapshot-resize snapshot-delete snapshot-revert disk-saveas
|
snapshot-resize snapshot-delete snapshot-revert disk-saveas
|
||||||
disk-snapshot-revert recover retry monitor}
|
disk-snapshot-revert recover retry monitor disk-snapshot-rename}
|
||||||
|
|
||||||
EXTERNAL_IP_ATTRS = [
|
EXTERNAL_IP_ATTRS = [
|
||||||
'GUEST_IP',
|
'GUEST_IP',
|
||||||
@ -651,6 +652,18 @@ module OpenNebula
|
|||||||
return call(VM_METHODS[:disksnapshotdelete], @pe_id, disk_id, snap_id)
|
return call(VM_METHODS[:disksnapshotdelete], @pe_id, disk_id, snap_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Renames a disk snapshot
|
||||||
|
#
|
||||||
|
# @param disk_id [Integer] Id of the disk
|
||||||
|
# @param snap_id [Integer] Id of the snapshot
|
||||||
|
# @param new_name [String] New name for the snapshot
|
||||||
|
#
|
||||||
|
# @return [nil, OpenNebula::Error] nil in case of success, Error
|
||||||
|
# otherwise
|
||||||
|
def disk_snapshot_rename(disk_id, snap_id, new_name)
|
||||||
|
return call(VM_METHODS[:disksnapshotrename], @pe_id, disk_id, snap_id, new_name)
|
||||||
|
end
|
||||||
|
|
||||||
# Changes the size of a disk
|
# Changes the size of a disk
|
||||||
#
|
#
|
||||||
# @param disk_id [Integer] Id of the disk
|
# @param disk_id [Integer] Id of the disk
|
||||||
|
@ -376,6 +376,7 @@ void RequestManager::register_xml_methods()
|
|||||||
xmlrpc_c::methodPtr vm_dsnap_create(new VirtualMachineDiskSnapshotCreate());
|
xmlrpc_c::methodPtr vm_dsnap_create(new VirtualMachineDiskSnapshotCreate());
|
||||||
xmlrpc_c::methodPtr vm_dsnap_revert(new VirtualMachineDiskSnapshotRevert());
|
xmlrpc_c::methodPtr vm_dsnap_revert(new VirtualMachineDiskSnapshotRevert());
|
||||||
xmlrpc_c::methodPtr vm_dsnap_delete(new VirtualMachineDiskSnapshotDelete());
|
xmlrpc_c::methodPtr vm_dsnap_delete(new VirtualMachineDiskSnapshotDelete());
|
||||||
|
xmlrpc_c::methodPtr vm_dsnap_rename(new VirtualMachineDiskSnapshotRename());
|
||||||
xmlrpc_c::methodPtr vm_recover(new VirtualMachineRecover());
|
xmlrpc_c::methodPtr vm_recover(new VirtualMachineRecover());
|
||||||
xmlrpc_c::methodPtr vm_updateconf(new VirtualMachineUpdateConf());
|
xmlrpc_c::methodPtr vm_updateconf(new VirtualMachineUpdateConf());
|
||||||
xmlrpc_c::methodPtr vm_disk_resize(new VirtualMachineDiskResize());
|
xmlrpc_c::methodPtr vm_disk_resize(new VirtualMachineDiskResize());
|
||||||
@ -577,6 +578,7 @@ void RequestManager::register_xml_methods()
|
|||||||
RequestManagerRegistry.addMethod("one.vm.disksnapshotcreate", vm_dsnap_create);
|
RequestManagerRegistry.addMethod("one.vm.disksnapshotcreate", vm_dsnap_create);
|
||||||
RequestManagerRegistry.addMethod("one.vm.disksnapshotrevert", vm_dsnap_revert);
|
RequestManagerRegistry.addMethod("one.vm.disksnapshotrevert", vm_dsnap_revert);
|
||||||
RequestManagerRegistry.addMethod("one.vm.disksnapshotdelete", vm_dsnap_delete);
|
RequestManagerRegistry.addMethod("one.vm.disksnapshotdelete", vm_dsnap_delete);
|
||||||
|
RequestManagerRegistry.addMethod("one.vm.disksnapshotrename", vm_dsnap_rename);
|
||||||
RequestManagerRegistry.addMethod("one.vm.recover", vm_recover);
|
RequestManagerRegistry.addMethod("one.vm.recover", vm_recover);
|
||||||
RequestManagerRegistry.addMethod("one.vm.updateconf", vm_updateconf);
|
RequestManagerRegistry.addMethod("one.vm.updateconf", vm_updateconf);
|
||||||
RequestManagerRegistry.addMethod("one.vm.lock", vm_lock);
|
RequestManagerRegistry.addMethod("one.vm.lock", vm_lock);
|
||||||
|
@ -2978,6 +2978,72 @@ void VirtualMachineDiskSnapshotDelete::request_execute(
|
|||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void VirtualMachineDiskSnapshotRename::request_execute(xmlrpc_c::paramList const& paramList,
|
||||||
|
RequestAttributes& att)
|
||||||
|
{
|
||||||
|
VirtualMachine * vm;
|
||||||
|
|
||||||
|
ostringstream oss;
|
||||||
|
|
||||||
|
const VirtualMachineDisk * disk;
|
||||||
|
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
int id = xmlrpc_c::value_int(paramList.getInt(1));
|
||||||
|
int did = xmlrpc_c::value_int(paramList.getInt(2));
|
||||||
|
int snap_id = xmlrpc_c::value_int(paramList.getInt(3));
|
||||||
|
string new_snap_name = xmlrpc_c::value_string(paramList.getString(4));
|
||||||
|
|
||||||
|
if ( vm_authorization(id, 0, 0, att, 0, 0, 0, auth_op) == false )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((vm = get_vm(id, att)) == 0)
|
||||||
|
{
|
||||||
|
oss << "Could not rename the snapshot for VM " << id
|
||||||
|
<< ", VM does not exist";
|
||||||
|
|
||||||
|
att.resp_msg = oss.str();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
disk = (const_cast<const VirtualMachine *>(vm))->get_disk(did);
|
||||||
|
|
||||||
|
if (disk == 0)
|
||||||
|
{
|
||||||
|
att.resp_msg = "VM disk does not exist";
|
||||||
|
failure_response(ACTION, att);
|
||||||
|
|
||||||
|
vm->unlock();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = vm->rename_disk_snapshot(did, snap_id, new_snap_name, att.resp_msg);
|
||||||
|
|
||||||
|
if ( rc != 0 )
|
||||||
|
{
|
||||||
|
failure_response(ACTION, att);
|
||||||
|
|
||||||
|
vm->unlock();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
success_response(id, att);
|
||||||
|
|
||||||
|
pool->update(vm);
|
||||||
|
|
||||||
|
vm->unlock();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void VirtualMachineUpdateConf::request_execute(
|
void VirtualMachineUpdateConf::request_execute(
|
||||||
xmlrpc_c::paramList const& paramList, RequestAttributes& att)
|
xmlrpc_c::paramList const& paramList, RequestAttributes& att)
|
||||||
{
|
{
|
||||||
|
@ -395,6 +395,7 @@ tabs:
|
|||||||
VM.snapshot_delete: true
|
VM.snapshot_delete: true
|
||||||
VM.disk_snapshot_create: true
|
VM.disk_snapshot_create: true
|
||||||
VM.disk_snapshot_revert: true
|
VM.disk_snapshot_revert: true
|
||||||
|
VM.disk_snapshot_rename: true
|
||||||
VM.disk_snapshot_delete: true
|
VM.disk_snapshot_delete: true
|
||||||
VM.resched: true
|
VM.resched: true
|
||||||
VM.unresched: true
|
VM.unresched: true
|
||||||
|
@ -84,6 +84,7 @@ tabs:
|
|||||||
VM.snapshot_delete: true
|
VM.snapshot_delete: true
|
||||||
VM.disk_snapshot_create: true
|
VM.disk_snapshot_create: true
|
||||||
VM.disk_snapshot_revert: true
|
VM.disk_snapshot_revert: true
|
||||||
|
VM.disk_snapshot_rename: true
|
||||||
VM.disk_snapshot_delete: true
|
VM.disk_snapshot_delete: true
|
||||||
VM.save_as_template: true
|
VM.save_as_template: true
|
||||||
VM.lockU: true
|
VM.lockU: true
|
||||||
|
@ -394,6 +394,7 @@ tabs:
|
|||||||
VM.snapshot_delete: false
|
VM.snapshot_delete: false
|
||||||
VM.disk_snapshot_create: false
|
VM.disk_snapshot_create: false
|
||||||
VM.disk_snapshot_revert: false
|
VM.disk_snapshot_revert: false
|
||||||
|
VM.disk_snapshot_rename: false
|
||||||
VM.disk_snapshot_delete: false
|
VM.disk_snapshot_delete: false
|
||||||
VM.resched: false
|
VM.resched: false
|
||||||
VM.unresched: false
|
VM.unresched: false
|
||||||
|
@ -387,6 +387,7 @@ tabs:
|
|||||||
VM.snapshot_delete: true
|
VM.snapshot_delete: true
|
||||||
VM.disk_snapshot_create: true
|
VM.disk_snapshot_create: true
|
||||||
VM.disk_snapshot_revert: true
|
VM.disk_snapshot_revert: true
|
||||||
|
VM.disk_snapshot_rename: true
|
||||||
VM.disk_snapshot_delete: true
|
VM.disk_snapshot_delete: true
|
||||||
VM.resched: false
|
VM.resched: false
|
||||||
VM.unresched: false
|
VM.unresched: false
|
||||||
|
@ -395,6 +395,7 @@ tabs:
|
|||||||
VM.snapshot_delete: true
|
VM.snapshot_delete: true
|
||||||
VM.disk_snapshot_create: true
|
VM.disk_snapshot_create: true
|
||||||
VM.disk_snapshot_revert: true
|
VM.disk_snapshot_revert: true
|
||||||
|
VM.disk_snapshot_rename: true
|
||||||
VM.disk_snapshot_delete: true
|
VM.disk_snapshot_delete: true
|
||||||
VM.resched: true
|
VM.resched: true
|
||||||
VM.unresched: true
|
VM.unresched: true
|
||||||
|
@ -84,6 +84,7 @@ tabs:
|
|||||||
VM.snapshot_delete: true
|
VM.snapshot_delete: true
|
||||||
VM.disk_snapshot_create: true
|
VM.disk_snapshot_create: true
|
||||||
VM.disk_snapshot_revert: true
|
VM.disk_snapshot_revert: true
|
||||||
|
VM.disk_snapshot_rename: true
|
||||||
VM.disk_snapshot_delete: true
|
VM.disk_snapshot_delete: true
|
||||||
VM.save_as_template: true
|
VM.save_as_template: true
|
||||||
VM.lockU: true
|
VM.lockU: true
|
||||||
|
@ -394,6 +394,7 @@ tabs:
|
|||||||
VM.snapshot_delete: false
|
VM.snapshot_delete: false
|
||||||
VM.disk_snapshot_create: false
|
VM.disk_snapshot_create: false
|
||||||
VM.disk_snapshot_revert: false
|
VM.disk_snapshot_revert: false
|
||||||
|
VM.disk_snapshot_rename: false
|
||||||
VM.disk_snapshot_delete: false
|
VM.disk_snapshot_delete: false
|
||||||
VM.resched: false
|
VM.resched: false
|
||||||
VM.unresched: false
|
VM.unresched: false
|
||||||
|
@ -387,6 +387,7 @@ tabs:
|
|||||||
VM.snapshot_delete: true
|
VM.snapshot_delete: true
|
||||||
VM.disk_snapshot_create: true
|
VM.disk_snapshot_create: true
|
||||||
VM.disk_snapshot_revert: true
|
VM.disk_snapshot_revert: true
|
||||||
|
VM.disk_snapshot_rename: true
|
||||||
VM.disk_snapshot_delete: true
|
VM.disk_snapshot_delete: true
|
||||||
VM.resched: false
|
VM.resched: false
|
||||||
VM.unresched: false
|
VM.unresched: false
|
||||||
|
@ -393,6 +393,7 @@ tabs:
|
|||||||
VM.snapshot_delete: true
|
VM.snapshot_delete: true
|
||||||
VM.disk_snapshot_create: false
|
VM.disk_snapshot_create: false
|
||||||
VM.disk_snapshot_revert: false
|
VM.disk_snapshot_revert: false
|
||||||
|
VM.disk_snapshot_rename: false
|
||||||
VM.disk_snapshot_delete: false
|
VM.disk_snapshot_delete: false
|
||||||
VM.resched: true
|
VM.resched: true
|
||||||
VM.unresched: true
|
VM.unresched: true
|
||||||
|
@ -85,6 +85,7 @@ tabs:
|
|||||||
VM.snapshot_delete: true
|
VM.snapshot_delete: true
|
||||||
VM.disk_snapshot_create: true
|
VM.disk_snapshot_create: true
|
||||||
VM.disk_snapshot_revert: true
|
VM.disk_snapshot_revert: true
|
||||||
|
VM.disk_snapshot_rename: true
|
||||||
VM.disk_snapshot_delete: true
|
VM.disk_snapshot_delete: true
|
||||||
VM.save_as_template: true
|
VM.save_as_template: true
|
||||||
VM.lockU: true
|
VM.lockU: true
|
||||||
|
@ -394,6 +394,7 @@ tabs:
|
|||||||
VM.snapshot_delete: false
|
VM.snapshot_delete: false
|
||||||
VM.disk_snapshot_create: false
|
VM.disk_snapshot_create: false
|
||||||
VM.disk_snapshot_revert: false
|
VM.disk_snapshot_revert: false
|
||||||
|
VM.disk_snapshot_rename: false
|
||||||
VM.disk_snapshot_delete: false
|
VM.disk_snapshot_delete: false
|
||||||
VM.resched: false
|
VM.resched: false
|
||||||
VM.unresched: false
|
VM.unresched: false
|
||||||
|
@ -387,6 +387,7 @@ tabs:
|
|||||||
VM.snapshot_delete: true
|
VM.snapshot_delete: true
|
||||||
VM.disk_snapshot_create: true
|
VM.disk_snapshot_create: true
|
||||||
VM.disk_snapshot_revert: true
|
VM.disk_snapshot_revert: true
|
||||||
|
VM.disk_snapshot_rename: true
|
||||||
VM.disk_snapshot_delete: true
|
VM.disk_snapshot_delete: true
|
||||||
VM.resched: false
|
VM.resched: false
|
||||||
VM.unresched: false
|
VM.unresched: false
|
||||||
|
@ -57,6 +57,7 @@ module OpenNebulaJSON
|
|||||||
when "snapshot_delete" then self.snapshot_delete(action_hash['params'])
|
when "snapshot_delete" then self.snapshot_delete(action_hash['params'])
|
||||||
when "disk_snapshot_create" then self.disk_snapshot_create(action_hash['params'])
|
when "disk_snapshot_create" then self.disk_snapshot_create(action_hash['params'])
|
||||||
when "disk_snapshot_revert" then self.disk_snapshot_revert(action_hash['params'])
|
when "disk_snapshot_revert" then self.disk_snapshot_revert(action_hash['params'])
|
||||||
|
when "disk_snapshot_rename" then self.disk_snapshot_rename(action_hash['params'])
|
||||||
when "disk_snapshot_delete" then self.disk_snapshot_delete(action_hash['params'])
|
when "disk_snapshot_delete" then self.disk_snapshot_delete(action_hash['params'])
|
||||||
when "terminate" then self.terminate(action_hash['params'])
|
when "terminate" then self.terminate(action_hash['params'])
|
||||||
when "reboot" then self.reboot(action_hash['params'])
|
when "reboot" then self.reboot(action_hash['params'])
|
||||||
@ -139,6 +140,10 @@ module OpenNebulaJSON
|
|||||||
super(params['disk_id'].to_i, params['snapshot_id'].to_i)
|
super(params['disk_id'].to_i, params['snapshot_id'].to_i)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def disk_snapshot_rename(params=Hash.new)
|
||||||
|
super(params['disk_id'].to_i, params['snapshot_id'].to_i, params['new_name'])
|
||||||
|
end
|
||||||
|
|
||||||
def disk_snapshot_delete(params=Hash.new)
|
def disk_snapshot_delete(params=Hash.new)
|
||||||
super(params['disk_id'].to_i, params['snapshot_id'].to_i)
|
super(params['disk_id'].to_i, params['snapshot_id'].to_i)
|
||||||
end
|
end
|
||||||
|
@ -471,6 +471,10 @@ define(function(require) {
|
|||||||
var action_obj = params.data.extra_param;
|
var action_obj = params.data.extra_param;
|
||||||
OpenNebulaAction.simple_action(params, RESOURCE, "disk_snapshot_revert", action_obj);
|
OpenNebulaAction.simple_action(params, RESOURCE, "disk_snapshot_revert", action_obj);
|
||||||
},
|
},
|
||||||
|
"disk_snapshot_rename": function(params) {
|
||||||
|
var action_obj = params.data.extra_param;
|
||||||
|
OpenNebulaAction.simple_action(params, RESOURCE, "disk_snapshot_rename", action_obj);
|
||||||
|
},
|
||||||
"disk_snapshot_delete": function(params) {
|
"disk_snapshot_delete": function(params) {
|
||||||
var action_obj = params.data.extra_param;
|
var action_obj = params.data.extra_param;
|
||||||
OpenNebulaAction.simple_action(params, RESOURCE, "disk_snapshot_delete", action_obj);
|
OpenNebulaAction.simple_action(params, RESOURCE, "disk_snapshot_delete", action_obj);
|
||||||
|
@ -736,6 +736,7 @@ define(function(require) {
|
|||||||
require("./vms-tab/dialogs/attach-disk"),
|
require("./vms-tab/dialogs/attach-disk"),
|
||||||
require("./vms-tab/dialogs/disk-snapshot"),
|
require("./vms-tab/dialogs/disk-snapshot"),
|
||||||
require("./vms-tab/dialogs/disk-saveas"),
|
require("./vms-tab/dialogs/disk-saveas"),
|
||||||
|
require("./vms-tab/dialogs/disk-snapshot-rename"),
|
||||||
require("./vms-tab/dialogs/attach-nic"),
|
require("./vms-tab/dialogs/attach-nic"),
|
||||||
require("./vms-tab/dialogs/revert"),
|
require("./vms-tab/dialogs/revert"),
|
||||||
require("./vms-tab/dialogs/snapshot"),
|
require("./vms-tab/dialogs/snapshot"),
|
||||||
|
@ -30,6 +30,7 @@ define(function(require) {
|
|||||||
require('./vms-tab/dialogs/attach-disk'),
|
require('./vms-tab/dialogs/attach-disk'),
|
||||||
require('./vms-tab/dialogs/disk-snapshot'),
|
require('./vms-tab/dialogs/disk-snapshot'),
|
||||||
require('./vms-tab/dialogs/disk-saveas'),
|
require('./vms-tab/dialogs/disk-saveas'),
|
||||||
|
require('./vms-tab/dialogs/disk-snapshot-rename'),
|
||||||
require('./vms-tab/dialogs/disk-resize'),
|
require('./vms-tab/dialogs/disk-resize'),
|
||||||
require('./vms-tab/dialogs/attach-nic'),
|
require('./vms-tab/dialogs/attach-nic'),
|
||||||
require('./vms-tab/dialogs/snapshot'),
|
require('./vms-tab/dialogs/snapshot'),
|
||||||
|
@ -98,6 +98,7 @@ define(function(require) {
|
|||||||
"VM.snapshot_delete": _commonActions.singleAction('snapshot_delete'),
|
"VM.snapshot_delete": _commonActions.singleAction('snapshot_delete'),
|
||||||
"VM.disk_snapshot_create": _commonActions.singleAction('disk_snapshot_create'),
|
"VM.disk_snapshot_create": _commonActions.singleAction('disk_snapshot_create'),
|
||||||
"VM.disk_snapshot_revert": _commonActions.singleAction('disk_snapshot_revert'),
|
"VM.disk_snapshot_revert": _commonActions.singleAction('disk_snapshot_revert'),
|
||||||
|
"VM.disk_snapshot_rename": _commonActions.singleAction('disk_snapshot_rename'),
|
||||||
"VM.disk_snapshot_delete": _commonActions.singleAction('disk_snapshot_delete'),
|
"VM.disk_snapshot_delete": _commonActions.singleAction('disk_snapshot_delete'),
|
||||||
"VM.disk_saveas" : _commonActions.singleAction('disk_saveas'),
|
"VM.disk_saveas" : _commonActions.singleAction('disk_saveas'),
|
||||||
|
|
||||||
|
@ -0,0 +1,108 @@
|
|||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* Copyright 2002-2018, OpenNebula Project, OpenNebula Systems */
|
||||||
|
/* */
|
||||||
|
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||||
|
/* not use this file except in compliance with the License. You may obtain */
|
||||||
|
/* a copy of the License at */
|
||||||
|
/* */
|
||||||
|
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||||
|
/* */
|
||||||
|
/* Unless required by applicable law or agreed to in writing, software */
|
||||||
|
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||||
|
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||||
|
/* See the License for the specific language governing permissions and */
|
||||||
|
/* limitations under the License. */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
define(function(require) {
|
||||||
|
/*
|
||||||
|
DEPENDENCIES
|
||||||
|
*/
|
||||||
|
|
||||||
|
var BaseDialog = require('utils/dialogs/dialog');
|
||||||
|
var TemplateHTML = require('hbs!./disk-snapshot-rename/html');
|
||||||
|
var Sunstone = require('sunstone');
|
||||||
|
var Tips = require('utils/tips');
|
||||||
|
|
||||||
|
/*
|
||||||
|
CONSTANTS
|
||||||
|
*/
|
||||||
|
|
||||||
|
var DIALOG_ID = require('./disk-snapshot-rename/dialogId');
|
||||||
|
var TAB_ID = require('../tabId');
|
||||||
|
|
||||||
|
/*
|
||||||
|
CONSTRUCTOR
|
||||||
|
*/
|
||||||
|
|
||||||
|
function Dialog() {
|
||||||
|
this.dialogId = DIALOG_ID;
|
||||||
|
|
||||||
|
BaseDialog.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
Dialog.DIALOG_ID = DIALOG_ID;
|
||||||
|
Dialog.prototype = Object.create(BaseDialog.prototype);
|
||||||
|
Dialog.prototype.constructor = Dialog;
|
||||||
|
Dialog.prototype.html = _html;
|
||||||
|
Dialog.prototype.onShow = _onShow;
|
||||||
|
Dialog.prototype.setup = _setup;
|
||||||
|
Dialog.prototype.setParams = _setParams;
|
||||||
|
|
||||||
|
return Dialog;
|
||||||
|
|
||||||
|
/*
|
||||||
|
FUNCTION DEFINITIONS
|
||||||
|
*/
|
||||||
|
|
||||||
|
function _html() {
|
||||||
|
return TemplateHTML({
|
||||||
|
'dialogId': this.dialogId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function _setup(context) {
|
||||||
|
var that = this;
|
||||||
|
|
||||||
|
$('#' + DIALOG_ID + 'Form', context).submit(function() {
|
||||||
|
var new_name = $('#snapshot_new_name', this).val();
|
||||||
|
var obj = {
|
||||||
|
"disk_id" : that.diskId,
|
||||||
|
"new_name": new_name,
|
||||||
|
"snapshot_id": that.snapshotId,
|
||||||
|
};
|
||||||
|
|
||||||
|
Sunstone.runAction('VM.disk_snapshot_rename', that.element.ID, obj);
|
||||||
|
|
||||||
|
Sunstone.getDialog(DIALOG_ID).hide();
|
||||||
|
Sunstone.getDialog(DIALOG_ID).reset();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _onShow(context) {
|
||||||
|
this.setNames( {tabId: TAB_ID} );
|
||||||
|
$("#disk_id", context).val(this.diskId);
|
||||||
|
$("#snapshot_id", context).val(this.snapshotId);
|
||||||
|
$("#disk_rename", context).focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {object} params
|
||||||
|
* - params.element : VM element
|
||||||
|
* - params.diskId : Disk ID to save as
|
||||||
|
* - params.snapshotId : Disk snapshot ID to save as. Can be undefined
|
||||||
|
*/
|
||||||
|
function _setParams(params) {
|
||||||
|
this.element = params.element;
|
||||||
|
this.diskId = params.diskId;
|
||||||
|
this.snapshotId = -1;
|
||||||
|
|
||||||
|
if(params.snapshotId){
|
||||||
|
this.snapshotId = params.snapshotId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,19 @@
|
|||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* Copyright 2002-2018, OpenNebula Project, OpenNebula Systems */
|
||||||
|
/* */
|
||||||
|
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
|
||||||
|
/* not use this file except in compliance with the License. You may obtain */
|
||||||
|
/* a copy of the License at */
|
||||||
|
/* */
|
||||||
|
/* http://www.apache.org/licenses/LICENSE-2.0 */
|
||||||
|
/* */
|
||||||
|
/* Unless required by applicable law or agreed to in writing, software */
|
||||||
|
/* distributed under the License is distributed on an "AS IS" BASIS, */
|
||||||
|
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
|
||||||
|
/* See the License for the specific language governing permissions and */
|
||||||
|
/* limitations under the License. */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
define(function(require) {
|
||||||
|
return 'diskSnapshotRenameVMDialog';
|
||||||
|
});
|
@ -0,0 +1,50 @@
|
|||||||
|
{{! -------------------------------------------------------------------------- }}
|
||||||
|
{{! Copyright 2002-2018, OpenNebula Project, OpenNebula Systems }}
|
||||||
|
{{! }}
|
||||||
|
{{! Licensed under the Apache License, Version 2.0 (the "License"); you may }}
|
||||||
|
{{! not use this file except in compliance with the License. You may obtain }}
|
||||||
|
{{! a copy of the License at }}
|
||||||
|
{{! }}
|
||||||
|
{{! http://www.apache.org/licenses/LICENSE-2.0 }}
|
||||||
|
{{! }}
|
||||||
|
{{! Unless required by applicable law or agreed to in writing, software }}
|
||||||
|
{{! distributed under the License is distributed on an "AS IS" BASIS, }}
|
||||||
|
{{! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. }}
|
||||||
|
{{! See the License for the specific language governing permissions and }}
|
||||||
|
{{! limitations under the License. }}
|
||||||
|
{{! -------------------------------------------------------------------------- }}
|
||||||
|
|
||||||
|
<div id="{{dialogId}}" class="reveal small" data-reveal>
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h3 class="subheader" id="">{{tr "Rename"}}</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="confirm-resources-header"></div>
|
||||||
|
<div class="reveal-body">
|
||||||
|
<form id="{{dialogId}}Form" action="">
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-6 columns">
|
||||||
|
<label for="disk_id">{{tr "Disk ID"}}</label>
|
||||||
|
<input style="border-style: inset; background-color: lightgrey" type="text" name="disk_id" id="disk_id" disabled/>
|
||||||
|
</div>
|
||||||
|
<div class="large-6 columns snapshot_id_row">
|
||||||
|
<label for="snapshot_id">{{tr "Snapshot ID"}}</label>
|
||||||
|
<input style="border-style: inset; background-color: lightgrey" type="text" name="snapshot_id" id="snapshot_id" disabled/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<label for="snapshot_new_name">{{tr "New name"}}</label>
|
||||||
|
<input type="text" name="snapshot_new_name" id="snapshot_new_name" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form_buttons">
|
||||||
|
<button class="button radius right success" type="submit">{{tr "Rename"}}</button>
|
||||||
|
</div>
|
||||||
|
<button class="close-button" data-close aria-label="{{tr "Close modal"}}" type="button">
|
||||||
|
<span aria-hidden="true">×</span>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -43,6 +43,7 @@ define(function(require) {
|
|||||||
var ATTACH_DISK_DIALOG_ID = require('../dialogs/attach-disk/dialogId');
|
var ATTACH_DISK_DIALOG_ID = require('../dialogs/attach-disk/dialogId');
|
||||||
var DISK_SNAPSHOT_DIALOG_ID = require('../dialogs/disk-snapshot/dialogId');
|
var DISK_SNAPSHOT_DIALOG_ID = require('../dialogs/disk-snapshot/dialogId');
|
||||||
var DISK_SAVEAS_DIALOG_ID = require('../dialogs/disk-saveas/dialogId');
|
var DISK_SAVEAS_DIALOG_ID = require('../dialogs/disk-saveas/dialogId');
|
||||||
|
var DISK_SNAPSHOT_RENAME_DIALOG_ID = require('../dialogs/disk-snapshot-rename/dialogId');
|
||||||
var CONFIRM_DIALOG_ID = require('utils/dialogs/generic-confirm/dialogId');
|
var CONFIRM_DIALOG_ID = require('utils/dialogs/generic-confirm/dialogId');
|
||||||
var DISK_RESIZE_DIALOG_ID = require('../dialogs/disk-resize/dialogId');
|
var DISK_RESIZE_DIALOG_ID = require('../dialogs/disk-resize/dialogId');
|
||||||
var RESOURCE = "VM"
|
var RESOURCE = "VM"
|
||||||
@ -524,10 +525,12 @@ define(function(require) {
|
|||||||
// Enable/disable buttons
|
// Enable/disable buttons
|
||||||
if ($(this).is(":checked")) {
|
if ($(this).is(":checked")) {
|
||||||
$(".disk_snapshot_saveas", snapshotsSection).prop('disabled', false);
|
$(".disk_snapshot_saveas", snapshotsSection).prop('disabled', false);
|
||||||
|
$(".disk_snapshot_rename", snapshotsSection).prop('disabled', false);
|
||||||
$(".disk_snapshot_revert", snapshotsSection).prop('disabled', false);
|
$(".disk_snapshot_revert", snapshotsSection).prop('disabled', false);
|
||||||
$(".disk_snapshot_delete", snapshotsSection).prop('disabled', false);
|
$(".disk_snapshot_delete", snapshotsSection).prop('disabled', false);
|
||||||
} else {
|
} else {
|
||||||
$(".disk_snapshot_saveas", snapshotsSection).prop('disabled', true);
|
$(".disk_snapshot_saveas", snapshotsSection).prop('disabled', true);
|
||||||
|
$(".disk_snapshot_rename", snapshotsSection).prop('disabled', true);
|
||||||
$(".disk_snapshot_revert", snapshotsSection).prop('disabled', true);
|
$(".disk_snapshot_revert", snapshotsSection).prop('disabled', true);
|
||||||
$(".disk_snapshot_delete", snapshotsSection).prop('disabled', true);
|
$(".disk_snapshot_delete", snapshotsSection).prop('disabled', true);
|
||||||
}
|
}
|
||||||
@ -554,6 +557,27 @@ define(function(require) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Config.isTabActionEnabled("vms-tab", "VM.disk_snapshot_rename")) {
|
||||||
|
context.off('click', '.disk_snapshot_rename');
|
||||||
|
context.on('click', '.disk_snapshot_rename', function() {
|
||||||
|
var snapshotsSection = $(this).closest('.snapshots');
|
||||||
|
|
||||||
|
var disk_id = snapshotsSection.attr('disk_id');
|
||||||
|
var snapshot_id = $(".snapshot_check_item:checked", snapshotsSection).attr('snapshot_id');
|
||||||
|
|
||||||
|
var dialog = Sunstone.getDialog(DISK_SNAPSHOT_RENAME_DIALOG_ID);
|
||||||
|
dialog.setParams(
|
||||||
|
{ element: that.element,
|
||||||
|
diskId: disk_id,
|
||||||
|
snapshotId: snapshot_id
|
||||||
|
});
|
||||||
|
|
||||||
|
dialog.reset();
|
||||||
|
dialog.show();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (Config.isTabActionEnabled("vms-tab", "VM.disk_snapshot_revert")) {
|
if (Config.isTabActionEnabled("vms-tab", "VM.disk_snapshot_revert")) {
|
||||||
context.off('click', '.disk_snapshot_revert');
|
context.off('click', '.disk_snapshot_revert');
|
||||||
context.on('click', '.disk_snapshot_revert', function() {
|
context.on('click', '.disk_snapshot_revert', function() {
|
||||||
|
@ -22,6 +22,11 @@
|
|||||||
<span class="fas fa-save fa-fw"></span>{{tr "Save as"}}
|
<span class="fas fa-save fa-fw"></span>{{tr "Save as"}}
|
||||||
</button>
|
</button>
|
||||||
{{/isTabActionEnabled}}
|
{{/isTabActionEnabled}}
|
||||||
|
{{#isTabActionEnabled "vms-tab" "VM.disk_snapshot_rename"}}
|
||||||
|
<button class="disk_snapshot_rename button secondary small radius" disabled="disabled">
|
||||||
|
<span class="fas fa-edit fa-fw"></span>{{tr "Rename"}}
|
||||||
|
</button>
|
||||||
|
{{/isTabActionEnabled}}
|
||||||
{{#isTabActionEnabled "vms-tab" "VM.disk_snapshot_revert"}}
|
{{#isTabActionEnabled "vms-tab" "VM.disk_snapshot_revert"}}
|
||||||
<button class="disk_snapshot_revert button secondary small radius" disabled="disabled">
|
<button class="disk_snapshot_revert button secondary small radius" disabled="disabled">
|
||||||
<span class="fas fa-reply fa-fw"></span>{{tr "Revert"}}
|
<span class="fas fa-reply fa-fw"></span>{{tr "Revert"}}
|
||||||
|
@ -512,6 +512,9 @@ string History::action_to_str(VMAction action)
|
|||||||
case DISK_SNAPSHOT_DELETE_ACTION:
|
case DISK_SNAPSHOT_DELETE_ACTION:
|
||||||
st = "disk-snapshot-delete";
|
st = "disk-snapshot-delete";
|
||||||
break;
|
break;
|
||||||
|
case DISK_SNAPSHOT_RENAME_ACTION:
|
||||||
|
st = "disk-snapshot-rename";
|
||||||
|
break;
|
||||||
case DISK_RESIZE_ACTION:
|
case DISK_RESIZE_ACTION:
|
||||||
st = "disk-resize";
|
st = "disk-resize";
|
||||||
break;
|
break;
|
||||||
@ -670,6 +673,10 @@ int History::action_from_str(const string& st, VMAction& action)
|
|||||||
{
|
{
|
||||||
action = DISK_SNAPSHOT_DELETE_ACTION;
|
action = DISK_SNAPSHOT_DELETE_ACTION;
|
||||||
}
|
}
|
||||||
|
else if (st == "disk-snapshot-rename")
|
||||||
|
{
|
||||||
|
action = DISK_SNAPSHOT_RENAME_ACTION;
|
||||||
|
}
|
||||||
else if (st == "disk-resize")
|
else if (st == "disk-resize")
|
||||||
{
|
{
|
||||||
action = DISK_RESIZE_ACTION;
|
action = DISK_RESIZE_ACTION;
|
||||||
|
@ -274,6 +274,24 @@ int Snapshots::active_snapshot(int id)
|
|||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int Snapshots::rename_snapshot(int id, const string& name, string& str_error)
|
||||||
|
{
|
||||||
|
VectorAttribute * snapshot = get_snapshot(id);
|
||||||
|
|
||||||
|
if (snapshot == 0)
|
||||||
|
{
|
||||||
|
str_error = "Snapshot does not exist";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
snapshot->replace("NAME", name);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
const VectorAttribute * Snapshots::get_snapshot(int id) const
|
const VectorAttribute * Snapshots::get_snapshot(int id) const
|
||||||
{
|
{
|
||||||
map<int, VectorAttribute *>::const_iterator it;
|
map<int, VectorAttribute *>::const_iterator it;
|
||||||
|
@ -1403,6 +1403,23 @@ void VirtualMachineDisks::delete_snapshot(int disk_id, int snap_id,
|
|||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int VirtualMachineDisks::rename_snapshot(int disk_id, int snap_id, const string& new_name,
|
||||||
|
string& error_str)
|
||||||
|
{
|
||||||
|
VirtualMachineDisk * disk = get_disk(disk_id);
|
||||||
|
|
||||||
|
if (disk == 0)
|
||||||
|
{
|
||||||
|
error_str = "VM disk does not exist";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return disk->rename_snapshot(snap_id, new_name, error_str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void VirtualMachineDisks::delete_non_persistent_snapshots(Template **vm_quotas,
|
void VirtualMachineDisks::delete_non_persistent_snapshots(Template **vm_quotas,
|
||||||
vector<Template *> &ds_quotas)
|
vector<Template *> &ds_quotas)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user