mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
98 lines
3.0 KiB
Python
98 lines
3.0 KiB
Python
#!/usr/bin/python
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you 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.
|
|
|
|
# Version @VERSION@
|
|
#
|
|
# A plugin for executing script needed by cloud stack
|
|
|
|
import os, sys, time
|
|
import XenAPIPlugin
|
|
sys.path.extend(["/opt/xensource/sm/"])
|
|
import util
|
|
|
|
def echo(fn):
|
|
def wrapped(*v, **k):
|
|
name = fn.__name__
|
|
util.SMlog("#### VMOPS enter %s ####" % name )
|
|
res = fn(*v, **k)
|
|
util.SMlog("#### VMOPS exit %s ####" % name )
|
|
return res
|
|
return wrapped
|
|
|
|
SWIFT = "/opt/xensource/bin/swift"
|
|
|
|
MAX_SEG_SIZE = 5 * 1024 * 1024 * 1024
|
|
|
|
def upload(args):
|
|
url = args['url']
|
|
account = args['account']
|
|
username = args['username']
|
|
key = args['key']
|
|
container = args['container']
|
|
ldir = args['ldir']
|
|
lfilename = args['lfilename']
|
|
isISCSI = args['isISCSI']
|
|
segment = 0
|
|
util.SMlog("#### VMOPS upload %s to swift ####", lfilename)
|
|
savedpath = os.getcwd()
|
|
os.chdir(ldir)
|
|
try :
|
|
if isISCSI == 'ture':
|
|
cmd1 = [ lvchange , "-ay", lfilename ]
|
|
util.pread2(cmd1)
|
|
cmd1 = [ lvdisplay, "-c", lfilename ]
|
|
lines = util.pread2(cmd).split(':');
|
|
size = long(lines[6]) * 512
|
|
if size > MAX_SEG_SIZE :
|
|
segment = 1
|
|
else :
|
|
size = os.path.getsize(lfilename)
|
|
if size > MAX_SEG_SIZE :
|
|
segment = 1
|
|
if segment :
|
|
cmd = [SWIFT, "-A", url, "-U", account + ":" + username, "-K", key, "upload", "-S", MAX_SEG_SIZE, container, lfilename]
|
|
else :
|
|
cmd = [SWIFT, "-A", url ,"-U", account + ":" + username, "-K", key, "upload", container, lfilename]
|
|
util.pread2(cmd)
|
|
return 'true'
|
|
finally:
|
|
os.chdir(savedpath)
|
|
return 'false'
|
|
|
|
|
|
@echo
|
|
def swift(session, args):
|
|
op = args['op']
|
|
if op == 'upload':
|
|
return upload(args)
|
|
elif op == 'download':
|
|
return download(args)
|
|
elif op == 'delete' :
|
|
cmd = ["st", "-A https://" + hostname + ":8080/auth/v1.0 -U " + account + ":" + username + " -K " + token + " delete " + rfilename]
|
|
else :
|
|
util.SMlog("doesn't support swift operation %s " % op )
|
|
return 'false'
|
|
try:
|
|
util.pread2(cmd)
|
|
return 'true'
|
|
except:
|
|
return 'false'
|
|
|
|
if __name__ == "__main__":
|
|
XenAPIPlugin.dispatch({"swift": swift})
|