Ansible 简单 Playbook 示例,带有 FRR 模板
本文介绍了一个非常简单的 Ansible 示例。使用它来学习 Ansible;不要将其用作生产级脚本。有关 Ansible 和其他 DevOps 工具的更强大的示例,请参阅演示和培训部分。

Playbook 要求
以下是运行 playbook 始终需要的
本示例中使用的可选文件
安装 Ansible
在 Ubuntu 上运行以下命令
cumulus@wbench:~$ sudo apt-get update
cumulus@wbench:~$ sudo apt-get install ansible
如果您没有 Ubuntu,则可以在 Red Hat、Debian、CentOS、MacOS、任何 BSD 发行版等上安装 Ansible。请参阅 ansible.com 上的此页面。
配置必要的文件
从下面的代码块中剪切并粘贴代码片段。以下是示例中使用的所有代码片段。
清单文件
清单是一个名为 host
的单个文件,内容为“leaf1”。
cumulus@wbench:~$ cat host
leaf1
同样,这是一个非常简单的示例。阅读更多关于创建清单文件的信息。
Playbook .yml 文件
cumulus@wbench:~$ cat sample-playbook.yml
---
- hosts: leaf1
vars:
description: “this is a leaf switch”
remote_user: root
tasks:
- name: write the frr config file
template: src=frr.j2 dest=/etc/frr/frr.conf
notify:
- restart frr
- name: ensure frr is running
service: name=frr state=started
handlers:
- name: restart frr
service: name=frr state=restarted
此 sample-playbook.yml
包含一个变量、两个任务和一个处理程序。下表描述了每个组件
组件 | 描述 |
---|---|
hosts:leaf1 | 仅在主机 leaf1 上运行此 playbook。 |
vars | 这些是为 playbook 定义的变量。只有一个变量,名为 description 。 |
remote_user | 这是在远程系统上运行 playbook 的用户。 |
tasks | 两个任务的列表,一个使用template 模块,另一个使用service 模块。 |
handlers | 处理程序是仅在任务通知时运行的任务。只有在发生更改时,任务才会通知它。在此示例中,仅当 frr.conf 更改时,FRR 才会重新启动。 |
jinja2 模板文件
模板文件可以使用任何定义的变量。下面的脚本将 {{description}} 替换为 vars
下列出的变量
cumulus@wbench:~$ cat frr.j2
!
interface lo
description {{description}}
!
运行 Playbook
使用 ansible-playbook
命令运行 sample-playbook.yml
文件。使用可选参数 -i
指向清单文件。如果未使用 -i
选项,并且没有 ansible.cfg
文件夹指示其他情况,则 Ansible 会自动使用 /etc/ansible/hosts
。或者,与其创建包含 leaf1 的文件 host,不如将 leaf1 添加到 /etc/ansible/hosts
。
cumulus@wbench:~$ ansible-playbook sample-playbook.yml -i host
PLAY [leaf1] ******************************************************************
GATHERING FACTS ***************************************************************
ok: [leaf1]
TASK: [write the frr config file] ******************************************
changed: [leaf1]
TASK: [ensure frr is running] **********************************************
ok: [leaf1]
NOTIFIED: [restart frr] ****************************************************
changed: [leaf1]
PLAY RECAP ********************************************************************
leaf1 : ok=4 changed=2 unreachable=0 failed=0
上面的 playbook 运行两个任务。因为它更改了 FRR,所以它会通知任务,从而重新启动 FRR 服务。playbook 假定 FRR 已经在运行,否则此 playbook 将会失败。