我正在使用Ansible 2.2.1.0中的junos_config模块,它可以将纯文本配置文件用于配置Juniper网络设备。在此过程中似乎使用了lxml。然而问题在于,这个纯文本文件包含了非ASCII字符,导致Ansible出现以下错误:
我尝试在junos_config模块中使用
当模块包含字符
如何使junos_config(或lxml)支持非ASCII字符?
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
fatal: [10.10.10.111]: FAILED! => {"changed": false, "failed": true, "module_stderr": "Traceback (most recent call last):\n File \"/tmp/ansible_FZ42iu/ansible_module_junos_config.py\", line 344, in <module>\n main()\n File \"/tmp/ansible_FZ42iu/ansible_module_junos_config.py\", line 335, in main\n run(module, result)\n File \"/tmp/ansible_FZ42iu/ansible_module_junos_config.py\", line 293, in run\n return load_config(module, result)\n File \"/tmp/ansible_FZ42iu/ansible_module_junos_config.py\", line 258, in load_config\n diff = module.config.load_config(candidate, **kwargs)\n File \"/tmp/ansible_FZ42iu/ansible_modlib.zip/ansible/module_utils/netcfg.py\", line 58, in load_config\n File \"/tmp/ansible_FZ42iu/ansible_modlib.zip/ansible/module_utils/junos.py\", line 201, in load_config\n File \"/usr/local/lib/python2.7/dist-packages/jnpr/junos/utils/config.py\", line 388, in load\n return try_load(rpc_contents, rpc_xattrs)\n File \"/usr/local/lib/python2.7/dist-packages/jnpr/junos/utils/config.py\", line 350, in try_load\n got = self.rpc.load_config(rpc_contents, **rpc_xattrs)\n File \"/usr/local/lib/python2.7/dist-packages/jnpr/junos/rpcmeta.py\", line 79, in load_config\n rpc.append(E('configuration-text', contents))\n File \"/usr/local/lib/python2.7/dist-packages/lxml/builder.py\", line 236, in __call__\n v = t(elem, item)\n File \"/usr/local/lib/python2.7/dist-packages/lxml/builder.py\", line 185, in add_text\n elem.text = (elem.text or \"\") + item\n File \"src/lxml/lxml.etree.pyx\", line 1031, in lxml.etree._Element.text.__set__ (src/lxml/lxml.etree.c:53225)\n File \"src/lxml/apihelpers.pxi\", line 715, in lxml.etree._setNodeText (src/lxml/lxml.etree.c:24420)\n File \"src/lxml/apihelpers.pxi\", line 703, in lxml.etree._createTextNode (src/lxml/lxml.etree.c:24283)\n File \"src/lxml/apihelpers.pxi\", line 1443, in lxml.etree._utf8 (src/lxml/lxml.etree.c:31502)\nValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters\n", "module_stdout": "", "msg": "MODULE FAILURE"}
我尝试在junos_config模块中使用
# -*- coding: utf-8 -*-
,但这没有帮助。我还尝试将Python的PYTHONIOENCODING
设置为utf8
。
junos_config模块的配置文件如下所示:groups {
replace: classes {
/* Configured by Ansible £ */
system {
login {
class test {
idle-timeout 1;
permissions network;
allow-commands "show route.*|quit|exit";
deny-commands .*;
}
}
}
}
}
当模块包含字符
£
时,会出现无法加载配置:所有字符串必须是XML兼容的:Unicode或ASCII,没有NULL字节或控制字符
错误消息。如何使junos_config(或lxml)支持非ASCII字符?
£
字符,则模块将正确运行。 - Martin