设为首页 收藏本站
查看: 3160|回复: 0

[经验分享] 服务配置文件gb2312编码,使用SaltStack管理报错

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-29 08:48:49 | 显示全部楼层 |阅读模式
Salt发布2014.7.0后,及时进行了更新,测试下来,在上一版本正常运行的操作,这一版本却出现报错。公司的好多服务由于历史原因,配置文件延续下来,使用的是gb2312编码,其中还有中文注释。在使用salt进行管理的时候,在Master端会报UnicodeDecodeError错误。    执行配置文件更新,并重启服务操作:

1
salt 'zhaogb-202' state.sls update_conf.manager



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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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



执行该更新操作后,会报如下错误:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
[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
QQ截图20141229084635.png
由于我的配置文件采用gb2312编码,所以在对msg进行decode操作时使用utf-8会报错,再增加一个try,except调试来解决这个问题,修改后的代码如下:
QQ截图20141229084656.png
也就是修改了except,再做一次判断。
至此,这个问题暂时解决了,无论是utf-8配置文件,还是gb2312配置文件,都通过,不确定是否会影响Salt本身的功能。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-39466-1-1.html 上篇帖子: saltstack的搭建和基本使用 下篇帖子: 自动化运维工具SaltStack详细部署 配置文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表