Saltstack模块file发送中文名称文件问题解决

最近又用到了saltstack,发现过了这么多年,salt的file模块无法发送中文名称文件问题还没有人解决,蛋蛋的忧伤

于是从昨晚一直决战到今天天亮,终于找到了可行性方法。

下面做个笔记,希望能帮到有需要的人。

一、系统环境

系统:CentOS7.2

python版本:2.7.5

salt版本:2015.5.10

二、问题展现

需求:要同步一个文件夹(同步文件或文件夹一样)到minion端,文件夹里包含中文名称的文件

执行过程报错:

192.168.1.127:
----------
          ID: dir_send
    Function: file.recurse
        Name: /tmp/ylhb
      Result: False
     Comment: An exception occurred in this state: Traceback (most recent call last):
                File "/usr/lib/python2.7/site-packages/salt/state.py", line 1564, in call
                  **cdata['kwargs'])
                File "/usr/lib/python2.7/site-packages/salt/states/file.py", line 2401, in recurse
                  ) for (k, v) in six.iteritems(ret['comment'])).strip()
                File "/usr/lib/python2.7/site-packages/salt/states/file.py", line 2401, in 
                  ) for (k, v) in six.iteritems(ret['comment'])).strip()
              UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 10: ordinal not in range(128)
     Started: 16:16:17.297668
    Duration: 23.924 ms
     Changes:   

Summary
------------
Succeeded: 0
Failed:    1
------------
Total states run:     1
ERROR: Minions returned with non-zero exit code

查看python默认编码:

>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> 
可知默认的编码是ascii。

由于python默认编码为ascii,当程序中出现非ascii编码时,python的处理常常会报“UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 10: ordinal not in range(128)”这样的错(python3不会有这样的问题)。

三、解决方法:

只需修改python默认编码为“utf-8”即可(master端和minion端都要修改),修改方式如下:

新增文件/usr/lib/python2.7/site-packages/sitecustomize.py,内容如下:

# -*- coding: UTF-8 -*-
import sys 
reload(sys)
sys.setdefaultencoding('utf-8')
再次查看python默认编码:

>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>> 
重启salt服务(master端执行“systemctl restart salt-master”,minion端执行“systemctl restart -salt-minion”)。

再次执行发送中文名称文件:

192.168.1.127:
----------
          ID: dir_send
    Function: file.recurse
        Name: /tmp/ylhb
      Result: True
     Comment: Recursively updated /tmp/ylhb
     Started: 17:06:40.381259
    Duration: 71.074 ms
     Changes:   
              ----------
              /tmp/ylhb/雨落寒冰:
                  ----------
                  diff:
                      New file
                  mode:
                      0644

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
以上发送中文名称文件成功。


注:以上仅适用于Linux系列系统,暂不支持Windows(闭源太麻烦了,已经很多年没用了,试着把python升级到3以上版本解决吧)


你可能感兴趣的:(saltstack,python,linux,python,saltstack)