1. 环境准备
安装 Python 和 Ansible
• 安装 Python:
• 确保您有 Python 3 版本,可以通过以下命令检查:
python3 --version
• 如果没有安装 Python 3,可以根据操作系统的不同,通过包管理器或直接从 Python 官方网站 下载。
• 安装 Ansible:
• Ansible 是一个开源的自动化工具,使用 Python 编写并主要用于配置管理和应用部署。
• 可以使用 pip 安装 Ansible:
pip install ansible
• 安装完成后,检查 Ansible 是否安装成功:
ansible --version
2. 配置 Ansible 主机文件
Ansible 通过 inventory 文件来管理和组织目标设备(如交换机、路由器等)的信息。
• 编辑主机文件:
• 默认情况下,Ansible 的主机文件位于 /etc/ansible/hosts,您也可以创建自定义的 inventory 文件。
• 添加网络设备的 IP 地址或主机名,例如:
[routers]
router1 ansible_host=192.168.1.1 ansible_user=admin ansible_password=admin_password
router2 ansible_host=192.168.1.2 ansible_user=admin ansible_password=admin_password
[switches]
switch1 ansible_host=192.168.1.3 ansible_user=admin ansible_password=admin_password
3. 创建 Ansible Playbook
Playbook 是 Ansible 中定义自动化任务的文件,使用 YAML 格式编写。您可以编写 Playbook 来自动化网络设备的配置。
• 示例 Playbook:
下面是一个简单的 Playbook 示例,用于配置 Cisco 路由器上的接口 IP 地址:
---
- name: Configure network devices
hosts: routers
gather_facts: no
tasks:
- name: Configure interface on router
ios_config:
lines:
- interface GigabitEthernet0/1
- ip address 192.168.1.10 255.255.255.0
- no shutdown
provider:
host: "{{ ansible_host }}"
username: "{{ ansible_user }}"
password: "{{ ansible_password }}"
authorize: yes
auth_pass: "{{ ansible_password }}"
4. 运行 Ansible Playbook
• 执行 Playbook:
• 使用以下命令执行 Ansible Playbook:
ansible-playbook -i inventory_file playbook.yml
• -i 参数指定使用哪个 inventory 文件,playbook.yml 是您创建的 Playbook 文件。
5. Python 脚本与 Ansible 集成
虽然 Ansible 本身是通过命令行执行的,但您也可以通过 Python 脚本调用 Ansible 模块,实现更复杂的逻辑控制和流程自动化。
• 安装 Ansible Python API:
• 通过 pip 安装 Ansible Python API:
pip install ansible
• 示例 Python 脚本:
下面是一个简单的 Python 脚本,通过 Ansible API 执行 Playbook:
from ansible.cli.playbook import PlaybookCLI
def run_playbook(playbook_path):
cli = PlaybookCLI(["ansible-playbook", playbook_path])
cli.parse()
cli.run()
if __name__ == "__main__":
run_playbook("playbook.yml")
6. 高级自动化和优化
• 角色和模块:Ansible 提供了丰富的网络模块,您可以创建自定义角色,复用配置任务。
• 集成 CI/CD:可以将 Ansible 集成到 CI/CD 管道中,实现自动化部署和配置。
• 错误处理和日志记录:使用 Python 脚本可以更灵活地处理错误和记录执行日志,确保自动化流程的可靠性。