什么触发了"改变了:真"安装包时?

时间:2015-10-22 09:47:32

标签: debian ansible ansible-playbook

我有几个使用ansible的Debian服务器。其中一项任务是安装一些软件包。机器之间的行为不同,特别是在重新运行剧本时,有些机器会重新安装包,而其他一些机器则没有。

相关的剧本部分:

  - name: install logstash on debian
    apt: deb=/tmp/logstash.deb
    when: ansible_os_family == "Debian"

两台机器的详细输出是:

TASK: [install logstash on debian] ********************************************
changed: [eu5.example.com] => {"changed": true, "stderr": "", "stdout": "(Reading database ... 45337 files and directories currently installed.)\nPreparing to unpack /tmp/logstash.deb ...\nUnpacking logstash (1:2.0.0-beta3-1) over (1:2.0.0-beta3-1) ...\nSetting up logstash (1:2.0.0-beta3-1) ...\nProcessing triggers for systemd (215-17+deb8u2) ...\n"}

TASK: [install logstash on debian] ********************************************
ok: [eu2.example.com] => {"changed": false, "stderr": "", "stdout": ""}

触发changed状态的机制是什么?由于两台机器logstash已经安装(在同一级别,来自同一个包),因此有两种可能的情况:

  • 每次都应该运行apt命令,无论是否安装了包(在这种情况下eu5的行为都行,eu2' s不是)
  • 或检查软件包是否已安装并且是否已跳过(在这种情况下,上面的OK / not OK行为已切换)

直接安装:

[root@eu2:~]# dpkg -i /tmp/logstash.deb
(Reading database ... 232343 files and directories currently installed.)
Preparing to unpack /tmp/logstash.deb ...
Unpacking logstash (1:2.0.0-beta3-1) over (1:2.0.0-beta3-1) ...
Setting up logstash (1:2.0.0-beta3-1) ...
Processing triggers for systemd (227-2) ...

这表明每次都会重新安装软件包(因此ansibleeu2的行为有问题。如果确实如此:只有在没有安装软件包的情况下才有条件安装吗? (dpkg

中内置了没有此类机制的previous answers suggest

1 个答案:

答案 0 :(得分:1)

每当安装,升级或删除软件包时,apt模块都应返回changed: True。我怀疑这个错误是在Ansible中,因为这是最常用的模块之一,边缘情况可能在这一点上都被某人击中了。不过,你可能想绕过它并继续前进。你可以这样做:

- command: dpkg -s logstash
  register: logstash_available
  ignore_errors: True
- name: install logstash on debian
  apt: deb=/tmp/logstash.deb
  when: logstash_available.rc != 0