示例#1
0
def docker_build():
    userdir = os.path.expanduser('~')
    if not os.path.exists(userdir + "/.ssh/id_dsa")\
            or not os.path.exists(userdir + "/.ssh/id_dsa.pub"):
        _derror("Please generate ssh key file use 'ssh-keygen -t dsa'")
        exit(1)

    _exec_system("cat ~/.ssh/id_dsa > %s/id_dsa" % (path))
    _exec_system("cat ~/.ssh/id_dsa.pub > %s/id_dsa.pub" % (path))
    _exec_system("cat ~/.ssh/id_dsa.pub > %s/authorized_keys" % (path))
    #_exec_system("cp %s/../rpms/libisal-2.14.0-1.el7.centos.x86_64.rpm %s/libisal-2.14.0-1.el7.centos.x86_64.rpm" % (path, path))
    #_exec_system("cp %s/../rpms/libisal-devel-2.14.0-1.el7.centos.x86_64.rpm %s/libisal-devel-2.14.0-1.el7.centos.x86_64.rpm" % (path, path))

    file_object = open("%s/rsyncd.conf" % (path), 'w')
    file_object.write("[sdfs]\n    path=/tmp\n    readonly=no\n    list=yes")
    file_object.close()

    errno = _exec_system("docker build --rm -t %s %s" % (tpl, path))
    if errno:
        _derror("Please install docker last version")
        exit(errno)

    _exec_system("rm %s/id_dsa" % (path))
    _exec_system("rm %s/id_dsa.pub" % (path))
    _exec_system("rm %s/authorized_keys" % (path))
    _exec_system("rm %s/rsyncd.conf" % (path))
示例#2
0
    def mount_dev(self, dev, force = 0):
        self.dev = dev
        try:
            self.dir = "/mnt/snap"
            _exec_system("mkdir -p %s" % self.dir)
        except:
            pass

        if not stat.S_ISBLK(os.lstat(os.path.realpath(self.dev)).st_mode):
            raise Exp('not a block device', dev)

        try:
            (out, err) = _exec_pipe1(["mount", self.dev, self.dir], 0, self.verbose, 0)
        except Exp, e:
            out = e.out
            err = e.err
            for line in err.splitlines():
                m1 = re.search('you must specify the filesystem type', line)
                m2 = re.search('wrong fs type, bad option', line)
                if m1 is not None or m2 is not None:
                    if force:
                        self.disk.dev_format(self.dev, self.verbose)
                        self.disk.dev_mount(self.dev, self.dir, self.verbose)
                    else:
                        _derror('wrong fs type, you must specify the filesystem type or use --force')
                        exit(e.errno)
示例#3
0
 def sync(self):
     newpath = os.path.abspath(path + '/../')
     cmd = 'rsync -varz --progress --no-o --no-g --exclude-from=%s/.gitignore %s root@%s::sdfs' % (
         newpath, newpath, self.addr)
     errno = _exec_system(cmd)
     if errno:
         _derror("cmd %s fail:%d" % (cmd, errno))
         exit(errno)
示例#4
0
def __docker_start():
    _exec_system("echo '' > /tmp/hosts")
    (distro, release, codename) = lsb.lsb_release()
    for i in dock_list:
        if distro == 'CentOS':
            errno = _exec_system(
                "docker exec %s sed -i 's/^UsePAM yes$/UsePAM no/g' /etc/ssh/sshd_config"
                % (i))
            if errno:
                _derror("Please install docker last version")
                exit(errno)

            errno = _exec_system(
                "docker exec %s sed -i 's/^#PermitRootLogin yes$/PermitRootLogin yes/g' /etc/ssh/sshd_config"
                % (i))
            if errno:
                _derror("Please install docker last version")
                exit(errno)

        errno = _exec_system(
            "docker exec %s bash -c \"echo 'mdsmds' | passwd root --stdin\"" %
            (i))
        if errno:
            _derror("Please install docker last version")
            exit(errno)

        _exec_system(
            r"docker exec %s sed -i 's/\\h \\W/\\H \\W/g' /etc/bashrc" % (i))
        """
        errno = _exec_system('docker exec %s /etc/init.d/sshd start' % (i))
        if errno:
            _derror("Please install docker last version")
            exit(errno)
        """

        errno = _exec_system(
            'docker exec %s /usr/bin/rsync --daemon --config=/etc/rsyncd.conf'
            % (i))
        if errno:
            _derror("Please install docker last version")
            exit(errno)
        _exec_system("echo %s    %s >> /tmp/hosts" % (get_addr(i), i))

    for i in dock_list:
        try:
            _put_remote(get_addr(i),
                        "/tmp/hosts",
                        "/etc/hosts",
                        user='******',
                        password='******',
                        timeout=10)
        except Exception, e:
            _derror(
                "put file /tmp/hosts to %s failed, please check sshd is running normal"
                % i)
            #_exec_system('docker exec %s bash -c \
            #        "sed -i \'s/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/\' /etc/pam.d/sshd"' % i)
            exit(1)
