由于 gpg 检查,ansible 包模块失败(需要与其他管理器模块兼容)

标签 ansible

我认为某些地方发生了变化(不确定是否在客户端服务器上,因为它们是较新版本),但突然我使用包模块的任务失败了,因为 Oracle linux 和 Rhel 服务器上的 gpg 签名检查。

我知道这是 ansible 的问题,因为我看到 verbose gpg 检查是从 ansible play 中强制执行的。

我们使用带有包模块的通用剧本(对于每个特定于发行版的包管理器,及时调用 zypper yum apt 等),我知道我们可以在 yum 模块中使用 disable_gpg_check:是

但是,如果我在包模块中使用该选项,它在 rhel 服务器上运行时可以工作,但在 debian/sles 或不使用 yum 模块的任何东西上运行时会失败,因为只有 yum 模块有该选项,而其他包模块有不是。

我很想找到一个解决方案,以避免使用 yum 检查 gpg,并仍然使用通用包模块。

服务器上的手动命令 yum install 运行完美。另外,当我使用详细(-vvv ...)运行 anisble 时,我看到 gpgcheck yes 被推送

最佳答案

问题的真正解决方案是重新激活给定目标上的 gpg 检查并修复配置,使其成功,因为不应禁用它。

话虽如此,这里有一个可能的解决方法:

  • 在 list 中创建一个组(例如,基于操作系统名称的静态或动态),其中包含您想要通过 package 模块禁用 yum 的 gpg 检查的所有相关目标。我将在下面将此组称为 bad_hosts
  • 仅为该组添加变量,例如在 group_vars/bad_hosts.yml
    disable_yum_gpg_check: true
    
  • 修改您的任务(您的话理所当然地认为您可以使用package任务中的选项):
    - name: install package
      package:
        name: some_software
        state: present
        disable_gpg_check: "{{ disable_yum_gpg_check | d(omit) }}"
    

关于由于 gpg 检查,ansible 包模块失败(需要与其他管理器模块兼容),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73764526/

相关文章:

python - ansible过滤器映射数组并放入json模板

Docker,如何替换 docker 中的 capistrano 任务

python - 如何使用 Ansible 在服务器上安装 Python 版本

redis - Ansible:不同主机的配置文件中相同变量的不同值

ssh - 在 Ansible playbook 中调用 ssh-copy-id - 如何处理密码提示?

Ansible:如何测试注册变量不为空?

ansible - 禁用对剧本定义的主机 key 检查

ansible - 简单的 Ansible 剧本 : Location of file for task to copy file to target servers?

ubuntu - Ansible 动态库存脚本 - 奇怪的行为

php - 使用 ansible 运行 php 脚本会抛出错误