分类目录归档:服务器

Ansible shell 模块

shell 模块

这个是一个很神奇的模块,它也是ansible的核心模块之一。它跟command模块一样负责在被ansible控制的节点(服务器)执行命令行。它与command模块有着相似的地方,也有不同的地方,看完这篇文章将告诉你答案。

shell模块常用参数

parameter required default choices comments
chdir no 跟command一样的,运行shell之前cd到某个目录
creates no 跟command一样的,如果某个文件存在则不运行shell
removes no 跟command一样的,如果某个文件不存在不运行shell

shell模块案例

案例1:
让所有节点运行somescript.sh并把log输出到somelog.txt。

$ ansible -i hosts all -m shell -a "sh somescript.sh >> somelog.txt"

案例2:
先进入somedir/ ,再在somedir/目录下让所有节点运行somescript.sh并把log输出到somelog.txt。

$ ansible -i hosts all -m shell -a "somescript.sh >> somelog.txt" chdir=somedir/

案例3:
体验shell和command的区别,先cd到某个需要编译的目录,执行condifgure然后,编译,然后安装。

$ ansible -i hosts all -m shell -a "./configure && make && make insatll" chdir=/xxx/yyy/

shell模块如何使用你明白了么?

ImportError: No module named MySQLdb

ImportError: No module named MySQLdb
该错误是源于我们没有安装Python连接MySQL所需的MySQLdb库而引起。
MySQL是最流行的开源数据库之一,但在Python标准库中并没有集成MySQL接口程序,MySQLdb是一个第三方包,需独立下载并安装。Python连接MySQL的关键之处在于设置数据库连接,在连接成功之后,其实不管后端是何种数据库,对DB-API对象的属性和方法进行操作都是一样的。
下载地址:http://sourceforge.net/projects/mysql-python/
对于Linux来说,有多重包管理系统和安装机制。如果使用的是包含某种包管理器的Linux,那么可以很轻松的安装Python MySQLdb库。
Linux Fedora, CentOS系统:yum install MySQL-python
Linux Ubuntu操作系统:apt-get install python-mysqldb
下面的代码演示了如何创建一个表,插入和访问数据等简单操作:
#!/usr/bin/env python
import MySQLdb
def main():
    print ‘*** Connecting to database’
    cxn=MySQLdb.connect(host=’192.168.1.108′, user=’root’, passwd=’123456′, db=’test’)
    if not cxn:
        print ‘ERROR: connection not supported, exiting’
    return
    cur=cxn.cursor()
    print ‘*** Creating users table’
    cur.execute(‘CREATE TABLE users(login VARCHAR(8), uid INT)’)
    print ‘*** Inserting some users’
    cur.execute(“INSERT INTO users VALUES(‘john’, 7000)”)
    cur.execute(“INSERT INTO users VALUES(‘jane’, 7001)”)
    cur.execute(“INSERT INTO users VALUES(‘bob’, 7200)”)
    print ‘*** Search for users starting with j’
    cur.execute(“SELECT * FROM users WHERE login LIKE ‘j%'”)
    for data in cur.fetchall():
        print ‘%s\t%s’ % data
    cur.close()
    cxn.commit()
    cxn.close()
if __name__ == ‘__main__’:
    main()
我的更多文章: