Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sed 是否可以更改变量';ansible中的s值?_Sed_Ansible - Fatal编程技术网

Sed 是否可以更改变量';ansible中的s值?

Sed 是否可以更改变量';ansible中的s值?,sed,ansible,Sed,Ansible,我写了一本剧本,读了两个文件的内容。第一个负责动态保存具有协议CDP的交换机接口 示例.cdp: 第二个(.cfg)文件还动态包含一组接口,我需要使用cisco命令“shutdown”将这些接口推送到设备上,以测试我的主/备份环境。如果example.cdp的接口在这里,我需要删除它们,因为我不能丢失与该设备的通信,因为管理是带内的 example.cfg: 剧本: <169.255.0.1> EXEC sed 's/interface FastEthernet0/0 //' ~/

我写了一本剧本,读了两个文件的内容。第一个负责动态保存具有协议CDP的交换机接口

示例.cdp:

第二个(.cfg)文件还动态包含一组接口,我需要使用cisco命令“shutdown”将这些接口推送到设备上,以测试我的主/备份环境。如果example.cdp的接口在这里,我需要删除它们,因为我不能丢失与该设备的通信,因为管理是带内的

example.cfg:

剧本:

 <169.255.0.1> EXEC sed 's/interface FastEthernet0/0 //' ~/ANSIBLE   /169.255.0.1.cfg
 failed: [169.255.0.1] (item=0/0 ) => {
"changed": true, 
"failed": true, 
"item": "0/0 ", 
"rc": 1, 
"stderr": "sed: -e expression #1, char 30: unknown option to `s'\n", 
"stdout": "", 
"stdout_lines": []
}
  <169.255.0.1> EXEC sed 's/interface FastEthernet14/0 //' ~/ANSIBLE/169.255.0.1.cfg
 failed: [169.255.0.1] (item=14/0 ) => {
"changed": true, 
"failed": true, 
"item": "14/0 ", 
"rc": 1, 
"stderr": "sed: -e expression #1, char 31: unknown option to `s'\n", 
"stdout": "", 
"stdout_lines": []
}
运行剧本:

 <169.255.0.1> EXEC sed 's/interface FastEthernet0/0 //' ~/ANSIBLE   /169.255.0.1.cfg
 failed: [169.255.0.1] (item=0/0 ) => {
"changed": true, 
"failed": true, 
"item": "0/0 ", 
"rc": 1, 
"stderr": "sed: -e expression #1, char 30: unknown option to `s'\n", 
"stdout": "", 
"stdout_lines": []
}
  <169.255.0.1> EXEC sed 's/interface FastEthernet14/0 //' ~/ANSIBLE/169.255.0.1.cfg
 failed: [169.255.0.1] (item=14/0 ) => {
"changed": true, 
"failed": true, 
"item": "14/0 ", 
"rc": 1, 
"stderr": "sed: -e expression #1, char 31: unknown option to `s'\n", 
"stdout": "", 
"stdout_lines": []
}
EXEC sed的/interface fasteEthernet0/0/'~/ANSIBLE/169.255.0.1.cfg
失败:[169.255.0.1](项目=0/0)=>{
“改变”:对,
“失败”:对,
“项目”:“0/0”,
“rc”:1,
“stderr”:“sed:-e表达式#1,字符30:`s'的未知选项\n”,
“stdout”:“,
“标准线”:[]
}
EXEC sed的/interface FastEthernet14/0/'~/ANSIBLE/169.255.0.1.cfg
失败:[169.255.0.1](项目=14/0)=>{
“改变”:对,
“失败”:对,
“项目”:“14/0”,
“rc”:1,
“stderr”:“sed:-e表达式#1,字符31:`s'的未知选项\n”,
“stdout”:“,
“标准线”:[]
}

如您所见,问题在于var“cdp”的内容。接口有符号“/”,它在“sed”命令中使用,我应该反斜杠这一个,以使用ansible解决我的问题。有没有办法打开一个变量并在其上生成一些regsub?

sed
可以使用任何字符作为regex标记器,因此快速解决问题,将其转换为(例如使用
字符):


不过,我觉得模板化是编写任务的更好方法。

谢谢@GUIDO。我从来没有听说过我可以像你给我看的那样使用任何符号作为代币。它起作用了!
 - name: Looping file
   debug:
     msg: "{{ item }}"
   register: items
   with_file:
     - ~/ANSIBLE/{{ inventory_hostname }}.cfg
 - debug: var=items.results[0].item

 - name: capturing interfaces with cdp
   raw: egrep '[0-9]+\/[0-9]+ ' -o ~/ANSIBLE/{{ inventory_hostname }}.cdp
   register: cdp
 - debug: var=cdp.stdout_lines

 - set_fact:
     cdp: "{{cdp.stdout_lines}}"
 - debug: var=cdp

 - name: Removing interfaces with cdp
   raw: sed 's/interface FastEthernet{{item}}//' ~/ANSIBLE/{{ inventory_hostname }}.cfg
   with_items:
     - "{{cdp}}"
   register: items
 - debug: var=items 

 - name: Applying The Shutdown Template
   ios_config:
     lines:
       - "{{ items.results[0].item }}" 
     provider: "{{cli}}"
   register: shut1
 - debug: var=shut1
   tags: shut1
 <169.255.0.1> EXEC sed 's/interface FastEthernet0/0 //' ~/ANSIBLE   /169.255.0.1.cfg
 failed: [169.255.0.1] (item=0/0 ) => {
"changed": true, 
"failed": true, 
"item": "0/0 ", 
"rc": 1, 
"stderr": "sed: -e expression #1, char 30: unknown option to `s'\n", 
"stdout": "", 
"stdout_lines": []
}
  <169.255.0.1> EXEC sed 's/interface FastEthernet14/0 //' ~/ANSIBLE/169.255.0.1.cfg
 failed: [169.255.0.1] (item=14/0 ) => {
"changed": true, 
"failed": true, 
"item": "14/0 ", 
"rc": 1, 
"stderr": "sed: -e expression #1, char 31: unknown option to `s'\n", 
"stdout": "", 
"stdout_lines": []
}
sed 's#interface FastEthernet{{item}}##' ~/ANSIBLE/{{ inventory_hostname }}.cfg