通过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"
我有 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"