如何解决间歇性的Ansible问题



我相信在某个时候,一定有人遇到过这样的情况:无法通过ansible安装软件包,但登录到机器并执行同样的操作很容易。这是非常间歇性的,但它是持久的。我为什么这么说?因为偶尔可能会发生这样的情况,即软件包由于等错误而拒绝安装

failed: [10.12.10.57] => {"failed": true, "parsed": false}
BECOME-SUCCESS-yqymkgrsndxbhkcnyfjgvzrxvoxpmads
Traceback (most recent call last):
  File "/home/ubuntu/.ansible/tmp/ansible-tmp-1461058305.77-7941776655744/apt", line 2258, in <module>
    main()
  File "/home/ubuntu/.ansible/tmp/ansible-tmp-1461058305.77-7941776655744/apt", line 554, in main
    cache = apt.Cache()
  File "/usr/lib/python2.7/dist-packages/apt/cache.py", line 107, in __init__
    self.open(progress)
  File "/usr/lib/python2.7/dist-packages/apt/cache.py", line 151, in open
    self._cache = apt_pkg.Cache(progress)
SystemError: E:Unable to parse package file /var/lib/apt/lists/us-west-2.ec2.archive.ubuntu.com_ubuntu_dists_trusty-updates_main_i18n_Translation-en (1), E:The package lists or status file could not be parsed or opened.
OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: auto-mux: Trying existing master
debug1: mux_client_request_session: master session id: 2
Shared connection to 10.12.10.57 closed.

你可以一次又一次地运行播放,但它不会消失,但一旦你进入机器并执行类似apt-get update的操作,即使机器已经更新,它也会消失。这种情况发生在大约百分之一的病例中,但它确实发生了,我不知道为什么?

可能是您试图在EC2实例启动后立即运行您的剧本?我感觉其他客户端(比如你的系统)正在锁定你的apt目录。如果是这种情况,请等待服务器完全启动。您还可以查看/var/log/cloud-init-output.log,看看盒子在启动时会做什么(您会在那里看到一些apt-get输出)。

当它再次发生时,尝试通过删除锁定文件来查找这是否是原因,如:

sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock

然后重新运行剧本。如果它成功了,它确实表明这就是问题所在。此外,如果你发现问题是由于剧本运行得太快,你可能需要考虑添加一个延迟,如下所述:http://docs.ansible.com/ansible/wait_for_module.html或任何其他类型的事件捕捉器,以确定您的系统是否已准备好使用。

最新更新