示例#5
0
 def create_snap(self, lun):
     stime = time.strftime('%m%d%H%M')
     snap = self.defaultpath + lun + "@" + stime
     cmd = [self.lich_snapshot, "--create", snap]
     try:
         (out, err) = _exec_pipe1(cmd, 0, self.verbose)
     except Exp, e:
         if e.err:
             _derror(str(e.err))
             exit(e.errno)
示例#6
0
文件: gstorage.py 项目: xin3244/mine
 def is_dir(self, path):
     cmd = [self.lichfs, "--stat", path]
     try:
         (out, err) = _exec_pipe1(cmd, 0, False)
         for line in out.splitlines():
             m = re.match(".*Id:\s+(pool).*", line)
             if m is not None:
                 return True
     except Exp, e:
         if e.err:
             _derror(str(e.err))
             exit(e.errno)
示例#7
0
 def getsize(self, path, v):
     cmd = [self.lichfs, "--stat", self.defaultpath + path]
     try:
         (out, err) = _exec_pipe1(cmd, 0, v)
         for line in out.splitlines():
             m = re.match("\s+Size:\s+(\d*).*", line)
             if m is not None:
                 return m.group(1)
     except Exp, e:
         if e.err:
             _derror(str(e.err))
             exit(e.errno)
示例#8
0
文件: gstorage.py 项目: xin3244/mine
 def getallocated(self, path):
     cmd = [self.config.inspect, "--stat", path]
     try:
         (out, err) = _exec_pipe1(cmd, 0, False)
         for line in out.splitlines():
             m = re.match("\s*allocated :\s+(\d*).*", line)
             if m is not None:
                 return m.group(1)
     except Exp, e:
         if e.err:
             _derror(str(e.err))
             exit(e.errno)
示例#9
0
文件: gstorage.py 项目: xin3244/mine
    def set_lun(self, path, ext):
        if ext == 'ssd':
            num = 0
        elif ext == 'hdd':
            num = 1

        cmd = [self.config.inspect, "--tier", path, str(num)]
        try:
            (out, err) = _exec_pipe1(cmd, 0, False)
            ret = _exec_system("echo $?", False, False)
            if ret == 0:
                _dmsg('set %s %s successful' % (path, ext))
        except Exp, e:
            if e.err:
                _derror(str(e.err))
                exit(e.errno)
示例#10
0
 def list_snap(self, v):
     localsnap = []
     lun = self.list_lun(v)
     for i in lun:
         tgt = self.defaultpath + i[0]
         cmd = [self.lich_snapshot, "--list", tgt]
         try:
             (out, err) = _exec_pipe1(cmd, 0, v)
             for line in out.splitlines():
                 snap = i[0] + "@" + line
                 snapsize = self.getsize(i[0]+'/'+line, v)
                 localsnap.append((i[0], snap, snapsize))
         except Exp, e:
             if e.err:
                 _derror(str(e.err))
                 exit(e.errno)
示例#11
0
文件: gstorage.py 项目: xin3244/mine
    def _lun_list(self):
        lun = []
        lun_info = []
        pool = []
        tgt = []

        dir = '/'
        res = _exec_pipe([self.lichfs, '--list', dir], 0, False)
        for r in res.splitlines():
            r = dir + r.split(' ')[-1]
            if r == '/system':
                continue
            res = _exec_pipe([self.lichfs, '--list', r], 0, False)
            for p in res.splitlines():
                p = p.split(' ')[-1]
                pool.append(r + dir + p)

        for p in pool:
            res = _exec_pipe([self.lichfs, '--list', p], 0, False)
            for l in res.splitlines():
                l = l.split(' ')[-1]
                path = p + dir + l
                if self.is_dir(path):
                    tgt.append(path)
                else:
                    lun.append(path)

        for t in tgt:
            res = _exec_pipe([self.lichfs, '--list', t], 0, False)
            res = [x.split(' ')[-1] for x in res.splitlines()]
            for l in res:
                path = t + dir + l
                if (self.is_dir(path)):
                    _dmsg('%s is dir' % path)
                    _derror('list lun fail')
                    #exit(e.errno)
                else:
                    lun.append(path)

        for l in lun:
            size = self.getsize(l)
            size = _human_readable(int(size))
            allocated = self.getallocated(l)
            allocated = _human_readable(int(allocated) * self.chunksize)
            lun_info.append((l, size, allocated))

        return lun_info
