Search Virtual Machine on Parallels Cloud Server using Python

Hãy đảm bảo rằng package prlsdkapi đã được cài đặt trên Parallels Server của bạn. Mặc định module này đã được cài đặt. Hiện tại Parallels Cloud Server 6.0 sử dụng python 2.6.
Đoạn script hỗ trợ tìm kiếm theo tên, dung lượng RAM, số lượng CPU, trạng thái của máy ảo và có thể thực hiện lệnh prlctl trên kết quả tìm kiếm.
Cách sử dụng khá đơn giản:

prlctl [--host] [host] [options]
-H, --host: mặc định là localhost
-n, --vmname=NAME: tên vm cần tìm kiếm
-s, --state: trạng thái của vm(running, stopped, paused, suspened)
-m, --memsize="<|>|<=|>=|==NUMER": dung lượng RAM
-c, --cpucount="<|>|<=|>=|==NUMER" số lượng CPU
-e, --exec="string": thực thi lệnh prlctl
 

Ví dụ:
– Tìm tất cả các VM có tên bắt đầu bằng từ “test”

prlsearch --vmname *test

– Tìm tất cả các VM có dung lượng RAM nhỏ hơn 512MB

prlsearch --memsize "<512"

– Tìm tất cả VM đang chạy :

prlsearch --state running

– Tìm tất cả VM đang bị stop và tiến hành start chúng:

prlsearch --state stopped --exec "prlctl start %s"

– Tìm kiếm các VM có tên bắt đầu bằng từ “test” và có dung lượng RAM lớn hoặc bằng 512MB:

prlserach --vmname *test --memsize ">=512"

– Tìm kiếm các VM trên server 192.168.1.192 có tên bắt đầu từ “test”

prlserach --host 192.168.1.192:root:password --vmname *test

Rất mong nhận được góp ý của các bạn về đoạn script của tôi. Bạn cũng có thể download tại github:
Continue reading “Search Virtual Machine on Parallels Cloud Server using Python”

Advertisements

Python – Tạo timer count down với urwid (curses)

Từ khi sử dụng vim, ranger, mc,… và các ứng dạng TUI khác .Tôi bắt đầu yêu thích các ứng dụng dạng Text-base User Interface. Vì thế tôi quyết tìm hiểu về chủ để này.
Trong Python cung cấp cho ta thư viện chuẩn là curses. Thư viện này khá hay. Nhưng tất cả các widget bạn đều phải tự xây dựng lấy, cho nên hôm nay tôi xin giới thiệu urwid. urwid được xây dựng dựa trên curses, cung cấp cung cho bạn một số widget cần thiết. Nói cách khác urwid chính là bộ widget dành cho curses. Ngoài urwid còn có npyscreen.
Bạn có thể tham khảo trang chủ tại đây: http://urwid.readthedocs.org

Ở đây tôi sẽ tạo một chương trình đếm ngược thời gian đơn giản.

Ý tưởng:
– Tham số đầu vào tôi sẽ sử dụng tổng số giây.
– Sử dụng gtime và strftime của module time để convert từ giây -> dạng ‘H:M:S’
– Mỗi giây sẽ update và gọi 2 bước trên.
countdown
Continue reading “Python – Tạo timer count down với urwid (curses)”

myhtop – Monitor Mysql server status and process list

Chương trình này khá đơn giản, được viết bằng ngôn ngữ Python và sử dụng urwid để làm giao diện.

Chương trình dùng để theo dõi tình trạng của Mysql server và các process list. Các bạn có thể nhấn phím K để tắt process mình muốn.

Nếu bạn quan tâm đến ứng dụng nhỏ này thì hãy góp ý với mình nhé 🙂 .

  myhtop [option,]
        -h, --help      Show this message
        -p, --port      mysql port, default 3306
        -u, --user      Default root
        -p, --passwd    Default None
        -H, --host      Default localhost

Bạn có thể download tại: github.

Checksum md5 sha1 using Python

Khi các bạn download 1 tập tin gì đó về. Các trang web thường cung cấp cho chúng ta 1 checksum. Checksum đó có thể là md5 hoặc sha1. Việc kiểm tra checksum khá quan trọng, để kiểm tra xem tập tin có bị thay đổi gì không. Tối hôm qua tôi quyết định viết 1 script md5-checker hỗ trợ cả md5 và sha1 bạn có thể download tại github.com.

Các bạn cần import các thư viện cần thiết:

import hashlib
import threading

Một số hàm trong hashlib mà bạn cần chú ý:
hashlib.update() : cập nhật hash object với argv string.
hashlib.hexdigest() : băm ra dạng cơ số 16

Tiến hành băm tập tin, ở đây tôi sử dụng module threading nên tôi quyết định cho tất cả vào 1 class. Các bạn không nên sử hàm readlines bời vì nó sẽ đưa toàn bộ data trong file lên ram, làm hao tổn bộ nhớ, giảm hiệu suất. Để đọc file an toàn khuyến cáo nên dùng ‘with’, nó sẽ tự động đóng tập tin khi công việc kết thúc. Class HashFile trả về mã băm trong biến result. Ta lấy biến result đó so sánh với checksum nếu trùng nhau sẽ trả về True ngược lại trả về False.

class HashFile(threading.Thread):
    def __init__(self, fname, hash_type):
        super(HashFile, self).__init__()
        self.fname = fname
        self.hash_type = hash_type
        self.result = None
    def run(self):
        self.result =  self.hash_file().hexdigest()

    def hash_file(self):
        BLOCKSIZE = 65536
        hasher = getattr(hashlib, self.hash_type)()
        with open(self.fname, 'rb') as fin:
            buf = fin.read(BLOCKSIZE)
            while len(buf) > 0:
                hasher.update(buf)
                buf = fin.read(BLOCKSIZE)
        return hasher

Continue reading “Checksum md5 sha1 using Python”

Backup apache server via sftp using python

– Thư mục lưu các file cấu hình apache mặc định:
+ Ubuntu: /etc/apache2
+ CentOS: /etc/httpd
– Thư mục chứa source website:
+ /var/www
Trong đoạn script này tôi sẽ backup 2 thư mục trên, nén ở dạng file tar.gz. Sau đó gửi file được nén đến một File Server nào đó.
Trước tiên kiểm tra distro linux. Nếu như OS là ubuntu httpd_conf=’/etc/apache2′, còn nếu là CentOS httpd_conf=’/etc/httpd’

www = '/var/www'
linux_dist = platform.linux_distribution()[0]
if linux_dist == 'Ubuntu':
    httpd_conf = '/etc/apache2'
elif linux_dist == 'CentOS':
    httpd_conf = 'etc/httpd'

Continue reading “Backup apache server via sftp using python”

Gộp dictionary trong Python

from collections import defaultdict
def merge_dict(*dicts):
    merge = defaultdict(int)
    for item in dicts:
        for k, v in item.iteritems():
            merge[k] += v
    return merge
# test
d1 = {'k': 2, 'l': 5, 'm': 8}
d2 = {'k': 2, 'a': 10, 'm': 9, 'l': 5, 'h':50}
d3 = {'k': 2, 'a': 10, 'm': 9, 'l': 5, 'r': 10}
d4 = {'k': 2, 'a': 10, 'm': 9, 'l': 5}
d5 = {'k': 2, 'a': 10, 'm': 9, 'f': 5}


z = merge_dicts(d1,d2,d3,d4,d5)

z = sorted(z.iteritems(), key= lambda v: v[1], reverse=True)

for (k, v) in z:
print k, v