将所有字符串替换为loop - ANSIBLE



我试图使用我得到的输出在这里改变CISCOASA单词。我试过在ansible中使用lineinfile模块,但替换顺序不正确。

origin JSON FILE:

{    "servers": [
{
"ingress": "CISCOASA",
"protocol": "tcp",
"source_ip": "IPADDRESS",
"source_port": 12345,
"dest_ip": "IPADDRESS",
"dest_port": "ssh"
},
{
"ingress": "CISCOASA",
"protocol": "tcp",
"source_ip": "IPADDRESS",
"source_port": 12345,
"dest_ip": "IPADDRESS",
"dest_port": "ssh"
},
{
"ingress": "CISCOASA",
"protocol": "tcp",
"source_ip": "IPADDRESS",
"source_port": 12345,
"dest_ip": "IPADDRESS",
"dest_port": 22
},
{
"ingress": "CISCOASA",
"protocol": "tcp",
"source_ip": "IPADDRESS",
"source_port": 12346,
"dest_ip": "IPADDRESS",
"dest_port": "ssh"
}
]}

替换值:

CISCOASA1
CISCOASA2
CISCOASA3
CISCOASA4

当前输出:

{    "servers": [
{
"ingress": "CISCOASA4",
"protocol": "tcp",
"source_ip": "IPADDRESS",
"source_port": 12345,
"dest_ip": "IPADDRESS",
"dest_port": "ssh"
},
{
"ingress": "CISCOASA3",
"protocol": "tcp",
"source_ip": "IPADDRESS",
"source_port": 12345,
"dest_ip": "IPADDRESS",
"dest_port": "ssh"
},
{
"ingress": "CISCOASA2",
"protocol": "tcp",
"source_ip": "IPADDRESS",
"source_port": 12345,
"dest_ip": "IPADDRESS",
"dest_port": 22
},
{
"ingress": "CISCOASA1",
"protocol": "tcp",
"source_ip": "IPADDRESS",
"source_port": 12346,
"dest_ip": "IPADDRESS",
"dest_port": "ssh"
}
]}

所需输出:

{    "servers": [
{
"ingress": "CISCOASA1",
"protocol": "tcp",
"source_ip": "IPADDRESS",
"source_port": 12345,
"dest_ip": "IPADDRESS",
"dest_port": "ssh"
},
{
"ingress": "CISCOASA2",
"protocol": "tcp",
"source_ip": "IPADDRESS",
"source_port": 12345,
"dest_ip": "IPADDRESS",
"dest_port": "ssh"
},
{
"ingress": "CISCOASA3",
"protocol": "tcp",
"source_ip": "IPADDRESS",
"source_port": 12345,
"dest_ip": "IPADDRESS",
"dest_port": 22
},
{
"ingress": "CISCOASA4",
"protocol": "tcp",
"source_ip": "IPADDRESS",
"source_port": 12346,
"dest_ip": "IPADDRESS",
"dest_port": "ssh"
}
]}

下面是我的任务:

- name: Adding extracted ingress in file
become: yes
become_user: root
lineinfile:
path: /filepath/valid.json
regexp: "CISCOASA" 
line: ""ingress": "{{ item[0] }}","
state: present
with_items:
- "{{ foo }}"

谢谢

这个很管用:)

- replace:
path: ./file.json
regexp: '^(.*?)CISCOASA"(.*)'
replace: '1CISCOASA{{ servers_index + 1 }}"2'
loop: "{{ vars_file_yml.servers }}"
loop_control:
index_var: servers_index
vars:
vars_file_yml: "{{ lookup('file', './file.json') | from_json }}"
- name: Adding extracted ingress in file
become: yes
become_user: root
replace:
path: filepath/valid.json
regexp: 'CISCOASA{{ servers_index + 1 }}'
replace: "{{ item[0] }}"
loop_control:
index_var: servers_index
with_items:
- "{{ foo }}"

这回答了我的问题。:)

最新更新