2017-07-03 12 views
2

我想知道是否可以这样做,因为我需要在交换机内部运行ios命令来测试我的主/备份环境。是否可以在本地打开一个文件并使用ansible将其推送到远程主机?

命令的副本,不得不像波纹管:

tasks: 

- name: capturing the command "show ip int br" on {{ inventory_hostname }} 
    ios_command: 
    commands: 
     - sh ip int br | i up 
    provider: "{{ cli }}" 
    register: result 
    tags: inft 
- debug: var=result 
    tags: result_debug 


- name: copy interface status up to a temp file 
    copy: 
    content: "{{ result.stdout[0] }}" 
    dest: "~/ANSIBLE/{{ inventory_hostname }}.cfg" 
    tags: copy 

下面是该文件的输出。

FastEthernet0/0   169.255.0.1  YES NVRAM up     up  
FastEthernet1/1   unassigned  YES unset up     up  
FastEthernet1/6   unassigned  YES unset up     up  
FastEthernet1/10   unassigned  YES unset up     up  
Vlan1      unassigned  YES NVRAM up     up  

捕捉命令后,我需要打开文件,逐行读取并运行的IOS命令“关机”这样的:

interface FastEthernet0/0 
shutdown 

interface FastEthernet0/1 
shutdown 

我一直在寻找的“剧本”和“期望”的命令,但我的努力都没有奏效。

+0

你需要捕获文件吗?迭代接口并在不首先创建文件的情况下关闭它们就足够了吗?你打算关闭包括Vlan1在内的所有接口吗? – jscott

+0

@jscott确实如此。这是必要的,因为在关闭接口之后,我应该在经过很多测试后再使用另一个剧本。 output.log将像新的“输入”一样执行新任务来运行“no shutdown”命令。 –

回答

0

我使用 “with_file” 解决了这个问题,登记item.results [0] .item的内容和它推到设备象下面这样:

- name: Looping file 
    debug: 
    msg: "{{ item }}" 
    register: items 
    with_file: 
    - ~/ANSIBLE/{{ inventory_hostname }}.cfg 
- debug: var=items.results[0].item 


- name: Applying The Shutdown Template 
    ios_config: 
    lines: 
     - "{{ items.results[0].item }}" 
    provider: "{{cli}}" 
    register: shut 

运行剧本:

TASK [Looping file] ******************************************************************************************************************************* 
ok: [169.255.0.1] => (item=interface FastEthernet1/0 
shutdown 
interface FastEthernet1/1 
shutdown 
interface FastEthernet1/3 
shutdown 
interface FastEthernet1/4 
shutdown 
interface FastEthernet1/5 
shutdown 
interface FastEthernet1/6 
shutdown) => { 
"item": "interface FastEthernet1/0 \nshutdown\ninterface FastEthernet1/1  \nshutdown\ninterface FastEthernet1/3 \nshutdown\ninterface FastEthernet1/4 \nshutdown\ninterface FastEthernet1/5 \nshutdown\ninterface FastEthernet1/6 \nshutdown", 
"msg": "interface FastEthernet1/0 \nshutdown\ninterface FastEthernet1/1 \nshutdown\ninterface FastEthernet1/3 \nshutdown\ninterface FastEthernet1/4 \nshutdown\ninterface FastEthernet1/5 \nshutdown\ninterface FastEthernet1/6 \nshutdown" 
} 

TASK [debug] ************************************************************************************************************************************** 
ok: [169.255.0.1] => { 
"items.results[0].item": "interface FastEthernet1/0 \nshutdown\ninterface FastEthernet1/1 \nshutdown\ninterface FastEthernet1/3 \nshutdown\ninterface FastEthernet1/4 \nshutdown\ninterface FastEthernet1/5 \nshutdown\ninterface FastEthernet1/6 \nshutdown" 
} 

TASK [Applying The Shutdown Template] ************************************************************************************************************* 
changed: [169.255.0.1] 

TASK [debug] ************************************************************************************************************************************** 
ok: [169.255.0.1] => { 
"shut1": { 
    "banners": {}, 
    "changed": true, 
    "commands": [ 
     "interface FastEthernet1/0 ", 
     "shutdown", 
     "interface FastEthernet1/1 ", 
     "shutdown", 
     "interface FastEthernet1/3 ", 
     "shutdown", 
     "interface FastEthernet1/4 ", 
     "shutdown", 
     "interface FastEthernet1/5 ", 
     "shutdown", 
     "interface FastEthernet1/6 ", 
     "shutdown" 
    ], 
    "updates": [ 
     "interface FastEthernet1/0 ", 
     "shutdown", 
     "interface FastEthernet1/1 ", 
     "shutdown", 
     "interface FastEthernet1/3 ", 
     "shutdown", 
     "interface FastEthernet1/4 ", 
     "shutdown", 
     "interface FastEthernet1/5 ", 
     "shutdown", 
     "interface FastEthernet1/6 ", 
     "shutdown" 
    ] 
} 
} 


PLAY RECAP **************************************************************************************************************************************** 
169.255.0.1    : ok=4 changed=1 unreachable=0 failed=0 
0

with_lines是你在找什么。它遍历程序执行输出的每一行。上述

- shell: interface {{ item }} && shutdown 
    with_lines: awk '{print $1}' ~/ANSIBLE/{{ inventory_hostname }}.cfg 

的例子使用awk打印的文件内容的第一列。

+0

老师克里斯林,它可能工作。我要测试,我会在几个小时后发布结果。提前致谢! –

+0

@DaniloBraga任何更新? –

+0

克里斯林先生,我很惋惜我的迟到,但是我被很多项目占用,就在今天我重新讨论了这个问题。 –

相关问题