Ansible 是一个免费的开源自动化和配置工具。在 RHEL 9 上,ansible 核心包在默认软件源(AppStream)中可用。我们不需要像 Ansible Engine 或 EPEL 那样启用任何额外的软件源。
先决条件
- 最小话安装的 RHEL 9
- 具有管理权的 sudo 用户
- 本地配置的软件源或订阅
(1) 使用 dnf 命令安装 Ansible
打开终端并在 dnf 命令下运行
$ sudo dnf install -y ansible-core
安装了Ansible及其依赖项后,查看版本
$ ansible --version
(2) 安装测试
为了测试 ansible 的安装,我们将使用 ansible 控制节点(RHEL 9)之外的一个远程 linux 系统。
- Ansible Control Node – RHEL 9 – 192.168.1.163
- Ansible Managed Node – Ubuntu 22.04 – 192.168.1.167
为用户生成 SSH 密钥(在我的例子中是 linuxtechi)并将 SSH 密钥共享给托管节点。
$ ssh-keygen
使用 ssh-copy-id 命令与托管节点共享 ssh 密钥
$ ssh-copy-id [email protected]
在托管节点上,创建以下文件
$ echo "linuxtechi ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/linuxtechi
返回到 Ansible 控制节点,然后创建 Ansible.cfg 文件,其中包含以下内容:
$ mkdir ~/automation && cd ~/automation/
$ vi ansible.cfg
[defaults]
inventory = ./inventory
host_key_checking = false
remote_user = linuxtechi
ask_pass = False
[privilege_escalation]
become=true
become_method=sudo
become_user=root
become_ask_pass=False
保存并退出文件,然后创建 ~/automation/inventory 文件,其中包含以下内容:
$ vi ~/automation/inventory
[dev]
192.168.1.167
保存文件并退出,执行 ansible ping命令,测试控制节点与托管节点之间的连通性
$ cd ~/automation/
$ ansible all -m ping
Above output confirms, ping connectivity is fine between control and managed node. Let’s create a demo ansible playbook to install nginx on managed node.
上面的输出表明,控制节点和托管节点之间的 PING 连接良好。让我们创建一个 ansible playbook 演示 ,用以在托管节点上安装 NGINX。
$ vi nginx-deploy.yaml
---
- name: Playbook to Install and Start Nginx
hosts: dev
tasks:
- name: Install nginx
package:
name: nginx
state: present
- name: Start nginx Service
service:
name: nginx
state: started
保存并退出,使用以下命令运行上面创建的 ansible palybook
$ ansible-playbook nginx-deploy.yaml
上面的输出表明 playbook 已经成功执行,现在使用以下 ansible ad-hoc 命令来做验证
$ ansible dev -i inventory -m shell -a 'apt list --installed|grep nginx'
$ ansible dev -i inventory -m shell -a 'systemctl status nginx'