在 Ubuntu 14.04.3 上,ansible 不会在选定的主机上安装 python-keyczar - 手动 apt-get install python-keyczar -y 可以工作

在 Ubuntu 14.04.3 上,ansible 不会在选定的主机上安装 python-keyczar - 手动 apt-get install python-keyczar -y 可以工作

当我尝试在 Ubuntu 14.x 机器上使用带有 Ansible 的 apt 模块进行服务安装时,出现了一系列错误。

在大多数其他 Ubuntu 14.x 机器上它运行良好。

有少数系统无法运行。

任务主要 yaml 中的剧本相关区域:

name: Install the required packages for keyczar
apt: name={{ keyczar_name }} state=installed

vars main 和 debian yaml 中的定义:

keyczar_name: python-keyczar

在运行之前,锁定文件/var/lib/dpkg/lock不存在。运行失败后,它确实存在。使用 rm 手动删除它并重新运行没有任何效果。正在运行的等效 CLI 是apt-get install python-keyczar -y如果手动运行则有效。这让我很担心,因为这是我第一次看到在 Ansible 下运行时包被拒绝,但在手动安装时却运行正常。毫无道理。

具体错误是:

致命:[qaevt5.channel-corp.com]:失败! => {"cache_update_time": 0, "cache_updated": false, "changed": false, "failed": true, "msg": "'/usr/bin/ap\ t-get -y -o \"Dpkg::Options::=--force-confdef\" -o \"Dpkg::Options::=--force-confold\" --simulate install 'python-keyczar'' 失败:E:无法获取锁定 /var/lib/dpkg/lock - open (11:资源暂时不可用)\nE:无法锁定管理目录 (/var/lib/dpkg/),另一个进程是否正在使用它?\n", "stderr": "E:无法获取锁定 /var/lib/dpkg/lock - open (11:资源暂时不可用)\nE:无法锁定管理目录 (/var/lib/dpkg/),另一个进程是否正在使用它?\n", “stdout”:“”,“stdout_lines”:[]}

fuser 和 lsof 显示没有其他进程持有锁。

手动运行后apt-get install python-keyczar -y,重新运行 ansible run ,一切正常。包“ok”。

上述锁定文件在手动运行后具有其他相关文件。

ls -l /var/cache/apt/archives/lock /var/lib/apt/lists/lock /var/lib/dpkg/lock
-rw-r----- 1 root root 0 Aug  5  2015 /var/cache/apt/archives/lock
-rw-r----- 1 root root 0 Mar 30 00:03 /var/lib/apt/lists/lock
-rw-r----- 1 root root 0 Mar 30 15:13 /var/lib/dpkg/lock

我将对发生这种情况的六个盒子进行手动运行。其他几十个没有这样的问题。当然,在澄清这一点之前,必须手动完成,这确实违背了目的。

答案1

我遇到了同样的问题。如果你的 ansible 脚本写得很好,并且可以确保没有进程锁定 apt,那么你可以在运行 apt 模块之前确保锁不存在。

become: true state=absent您可以使用锁定文件上的文件模型来执行此操作。

这是一个糟糕的解决方法,但我怪 ubuntu :PI 使用 Arch Linux 时没有遇到此类问题

相关内容