复制模块有多个with_items

时间:2018-10-01 14:16:04

标签: ansible

我正在尝试创建交换机备份。而且我想根据配置输出和开关主机名创建动态文件。 例如,switch1的配置应保存在文件名hostname1中,switch2的config应保存在文件名hostname2中,依此类推。 我正在从文件中获取交换机的主机名。

我的问题是,switch1的配置保存在文件hostname1,hostname2等中。 如何正确循环变量以在正确的文件中获得正确的配置?

我当前的剧本看起来像这样:

    ---
    - hosts: cisco
      connection: local
      gather_facts: false

      vars:
        backup_path: /etc/ansible/tests

        cli:
          host: "{{ inventory_hostname }}"
          username: test
          password: test

      tasks:
        - name: show run on  switches
          ios_command:
            commands: show running-config
            provider: "{{ cli }}"
          register: config

        - name: creating folder
          file:
            path: "{{ backup_path }}"
            state: directory
          run_once: yes

       - name: get hostnames
         become: yes
         shell: cat /etc/ansible/tests/hostname_ios.txt
         register: hostnames

      - name: copy config
        copy:
          content: "{{ config.stdout[0] }}"
          dest: "{{ backup_path }}/{{ item }}.txt"
        with_together:  "{{ hostnames.stdout_lines }}"
    ...

2 个答案:

答案 0 :(得分:0)

依靠Ansible本机主机循环,而不是发明自己的主机循环。

这很简单:

/mytest1

答案 1 :(得分:0)

最终使它运行。 在我的库存中定义的名称如下:

    test-switch1 ansible_host=ip

更改了我的剧本中的主机变量

  vars:
    backup_path: /etc/ansible/tests

    cli:
      host: "{{ ansible_host }}"
      username: test
      password: test 

然后执行我的任务:

    - name: show run on  switches
      ios_command:
        commands: show running-config
        provider: "{{ cli }}"
      register: config

    - name: copy config
      copy:
        content: "{{ config.stdout[0] }}"
        dest: "{{ backup_path }}/{{ inventory_hostname }}.txt"