我试图使用我得到的输出在这里改变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 }}"
这回答了我的问题。:)