Ansible 简单 Playbook 示例,带有 FRR 模板

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

Ansible simple playbook

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 将会失败。