通过ansible从列表中安装包

Install packages from a list through ansible

我有 2 个服务器,名为 testserver 和 vsphere server。 Ansible 安装在测试服务器上,我有一个存储在文本文件 packages.txt 中的软件包列表。如何通过 ansible 在 vsphere 服务器上安装这些软件包?这是我的 packages.txt 文件。我只需要从 packages.txt

中获取包名
hyperv-daemons| x86_64
hypervkvpd |x86_64
hyperv-tool | x86_64
nginx | x84_64

这是测试服务器中的 yml 文件

- hosts: vsphere
  tasks:
    - name: Install the packages
      shell: sh /root/test.sh

Test.sh 包含

#/bin/bash
for i in `cat /root/packages`
do
echo $i
yum install $i
done

当我 运行 这个 ansible 脚本时,我收到一个错误:在 vsphere 上找不到 packages.txt。任何帮助将不胜感激

首先,我建议您使用 yum module 安装软件包。我们可以通过读取 packages.txt 文件来传递要安装的软件包列表。似乎这个文件在 Ansible 机器上,所以我们可以使用 lookup 来获取文件内容。

示例:

    # Run the awk command to get only package names
    - command: awk '{print }' path/to/packages.txt
      register: _pkgs
      delegate_to: localhost
      run_once: true
    
    - name: install packages
      yum:
        - name: "{{ _pkgs.stdout_lines }}"
          state: present

编辑

如果每个包的文件中都有 | x86_64,它也不会与您的 shell 脚本一起使用。最简单的方法是使用 awk(上面的示例更新)获取干净的包列表,并将其用于包安装。

改用循环 只需添加角色:

    - name: PREREQUISITES INSTALL install-linux | Install rpm software Linux
  yum:
    name: "{{ item }}"
    state: installed
  loop:
    - "{{ software_packages }}"

并转到默认的 vars 目录:

software_packages:
          packages:
            - package: "hyperv-daemons"
            - package: "hypervkvpd"
            - package: "hyperv-tool"