示例#12
0
 def getstat(self, path):
     cmd = [self.lichfs, "--stat", path]
     try:
         (out, err) = _exec_pipe1(cmd, 0, False)
         ret = _exec_system("echo $?", False, False)
         if ret == 0:
             self.success += 1
             #_dmsg('check %s successful' % (path))
         else:
             self.fail += 1
             self.fail_lun.append(path)
     except Exp, e:
         self.fail += 1
         self.fail_lun.append(path)
         if e.err:
             _derror(str(e.err))
             exit(e.errno)
示例#13
0
    def end(self, keep = 0, snap = ""):
        try:
            if self.dev != "":
                self.disk.dev_umount(self.dev, self.verbose)
        except:
            pass

        if self.dir != "" and self.dev != "":
            _exec_system("rm -rf %s" % self.dir)

        if keep == 0 and snap != "":
            cmd = [self.lich_snapshot, "--remove", snap]
            try:
                (out, err) = _exec_pipe1(cmd, 0, False)
            except Exp, e:
                if e.err:
                    _derror(str(e.err))
                    exit(e.errno)
示例#14
0
    def check(self, snapath, path, keep, backuppath):
        snapsize = 0
        devsize = 0

        name = snapath.split('/iscsi/')[1]
        snap = []
        snap = self.list_snap(self.verbose)
        for i in snap:
            if (i[1] == name):
                snapsize = int(i[2])

        st = os.statvfs(path)
        devsize = st.f_bavail * st.f_frsize

        if (snapsize >= devsize):
            self.end(keep, backuppath)
            _derror('snap lun is larger than disk')
            exit(errno.EINVAL)
示例#15
0
    def list_lun(self, v):
        localun = []
        lun = ""
        tgt = ""
        size = ""

        time.sleep(1)
        try:
            res = _exec_pipe([self.lichfs, '--list', self.defaultpath], 0, False)
            for line in res.splitlines():
                pool = line.split(' ')[-1]
                lunres = _exec_pipe([self.lichfs, '--list', self.defaultpath + pool], 0, False)
                for l in lunres.splitlines():
                    lun = l.split(' ')[-1]
                    lunsize = self.getsize(pool+'/'+lun, v)
                    if pool is not None and lun is not None:
                        size = lunsize
                        localun.append((pool + '/' + lun, size))
        except Exp, e:
            _derror('list local lun fail')
            exit(e.errno)
示例#16
0
文件: gstorage.py 项目: xin3244/mine
    def gettier(self, path):
        #replica : 1908
        #allocated : 0
        #tier0 : 0
        #tier1 : 0

        tier_info = []
        cmd = [self.config.inspect, "--tier", path]
        try:
            (out, err) = _exec_pipe1(cmd, 0, False)
            for line in out.splitlines():
                m1 = re.match("\s*tier0 :\s+(\d*).*", line)
                if m1 is not None:
                    ssd = m1.group(1)
                m2 = re.match("\s*tier1 :\s+(\d*).*", line)
                if m2 is not None:
                    hdd = m2.group(1)
            tier_info.append((ssd, hdd))
        except Exp, e:
            if e.err:
                _derror(str(e.err))
                exit(e.errno)
示例#17
0
    def __get_used_percent(self, lst=None):
        #lst = ['node4/0', 'node4/1', 'node4/2', 'node4/3', 'node5/0']
        used_percent = []

        res = _exec_pipe([self.lich_admin, '--listnode'], 3, False)[:-1]
        if lst:
            list = [x.strip() for x in res.splitlines() if x.strip() in lst]
        else:
            list = [x.strip() for x in res.splitlines()]

        if len(list) == 0:
            _derror("node is not exists")
            exit(errno.EINVAL)

        for node in list:
            res = _exec_pipe([self.lich_admin, '--stat', node], 3, False)[:-1]
            if (len(res) != 0):
                d = _str2dict(res)
                used = d['used']
                capacity = d['capacity']
                percent = float(used) / float(capacity) * 100
                used_percent.append((node, percent, used, capacity))
        return sorted(used_percent, key=lambda d: d[1], reverse=False)
