如何使用Ansible安装多个具有依赖关系的RPM?

问题描述 投票:0回答:3

我正在尝试安装一堆来自存储在中央服务器上的tarball的RPM。这些RPM彼此依赖,但是当我手动安装时,这不是问题,我只是使用:

# yum install *rpm

并且它们都已安装,yum确定依赖项包含在其他RPM中。

使用Ansible我使用以下播放传输tarball:

- name: Unpack installation bundle
  unarchive:
    src: /media/shared/archive/{{ sw }}-{{ os }}.tar.gz
    dest: $HOME

这会将tarball复制到远程服务器并解压缩。这有效。

问题是当我尝试安装RPM时。我目前有以下剧目:

- name: Finding RPM files
  find:
    paths: "$HOME/{{ sw }}"
    patterns: "*.rpm"
  register: rpm_result

- name: Install RPM
  yum:
    name: "{{ item.path }}"
    state: present
  with_items: "{{ rpm_result.files }}"
  become: yes
  become_method: sudo

rpm_result.files正确填充了所有RPM,但是其中一些没有安装,因为yum模块似乎是单独安装它们,即使文档声称它们一起完成它们(请参阅http://docs.ansible.com/ansible/latest/yum_module.html中的“注释”)当我运行时剧本我得到关于缺少依赖关系的投诉:

"Error: Package: snmpagent-1.2.0.0-1.el6.x86_64 (/snmpagent-1.2.0.0-1.el6.x86_64)
       Requires: utils >= 3.1.0.0\n", "rc": 1,

(Output shortened and sliced up to make it easier to read)

如果我尝试一次安装一个RPM,这就是我得到的相同错误。

如何说服yum同时安装所有RPM?

我正在运行ansible-playbook v2.4.0.0,所以这是最近的合理。

ansible yum
3个回答
2
投票

为了说服yum同时安装所有rpms,为了处理基于特定目录中的文件列表解析的依赖关系,需要将整个rpms列表传递给yum命令。以下代码对我有用。

# Get a list of rpms from a directory
- name: find rpm files and register the result 
  find:
    paths: /opt/rpms
    patterns: "*.rpm"
  register: rpm_files

# Create a list of the rpms to use with the yum install command
- set_fact:
    rpm_list: "{{ rpm_files.files | map(attribute='path') | list}}"

# Use yum to install with a list
- name: install rpm files using rpm_list
  yum:
    name: "{{rpm_list}}"
    state: present

0
投票

我知道一种解决方法和解决方案。

解决方法是在yum installcommand模块调用中运行shell

解决方案是将RPM文件加载到存储库并将其配置为包源,这通常使依赖项解析更容易。


0
投票

有多种方法可以做到这一点。您可以先直接获取rpm包,然后像@ChrisSteele提到的那样安装它们,或者您可以在/etc/yum.repos.d/中注册外部repo URL。

对于第二个选项,您基本上可以在您的剧本中创建2个任务。

1)在远程服务器的目录结构/etc/yum.repos.d/中添加.repo文件。这看起来如下所示:

- name: Add .repo file where the rpm packages are present
  yum_repository:
    name: packages.repo   #can give any name with .repo extension
    description: adding repo URL in packages.repo file in yum.repo.d
    baseurl: "https://###.nexus.com/content/repositories/anything###/Packages/"
    enabled: yes
    gpgcheck: no

2)使用yum模块安装的所有软件包的循环。

- name: Install multiple rpm packages with its dependencies
  yum:
    name: "{{ item }}"
    state: present
  loop:
    - rpm_package_dependency_1       (need not mention .rpm extension here)
    - rpm_package_dependency_2
    - rpm_package_1 
    - rpm_package_2
© www.soinside.com 2019 - 2024. All rights reserved.