运维工具是用python + django +ansible写的,当用ansible调用远程机器上的脚本时,会造成中文显示乱码,原开始以为是系统编码问题,所以把系统编码都设置成了LANG=zh_CN.UTF-8,结果还是乱码,在被调用的脚本中,也添加了这个LANG=zh_CN.UTF-8,还是乱码。其实要解决这个问题,只有在ansible的python api那设置环境变量即可,environment = {'LANG':'zh_CN.UTF-8','LC_CTYPE':'zh_CN.UTF-8'}
我的代码如下:
- def ansible_fun(m_name,m_args,ip,r_user,r_pass,r_port,key_path,forks_num=1):
- '''
- 这个函数是调用ansible.runner模块,以下是传递进来的参数:
- m_name : 模块名,默认使用shell模块
- m_args : 命令参数,如shell命令
- ip : ip地址
- r_user : 远程机器用户名
- r_pass : 远程机器r_user的密码
- r_port : 远程机器端口
- key_path : 密钥路径
- 注:如果是使用shell模块,则获取返回信息调用字典中的key:stdout
- '''
- runner = ansible.runner.Runner(
- module_name = m_name,
- module_args = m_args,
- pattern = ip,
- remote_port = r_port,
- remote_user = r_user,
- private_key_file = key_path,
- forks = forks_num,
- environment = {'LANG':'zh_CN.UTF-8','LC_CTYPE':'zh_CN.UTF-8'}
- )
- result = runner.run()
- try:
- return result['contacted'][ip]
- except:
- return result['dark'][ip]
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