Ansible IP 地址从主机到变量并在 Playbook 中使用 - 使用 Ansible 保存交换机配置

Ansible IP Adress from Host to Variable and use in Playbook - Save Switch Config with Ansible

我想用ansible保存启动和运行配置。我的脚本有效,但只能在一台主机上使用。我需要更改保存文件中的名称,否则它会覆盖旧配置。

---
- hosts: switches
  gather_facts: yes
  vars:
    ansible_network_os: icx
    ansible_become: True
    ansible_become_method: enable


  tasks:
  - name: Backup Config Files
    icx_command:
      commands:
         - copy startup-config tftp 192.168.10.5 Ansible-startup-config.cfg
         - copy running-config tftp 192.168.10.5 Ansible-running-config.cfg

现在我想在名称中包含 ip 地址、时间和日期,这样当我再次启动脚本时它们就不会被覆盖。

我想这样的文件名:

192.168.9.13-2021-04-08-18:25-startup-config.cfg
或连续数字

我该怎么做?

下面的大概思路。

我不是 100% 确定在 ios 上收集的事实填充 ansible_default_ipv4。您将必须检查该点并在需要时找到正确的变量。另请注意,您可能必须 运行 显式 icx_facts module 才能从您的设备获取所有信息。

您可以运行以下临时命令来浏览所有可用的事实并选择正确的事实:

ansible -i your_inventory some_host -m setup
ansible -i your_inventory some_host -m icx_facts

您可以调试 ansible_date_time 变量以查看其他键是否比下面更适合您的需要来创建时间戳。我完全重建了你问题中的模式。

当然,您需要收集事实才能使用这些变量(gather_facts: true 您的游戏符合该要求)。

这是示例任务(未经测试,我没有可用的 ios 设备)

  - name: Backup Config Files
    vars:
      ip: "{{ ansible_default_ipv4.address }}"
      stamp: "{{ ansible_date_time.date }}-{{ ansible_date_time.hour }}:{{ ansible_date_time.minute }}"
      prefix: "{{ ip }}-{{ stamp }}"
    icx_command:
      commands:
         - "copy startup-config tftp 192.168.10.5 {{ prefix }}-startup-config.cfg"
         - "copy running-config tftp 192.168.10.5 {{ prefix }}-running-config.cfg"