salt pkg.install报错:No module named yum

在使用salt进行软件管理的时候,有些节点报 No module named yum 的错误。经过排查,发现是因为升级了minion端Python版本后产生的问题

msater

1
2
3
4
5
6
$ salt 'vm3.salt.com' pkg.install httpd
vm3.salt.com:
ERROR: Traceback (most recent call last):
File "/usr/bin/repoquery", line 34, in <module>
import yum
ImportError: No module named yum

服务器自带的Python版本是2.6.6 由于其他业务的需求,Python的版本升级到了2.7.10,升级后首先yum命令处于不可用的状态,通过修改/usr/bin/yum文件的第一行#!/usr/bin/python#!/usr/bin/python2.6来修复yum命令的使用

由于系统默认的Python已经由2.6.6变更到了2.7.10

1
2
$ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 34 Oct 9 02:16 /usr/bin/python -> /usr/local/python2.7/bin/python2.7

salt master在派发任务后,minion接收到任务并在本地使用默认的Python来执行,实际使用了升级后默认的Python2.7.10,导致Python报找不到yum模块的错误

在网上搜索了很多方案,全部是修改yum默认使用的Python版本来解决问题,貌似不能通过让yum来支持高版本的Python来解决问题。so,要解决salt minion本地调用yum不报错,就必须要保证其使用Python2.6.6来执行!解决方案和yum命令的修复方式相同:

1
2
3
4
5
6
7
8
9
$ head /usr/bin/repoquery
#!/usr/bin/python -tt
#... ...

$ vim /usr/bin/repoquery

$ head /usr/bin/repoquery
#!/usr/bin/python2.6 -tt
#... ...

/usr/bin/repoquery文件第一行的#!/usr/bin/python -tt更改为#!/usr/bin/python2.6 -tt即可