I am currently working on updating our firewall groups using ansible.
When deleting a group before adding it again (e.g. to make sure no extra addresses from previous runs are present). It will delete the group but not add it again.
Example playbook:
---
- name: Test vyos idempotency
hosts: dev-fw
tasks:
- name: Create firewall group
vyos.vyos.vyos_config:
lines:
- set firewall group network-group PUBLIC_DNS network '1.1.1.1/32'
- set firewall group network-group PUBLIC_DNS network '8.8.8.8/32'
- set firewall group network-group PUBLIC_DNS network '9.9.9.9/32'
- name: Delete and Create firewall group again
vyos.vyos.vyos_config:
lines:
- delete firewall group network-group PUBLIC_DNS
- set firewall group network-group PUBLIC_DNS network '1.1.1.1/32'
- set firewall group network-group PUBLIC_DNS network '8.8.8.8/32'
- set firewall group network-group PUBLIC_DNS network '9.9.9.9/32'It will return the following on the second step
TASK [Delete and Create firewall group again] *****************************************************************************************************************************************************************************************************************************************************************************
task path: /home/nicolas.berens/repos/gs-networking/test.yml:12
[firewall group network-group]
- PUBLIC_DNS {
- network "1.1.1.1/32"
- network "8.8.8.8/32"
- network "9.9.9.9/32"
- }
[edit]
[WARNING]: To ensure idempotency and correct diff the input configuration lines should be similar to how they appear if present in the running configuration on device
changed: [fw-dev] => {
"changed": true,
"commands": [
"delete firewall group network-group PUBLIC_DNS"
],
"diff": {
"prepared": "[firewall group network-group]\n- PUBLIC_DNS {\n- network \"1.1.1.1/32\"\n- network \"8.8.8.8/32\"\n- network \"9.9.9.9/32\"\n- }\n\n\n[edit]"
},
"filtered": [],
"invocation": {
"module_args": {
"backup": false,
"backup_options": null,
"comment": "configured by vyos_config",
"config": null,
"lines": [
"delete firewall group network-group PUBLIC_DNS",
"set firewall group network-group PUBLIC_DNS network '1.1.1.1/32'",
"set firewall group network-group PUBLIC_DNS network '8.8.8.8/32'",
"set firewall group network-group PUBLIC_DNS network '9.9.9.9/32'"
],
"match": "line",
"save": false,
"src": null
}
}
}Running the commands manually will result in the expected behaviour:
nicolas.berens@fw-dev# set firewall group network-group PUBLIC_DNS network '1.1.1.1/32' [edit] nicolas.berens@fw-dev# set firewall group network-group PUBLIC_DNS network '8.8.8.8/32' [edit] nicolas.berens@fw-dev# set firewall group network-group PUBLIC_DNS network '9.9.9.9/32' [edit] nicolas.berens@fw-dev# commit [edit] nicolas.berens@fw-dev# delete firewall group network-group PUBLIC_DNS [edit] nicolas.berens@fw-dev# set firewall group network-group PUBLIC_DNS network '1.1.1.1/32' [edit] nicolas.berens@fw-dev# set firewall group network-group PUBLIC_DNS network '8.8.8.8/32' [edit] nicolas.berens@fw-dev# set firewall group network-group PUBLIC_DNS network '9.9.9.9/32' [edit] nicolas.berens@fw-dev# show | compare No changes between working and active configurations. [edit]
Doing the same using command scripting: https://docs.vyos.io/en/1.4/automation/command-scripting.html
Also works as expected.