服務組態檔gb2312編碼,使用SaltStack管理報錯

來源:互聯網
上載者:User

標籤:gb2312   報錯   unicodedecodeerror   utf-8   utf8   

    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 byteTraceback (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 byteTraceback (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

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/57/8A/wKioL1SdJwLQjhcFAAIa31scCRk348.jpg" title="QQ20141226171041.png" alt="wKioL1SdJwLQjhcFAAIa31scCRk348.jpg" />

由於我的設定檔採用gb2312編碼,所以在對msg進行decode操作時使用utf-8會報錯,再增加一個try,except調試來解決這個問題,修改後的代碼如下:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/57/8D/wKiom1SdKOGCM4KcAAKiDo4CeQQ397.jpg" title="20141226171950.png" alt="wKiom1SdKOGCM4KcAAKiDo4CeQQ397.jpg" />

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

至此,這個問題暫時解決了,無論是utf-8設定檔,還是gb2312設定檔,都通過,不確定是否會影響Salt本身的功能。


本文出自 “Guibin的部落格” 部落格,請務必保留此出處http://guibin.blog.51cto.com/8909901/1596296

服務組態檔gb2312編碼,使用SaltStack管理報錯

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.