【问题标题】:Multiple with_items for copy module复制模块的多个 with_items
【发布时间】:2018-10-01 14:16:04
【问题描述】:

我正在尝试创建交换机备份。我想根据配置输出和切换主机名创建动态文件。 例如,switch1的配置应该保存在文件名hostname1中,switch2的配置应该保存在文件名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 }}"
    ...

【问题讨论】:

    标签: ansible


    【解决方案1】:

    依靠 Ansible 原生主机循环而不是自己发明。

    很简单:

    - 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"
    

    【讨论】:

    • 感谢您的回答!但我不希望将 IP 地址扩展到文件名。我希望将交换机的实际主机名名称(例如“test-switch1”)扩展到文件名。有没有办法用“with_items”构建这个循环?
    • 然后定义清单中的名称。您可以同时拥有:IP 地址和您自己的姓名。
    • 没想到。我会试一试。但是我如何才能从剧本中的库存中访问我自己的名字呢?
    • 所以,我收到一个名称解析错误。我在我的清单中定义了我的主机,如下所示:test-switch1 ansible_host=ip
    【解决方案2】:

    终于运行起来了。 在我的清单中定义的名称如下:

        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"
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多