AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 527418
Accepted
igiannak
igiannak
Asked: 2019-06-29 00:41:13 +0800 CST2019-06-29 00:41:13 +0800 CST 2019-06-29 00:41:13 +0800 CST

使用 Ansible 传输 RPM 文件并在本地安装它们

  • 772

我有以下 yaml ansible-playbook 并希望传输 rpm,然后将它们本地安装到远程机器上。直到传输文件步骤它工作正常但是在安装部分我出现以下错误:"Failure talking to yum: near \"gskcrypt64\": syntax error" 知道如何克服这部分吗?

Ansible 版本:

ansible 2.4.2.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
   ansible python module location = /usr/lib/python2.7/site-packages/ansible
   executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Jun 11 2019, 12:19:05) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

Ansible 剧本:

---
- hosts: "1.2.3.4"
  connection: "ssh"
  vars:
    RPM: 
    - gskcrypt64-8.0.50.86.linux.ppcle.rpm 
    - gskssl64-8.0.50.86.linux.ppcle.rpm 
    - TIVsm-API64.ppc64le.rpm 
    - TIVsm-BA.ppc64le.rpm
  tasks:
   - name: "Transfer Files"
     copy: src=/root/ansible_playbooks/{{ item }} dest=/root/
     with_items: "{{ RPM }}"
   - name: "Install Local RPMs"
     shell: yum localinstall -y /root/*.rpm

如果我更改 shell 模块,则会报告相同的错误

   - name: "Install Local RPMs"
     yum:
      name: /root/{{ RPM }}
      state: present

错误:

root@server [/root/ansible_playbooks] > ansible-playbook tsm

PLAY [1.2.3.4] ******************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************************************************************************************************************************
ok: [1.2.3.4]

TASK [Transfer Files] ****************************************************************************************************************************************************************************************************
ok: [1.2.3.4] => (item=gskcrypt64-8.0.50.86.linux.ppcle.rpm)
ok: [1.2.3.4] => (item=gskssl64-8.0.50.86.linux.ppcle.rpm)
ok: [1.2.3.4] => (item=TIVsm-API64.ppc64le.rpm)
ok: [1.2.3.4] => (item=TIVsm-BA.ppc64le.rpm)

TASK [Install Local RPMs] ************************************************************************************************************************************************************************************************
fatal: [1.2.3.4]: FAILED! => {"changed": false, "msg": "Failure talking to yum: near \"gskcrypt64\": syntax error"}
    to retry, use: --limit @/root/ansible_playbooks/tsm.retry

PLAY RECAP ***************************************************************************************************************************************************************************************************************
1.2.3.4               : ok=2    changed=0    unreachable=0    failed=1 

Edit1:我尝试了以下循环,因为文件已经在另一边:

---
- hosts: "1.2.3.4"
connection: "ssh"
vars:
RPM:
- gskcrypt64-8.0.50.86.linux.ppcle.rpm
- gskssl64-8.0.50.86.linux.ppcle.rpm
- TIVsm-API64.ppc64le.rpm
- TIVsm-BA.ppc64le.rpm
tasks:
- name: "Install Local RPMs"
yum:
name: /root/"{{ item }}"
state: present
loop: "{{ RPM }}"

现在收到以下错误:

fatal: [1.2.3.4]: FAILED! => {"msg": "Unexpected failure in finding the lookup named '{{ RPM }}' in the available lookup plugins"}

编辑2:

尝试移动并测试 yum localinstall 的失败部分:

  ---
- hosts: "1.2.3.4"
  connection: "ssh"
  vars:
    RPM:
    - gskcrypt64-8.0.50.86.linux.ppcle.rpm
    - gskssl64-8.0.50.86.linux.ppcle.rpm
    - TIVsm-API64.ppc64le.rpm
    - TIVsm-BA.ppc64le.rpm
  tasks:
   - name: "Install Local RPMs"
     yum:
      name: "/root/{{RPM}}"
      state: present

但得到错误:

fatal: [1.2.3.4]: FAILED! => {"changed": false, "msg": "Failure talking to yum: near \"gskcrypt64\": syntax error"}
rhel software-installation
  • 1 1 个回答
  • 10176 Views

1 个回答

  • Voted
  1. Best Answer
    Zeitounator
    2019-07-13T19:18:02+08:002019-07-13T19:18:02+08:00

    前言

    除非您有非常特殊的情况,否则您永远不应该使用loop或with_item与模块一起使用,因为(引用文档)yum

    当与循环一起使用时:将单独处理每个包,将列表直接传递给 name 选项效率更高。

    帮自己一个忙:采用现代的完整 yaml 语法来调用模块。它更容易阅读,并且 linter(例如yamllint)会更早地捕获更多错误。

    我的例子是遵循这两个规则。

    核心答案

    您的上述尝试都没有将实际的文件列表发送到 yum 模块以及每个元素的绝对路径。如果您注册结果,则很容易从您的复制任务中检索此信息。然后,您可以过滤数据(例如json_query)以仅获取相关信息。

    下面的剧本应该为您提供完成这项工作的关键

    ---
    - name: Copy and install rpms
      hosts: all
    
      vars:
        RPM: 
          - gskcrypt64-8.0.50.86.linux.ppcle.rpm 
          - gskssl64-8.0.50.86.linux.ppcle.rpm 
          - TIVsm-API64.ppc64le.rpm 
          - TIVsm-BA.ppc64le.rpm
    
      tasks:
    
        - name: "Transfer Files"
          copy:
            src: "/root/ansible_playbooks/{{ item }}"
            dest: /root/
          loop: "{{ RPM }}"
          register: copied
    
        - name: "Install RPMs from local copied files"
          yum:
            name: "{{ copied | json_query('results[?!failed].dest[]') }}"
    

    笔记

    • ?!failed如果您决定忽略复制任务中的错误,则查询中的过滤器仅用于过滤掉有错误的结果。如果您愿意,可以将其删除(即json_query('results[].dest'))
    • loop: "{{ RPM }}"严格等价于with_items: "{{ RPM }}"。loop是一种较新的语法,在 ansible 2.5 中引入。两种语法都有效。有关更多详细信息,请参阅ansible 循环文档。
    • 2

相关问题

  • linux redhat 7 ( 或 centos 7 ) + firewalld 屏蔽防火墙

  • systemctl 命令在 RHEL 6 中不起作用

  • 如何在 RHEL 7 上离线安装 docker?

  • 在 Debian 中编写 C#

  • 在 Gnome3 中禁用窗口的自动最大化

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve