from karesansui.lib.rest import Rest, auth
from karesansui.lib.const import VIRT_COMMAND_APPLY_SNAPSHOT
from karesansui.lib.utils import is_param, is_int
-from karesansui.lib.virt.virt import KaresansuiVirtException, KaresansuiVirtConnection
+
+from karesansui.lib.virt.snapshot import KaresansuiVirtSnapshot
from karesansui.db.access.snapshot import findby1, is_findby1_guestby1
from karesansui.db.access._2pysilhouette import save_job_collaboration
snapshot = findby1(self.orm, snapshot_id)
- kvc = KaresansuiVirtConnection()
+ kvs = KaresansuiVirtSnapshot(readonly=False)
+ #import pdb; pdb.set_trace()
+ snapshot_list = []
try:
- domname = kvc.uuid_to_domname(snapshot.machine.uniq_key)
- if not domname: return web.conflict(web.ctx.path)
+ domname = kvs.kvc.uuid_to_domname(snapshot.machine.uniq_key)
+ if not domname: return web.notfound()
+ self.view.is_creatable = kvs.isSupportedDomain(domname)
+ try:
+ snapshot_list = kvs.listNames(domname)[domname]
+ except:
+ pass
+
finally:
- kvc.close()
+ kvs.finish()
+
+ if not snapshot.name in snapshot_list:
+ self.logger.error(_("The specified snapshot does not exist. - %s") % snapshot.name)
+ return web.notfound()
action_cmd = dict2command(
"%s/%s" % (karesansui.config['application.bin.dir'],
VIRT_COMMAND_TAKE_SNAPSHOT, \
NOTE_TITLE_MIN_LENGTH, NOTE_TITLE_MAX_LENGTH,\
VIRT_XML_CONFIG_DIR, VIRT_DOMAINS_DIR
-from karesansui.lib.utils import getfilesize_str, \
- uniq_filename, is_param, get_filesize_MB
+from karesansui.lib.utils import is_param
from karesansui.lib.checker import Checker, \
CHECK_EMPTY, CHECK_VALID, CHECK_MIN, CHECK_MAX, \
CHECK_LENGTH, CHECK_ONLYSPACE
from karesansui.db.access._2pysilhouette import save_job_collaboration
from karesansui.db.access.machine2jobgroup import new as m2j_new
-from karesansui.lib.virt.virt import KaresansuiVirtConnection
-from karesansui.lib.virt.config import ConfigParam
+from karesansui.lib.virt.snapshot import KaresansuiVirtSnapshot
from pysilhouette.command import dict2command
from karesansui.db.model._2pysilhouette import Job, JobGroup
if guest_id is None: return web.notfound()
guest = findbyguest1(self.orm, guest_id)
-
- kvc = KaresansuiVirtConnection()
+
+ kvs = KaresansuiVirtSnapshot(readonly=False)
+ #import pdb; pdb.set_trace()
try:
- domname = kvc.uuid_to_domname(guest.uniq_key)
+ domname = kvs.kvc.uuid_to_domname(guest.uniq_key)
if not domname: return web.notfound()
- virt = kvc.search_kvg_guests(domname)[0]
- self.view.is_creatable = virt.is_takable_snapshot()
- snapshot_list = kvc.list_snapshot(domname)
- finally:
- kvc.close()
+ self.view.is_creatable = kvs.isSupportedDomain(domname)
+ try:
+ snapshot_list = kvs.listNames(domname)[domname]
+ except:
+ pass
- param = ConfigParam(kvc.get_domain_name())
- xml_file = "%s/%s.xml" % (VIRT_XML_CONFIG_DIR, kvc.get_domain_name())
- if not os.path.exists(xml_file):
- return web.notfound()
- param.load_xml_config(xml_file)
- current_snapshot = param.get_current_snapshot()
+ current_snapshot = kvs.getCurrentSnapshotName(domname)
+ finally:
+ kvs.finish()
+
+ #import pdb; pdb.set_trace()
snapshots = []
if snapshot_list:
snapshot_list.sort(reverse = True)
for snapshot in snapshot_list:
- filepath = "%s/%s/snapshot/%s" % (VIRT_DOMAINS_DIR,domname,snapshot,)
- if os.path.isfile(filepath) is False:
- self.logger.error("The specified snapshot file does not exist. - %s/%s" % filepath)
- return web.internalerror()
-
model = findbyname(self.orm, snapshot)
if model is None:
continue
- if not current_snapshot:
- self.logger.info('Still not finished creating the snapshot.')
- return web.notfound()
-
- current = snapshot in current_snapshot
+ current = False
+ if snapshot == current_snapshot:
+ current = True
snapshots.append((snapshot,
model,
domname,
- get_filesize_MB(getfilesize_str(filepath)),
+ None,
current
))
guest = findbyguest1(self.orm, guest_id)
- name = uniq_filename()
-
- notebook = new_notebook(self.input.title, self.input.value)
- snapshot = new_snapshot(guest, name, self.me, self.me, notebook)
- save_snapshot(self.orm, snapshot)
- kvc = KaresansuiVirtConnection()
+ kvs = KaresansuiVirtSnapshot(readonly=False)
try:
- domname = kvc.uuid_to_domname(guest.uniq_key)
+ domname = kvs.kvc.uuid_to_domname(guest.uniq_key)
if not domname: return web.conflict(web.ctx.path)
finally:
- kvc.close()
+ kvs.finish()
+
+ id = int(time.time())
+ notebook = new_notebook(self.input.title, self.input.value)
+ snapshot = new_snapshot(guest, id, self.me, self.me, notebook)
+ save_snapshot(self.orm, snapshot)
options = {}
options['name'] = domname
- options['id'] = name
+ options['id'] = id
_cmd = dict2command(
"%s/%s" % (karesansui.config['application.bin.dir'], VIRT_COMMAND_TAKE_SNAPSHOT),
ID_MIN_LENGTH, ID_MAX_LENGTH, \
NOTE_TITLE_MIN_LENGTH, NOTE_TITLE_MAX_LENGTH
-from karesansui.lib.utils import getfilesize_str, is_param, get_filesize_MB, json_dumps
-from karesansui.lib.virt.virt import KaresansuiVirtConnection
+from karesansui.lib.utils import is_param, json_dumps
+from karesansui.lib.virt.snapshot import KaresansuiVirtSnapshot
from karesansui.lib.checker import Checker, \
CHECK_EMPTY, CHECK_VALID, CHECK_MIN, CHECK_MAX, \
CHECK_LENGTH, CHECK_ONLYSPACE
+from karesansui.db.access.machine import findbyguest1
from karesansui.db.access.snapshot import findby1, logical_delete
from karesansui.db.access._2pysilhouette import save_job_collaboration
from karesansui.db.access.machine2jobgroup import new as m2j_new
(host_id, guest_id) = self.chk_guestby1(param)
if guest_id is None: return web.notfound()
- snapshot_id = param[2]
+ snapshot_id = param[2]
if not validates_param_id(self, snapshot_id):
return web.notfound(self.view.alert)
snapshot = findby1(self.orm, snapshot_id)
if not snapshot:
return web.notfound()
-
- kvc = KaresansuiVirtConnection()
+
+ kvs = KaresansuiVirtSnapshot(readonly=False)
+ #import pdb; pdb.set_trace()
+ snapshot_list = []
try:
- domname = kvc.uuid_to_domname(snapshot.machine.uniq_key)
- if not domname: return web.conflict(web.ctx.path)
+ domname = kvs.kvc.uuid_to_domname(snapshot.machine.uniq_key)
+ if not domname: return web.notfound()
+ self.view.is_creatable = kvs.isSupportedDomain(domname)
+ try:
+ snapshot_list = kvs.listNames(domname)[domname]
+ except:
+ pass
+
+ current_snapshot = kvs.getCurrentSnapshotName(domname)
+
finally:
- kvc.close()
-
- filepath = "%s/%s/snapshot/%s" % (VIRT_DOMAINS_DIR, domname, snapshot.name)
- if os.path.isfile(filepath) is False:
- self.logger.error("The specified snapshot file does not exist. - %s" % filepath)
- return False
+ kvs.finish()
+
+ if not snapshot.name in snapshot_list:
+ self.logger.error(_("The specified snapshot does not exist. - %s") % snapshot.name)
+ return web.notfound()
if self.__template__["media"] == 'json':
self.view.snapshot = json_dumps((
snapshot.get_json(self.me.languages),
- get_filesize_MB(getfilesize_str(filepath)),
+ None,
VIRT_DOMAINS_DIR
))
else:
self.view.snapshot = (snapshot,
domname,
- get_filesize_MB(getfilesize_str(filepath)),
+ None,
VIRT_DOMAINS_DIR,
- filepath)
+ None)
return True
@auth
if not snapshot:
return web.notfound()
- kvc = KaresansuiVirtConnection()
+ kvs = KaresansuiVirtSnapshot(readonly=False)
+ #import pdb; pdb.set_trace()
+ snapshot_list = []
try:
- domname = kvc.uuid_to_domname(snapshot.machine.uniq_key)
- if not domname: return web.conflict(web.ctx.path)
+ domname = kvs.kvc.uuid_to_domname(snapshot.machine.uniq_key)
+ if not domname: return web.notfound()
+ self.view.is_creatable = kvs.isSupportedDomain(domname)
+ try:
+ snapshot_list = kvs.listNames(domname)[domname]
+ except:
+ pass
+
+ current_snapshot = kvs.getCurrentSnapshotName(domname)
+
finally:
- kvc.close()
+ kvs.finish()
+
+ if not snapshot.name in snapshot_list:
+ self.logger.error(_("The specified snapshot does not exist. - %s") % snapshot.name)
+ return web.notfound()
# delete
action_cmd = dict2command(
// -->
</script>
+% if is_creatable is True:
+
<div id="snapshot_setting">
<form method="post" action="" id="snapshot_form" name="snapshot_form">
<div class="grayout-head">
</div>
</form>
</div>
+
+% else:
+${_('Snapshot is not supported in this disk image format.')}
+% endif
+
<th/>
<th>${_('ID')}</th>
<th>${_('Title')}</th>
- <th>${_('Size')} MB</th>
+ <th>${_('Name')}</th>
<th>${_('Modified User')}</th>
<th>${_('Modified')}</th>
</tr>
%else:
<td>${_('No title')} </td>
%endif
- <td>${snapshot[3] | h}</td>
+
+ <td>${snapshot[1].name | h}</td>
<td>${snapshot[1].created_user.nickname | h}</td>
<td>${snapshot[1].created | h}</td>
</tr>
<td>
<table cellspacing="0" class="border detail-sub-contents">
<tr>
- <td>${_('File Name')}</td>
+ <td>${_('Name')}</td>
<td class="detail-separator"><img alt="" src="/karesansui/v1/static/images/table-space.gif"/></td>
<td><pre>${snapshot[0].name | h}</pre></td>
</tr>
<tr>
- <td>${_('File Size (MB)')}</td>
- <td class="detail-separator"><img alt="" src="/karesansui/v1/static/images/table-space.gif"/></td>
- <td><pre>${snapshot[2] | h}</pre></td>
- </tr>
- <tr>
- <td>${_('Real File Path')}</td>
- <td class="detail-separator"><img alt="" src="/karesansui/v1/static/images/table-space.gif"/></td>
- <td><pre>${snapshot[4] | h}</pre></td>
- </tr>
- <tr>
<td>${_('Guest Name')}</td>
<td class="detail-separator"><img alt="" src="/karesansui/v1/static/images/table-space.gif"/></td>
<td><pre>${snapshot[0].machine.name | h}</pre></td>