服务配置文件gb2312编码,使用SaltStack管理报错

Salt发布2014.7.0后,及时进行了更新,测试下来,在上一版本正常运行的操作,这一版本却出现报错。公司的好多服务由于历史原因,配置文件延续下来,使用的是gb2312编码,其中还有中文注释。在使用salt进行管理的时候,在Master端会报UnicodeDecodeError错误。

执行配置文件更新,并重启服务操作:

salt ‘zhaogb-202‘ state.sls update_conf.manager

manager.sls是更新Manager服务配置文件的模板:

ma_watch: 
  service: 
    - name: ManagerServerd
    - running
    - reload: True
    - watch:
      - file: /home/ManagerServer/config.xml
/home/ManagerServer/config.xml:
  file.managed:
    - source: salt://dzh_store/conf_file/ManagerServer/config.xml
    - user: root
    - group: root
    - mode: 644
    - backup: minion

执行该更新操作后,会报如下错误:

[ERROR   ] An un-handled exception was caught by salt‘s global exception handler:
UnicodeDecodeError: ‘utf8‘ codec can‘t decode byte 0xca in position 18: invalid continuation byte
Traceback (most recent call last):
  File "/usr/bin/salt", line 10, in <module>
    salt_main()
  File "/usr/lib/python2.6/site-packages/salt/scripts.py", line 240, in salt_main
    client.run()
  File "/usr/lib/python2.6/site-packages/salt/cli/__init__.py", line 189, in run
    self._output_ret(ret_, out)
  File "/usr/lib/python2.6/site-packages/salt/cli/__init__.py", line 243, in _output_ret
    salt.output.display_output(ret, out, self.config)
  File "/usr/lib/python2.6/site-packages/salt/output/__init__.py", line 44, in display_output
    display_data = get_printout(out, opts)(data).rstrip()
  File "/usr/lib/python2.6/site-packages/salt/output/highstate.py", line 74, in output
    return _format_host(host, hostdata)[0]
  File "/usr/lib/python2.6/site-packages/salt/output/highstate.py", line 118, in _format_host
    schanged, ctext = _format_changes(ret[‘changes‘])
  File "/usr/lib/python2.6/site-packages/salt/output/highstate.py", line 340, in _format_changes
    __opts__)
  File "/usr/lib/python2.6/site-packages/salt/output/__init__.py", line 121, in out_format
    return get_printout(out, opts)(data).rstrip()
  File "/usr/lib/python2.6/site-packages/salt/output/nested.py", line 124, in output
    return nest.display(ret, __opts__.get(‘nested_indent‘, 0), ‘‘, ‘‘)
  File "/usr/lib/python2.6/site-packages/salt/output/nested.py", line 115, in display
    out = self.display(val, indent + 4, ‘‘, out)
  File "/usr/lib/python2.6/site-packages/salt/output/nested.py", line 90, in display
    prefix=prefix)
  File "/usr/lib/python2.6/site-packages/salt/output/nested.py", line 59, in ustring
    indent, color, prefix, msg.decode(encoding), endc, suffix)
  File "/usr/lib64/python2.6/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: ‘utf8‘ codec can‘t decode byte 0xca in position 18: invalid continuation byte
Traceback (most recent call last):
  File "/usr/bin/salt", line 10, in <module>
    salt_main()
  File "/usr/lib/python2.6/site-packages/salt/scripts.py", line 240, in salt_main
    client.run()
  File "/usr/lib/python2.6/site-packages/salt/cli/__init__.py", line 189, in run
    self._output_ret(ret_, out)
  File "/usr/lib/python2.6/site-packages/salt/cli/__init__.py", line 243, in _output_ret
    salt.output.display_output(ret, out, self.config)
  File "/usr/lib/python2.6/site-packages/salt/output/__init__.py", line 44, in display_output
    display_data = get_printout(out, opts)(data).rstrip()
  File "/usr/lib/python2.6/site-packages/salt/output/highstate.py", line 74, in output
    return _format_host(host, hostdata)[0]
  File "/usr/lib/python2.6/site-packages/salt/output/highstate.py", line 118, in _format_host
    schanged, ctext = _format_changes(ret[‘changes‘])
  File "/usr/lib/python2.6/site-packages/salt/output/highstate.py", line 340, in _format_changes
    __opts__)
  File "/usr/lib/python2.6/site-packages/salt/output/__init__.py", line 121, in out_format
    return get_printout(out, opts)(data).rstrip()
  File "/usr/lib/python2.6/site-packages/salt/output/nested.py", line 124, in output
    return nest.display(ret, __opts__.get(‘nested_indent‘, 0), ‘‘, ‘‘)
  File "/usr/lib/python2.6/site-packages/salt/output/nested.py", line 115, in display
    out = self.display(val, indent + 4, ‘‘, out)
  File "/usr/lib/python2.6/site-packages/salt/output/nested.py", line 90, in display
    prefix=prefix)
  File "/usr/lib/python2.6/site-packages/salt/output/nested.py", line 59, in ustring
    indent, color, prefix, msg.decode(encoding), endc, suffix)
  File "/usr/lib64/python2.6/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: ‘utf8‘ codec can‘t decode byte 0xca in position 18: invalid continuation byte

