Python KeyError:';用户';当运行Ansible playbook时
编辑:使用python 3.6会让事情变得更糟。完全重新安装Python2.7.15并没有解决这个问题。同样的错误也出现了 再次编辑:我创建了一个新用户,Python KeyError:';用户';当运行Ansible playbook时,python,ansible,Python,Ansible,编辑:使用python 3.6会让事情变得更糟。完全重新安装Python2.7.15并没有解决这个问题。同样的错误也出现了 再次编辑:我创建了一个新用户,test\u user,并将我的ansible-web.txt文件发送给该用户(sudo chown test\u user:test\u user ansible web.txt)。我再次运行了剧本,那些错误没有显示出来。所以,我的本地文件有问题。我只是不知道从哪里开始找 我正在试图找出导致此错误的原因。当我尝试运行Ansible剧本时,它会
test\u user
,并将我的ansible-web.txt文件发送给该用户(sudo chown test\u user:test\u user ansible web.txt
)。我再次运行了剧本,那些错误没有显示出来。所以,我的本地文件有问题。我只是不知道从哪里开始找
我正在试图找出导致此错误的原因。当我尝试运行Ansible剧本时,它会反复出现,但剧本仍然成功运行。有两个错误。以下是为单个远程主机运行播放的全部输出:
< TASK [Gathering Facts] >
------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
Traceback (most recent call last):
File "/usr/lib/python2.7/logging/__init__.py", line 868, in emit
msg = self.format(record)
File "/usr/lib/python2.7/logging/__init__.py", line 741, in format
return fmt.format(record)
File "/usr/lib/python2.7/logging/__init__.py", line 469, in format
s = self._fmt % record.__dict__
KeyError: 'user'
Logged from file transport.py, line 1819
Traceback (most recent call last):
File "/usr/lib/python2.7/logging/__init__.py", line 868, in emit
msg = self.format(record)
File "/usr/lib/python2.7/logging/__init__.py", line 741, in format
return fmt.format(record)
File "/usr/lib/python2.7/logging/__init__.py", line 469, in format
s = self._fmt % record.__dict__
KeyError: 'user'
Logged from file transport.py, line 1819
Traceback (most recent call last):
File "/usr/lib/python2.7/logging/__init__.py", line 868, in emit
msg = self.format(record)
File "/usr/lib/python2.7/logging/__init__.py", line 741, in format
return fmt.format(record)
File "/usr/lib/python2.7/logging/__init__.py", line 469, in format
s = self._fmt % record.__dict__
KeyError: 'user'
Logged from file sftp.py, line 158
Traceback (most recent call last):
File "/usr/lib/python2.7/logging/__init__.py", line 868, in emit
msg = self.format(record)
File "/usr/lib/python2.7/logging/__init__.py", line 741, in format
return fmt.format(record)
File "/usr/lib/python2.7/logging/__init__.py", line 469, in format
s = self._fmt % record.__dict__
KeyError: 'user'
Logged from file sftp.py, line 158
ok: [192.168.80.50]
___________________________________
< TASK [test_ansible_facts : debug] >
-----------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
skipping: [192.168.80.50]
___________________________________
< TASK [test_ansible_facts : debug] >
-----------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
ok: [192.168.80.50] => {
"msg": "OS version is 18.04"
}
____________
< PLAY RECAP >
------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
192.168.80.50 : ok=2 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
------------------------
\ ^__^
\(oo)\_______
(__)\ )\/\
||----w|
|| ||
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python2.7/logging/_init__uuu.py”,第868行,在emit中
msg=self.format(记录)
文件“/usr/lib/python2.7/logging/_init__uuu.py”,第741行,格式为
返回格式(记录)
文件“/usr/lib/python2.7/logging/_init__uuu.py”,第469行,格式为
s=自记录的百分比__
KeyError:'用户'
从文件transport.py第1819行记录
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python2.7/logging/_init__uuu.py”,第868行,在emit中
msg=self.format(记录)
文件“/usr/lib/python2.7/logging/_init__uuu.py”,第741行,格式为
返回格式(记录)
文件“/usr/lib/python2.7/logging/_init__uuu.py”,第469行,格式为
s=自记录的百分比__
KeyError:'用户'
从文件transport.py第1819行记录
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python2.7/logging/_init__uuu.py”,第868行,在emit中
msg=self.format(记录)
文件“/usr/lib/python2.7/logging/_init__uuu.py”,第741行,格式为
返回格式(记录)
文件“/usr/lib/python2.7/logging/_init__uuu.py”,第469行,格式为
s=自记录的百分比__
KeyError:'用户'
从文件sftp.py第158行记录
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python2.7/logging/_init__uuu.py”,第868行,在emit中
msg=self.format(记录)
文件“/usr/lib/python2.7/logging/_init__uuu.py”,第741行,格式为
返回格式(记录)
文件“/usr/lib/python2.7/logging/_init__uuu.py”,第469行,格式为
s=自记录的百分比__
KeyError:'用户'
从文件sftp.py第158行记录
ok:[192.168.80.50]
___________________________________
-----------------------------------
\ ^__^
\(oo)\_______
(__)\ )\/\
||----w|
|| ||
跳过:[192.168.80.50]
___________________________________
-----------------------------------
\ ^__^
\(oo)\_______
(__)\ )\/\
||----w|
|| ||
确定:[192.168.80.50]=>{
“msg”:“操作系统版本为18.04”
}
____________
<播放重述>
------------
\ ^__^
\(oo)\_______
(__)\ )\/\
||----w|
|| ||
192.168.80.50:确定=2更改=0无法访问=0失败=0跳过=1获救=0忽略=0
我真的没有“你尝试了什么”的回答,因为我没有改变任何东西(除了我的Ubuntu机器上的基本软件更新),而且我对Python的了解不够,无法调试它。搜索特定错误不会产生任何结果
无论我运行哪个剧本,这些错误都会出现。我使用的是Ansible版本2.7.15和Python 2.7.15
关于我能做什么有什么想法吗 好吧,今天早上我在开机时崩溃(得到一个
initramfs
提示,这导致我在grub中运行fsck
),我决定继续重新安装我的操作系统。我使用apt重新安装了Ansible,使用Ansible playbook.yml运行了playbook,并在没有错误的情况下完成了。这本身不是一个解决方案,因为我显然还有其他问题,但是python错误已经消失了 自从升级到ansible 2.9以来,我一直遇到类似的错误,虽然我们没有解决所有问题,但我可以指出一些来源
keyerror来自此处ansible自身设置的格式-
我们有一个自定义日志,因此我们能够调整我们的日志消息
-self.logger.info(message)
+self.logger.info(message, extra={'user':user})
当其他应用程序有自己的记录器并执行日志调用时,这并不能解决KeyError问题。这些仍然会出现错误并无法记录
编辑:这已被确认为一个错误,并在ansible master中修复-根据回溯和playbook仍然成功执行的事实,问题似乎源于日志记录。你试过更新那个软件包吗?@JR.请原谅我的困惑,你指的是哪个软件包?我没有更新任何软件包。@JR.我运行了sudopip安装日志--upgrade
,但这并没有改变任何东西。这就是您所指的包吗?我假设它是一个包,但它是一个标准库()。无视我最初的评论。对不起,我帮不上忙:-\@JR.用一些新信息更新了我的问题。谢谢你的信息!我的机器出现了另一个问题(它正在引导到initramfs提示符),所以我完全重新安装了操作系统和ansible。我在跑2.9.2。现在一切都好了。我会接受你的回答。