如何解决间歇性的Ansible问题?

时间:2016-04-19 09:39:14

标签: ansible ansible-playbook

我确信在某些时候某人必须遇到无法通过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之类的操作,即使机器已经更新,它也会消失。这种情况发生在100例中的1例中,但它确实发生了,我无法弄清楚为什么?

1 个答案:

答案 0 :(得分:1)

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

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

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

再次运行剧本。如果成功,它确实指出这是问题所在。此外,如果您发现问题是由于Playbook运行太快,您可能需要考虑添加延迟,如此处所述:http://docs.ansible.com/ansible/wait_for_module.html或任何其他类型的事件捕获器,以确定您的系统是否已准备就绪使用。