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 <genexpr>
                  ) 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以上版本解决吧)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值