2016-06-29 7 views
1

Ich habe einige Ubuntu 14.04 Maschinen mit Vagrant erstellt. Ich habe einige ansible 2.1 Textbuch, die apt in einigen Aufgaben verwendet, wie:Ansible nicht mit Apt Updates auf Ubuntu

  • Update apt
  • add Docker Repo
  • java8 Repo

Alle diese Aufgaben zufällig fehlschlägt, auf zufälligen Host hinzufügen . Zum Beispiel ist hier einfach java8 Installation Rolle:

- 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] 

Ziemlich einfach, aber apt_repository nicht zufällig eine ganze Menge. Ich musste Wiederholungs-Hack verwenden, um es zum Laufen zu bringen. Problem wird gemeldet here, aber das ist nur einer.

Der Fehler wie folgt aussieht:

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} 

ich etwas fehle? Was machst du für die Produktion?

+0

Fehler wie? Welchen Fehler bekommst du? Gibt es ein Muster für die Fehler? – ydaetskcoR

+0

@ydaetskcoR siehe das verknüpfte Problem. Ich werde den Fehler auch hier setzen – igr

Antwort

1

Dies ist kein Ansible Problem, obwohl Ansible sicherlich nicht hilft.

Dies ist ein Problem mit apt hin und wieder Speichern einer Müll-Datei (Binär irgendeiner Art) als eine Paketliste, die Text sein sollte. There's been a bug open forever about it und here's a fix from AskUbuntu.

In diesem Fall in der Datei suchen, bestätigen Sie es binär ist, dann löschen:

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 wird es neu, wenn apt-get update ausgeführt wird.

Wie behebst du das mit Ansible? There are some workarounds in the ansible issue you found, schließlich sollte das apt-Modul gepatcht werden, um einfach zu umgehen - den Fehler erkennen, die Datei entfernen und das Update erneut ausführen. Aber das Senden einer Pull-Anfrage an Ansible bedeutet, dass es für etwa ein Jahr nicht freigegeben wird. Ich habe herausgefunden, dass es selten genug passiert, dass ich es manuell behebe.

+0

Thnax. Für mich passiert das fast immer beim Update apt :( – igr