示例#18
0
    def backup(self, lun, path, filename, keep, force, v):
        filepath = ""
        snap = ""
        if (filename == ""):
            name = "snapfile"
        else:
            name = filename

        if path.startswith('/dev/'):
            self.dev = path
            self.mount_dev(path, force)
            filepath = self.dir
        elif os.path.isdir(path):
            filepath = path
        elif path.startswith('/'):
            filepath = os.path.dirname(path)
            if not os.path.exists(filepath):
                try:
                    self.dir = filepath
                    _exec_system("mkdir -p %s" % self.dir)
                except:
                    pass
            #name = os.path.basename(path)
            if path.split('/')[-1] != "":
                name = path.split('/')[-1]
        else:
            self.end(keep, snap)
            _derror('path %s was wrong' % path)
            exit(errno.EINVAL)

        if (self.is_snap(lun, v)):
            snapath = self.defaultpath + lun
        elif (self.is_lun(lun, v)):
            snap = self.create_snap(lun)
            snapath = snap
        else:
            self.end(keep, snap)
            _derror('lun %s was wrong' % lun)
            exit(errno.EINVAL)

        self.check(snapath, filepath, keep, snap)
        cmd = [self.lich_snapshot, '--copy', snapath, ':' + filepath + '/' + name]
        try:
            (out, err) = _exec_pipe1(cmd, 0, self.verbose)
        except Exp, e:
            if e.err:
                self.end(keep, snap)
                _derror(str(e.err).strip())
                exit(e.errno)
示例#19
0
    def restore(self, path, lun, filename, v):
        if (path.startswith('/dev/')):
            self.dev = path
            self.mount_dev(path)
            filepath = self.dir + '/' + filename
        else:
            filepath = path + '/' + filename

        if not os.path.exists(filepath):
            self.end()
            _derror( '%s filename is not exist' % (filepath))
            exit(errno.EINVAL)

        if (self.is_target(lun, v) == 1):
            if (self.is_lun(lun, v) == 1):
                self.end()
                _derror( '%s is exist, please rename a new lun' % (lun))
                exit(errno.EINVAL)
        else:
            tgt = os.path.dirname(lun)
            cmd = "lichbd mkpool %s -p iscsi" % (tgt)
            if (self.verbose):
                print cmd
            os.system(cmd)

        cmd = [self.lichfs, "--copy", ":" + filepath, self.defaultpath + lun]
        if (self.verbose):
            print cmd
        try:
            (out, err) = _exec_pipe1(cmd, 0, False)
            print out
        except Exp, e:
            ret = _exec_system("echo $?", False, False)
            if ret and e.err:
                self.end()
                _derror(str(e.err))
                exit(e.errno)
示例#20
0
def docker_pull():
    errno = _exec_system("docker pull centos:7")
    if errno:
        _derror("Please install docker last version")
        exit(errno)
示例#21
0
文件: gstorage.py 项目: xin3244/mine
            verbose = 1
            newargs.remove(o)
        elif o in ('-j', '--json'):
            is_json = 1
            newargs.remove(o)
        elif o in ('-f', '--force'):
            force = True
            newargs.remove(o)

    for o, a in newopts:
        if o in ('--help'):
            usage()
            exit(0)
        elif o == '--disk':
            if a not in ['list', 'add', 'del']:
                _derror('disk  only support list add del operate')
                exit(errno.EINVAL)
            if a in ['add', 'del'] and len(newargs) == 0:
                _derror('add/del need dev')
                exit(errno.EINVAL)
            op = o
            type = a
            ext = newargs
        elif o == '--tier':
            op = o
            type = a
            ext = newargs
        elif o == '--lun':
            op = o
            type = a
            ext = newargs
示例#22
0
            argv.append(_argv[i])

    try:
        opts, args = getopt.getopt(
                argv,
                'hv', ['help', 'verbose', 'force', 'keep', 'backup=', 'restore=', 'list']
                )
    except getopt.GetoptError, err:
        print str(err)
        usage()
        exit(errno.EINVAL)

    try:
        snapshot = Snapshot(verbose)
    except Exp, e:
        _derror(e.err)
        exit(e.errno)

    for o, a in opts:
        if o in ('-h', '--help'):
            usage()
            exit(0)
        elif o in '--backup':
            flag = False
            backup_argv = sys.argv
            for i in range(len(backup_argv)):
                if (backup_argv[i] == '--name'):
                    flag = True
                    break

            if flag and (len(sys.argv) <= i + 1):