2.2. 运行网络 Ansible Playbook
如果要每天运行特定命令,可以将其保存在 playbook 中,并使用 ansible-playbook
而不是 ansible 运行它。该 playbook 可以存储您在命令行中提供的许多参数,从而减少在命令行中键入的内容。您需要两个文件,即 playbook 和清单文件。
先决条件
从此处 下载 first_playbook.yml
。
playbook 类似如下:
---
- name: Network Getting Started First Playbook
connection: ansible.netcommon.network_cli
gather_facts: false 1
hosts: all
tasks:
- name: Get config for VyOS devices
vyos.vyos.vyos_facts:
gather_subset: all
- name: Display the config
debug:
msg: "The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}"
标签 | 描述 |
---|---|
|
Ansible 的原生事实收集( |
playbook 从上面的命令行设置三个七个值:
-
组(
主机:all
) -
连接方法(连接:ansible.netcommon.network_cli
)和 - 模块(在每个任务中)。
使用 playbook 中设置的这些值,您可以在命令行中省略它们。该 playbook 还会添加第二项任务来显示配置输出。
当从系统中收集事实时,通过特定于集合的事实模块(如 vyos.vyos.vyos_facts
或 ansible.builtin.setup
)收集到系统时,收集的数据会被保留在内存中,而不是写入到控制台。
当模块在 playbook 中运行时,输出会保留在内存中,供将来的任务使用,而不是写入控制台。在大多数其他模块中,您必须明确注册一个变量来存储和重复使用模块或任务的输出。
有关事实的更多信息,请参阅 Ansiible Playbook 参考指南 中的 [Ansible 事实]。
以下调试任务可让您在 shell 中看到结果。
流程
使用以下命令运行 playbook:
ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook.yml
playbook 包含一个含有两个任务的 play,并生成如下输出:
$ ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook.yml PLAY [Network Getting Started First Playbook] *************************************************************************************************************************** TASK [Get config for VyOS devices] *************************************************************************************************************************** ok: [vyos.example.net] TASK [Display the config] *************************************************************************************************************************** ok: [vyos.example.net] => { "msg": "The hostname is vyos and the OS is VyOS 1.1.8" }
- 现在,您可以检索设备配置,您可以尝试使用 Ansible 更新它。
从此处 下载
first_playbook_ext.yml
,这是第一个 playbook 的扩展版本:playbook 类似如下:
--- - name: Network Getting Started First Playbook Extended connection: ansible.netcommon.network_cli gather_facts: false hosts: all tasks: - name: Get config for VyOS devices vyos.vyos.vyos_facts: gather_subset: all - name: Display the config debug: msg: "The hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}" - name: Update the hostname vyos.vyos.vyos_config: backup: yes lines: - set system host-name vyos-changed - name: Get changed config for VyOS devices vyos.vyos.vyos_facts: gather_subset: all - name: Display the changed config debug: msg: "The new hostname is {{ ansible_net_hostname }} and the OS is {{ ansible_net_version }}"
- 扩展的第一个 playbook 在单个 play 中有五个任务。
使用以下命令运行 playbook:
$ ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook_ext.yml
输出显示您对配置所做的更改:
$ ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos.vyos.vyos first_playbook_ext.yml PLAY [Network Getting Started First Playbook Extended] ************************************************************************************************************************************ TASK [Get config for VyOS devices] ********************************************************************************************************************************** ok: [vyos.example.net] TASK [Display the config] ************************************************************************************************************************************* ok: [vyos.example.net] => { "msg": "The hostname is vyos and the OS is VyOS 1.1.8" } TASK [Update the hostname] ************************************************************************************************************************************* changed: [vyos.example.net] TASK [Get changed config for VyOS devices] ************************************************************************************************************************************* ok: [vyos.example.net] TASK [Display the changed config] ************************************************************************************************************************************* ok: [vyos.example.net] => { "msg": "The new hostname is vyos-changed and the OS is VyOS 1.1.8" } PLAY RECAP ************************************************************************************************************************************ vyos.example.net : ok=5 changed=1 unreachable=0 failed=0