执行返回报错,但是Minion端配置文件已经更新,并且服务重启载入新的配置文件。也就是说,这个报错产生在Master端,对Minion没有影响。所有操作都在上一个版本(2014.1.0)验证过,没有任何问题。排查下来,找到

/usr/lib/python2.6/site-packages/salt/output/nested.py

这个文件,与上一个版本相比,增加了一个ustring方法,其中定义了一个带默认值encoding=‘utf-8‘参数,问题就出现在这里。

2014.7.0 nested.py

由于我的配置文件采用gb2312编码,所以在对msg进行decode操作时使用utf-8会报错,再增加一个try,except调试来解决这个问题,修改后的代码如下:

也就是修改了except,再做一次判断。

至此,这个问题暂时解决了,无论是utf-8配置文件,还是gb2312配置文件,都通过,不确定是否会影响Salt本身的功能。

时间: 2025-01-15 20:50:43

服务配置文件gb2312编码,使用SaltStack管理报错的相关文章

在win2008 r2主域控制域上打开“组策略管理”报错“未打开组策略对对象。你可能没有合适的权限”

在win2008 r2主域控制域上打开“组策略管理”报错“未打开组策略对对象.你可能没有合适的权限” 打开组策略管理其它选项提示:找不到指定路径.之前做过的操作:取消域控主机上的共享目录sysvol和netlogon.关闭域控主机上和客户机上的“文件共享和打印机共享”. 现在打开域控主机上的组策略管理报上述两种错误.解决方法:1.C盘下搜索sysvol,找到该目录,恢复共享.2.域控主机及客户机启用文件和打印机共享3.开始---运行---services.msc----重新启动Netlogon服

Android见招拆招九:字符编码问题导入项目报错

导入项目报错 问题原因及解决 字符编码问题,UTF-8和GBK Android见招拆招九:字符编码问题导入项目报错,布布扣,bubuko.com

Mosquitto搭建Android推送服务番外篇一:各种报错解决

文章钢要: 目前笔者在开发搭建Mosquitto服务器,在此期间遇到很多实际问题,所以走了很多弯路,在这里写出来为大家提供一些帮助. 1.安装完成后启动Mosquitto报错 执行mosquitto客户端程序时出现找不到动态库:libmosquitto.so.1 ./mosquitto_sub: error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file

Django开发纯后台服务的时候遇到CSRF引起的报错

Django视图: 当请求为post请求时会遇到CSRF的报错,Django针对CSRF的保护措施是在生成的每个表单中放置一个自动生成的令牌,通过这个令牌判断POST请求是否来自同一个网站,只需要在form表单中添加{% csrf_token %} Django纯后端服务:  当请求是post请求时此时也会出现上面的报错,这个时候我是去settings.py将 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'dja

saltstack安装报错

saltstack客户端安装salt-ninion软件包的时候报错 Error: Package: salt-2015.5.10-2.el6.noarch (epel) Requires: PyYAML Error: Package: salt-2015.5.10-2.el6.noarch (epel) Requires: python-requests Error: Package: salt-2015.5.10-2.el6.noarch (epel) Requires: python-jin

关于把代码提交至SVN管理报错的问题

在代码没有提交之前你的Java类右下角会有个?号,提交之后就会消除.有时候代码Commit的时候会报钩子阻塞的错误,主要原因有两个: 1.comment没有填写,必须填写Jira里面的Key 2.你的代码写错地方了,与你的Jira里面的安排的模块不一致,把代码放置正确的位置即可 SVN是代码管理工具,如果是全新的文件就直接commit,如果仅仅是在原有文件基础上改动的话就选择synchronized with repository(同步) Marven是管理类库的工具,我们代码里面所有依赖(除了

CentOS6.5_x64安装MySQL-5.6.17,在已经启动MySQL服务的情况下,出现密码报错ERROR 2002 (HY000)

1.修改MySQL配置文件,使MySQL登陆时跳过密码验证 skip-grant-tables 2.重启MySQL服务 service mysql restart 3.进入MySQL,修改user表中的密码 [root]#mysql -u root mysql> show databases; mysql> use mysql; mysql> update user set Password=password('root') where user = 'root'; mysql>e

Rabbitmq 服务启动后停止 | Windows下启动报错Error: unable to connect to node [email&#160;protected]: nodedown

1.erlang版本和rabbitmq版本不匹配 版本匹配: http://www.rabbitmq.com/which-erlang.html 2.找到匹配的版本,卸载当前rabbitmq重新安装. 执行以下操作从计算机中完全卸载RabbitMQ和Erlang: (1)打开Windows控制面板,双击“程序和功能”. (2)在当前安装的程序列表中,右键单击RabbitMQ Server,然后单击“卸载”. (3)在当前安装的程序列表中,右键单击“Erlang OTP”,然后单击“卸载”. (4

springmvc_mybatis配置文件解析,解决数据源引用报错问题

<!-- 1. 数据源 : DriverManagerDataSource -->         <context:property-placeholder location="classpath:config/jdbc.properties" ignore-unresolvable="true" />      <bean id="dataSource"        class="org.spring