Ansible不适用于Ubuntu上的apt更新

Ansible不适用于Ubuntu上的apt更新,ansible,ansible-playbook,Ansible,Ansible Playbook,我用Vagrant创建了几个Ubuntu 14.04机器。我有一些ansible 2.1剧本,在一些任务中使用apt,例如: 更新apt 添加docker回购 添加java8回购协议 所有这些任务在随机主机上随机失败。例如,下面是简单的java8安装角色: - name: Add Oracle Java Repository apt_repository: repo: 'ppa:webupd8team/java' update_cache: yes state:

我用Vagrant创建了几个Ubuntu 14.04机器。我有一些ansible 2.1剧本,在一些任务中使用
apt
,例如:

  • 更新apt
  • 添加docker回购
  • 添加java8回购协议
所有这些任务在随机主机上随机失败。例如,下面是简单的java8安装角色:

- name: Add Oracle Java Repository
  apt_repository:
    repo: 'ppa:webupd8team/java'
    update_cache: yes
    state: present
#  register: result
#  until: result|success
#  retries: 10
  tags: [java]

- name: Accept Java 8 License
  debconf: name='oracle-java8-installer' question='shared/accepted-oracle-license-v1-1' value='true' vtype='select'
  tags: [java]

- name: Install Oracle Java 8
  apt: name={{item}} state=latest
  with_items:
    - oracle-java8-installer
    - ca-certificates
    - oracle-java8-set-default
  tags: [java]
非常简单,但是,
apt_repository
经常随机失败。我不得不使用重试黑客,以使其工作。问题已经报道,但这只是其中之一

错误如下所示:

fatal: [xx.xx.xxx.x]: FAILED! => {"changed": false, "failed": true, "module_stderr": "",
"module_stdout": "Traceback (most recent call last):\r\n
File \"/home/ubuntu/.ansible/tmp/ansible-tmp-1454536847.17-86172912102079/apt\", line 2630, in \r\n
 main()\r\n
File \"/home/ubuntu/.ansible/tmp/ansible-tmp-1454536847.17-86172912102079/apt\", line 603, in main\r\n
 cache = apt.Cache()\r\n
File \"/usr/lib/python2.7/dist-packages/apt/cache.py\", line 107, in init\r\n
 self.open(progress)\r\n
File \"/usr/lib/python2.7/dist-packages/apt/cache.py\", line 151, in open\r\n
 self._cache = apt_pkg.Cache(progress)\r\n
SystemError: E:Encountered a section with no Package: header,\
 E:Problem with MergeList /var/lib/apt/lists/us-west-\
 2.ec2.archive.ubuntu.com_ubuntu_dists_trusty-updates_universe_i18n_Translation-en\
, E:The package lists or status file could not be parsed or opened.\r\n
", "msg": "MODULE FAILURE", "parsed": false}

我错过什么了吗?你为生产做些什么?

这不是Ansible的问题,尽管Ansible肯定帮不上忙

apt
偶尔会将垃圾文件(某种二进制文件)保存为包列表,该文件应为文本,这是一个问题,和

在这种情况下,查看文件,确认它是二进制文件,然后删除它:

head /var/lib/apt/lists/us-west-2.ec2.archive.ubuntu.com_ubuntu_dists_trusty-updates_universe_i18n_Translation-en
rm /var/lib/apt/lists/us-west-2.ec2.archive.ubuntu.com_ubuntu_dists_trusty-updates_universe_i18n_Translation-en
apt
将在运行
apt get update
时重新创建它


你如何用Ansible解决这个问题,最终,应该对apt模块进行修补,以便简单地解决此问题—检测故障,删除文件,然后重新运行更新。但向Ansible发送拉取请求意味着它将在大约一年内不会发布。我发现这种情况很少发生,我只能手动修复它。

如何失败?你犯了什么错误?是否存在故障模式?@ydaetskcoR请查看链接问题。我将把错误放在这里。对我来说,几乎每次更新apt时都会发生这种情况:(