五、使用Python部署MongoDB

一、引子

在我们运维工作中,往往会部署各种各样的软件,不过我们都是人工一步一步去部署的,这次不同,我们可以用Python程序安装,提高了效率,以及降低了部署中的误操作;

二、案例描述

在我们当前目录下存在一个MongoDB安装包,我们的Python程序需要将安装包解压到当前目录的mongo目录下,并在当前目录下创建一个mongodata目录用来保存MongoDB的数据文件。

MongoDB是当下最流行的文档数据库,具有很好易用性。启动一个MongoDB数据库实例,只需要执行以下几条shell命令即可:

# tar zxf mongodb-linux-x86_64-3.0.6.gz
# mv mongodb-linux-x86_64-3.0.6 mongodb
# mdkir mangodata
# mongo/bin/mongod --fork --logpath mongodata/mongod.log --dbpath mongodata

三、使用Python部署MongoDB

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import print_function
import os
import shutil
import tarfile
import subprocess

def execute_cmd(cmd):
    p = subprocess.Popen(cmd,
                         shell=True,
                         stdin=subprocess.PIPE,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE,
                         )
    stdout,stderr = p.communicate()
    if p.returncode != 0:
        return p.returncode,stderr
    return p.returncode,stdout

def unpackage_mongo(package,package_dir):
    unpackage_dir = os.path.splitext(package)[0]
    if os.path.exists(unpackage_dir):
        shutil.rmtree(unpackage_dir)

    if os.path.exists(package_dir):
        shutil.rmtree(package_dir)

    t = tarfile.open(package,'r:gz')
    t.extractall('.')

    shutil.move(unpackage_dir,package_dir)

def create_datadir(data_dir):
    if os.path.exists(data_dir):
        shutil.rmtree(data_dir)
    os.mkdir(data_dir)

def format_mongod_command(package_dir,data_dir,logFile):
    mongod = os.path.join(package_dir,'bin','mongod')
    mongod_format = """{0} --fork --dbpath {1} --logpath {2}"""
    return mongod_format.format(mongod,data_dir,logFile)


def start_mongod(cmd):
    returncode,out = execute_cmd(cmd)
    if returncode != 0:
        raise SystemExit('execute {0} error: {1}'.format(cmd,out))
    else:
        print("execute command ({0}) successful".format(cmd))

def main():
    package = 'mongodb-linux-x86_64-3.0.6.gz'
    cur_dir = os.path.abspath('.')
    package_dir = os.path.join(cur_dir,'mongo')
    data_dir = os.path.join(cur_dir,'mongodata')
    logfile= os.path.join(data_dir,'mongo.log')
    
    if not os.path.exists(package):
        raise SystemExit("{0} not found".format(package))
    
    unpackage_mongo(package,package_dir)
    create_datadir(data_dir)
    start_mongod(format_mongod_command(package_dir,data_dir,logfile))
    
if __name__ == '__main__':
    main()
    
    
posted @ 2018-06-10 12:06  云原生运维社区  阅读(313)  评论(0编辑  收藏  举报