首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使在dnf失败时,抗dnf模块也返回成功。

即使在dnf失败时,抗dnf模块也返回成功。
EN

Stack Overflow用户
提问于 2022-05-25 13:19:04
回答 1查看 307关注 0票数 0

这是我的system:

  • I的初始状态myrpm-2.0 installed.
  • This rpm只创建一个作为文件存在的file.
  • /usr/share/myfile

代码语言:javascript
复制
    /root# rpm -q myrpm
    myrpm-2.0-0.x86_64
    /root# rpm -ql myrpm-2.0-0.x86_64
    /usr/share
    /usr/share/myfile
    /root# ls -lrt /usr/share | grep myfile
    -rw-r--r--   1 root root     11 May 25 17:32 myfile
    /root#

  1. 现在我正在模拟一个错误条件。我手动删除了该文件并在其位置创建了一个目录。

代码语言:javascript
复制
    /root# ls -lrt /usr/share | grep myfile
    drwxr-xr-x   2 root root   4096 May 25 18:33 myfile
    /root#

  1. I编写了同一个rpm的更高版本3.0,它复制相同的文件.

代码语言:javascript
复制
    /root# rpm -ql /root/update/myrpm-3.0-0.x86_64.rpm
    /usr/share
    /usr/share/myfile
    /root#

4-测试-1:尝试rpm升级使用ansible的内置dnf模块。以下是我的剧本:

代码语言:javascript
复制
/root# cat test.yaml
---
- hosts: localhost
  tasks:
    - name: update rpm
      dnf:
        name: "myrpm"
        state: latest
/root#

执行此游戏将返回代码为0。

代码语言:javascript
复制
/root# ansible-playbook -vvv test.yaml
...
changed: [localhost] => {
    "changed": true,
    "invocation": {
        "module_args": {
            "allow_downgrade": false,
            "autoremove": false,
            "bugfix": false,
            "conf_file": null,
            "disable_excludes": null,
            "disable_gpg_check": false,
            "disable_plugin": [],
            "disablerepo": [],
            "download_dir": null,
            "download_only": false,
            "enable_plugin": [],
            "enablerepo": [],
            "exclude": [],
            "install_repoquery": true,
            "install_weak_deps": true,
            "installroot": "/",
            "list": null,
            "lock_timeout": 30,
            "name": [
                "myrpm"
            ],
            "releasever": null,
            "security": false,
            "skip_broken": false,
            "state": "latest",
            "update_cache": false,
            "update_only": false,
            "validate_certs": true
        }
    },
    "msg": "",
    "rc": 0,
    "results": [
        "Installed: myrpm-3.0-0.x86_64",
        "Removed: myrpm-2.0-0.x86_64"
    ]
}
META: ran handlers
META: ran handlers

PLAY RECAP *******************************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

/root# echo $?
0
/root#

按照详细的日志,rc为0。但是,我可以看到dnf命令失败了。

代码语言:javascript
复制
/root# dnf history | head -n 3
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
    27 |                          | 2022-05-25 18:39 | Upgrade        |    1 EE
/root# dnf history info 27 | tail -6
Packages Altered:
 ** Upgrade  myrpm-3.0-0.x86_64 @My_Update
    Upgraded myrpm-2.0-0.x86_64 @@System
Scriptlet output:
   1 error: unpacking of archive failed on file /usr/share/myfile: cpio: File from package already exists as a directory in system
   2 error: myrpm-3.0-0.x86_64: install failed
/root#

4-测试-2:我使我的系统处于与3完全相同的状态,并使用直接的dnf命令代替了剧本。

代码语言:javascript
复制
/root# dnf update myrpm
...
  Preparing        :                                                                              1/1
  Upgrading        : myrpm-3.0-0.x86_64                                                           1/2
Error unpacking rpm package myrpm-3.0-0.x86_64
error: unpacking of archive failed on file /usr/share/myfile: cpio: File from package already exists as a directory in system

  Cleanup          : myrpm-2.0-0.x86_64                                                           2/2
error: myrpm-3.0-0.x86_64: install failed

  Verifying        : myrpm-3.0-0.x86_64                                                           1/2
  Verifying        : myrpm-2.0-0.x86_64                                                           2/2

Failed:
  myrpm-3.0-0.x86_64

Error: Transaction failed
/root# echo $?
1
/root# 

关于为什么剧本没有显示任务失败的原因有什么线索吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-31 08:50:57

要知道,这是一个错误修复在更高版本的ansible。参考https://github.com/ansible/ansible/issues/77917

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72378413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档