KeyError:运行Ansible剧本时的“用户”

时间:2019-12-06 17:06:45

标签: python ansible

编辑:使用python 3.6会使情况变得更糟。完全重新安装python 2.7.15并不能解决问题。出现相同的错误。

再次编辑:我创建了一个新用户test_user,并把ansible-web.txt文件写给了该用户(sudo chown test_user:test_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   

我真的没有“您尝试了什么”的响应,因为我没有进行任何更改(除了Ubuntu计算机上的基本软件更新),而且我对Python的了解还不足以对其进行调试。搜索特定错误不会产生任何结果。

无论我运行哪本剧本,这些错误都会出现。我正在使用Ansible版本2.7.15和Python 2.7.15。

关于我能做什么的任何想法?

2 个答案:

答案 0 :(得分:0)

好吧,今天早晨启动崩溃(出现initramfs提示,导致我在grub中运行fsck)后,我决定继续重新安装操作系统。我使用apt重新安装了Ansible,并用ansible-playbook <my_playbook>.yml运行了剧本,并且没有错误地完成了任务。从本质上讲,这不是一个解决方案,因为我显然还有其他问题,但是python错误消失了。

答案 1 :(得分:0)

自升级到ansible 2.9以来,我一直遇到相同类型的错误,虽然我们没有解决所有问题,但我可以指出一些消息来源。

密钥错误来自于此处本身在ansible中设置的格式-https://github.com/ansible/ansible/commit/a7837edcf26e1e8542109952a9117e145c4cba1d#diff-b433171851ee6e9ab6c4f98f233678b5R65

我们有一个自定义日志,因此能够调整日志消息

-self.logger.info(message)
+self.logger.info(message, extra={'user':user})

当其他应用程序具有自己的记录器并进行日志调用时,这不能解决KeyError。那些仍然会遇到KeyError并且无法记录。

编辑:此错误已确认为错误,已在ansible母版-https://github.com/ansible/ansible/issues/65249

中修复