summaryrefslogtreecommitdiff
path: root/tests/integration/targets
diff options
context:
space:
mode:
authorCaptTrews <capttrews@gmail.com>2019-08-29 14:21:30 +0000
committerCaptTrews <capttrews@gmail.com>2019-08-29 14:21:30 +0000
commitae8514ce0289ee2096a3a9f54be6a4654153c880 (patch)
tree2d9a958c135c5ec4cad86650e8f7d7ef173d33c2 /tests/integration/targets
parent59af486ab07108815ad1774205959fa8287d6e53 (diff)
downloadvyos-ansible-old-ae8514ce0289ee2096a3a9f54be6a4654153c880.tar.gz
vyos-ansible-old-ae8514ce0289ee2096a3a9f54be6a4654153c880.zip
Updated from network content collector
Signed-off-by: CaptTrews <capttrews@gmail.com>
Diffstat (limited to 'tests/integration/targets')
-rw-r--r--tests/integration/targets/prepare_vyos_tests/tasks/main.yaml13
-rw-r--r--tests/integration/targets/vyos_banner/aliases1
-rw-r--r--tests/integration/targets/vyos_banner/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_banner/tasks/cli.yaml22
-rw-r--r--tests/integration/targets/vyos_banner/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_banner/tests/cli/basic-no-login.yaml41
-rw-r--r--tests/integration/targets/vyos_banner/tests/cli/basic-post-login.yaml47
-rw-r--r--tests/integration/targets/vyos_banner/tests/cli/basic-pre-login.yaml47
-rw-r--r--tests/integration/targets/vyos_command/aliases1
-rw-r--r--tests/integration/targets/vyos_command/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_command/tasks/cli.yaml22
-rw-r--r--tests/integration/targets/vyos_command/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_command/tests/cli/bad_operator.yaml19
-rw-r--r--tests/integration/targets/vyos_command/tests/cli/cli_command.yaml41
-rw-r--r--tests/integration/targets/vyos_command/tests/cli/contains.yaml20
-rw-r--r--tests/integration/targets/vyos_command/tests/cli/invalid.yaml22
-rw-r--r--tests/integration/targets/vyos_command/tests/cli/output.yaml44
-rw-r--r--tests/integration/targets/vyos_command/tests/cli/timeout.yaml18
-rw-r--r--tests/integration/targets/vyos_config/aliases1
-rw-r--r--tests/integration/targets/vyos_config/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_config/tasks/cli.yaml22
-rw-r--r--tests/integration/targets/vyos_config/tasks/cli_config.yaml16
-rw-r--r--tests/integration/targets/vyos_config/tasks/main.yaml3
-rw-r--r--tests/integration/targets/vyos_config/tests/cli/backup.yaml113
-rw-r--r--tests/integration/targets/vyos_config/tests/cli/check_config.yaml63
-rw-r--r--tests/integration/targets/vyos_config/tests/cli/comment.yaml34
-rw-r--r--tests/integration/targets/vyos_config/tests/cli/save.yaml54
-rw-r--r--tests/integration/targets/vyos_config/tests/cli/simple.yaml33
-rw-r--r--tests/integration/targets/vyos_config/tests/cli_config/cli_backup.yaml113
-rw-r--r--tests/integration/targets/vyos_config/tests/cli_config/cli_basic.yaml28
-rw-r--r--tests/integration/targets/vyos_config/tests/cli_config/cli_comment.yaml30
-rw-r--r--tests/integration/targets/vyos_facts/aliases1
-rw-r--r--tests/integration/targets/vyos_facts/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_facts/tasks/cli.yaml22
-rw-r--r--tests/integration/targets/vyos_facts/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_facts/tests/cli/basic_facts.yaml45
-rw-r--r--tests/integration/targets/vyos_interface/aliases0
-rw-r--r--tests/integration/targets/vyos_interface/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_interface/tasks/cli.yaml22
-rw-r--r--tests/integration/targets/vyos_interface/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_interface/tests/cli/basic.yaml220
-rw-r--r--tests/integration/targets/vyos_interface/tests/cli/intent.yaml157
-rw-r--r--tests/integration/targets/vyos_interface/tests/cli/net_interface.yaml56
-rw-r--r--tests/integration/targets/vyos_interfaces/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_interfaces/meta/main.yaml2
-rw-r--r--tests/integration/targets/vyos_interfaces/tasks/cli.yaml19
-rw-r--r--tests/integration/targets/vyos_interfaces/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/_populate.yaml17
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml17
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/deleted.yaml46
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/merged.yaml59
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/overridden.yaml52
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/replaced.yaml55
-rw-r--r--tests/integration/targets/vyos_interfaces/tests/cli/rtt.yaml78
-rw-r--r--tests/integration/targets/vyos_interfaces/vars/main.yaml209
-rw-r--r--tests/integration/targets/vyos_l3_interface/aliases0
-rw-r--r--tests/integration/targets/vyos_l3_interface/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_l3_interface/tasks/cli.yaml22
-rw-r--r--tests/integration/targets/vyos_l3_interface/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_l3_interface/tests/cli/basic.yaml203
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/meta/main.yml2
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/tasks/cli.yaml20
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/tests/cli/_populate.yaml11
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/tests/cli/_remove_config.yaml13
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/tests/cli/deleted.yaml48
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/tests/cli/merged.yaml58
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/tests/cli/overridden.yaml52
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/tests/cli/replaced.yaml52
-rw-r--r--tests/integration/targets/vyos_l3_interfaces/vars/main.yaml114
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/meta/main.yaml2
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tasks/cli.yaml19
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tests/cli/_add_bond.yaml8
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tests/cli/_populate.yaml16
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tests/cli/_remove_bond.yaml8
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tests/cli/_remove_config.yaml14
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tests/cli/deleted.yaml46
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tests/cli/merged.yaml60
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tests/cli/overridden.yaml54
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tests/cli/replaced.yaml51
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/tests/cli/rtt.yaml69
-rw-r--r--tests/integration/targets/vyos_lag_interfaces/vars/main.yaml115
-rw-r--r--tests/integration/targets/vyos_linkagg/aliases0
-rw-r--r--tests/integration/targets/vyos_linkagg/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_linkagg/tasks/cli.yaml22
-rw-r--r--tests/integration/targets/vyos_linkagg/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_linkagg/tests/cli/basic.yaml184
-rw-r--r--tests/integration/targets/vyos_linkagg/tests/cli/net_linkagg.yaml31
-rw-r--r--tests/integration/targets/vyos_lldp/aliases1
-rw-r--r--tests/integration/targets/vyos_lldp/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_lldp/tasks/cli.yaml22
-rw-r--r--tests/integration/targets/vyos_lldp/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_lldp/tests/cli/basic.yaml44
-rw-r--r--tests/integration/targets/vyos_lldp/tests/cli/net_lldp.yaml25
-rw-r--r--tests/integration/targets/vyos_lldp_global/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_lldp_global/tasks/cli.yaml19
-rw-r--r--tests/integration/targets/vyos_lldp_global/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_lldp_global/tests/cli/_populate.yaml9
-rw-r--r--tests/integration/targets/vyos_lldp_global/tests/cli/_remove_config.yaml9
-rw-r--r--tests/integration/targets/vyos_lldp_global/tests/cli/deleted.yaml44
-rw-r--r--tests/integration/targets/vyos_lldp_global/tests/cli/merged.yaml49
-rw-r--r--tests/integration/targets/vyos_lldp_global/tests/cli/replaced.yaml51
-rw-r--r--tests/integration/targets/vyos_lldp_global/tests/cli/rtt.yaml51
-rw-r--r--tests/integration/targets/vyos_lldp_global/vars/main.yaml56
-rw-r--r--tests/integration/targets/vyos_lldp_interface/aliases0
-rw-r--r--tests/integration/targets/vyos_lldp_interface/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_lldp_interface/tasks/cli.yaml22
-rw-r--r--tests/integration/targets/vyos_lldp_interface/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_lldp_interface/tests/cli/basic.yaml167
-rw-r--r--tests/integration/targets/vyos_lldp_interface/tests/cli/net_lldp_interface.yaml26
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/meta/main.yaml2
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/tasks/cli.yaml19
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/tests/cli/_populate.yaml14
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/tests/cli/_populate_intf.yaml10
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/tests/cli/_remove_config.yaml8
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/tests/cli/deleted.yaml46
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/tests/cli/merged.yaml58
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/tests/cli/overridden.yaml49
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/tests/cli/replaced.yaml63
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/tests/cli/rtt.yaml57
-rw-r--r--tests/integration/targets/vyos_lldp_interfaces/vars/main.yaml130
-rw-r--r--tests/integration/targets/vyos_logging/aliases0
-rw-r--r--tests/integration/targets/vyos_logging/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_logging/tasks/cli.yaml22
-rw-r--r--tests/integration/targets/vyos_logging/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_logging/tests/cli/basic.yaml126
-rw-r--r--tests/integration/targets/vyos_logging/tests/cli/net_logging.yaml39
-rw-r--r--tests/integration/targets/vyos_smoke/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_smoke/tasks/cli.yaml22
-rw-r--r--tests/integration/targets/vyos_smoke/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_smoke/tests/cli/common_config.yaml10
-rw-r--r--tests/integration/targets/vyos_smoke/tests/cli/common_utils.yaml49
-rw-r--r--tests/integration/targets/vyos_smoke/tests/cli/misc_tests.yaml13
-rw-r--r--tests/integration/targets/vyos_static_route/aliases1
-rw-r--r--tests/integration/targets/vyos_static_route/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_static_route/tasks/cli.yaml22
-rw-r--r--tests/integration/targets/vyos_static_route/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_static_route/tests/cli/basic.yaml120
-rw-r--r--tests/integration/targets/vyos_static_route/tests/cli/net_static_route.yaml33
-rw-r--r--tests/integration/targets/vyos_system/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_system/tasks/cli.yaml22
-rw-r--r--tests/integration/targets/vyos_system/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_system/tests/cli/basic.yaml61
-rw-r--r--tests/integration/targets/vyos_system/tests/cli/net_system.yaml30
-rw-r--r--tests/integration/targets/vyos_user/aliases0
-rw-r--r--tests/integration/targets/vyos_user/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_user/tasks/cli.yaml22
-rw-r--r--tests/integration/targets/vyos_user/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_user/tests/cli/auth.yaml34
-rw-r--r--tests/integration/targets/vyos_user/tests/cli/basic.yaml77
-rw-r--r--tests/integration/targets/vyos_vlan/aliases0
-rw-r--r--tests/integration/targets/vyos_vlan/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_vlan/tasks/cli.yaml22
-rw-r--r--tests/integration/targets/vyos_vlan/tasks/main.yaml2
-rw-r--r--tests/integration/targets/vyos_vlan/tests/cli/basic.yaml101
-rw-r--r--tests/integration/targets/vyos_vlan/tests/cli/intent.yaml59
-rw-r--r--tests/integration/targets/vyos_vlan/tests/cli/multiple.yaml60
162 files changed, 5333 insertions, 0 deletions
diff --git a/tests/integration/targets/prepare_vyos_tests/tasks/main.yaml b/tests/integration/targets/prepare_vyos_tests/tasks/main.yaml
new file mode 100644
index 0000000..1a81fb1
--- /dev/null
+++ b/tests/integration/targets/prepare_vyos_tests/tasks/main.yaml
@@ -0,0 +1,13 @@
+---
+- name: Ensure required interfaces are present in running-config
+ network.cli.cli_config:
+ config: "{{ lines }}"
+ vars:
+ lines: |
+ set interfaces ethernet eth0 address dhcp
+ set interfaces ethernet eth0 speed auto
+ set interfaces ethernet eth0 duplex auto
+ set interfaces ethernet eth1
+ set interfaces ethernet eth2
+ delete interfaces loopback lo
+ ignore_errors: yes
diff --git a/tests/integration/targets/vyos_banner/aliases b/tests/integration/targets/vyos_banner/aliases
new file mode 100644
index 0000000..539d957
--- /dev/null
+++ b/tests/integration/targets/vyos_banner/aliases
@@ -0,0 +1 @@
+shippable/network
diff --git a/tests/integration/targets/vyos_banner/defaults/main.yaml b/tests/integration/targets/vyos_banner/defaults/main.yaml
new file mode 100644
index 0000000..9ef5ba5
--- /dev/null
+++ b/tests/integration/targets/vyos_banner/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "*"
+test_items: []
diff --git a/tests/integration/targets/vyos_banner/tasks/cli.yaml b/tests/integration/targets/vyos_banner/tasks/cli.yaml
new file mode 100644
index 0000000..890d3ac
--- /dev/null
+++ b/tests/integration/targets/vyos_banner/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+ include: "{{ test_case_to_run }} ansible_connection=local"
+ with_first_found: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_banner/tasks/main.yaml b/tests/integration/targets/vyos_banner/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_banner/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_banner/tests/cli/basic-no-login.yaml b/tests/integration/targets/vyos_banner/tests/cli/basic-no-login.yaml
new file mode 100644
index 0000000..5efdf8e
--- /dev/null
+++ b/tests/integration/targets/vyos_banner/tests/cli/basic-no-login.yaml
@@ -0,0 +1,41 @@
+---
+- debug:
+ msg: "cli/basic-no-login.yaml on connection={{ ansible_connection }}"
+
+- name: Setup
+ vyos.vyos.vyos_banner:
+ banner: pre-login
+ text: |
+ Junk pre-login banner
+ over multiple lines
+ state: present
+
+- name: remove pre-login
+ vyos.vyos.vyos_banner:
+ banner: pre-login
+ state: absent
+ register: result
+
+- debug:
+ msg: "{{ result }}"
+
+- assert:
+ that:
+ - "result.changed == true"
+ - "'delete system login banner pre-login' in result.commands"
+
+- name: remove pre-login (idempotent)
+ vyos.vyos.vyos_banner:
+ banner: pre-login
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - "result.changed == false"
+ - "result.commands | length == 0"
+
+
+# FIXME add in tests for everything defined in docs
+# FIXME Test state:absent + test:
+# FIXME Without powers ensure "privileged mode required"
diff --git a/tests/integration/targets/vyos_banner/tests/cli/basic-post-login.yaml b/tests/integration/targets/vyos_banner/tests/cli/basic-post-login.yaml
new file mode 100644
index 0000000..ff6cbad
--- /dev/null
+++ b/tests/integration/targets/vyos_banner/tests/cli/basic-post-login.yaml
@@ -0,0 +1,47 @@
+---
+- debug:
+ msg: "cli/basic-post-login.yaml on connection={{ ansible_connection }}"
+
+- name: setup - remove post-login
+ vyos.vyos.vyos_banner:
+ banner: post-login
+ state: absent
+
+- name: Set post-login
+ vyos.vyos.vyos_banner:
+ banner: post-login
+ text: |
+ this is my post-login banner
+ that has a multiline
+ string
+ state: present
+ register: result
+
+- debug:
+ msg: "{{ result }}"
+
+- assert:
+ that:
+ - "result.changed == true"
+ - "'this is my post-login banner' in result.commands[0]"
+ - "'that has a multiline' in result.commands[0]"
+
+- name: Set post-login again (idempotent)
+ vyos.vyos.vyos_banner:
+ banner: post-login
+ text: |
+ this is my post-login banner
+ that has a multiline
+ string
+ state: present
+ register: result
+
+- assert:
+ that:
+ - "result.changed == false"
+ - "result.commands | length == 0"
+
+
+# FIXME add in tests for everything defined in docs
+# FIXME Test state:absent + test:
+# FIXME Without powers ensure "privileged mode required"
diff --git a/tests/integration/targets/vyos_banner/tests/cli/basic-pre-login.yaml b/tests/integration/targets/vyos_banner/tests/cli/basic-pre-login.yaml
new file mode 100644
index 0000000..8489d87
--- /dev/null
+++ b/tests/integration/targets/vyos_banner/tests/cli/basic-pre-login.yaml
@@ -0,0 +1,47 @@
+---
+- debug:
+ msg: "cli/basic-pre-login.yaml on connection={{ ansible_connection }}"
+
+- name: setup - remove pre-login
+ vyos.vyos.vyos_banner:
+ banner: pre-login
+ state: absent
+
+- name: Set pre-login
+ vyos.vyos.vyos_banner:
+ banner: pre-login
+ text: |
+ this is my pre-login banner
+ that has a multiline
+ string
+ state: present
+ register: result
+
+- debug:
+ msg: "{{ result }}"
+
+- assert:
+ that:
+ - "result.changed == true"
+ - "'this is my pre-login banner' in result.commands[0]"
+ - "'that has a multiline' in result.commands[0]"
+
+- name: Set pre-login again (idempotent)
+ vyos.vyos.vyos_banner:
+ banner: pre-login
+ text: |
+ this is my pre-login banner
+ that has a multiline
+ string
+ state: present
+ register: result
+
+- assert:
+ that:
+ - "result.changed == false"
+ - "result.commands | length == 0"
+
+
+# FIXME add in tests for everything defined in docs
+# FIXME Test state:absent + test:
+# FIXME Without powers ensure "privileged mode required"
diff --git a/tests/integration/targets/vyos_command/aliases b/tests/integration/targets/vyos_command/aliases
new file mode 100644
index 0000000..539d957
--- /dev/null
+++ b/tests/integration/targets/vyos_command/aliases
@@ -0,0 +1 @@
+shippable/network
diff --git a/tests/integration/targets/vyos_command/defaults/main.yaml b/tests/integration/targets/vyos_command/defaults/main.yaml
new file mode 100644
index 0000000..9ef5ba5
--- /dev/null
+++ b/tests/integration/targets/vyos_command/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "*"
+test_items: []
diff --git a/tests/integration/targets/vyos_command/tasks/cli.yaml b/tests/integration/targets/vyos_command/tasks/cli.yaml
new file mode 100644
index 0000000..890d3ac
--- /dev/null
+++ b/tests/integration/targets/vyos_command/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+ include: "{{ test_case_to_run }} ansible_connection=local"
+ with_first_found: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_command/tasks/main.yaml b/tests/integration/targets/vyos_command/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_command/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_command/tests/cli/bad_operator.yaml b/tests/integration/targets/vyos_command/tests/cli/bad_operator.yaml
new file mode 100644
index 0000000..bf3334f
--- /dev/null
+++ b/tests/integration/targets/vyos_command/tests/cli/bad_operator.yaml
@@ -0,0 +1,19 @@
+---
+- debug: msg="START cli/bad_operator.yaml on connection={{ ansible_connection }}"
+
+- name: test bad operator
+ vyos.vyos.vyos_command:
+ commands:
+ - show version
+ - show interfaces
+ wait_for:
+ - result[0] is 'VyOS'
+ register: result
+ ignore_errors: yes
+
+- assert:
+ that:
+ - result.failed == true
+ - result.msg is defined
+
+- debug: msg="END cli/bad_operator.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_command/tests/cli/cli_command.yaml b/tests/integration/targets/vyos_command/tests/cli/cli_command.yaml
new file mode 100644
index 0000000..08a7675
--- /dev/null
+++ b/tests/integration/targets/vyos_command/tests/cli/cli_command.yaml
@@ -0,0 +1,41 @@
+---
+- debug:
+ msg: "START cli/cli_command.yaml on connection={{ ansible_connection }}"
+
+- block:
+ - name: get output for single command
+ network.cli.cli_command:
+ command: show version
+ register: result
+
+ - assert:
+ that:
+ - "result.changed == false"
+ - "result.stdout is defined"
+
+ - name: send invalid command
+ network.cli.cli_command:
+ command: 'show foo'
+ register: result
+ ignore_errors: yes
+
+ - assert:
+ that:
+ - "result.failed == true"
+ - "result.msg is defined"
+ when: "ansible_connection == 'network_cli'"
+
+- block:
+ - name: test failure for local connection
+ network.cli.cli_command:
+ command: show version
+ register: result
+ ignore_errors: yes
+
+ - assert:
+ that:
+ - 'result.failed == true'
+ - "'Connection type local is not valid for this module' in result.msg"
+ when: "ansible_connection == 'local'"
+
+- debug: msg="END cli/cli_command.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_command/tests/cli/contains.yaml b/tests/integration/targets/vyos_command/tests/cli/contains.yaml
new file mode 100644
index 0000000..b8665fa
--- /dev/null
+++ b/tests/integration/targets/vyos_command/tests/cli/contains.yaml
@@ -0,0 +1,20 @@
+---
+- debug: msg="START cli/contains.yaml on connection={{ ansible_connection }}"
+
+- name: test contains operator
+ vyos.vyos.vyos_command:
+ commands:
+ - show version
+ - show interface
+ wait_for:
+ - result[0] contains VyOS
+ - result[1] contains eth0
+ register: result
+
+- assert:
+ that:
+ - result.changed == false
+ - result.stdout is defined
+ - result.stdout_lines is defined
+
+- debug: msg="END cli/contains.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_command/tests/cli/invalid.yaml b/tests/integration/targets/vyos_command/tests/cli/invalid.yaml
new file mode 100644
index 0000000..672f6e8
--- /dev/null
+++ b/tests/integration/targets/vyos_command/tests/cli/invalid.yaml
@@ -0,0 +1,22 @@
+---
+- debug: msg="START cli/invalid.yaml on connection={{ ansible_connection }}"
+
+- name: run invalid command
+ vyos.vyos.vyos_command:
+ commands: show foo
+ register: result
+ ignore_errors: yes
+
+- assert: { that: result.failed }
+
+- name: run commands that include invalid command
+ vyos.vyos.vyos_command:
+ commands:
+ - show version
+ - show foo
+ register: result
+ ignore_errors: yes
+
+- assert: { that: result.failed }
+
+- debug: msg="END cli/invalid.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_command/tests/cli/output.yaml b/tests/integration/targets/vyos_command/tests/cli/output.yaml
new file mode 100644
index 0000000..bdc8b2a
--- /dev/null
+++ b/tests/integration/targets/vyos_command/tests/cli/output.yaml
@@ -0,0 +1,44 @@
+---
+- debug: msg="START cli/output.yaml on connection={{ ansible_connection }}"
+
+- name: get output for single command
+ vyos.vyos.vyos_command:
+ commands: show version
+ register: result
+
+- assert:
+ that:
+ - result.changed == false
+ - result.stdout is defined
+ - result.stdout_lines is defined
+
+- name: get output for multiple commands
+ vyos.vyos.vyos_command:
+ commands:
+ - show version
+ - show interfaces
+ register: result
+
+- assert:
+ that:
+ - result.changed == false
+ - result.stdout is defined
+ - result.stdout | length == 2
+
+- name: Get output for multiple commands that call less explicitly
+ vyos.vyos.vyos_command:
+ commands:
+ # NOTE: We only test show commands that will output <ANSIBLE_VYOS_TERMINAL_LENGTH
+ # Otherwise you will get ": "command timeout triggered"
+ - show hardware cpu detail
+ - show hardware mem
+ - show license
+ register: result
+
+- assert:
+ that:
+ - result.changed == false
+ - result.stdout_lines is defined
+ - result.stdout_lines[2] | length >= 20
+
+- debug: msg="END cli/output.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_command/tests/cli/timeout.yaml b/tests/integration/targets/vyos_command/tests/cli/timeout.yaml
new file mode 100644
index 0000000..e4716ed
--- /dev/null
+++ b/tests/integration/targets/vyos_command/tests/cli/timeout.yaml
@@ -0,0 +1,18 @@
+---
+- debug: msg="START cli/timeout.yaml on connection={{ ansible_connection }}"
+
+- name: test bad condition
+ vyos.vyos.vyos_command:
+ commands:
+ - show version
+ wait_for:
+ - result[0] contains bad_value_string
+ register: result
+ ignore_errors: yes
+
+- assert:
+ that:
+ - result.failed == true
+ - result.msg is defined
+
+- debug: msg="END cli/timeout.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_config/aliases b/tests/integration/targets/vyos_config/aliases
new file mode 100644
index 0000000..539d957
--- /dev/null
+++ b/tests/integration/targets/vyos_config/aliases
@@ -0,0 +1 @@
+shippable/network
diff --git a/tests/integration/targets/vyos_config/defaults/main.yaml b/tests/integration/targets/vyos_config/defaults/main.yaml
new file mode 100644
index 0000000..9ef5ba5
--- /dev/null
+++ b/tests/integration/targets/vyos_config/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "*"
+test_items: []
diff --git a/tests/integration/targets/vyos_config/tasks/cli.yaml b/tests/integration/targets/vyos_config/tasks/cli.yaml
new file mode 100644
index 0000000..890d3ac
--- /dev/null
+++ b/tests/integration/targets/vyos_config/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+ include: "{{ test_case_to_run }} ansible_connection=local"
+ with_first_found: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_config/tasks/cli_config.yaml b/tests/integration/targets/vyos_config/tasks/cli_config.yaml
new file mode 100644
index 0000000..f5d5b55
--- /dev/null
+++ b/tests/integration/targets/vyos_config/tasks/cli_config.yaml
@@ -0,0 +1,16 @@
+---
+- name: collect all cli_config test cases
+ find:
+ paths: "{{ role_path }}/tests/cli_config"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_config/tasks/main.yaml b/tests/integration/targets/vyos_config/tasks/main.yaml
new file mode 100644
index 0000000..5e327e8
--- /dev/null
+++ b/tests/integration/targets/vyos_config/tasks/main.yaml
@@ -0,0 +1,3 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
+- { include: cli_config.yaml, tags: ['cli_config'] }
diff --git a/tests/integration/targets/vyos_config/tests/cli/backup.yaml b/tests/integration/targets/vyos_config/tests/cli/backup.yaml
new file mode 100644
index 0000000..0ef0986
--- /dev/null
+++ b/tests/integration/targets/vyos_config/tests/cli/backup.yaml
@@ -0,0 +1,113 @@
+---
+- debug: msg="START vyos/backup.yaml on connection={{ ansible_connection }}"
+
+- name: collect any backup files
+ find:
+ paths: "{{ role_path }}/backup"
+ pattern: "{{ inventory_hostname_short }}_config*"
+ register: backup_files
+ connection: local
+
+- name: delete backup files
+ file:
+ path: "{{ item.path }}"
+ state: absent
+ with_items: "{{backup_files.files|default([])}}"
+
+- name: take configure backup
+ vyos.vyos.vyos_config:
+ backup: yes
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+
+- name: collect any backup files
+ find:
+ paths: "{{ role_path }}/backup"
+ pattern: "{{ inventory_hostname_short }}_config*"
+ register: backup_files
+ connection: local
+
+- assert:
+ that:
+ - "backup_files.files is defined"
+
+- name: delete configurable backup file path
+ file:
+ path: "{{ item }}"
+ state: absent
+ with_items:
+ - "{{ role_path }}/backup_test_dir/"
+ - "{{ role_path }}/backup/backup.cfg"
+
+- name: take configuration backup in custom filename and directory path
+ vyos.vyos.vyos_config:
+ backup: yes
+ backup_options:
+ filename: backup.cfg
+ dir_path: "{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}"
+ become: yes
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+
+- name: check if the backup file-1 exist
+ find:
+ paths: "{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}/backup.cfg"
+ register: backup_file
+ connection: local
+
+- assert:
+ that:
+ - "backup_file.files is defined"
+
+- name: take configuration backup in custom filename
+ vyos.vyos.vyos_config:
+ backup: yes
+ backup_options:
+ filename: backup.cfg
+ become: yes
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+
+- name: check if the backup file-2 exist
+ find:
+ paths: "{{ role_path }}/backup/backup.cfg"
+ register: backup_file
+ connection: local
+
+- assert:
+ that:
+ - "backup_file.files is defined"
+
+- name: take configuration backup in custom path and default filename
+ vyos.vyos.vyos_config:
+ backup: yes
+ backup_options:
+ dir_path: "{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}"
+ become: yes
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+
+- name: check if the backup file-3 exist
+ find:
+ paths: "{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}"
+ pattern: "{{ inventory_hostname_short }}_config*"
+ register: backup_file
+ connection: local
+
+- assert:
+ that:
+ - "backup_file.files is defined"
+
+- debug: msg="END vyos/backup.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_config/tests/cli/check_config.yaml b/tests/integration/targets/vyos_config/tests/cli/check_config.yaml
new file mode 100644
index 0000000..b90ec7b
--- /dev/null
+++ b/tests/integration/targets/vyos_config/tests/cli/check_config.yaml
@@ -0,0 +1,63 @@
+---
+- debug: msg="START cli/config_check.yaml on connection={{ ansible_connection }}"
+
+- name: setup- ensure interface is not present
+ vyos.vyos.vyos_config:
+ lines: delete interfaces loopback lo
+
+- name: setup- create interface
+ vyos.vyos.vyos_config:
+ lines:
+ - interfaces
+ - interfaces loopback lo
+ - interfaces loopback lo description test
+ register: result
+
+# note collapsing the duplicate lines doesn't work if
+# lines:
+# - interfaces loopback lo description test
+# - interfaces loopback lo
+# - interfaces
+
+- name: Check that multiple duplicate lines collapse into a single commands
+ assert:
+ that:
+ - "{{ result.commands|length }} == 1"
+
+- name: Check that set is correctly prepended
+ assert:
+ that:
+ - "result.commands[0] == 'set interfaces loopback lo description test'"
+
+- name: configure config_check config command
+ vyos.vyos.vyos_config:
+ lines: delete interfaces loopback lo
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+
+- name: check config_check config command idempontent
+ vyos.vyos.vyos_config:
+ lines: delete interfaces loopback lo
+ register: result
+
+- assert:
+ that:
+ - "result.changed == false"
+
+- name: check multiple line config filter is working
+ vyos.vyos.vyos_config:
+ lines:
+ - set system login user esa level admin
+ - set system login user esa authentication encrypted-password '!abc!'
+ - set system login user vyos level admin
+ - set system login user vyos authentication encrypted-password 'abc'
+ register: result
+
+- assert:
+ that:
+ - "{{ result.filtered|length }} == 2"
+
+- debug: msg="END cli/config_check.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_config/tests/cli/comment.yaml b/tests/integration/targets/vyos_config/tests/cli/comment.yaml
new file mode 100644
index 0000000..2cd1350
--- /dev/null
+++ b/tests/integration/targets/vyos_config/tests/cli/comment.yaml
@@ -0,0 +1,34 @@
+---
+- debug: msg="START cli/comment.yaml on connection={{ ansible_connection }}"
+
+- name: setup
+ vyos.vyos.vyos_config:
+ lines: set system host-name {{ inventory_hostname_short }}
+ match: none
+
+- name: configure using comment
+ vyos.vyos.vyos_config:
+ lines: set system host-name foo
+ comment: this is a test
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+ - "'set system host-name foo' in result.commands"
+
+- name: collect system commits
+ vyos.vyos.vyos_command:
+ commands: show system commit
+ register: result
+
+- assert:
+ that:
+ - "'this is a test' in result.stdout_lines[0][1]"
+
+- name: teardown
+ vyos.vyos.vyos_config:
+ lines: set system host-name {{ inventory_hostname_short }}
+ match: none
+
+- debug: msg="END cli/comment.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_config/tests/cli/save.yaml b/tests/integration/targets/vyos_config/tests/cli/save.yaml
new file mode 100644
index 0000000..d8e45e2
--- /dev/null
+++ b/tests/integration/targets/vyos_config/tests/cli/save.yaml
@@ -0,0 +1,54 @@
+---
+- debug: msg="START cli/save.yaml on connection={{ ansible_connection }}"
+
+- name: setup
+ vyos.vyos.vyos_config:
+ lines: set system host-name {{ inventory_hostname_short }}
+ match: none
+
+- name: configure hostaname and save
+ vyos.vyos.vyos_config:
+ lines: set system host-name foo
+ save: true
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+ - "'set system host-name foo' in result.commands"
+
+- name: configure hostaname and don't save
+ vyos.vyos.vyos_config:
+ lines: set system host-name bar
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+ - "'set system host-name bar' in result.commands"
+
+- name: save config
+ vyos.vyos.vyos_config:
+ save: true
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+
+- name: save config again
+ vyos.vyos.vyos_config:
+ save: true
+ register: result
+
+- assert:
+ that:
+ - "result.changed == false"
+
+- name: teardown
+ vyos.vyos.vyos_config:
+ lines: set system host-name {{ inventory_hostname_short }}
+ match: none
+ save: true
+
+- debug: msg="END cli/simple.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_config/tests/cli/simple.yaml b/tests/integration/targets/vyos_config/tests/cli/simple.yaml
new file mode 100644
index 0000000..af211f5
--- /dev/null
+++ b/tests/integration/targets/vyos_config/tests/cli/simple.yaml
@@ -0,0 +1,33 @@
+---
+- debug: msg="START cli/simple.yaml on connection={{ ansible_connection }}"
+
+- name: setup
+ vyos.vyos.vyos_config:
+ lines: set system host-name {{ inventory_hostname_short }}
+ match: none
+
+- name: configure simple config command
+ vyos.vyos.vyos_config:
+ lines: set system host-name foo
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+ - "'set system host-name foo' in result.commands"
+
+- name: check simple config command idempontent
+ vyos.vyos.vyos_config:
+ lines: set system host-name foo
+ register: result
+
+- assert:
+ that:
+ - "result.changed == false"
+
+- name: teardown
+ vyos.vyos.vyos_config:
+ lines: set system host-name {{ inventory_hostname_short }}
+ match: none
+
+- debug: msg="END cli/simple.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_config/tests/cli_config/cli_backup.yaml b/tests/integration/targets/vyos_config/tests/cli_config/cli_backup.yaml
new file mode 100644
index 0000000..8057705
--- /dev/null
+++ b/tests/integration/targets/vyos_config/tests/cli_config/cli_backup.yaml
@@ -0,0 +1,113 @@
+- debug: msg="END cli_config/backup.yaml on connection={{ ansible_connection }}"
+
+- name: delete configurable backup file path
+ file:
+ path: "{{ item }}"
+ state: absent
+ with_items:
+ - "{{ role_path }}/backup_test_dir/"
+ - "{{ role_path }}/backup/backup.cfg"
+
+- name: collect any backup files
+ find:
+ paths: "{{ role_path }}/backup"
+ pattern: "{{ inventory_hostname_short }}_config*"
+ register: backup_files
+ connection: local
+
+- name: delete backup files
+ file:
+ path: "{{ item.path }}"
+ state: absent
+ with_items: "{{backup_files.files|default([])}}"
+
+- name: take config backup
+ network.cli.cli_config:
+ backup: yes
+ become: yes
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+
+- name: collect any backup files
+ find:
+ paths: "{{ role_path }}/backup"
+ pattern: "{{ inventory_hostname_short }}_config*"
+ register: backup_files
+ connection: local
+
+- assert:
+ that:
+ - "backup_files.files is defined"
+
+- name: take configuration backup in custom filename and directory path
+ network.cli.cli_config:
+ backup: yes
+ backup_options:
+ filename: backup.cfg
+ dir_path: "{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}"
+ become: yes
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+
+- name: check if the backup file-1 exist
+ find:
+ paths: "{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}/backup.cfg"
+ register: backup_file
+ connection: local
+
+- assert:
+ that:
+ - "backup_file.files is defined"
+
+- name: take configuration backup in custom filename
+ network.cli.cli_config:
+ backup: yes
+ backup_options:
+ filename: backup.cfg
+ become: yes
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+
+- name: check if the backup file-2 exist
+ find:
+ paths: "{{ role_path }}/backup/backup.cfg"
+ register: backup_file
+ connection: local
+
+- assert:
+ that:
+ - "backup_file.files is defined"
+
+- name: take configuration backup in custom path and default filename
+ network.cli.cli_config:
+ backup: yes
+ backup_options:
+ dir_path: "{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}"
+ become: yes
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+
+- name: check if the backup file-3 exist
+ find:
+ paths: "{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}"
+ pattern: "{{ inventory_hostname_short }}_config*"
+ register: backup_file
+ connection: local
+
+- assert:
+ that:
+ - "backup_file.files is defined"
+
+- debug: msg="END cli_config/backup.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_config/tests/cli_config/cli_basic.yaml b/tests/integration/targets/vyos_config/tests/cli_config/cli_basic.yaml
new file mode 100644
index 0000000..e5e3edb
--- /dev/null
+++ b/tests/integration/targets/vyos_config/tests/cli_config/cli_basic.yaml
@@ -0,0 +1,28 @@
+---
+- debug: msg="START cli_config/cli_basic.yaml on connection={{ ansible_connection }}"
+
+- name: setup - remove interface description
+ network.cli.cli_config: &rm
+ config: delete interfaces loopback lo description
+
+- name: configure device with config
+ network.cli.cli_config: &conf
+ config: set interfaces loopback lo description 'this is a test'
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+
+- name: Idempotence
+ network.cli.cli_config: *conf
+ register: result
+
+- assert:
+ that:
+ - "result.changed == false"
+
+- name: teardown
+ network.cli.cli_config: *rm
+
+- debug: msg="END cli_config/cli_basic.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_config/tests/cli_config/cli_comment.yaml b/tests/integration/targets/vyos_config/tests/cli_config/cli_comment.yaml
new file mode 100644
index 0000000..ecc9e8c
--- /dev/null
+++ b/tests/integration/targets/vyos_config/tests/cli_config/cli_comment.yaml
@@ -0,0 +1,30 @@
+---
+- debug: msg="START cli_config/cli_comment.yaml on connection={{ ansible_connection }}"
+
+- name: setup
+ network.cli.cli_config: &rm
+ config: set system host-name {{ inventory_hostname_short }}
+
+- name: configure using comment
+ network.cli.cli_config:
+ config: set system host-name foo
+ commit_comment: this is a test
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+
+- name: collect system commits
+ vyos.vyos.vyos_command:
+ commands: show system commit
+ register: result
+
+- assert:
+ that:
+ - "'this is a test' in result.stdout_lines[0][1]"
+
+- name: teardown
+ network.cli.cli_config: *rm
+
+- debug: msg="END cli_config/cli_comment.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_facts/aliases b/tests/integration/targets/vyos_facts/aliases
new file mode 100644
index 0000000..539d957
--- /dev/null
+++ b/tests/integration/targets/vyos_facts/aliases
@@ -0,0 +1 @@
+shippable/network
diff --git a/tests/integration/targets/vyos_facts/defaults/main.yaml b/tests/integration/targets/vyos_facts/defaults/main.yaml
new file mode 100644
index 0000000..9ef5ba5
--- /dev/null
+++ b/tests/integration/targets/vyos_facts/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "*"
+test_items: []
diff --git a/tests/integration/targets/vyos_facts/tasks/cli.yaml b/tests/integration/targets/vyos_facts/tasks/cli.yaml
new file mode 100644
index 0000000..890d3ac
--- /dev/null
+++ b/tests/integration/targets/vyos_facts/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+ include: "{{ test_case_to_run }} ansible_connection=local"
+ with_first_found: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_facts/tasks/main.yaml b/tests/integration/targets/vyos_facts/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_facts/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_facts/tests/cli/basic_facts.yaml b/tests/integration/targets/vyos_facts/tests/cli/basic_facts.yaml
new file mode 100644
index 0000000..e0a3bca
--- /dev/null
+++ b/tests/integration/targets/vyos_facts/tests/cli/basic_facts.yaml
@@ -0,0 +1,45 @@
+- name: get host name
+ vyos.vyos.vyos_command:
+ commands:
+ - show host name
+ register: vyos_host
+
+- name: get version info
+ vyos.vyos.vyos_command:
+ commands:
+ - show version
+ register: vyos_version
+
+- name: collect all facts from the device
+ vyos.vyos.vyos_facts:
+ gather_subset: all
+ register: result
+
+- name: "check that hostname is present"
+ assert:
+ that:
+ # hostname
+ - result.ansible_facts.ansible_net_hostname == vyos_host.stdout[0]
+
+- name: "check that subsets are present"
+ assert:
+ that:
+ # subsets
+ - "'neighbors' in result.ansible_facts.ansible_net_gather_subset"
+ - "'default' in result.ansible_facts.ansible_net_gather_subset"
+ - "'config' in result.ansible_facts.ansible_net_gather_subset"
+
+- name: "check that version info is present"
+ assert:
+ that:
+ # version info
+ - result.ansible_facts.ansible_net_version in vyos_version.stdout_lines[0][0]
+ - result.ansible_facts.ansible_net_model in vyos_version.stdout_lines[0][9]
+ - result.ansible_facts.ansible_net_serialnum in vyos_version.stdout_lines[0][10]
+
+- name: "check that config info is present"
+ assert:
+ that:
+ # config info
+ - result.ansible_facts.ansible_net_commits is defined
+ - result.ansible_facts.ansible_net_config is defined
diff --git a/tests/integration/targets/vyos_interface/aliases b/tests/integration/targets/vyos_interface/aliases
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/integration/targets/vyos_interface/aliases
diff --git a/tests/integration/targets/vyos_interface/defaults/main.yaml b/tests/integration/targets/vyos_interface/defaults/main.yaml
new file mode 100644
index 0000000..9ef5ba5
--- /dev/null
+++ b/tests/integration/targets/vyos_interface/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "*"
+test_items: []
diff --git a/tests/integration/targets/vyos_interface/tasks/cli.yaml b/tests/integration/targets/vyos_interface/tasks/cli.yaml
new file mode 100644
index 0000000..890d3ac
--- /dev/null
+++ b/tests/integration/targets/vyos_interface/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+ include: "{{ test_case_to_run }} ansible_connection=local"
+ with_first_found: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_interface/tasks/main.yaml b/tests/integration/targets/vyos_interface/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_interface/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_interface/tests/cli/basic.yaml b/tests/integration/targets/vyos_interface/tests/cli/basic.yaml
new file mode 100644
index 0000000..22957e1
--- /dev/null
+++ b/tests/integration/targets/vyos_interface/tests/cli/basic.yaml
@@ -0,0 +1,220 @@
+---
+- debug: msg="START cli/basic.yaml on connection={{ ansible_connection }}"
+
+- name: Run vyos lsmod command
+ vyos.vyos.vyos_command:
+ commands:
+ - lsmod
+ register: lsmod_out
+
+- name: Set up - delete interface
+ vyos.vyos.vyos_interface:
+ name: eth1
+ state: absent
+
+- name: Set up - Create interface
+ vyos.vyos.vyos_interface:
+ name: eth1
+ state: present
+ description: test-interface
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces ethernet eth1" in result.commands'
+ - '"set interfaces ethernet eth1 description ''test-interface''" in result.commands'
+
+- name: Configure interface params
+ vyos.vyos.vyos_interface:
+ name: eth1
+ state: present
+ description: test-interface-1
+ speed: 100
+ duplex: half
+ mtu: 256
+ when: "'virtio_net' not in lsmod_out.stdout[0]"
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces ethernet eth1 description ''test-interface-1''" in result.commands'
+ - '"set interfaces ethernet eth1 speed 100" in result.commands'
+ - '"set interfaces ethernet eth1 duplex half" in result.commands'
+ - '"set interfaces ethernet eth1 mtu 256" in result.commands'
+ when: "'virtio_net' not in lsmod_out.stdout[0]"
+
+- name: Configure interface params (idempotent)
+ vyos.vyos.vyos_interface:
+ name: eth1
+ state: present
+ description: test-interface-1
+ speed: 100
+ duplex: half
+ mtu: 256
+ register: result
+ when: "'virtio_net' not in lsmod_out.stdout[0]"
+
+- assert:
+ that:
+ - 'result.changed == false'
+ when: "'virtio' not in lsmod_out.stdout[0]"
+
+- name: Change interface params
+ vyos.vyos.vyos_interface:
+ name: eth1
+ state: present
+ description: test-interface-2
+ speed: 1000
+ duplex: full
+ mtu: 512
+ register: result
+ when: "'virtio_net' not in lsmod_out.stdout[0]"
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces ethernet eth1 description ''test-interface-2''" in result.commands'
+ - '"set interfaces ethernet eth1 speed 1000" in result.commands'
+ - '"set interfaces ethernet eth1 duplex full" in result.commands'
+ - '"set interfaces ethernet eth1 mtu 512" in result.commands'
+ when: "'virtio_net' not in lsmod_out.stdout[0]"
+
+- name: Disable interface
+ vyos.vyos.vyos_interface:
+ name: eth1
+ enabled: False
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces ethernet eth1 disable" in result.commands'
+
+- name: Enable interface
+ vyos.vyos.vyos_interface:
+ name: eth1
+ enabled: True
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete interfaces ethernet eth1 disable" in result.commands'
+
+- name: Delete interface
+ vyos.vyos.vyos_interface:
+ name: eth1
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete interfaces ethernet eth1" in result.commands'
+
+- name: Delete interface (idempotent)
+ vyos.vyos.vyos_interface:
+ name: eth1
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Aggregate setup- delete interface
+ vyos.vyos.vyos_interface:
+ name: eth2
+ state: absent
+ register: result
+
+- name: Set interface on aggregate
+ vyos.vyos.vyos_interface:
+ aggregate:
+ - { name: eth1, description: test-interface-1, speed: 100, duplex: half, mtu: 512}
+ - { name: eth2, description: test-interface-2, speed: 1000, duplex: full, mtu: 256}
+ register: result
+ when: "'virtio_net' not in lsmod_out.stdout[0]"
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces ethernet eth1 description ''test-interface-1''" in result.commands'
+ - '"set interfaces ethernet eth1 speed 100" in result.commands'
+ - '"set interfaces ethernet eth1 duplex half" in result.commands'
+ - '"set interfaces ethernet eth1 mtu 512" in result.commands'
+ - '"set interfaces ethernet eth2 description ''test-interface-2''" in result.commands'
+ - '"set interfaces ethernet eth2 speed 1000" in result.commands'
+ - '"set interfaces ethernet eth2 duplex full" in result.commands'
+ - '"set interfaces ethernet eth2 mtu 256" in result.commands'
+ when: "'virtio_net' not in lsmod_out.stdout[0]"
+
+- name: Set interface on aggregate (idempotent)
+ vyos.vyos.vyos_interface:
+ aggregate:
+ - { name: eth1, description: test-interface-1, speed: 100, duplex: half, mtu: 512}
+ - { name: eth2, description: test-interface-2, speed: 1000, duplex: full, mtu: 256}
+ register: result
+ when: "'virtio_net' not in lsmod_out.stdout[0]"
+
+- assert:
+ that:
+ - 'result.changed == false'
+ when: "'virtio_net' not in lsmod_out.stdout[0]"
+
+- name: Disable interface on aggregate
+ vyos.vyos.vyos_interface:
+ aggregate:
+ - name: eth1
+ - name: eth2
+ description: test-interface
+ enabled: False
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces ethernet eth1 disable" in result.commands'
+ - '"set interfaces ethernet eth2 disable" in result.commands'
+
+- name: Enable interface on aggregate
+ vyos.vyos.vyos_interface:
+ aggregate:
+ - name: eth1
+ - name: eth2
+ enabled: True
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete interfaces ethernet eth1 disable" in result.commands'
+ - '"delete interfaces ethernet eth2 disable" in result.commands'
+
+- name: Delete interface aggregate
+ vyos.vyos.vyos_interface:
+ aggregate:
+ - name: eth1
+ - name: eth2
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete interfaces ethernet eth1" in result.commands'
+ - '"delete interfaces ethernet eth2" in result.commands'
+
+- name: Delete interface aggregate (idempotent)
+ vyos.vyos.vyos_interface:
+ aggregate:
+ - name: eth1
+ - name: eth2
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
diff --git a/tests/integration/targets/vyos_interface/tests/cli/intent.yaml b/tests/integration/targets/vyos_interface/tests/cli/intent.yaml
new file mode 100644
index 0000000..946728d
--- /dev/null
+++ b/tests/integration/targets/vyos_interface/tests/cli/intent.yaml
@@ -0,0 +1,157 @@
+---
+- debug: msg="START cli/intent.yaml on connection={{ ansible_connection }}" #"
+
+# To be able to run the lldp test we need to have a neighbor configured to talk to
+# In DCI & Zuul we (currently) only spin up a single network VM, so we can't configure a neighbor
+# In the future when we have multi-network-nodes running we can run these tests again
+# https://github.com/ansible/ansible/issues/39667
+
+- name: Detect if we have existing lldp neighbors configured
+ vyos.vyos.vyos_command:
+ commands:
+ - show lldp neighbors detail
+ register: neighbors_out
+
+- name: Should we run lldp tests?
+ set_fact:
+ run_lldp_tests: "'PortDescr: eth0' in neighbors_out.stdout[0]"
+
+- name: Enable LLDP service
+ vyos.vyos.vyos_lldp:
+ state: present
+ when: run_lldp_tests
+
+- name: Create LLDP configuration
+ vyos.vyos.vyos_lldp_interface:
+ name: eth1
+ state: present
+ when: run_lldp_tests
+
+- name: Setup (interface is up)
+ vyos.vyos.vyos_interface:
+ name: eth1
+ enabled: True
+ state: present
+ register: result
+
+- name: Check intent arguments
+ vyos.vyos.vyos_interface:
+ name: eth1
+ state: up
+ register: result
+
+- assert:
+ that:
+ - "result.failed == false"
+
+- name: Check lldp neighbors intent arguments
+ vyos.vyos.vyos_interface:
+ name: eth0
+ neighbors:
+ - port: eth0
+ when: run_lldp_tests
+ register: result
+
+- assert:
+ that:
+ - "result.failed == false"
+ when: run_lldp_tests
+
+- name: Check intent arguments (failed condition)
+ vyos.vyos.vyos_interface:
+ name: eth1
+ state: down
+ ignore_errors: yes
+ register: result
+
+- assert:
+ that:
+ - "result.failed == true"
+ - "'state eq(down)' in result.failed_conditions"
+
+- name: Check lldp neighbors intent arguments (failed)
+ vyos.vyos.vyos_interface:
+ name: eth0
+ neighbors:
+ - port: dummy_port
+ host: dummy_host
+ ignore_errors: yes
+ when: run_lldp_tests
+ register: result
+
+- assert:
+ that:
+ - "result.failed == true"
+ - "'host dummy_host' in result.failed_conditions"
+ - "'port dummy_port' in result.failed_conditions"
+ when: run_lldp_tests
+
+- name: Config + intent
+ vyos.vyos.vyos_interface:
+ name: eth1
+ enabled: False
+ state: down
+ register: result
+
+- assert:
+ that:
+ - "result.failed == false"
+
+- name: Config + intent (fail)
+ vyos.vyos.vyos_interface:
+ name: eth1
+ enabled: False
+ state: up
+ ignore_errors: yes
+ register: result
+
+- assert:
+ that:
+ - "result.failed == true"
+ - "'state eq(up)' in result.failed_conditions"
+
+- name: Aggregate config + intent (pass)
+ vyos.vyos.vyos_interface:
+ aggregate:
+ - name: eth1
+ enabled: True
+ state: up
+ ignore_errors: yes
+ register: result
+
+- assert:
+ that:
+ - "result.failed == false"
+
+- name: Check lldp neighbors intent aggregate arguments
+ vyos.vyos.vyos_interface:
+ aggregate:
+ - name: eth0
+ neighbors:
+ - port: eth0
+ when: run_lldp_tests
+ register: result
+
+- assert:
+ that:
+ - "result.failed == false"
+ when: run_lldp_tests
+
+- name: Check lldp neighbors intent aggregate arguments (failed)
+ vyos.vyos.vyos_interface:
+ aggregate:
+ - name: eth0
+ neighbors:
+ - port: eth0
+ - port: dummy_port
+ host: dummy_host
+ ignore_errors: yes
+ when: run_lldp_tests
+ register: result
+
+- assert:
+ that:
+ - "result.failed == true"
+ - "'host dummy_host' in result.failed_conditions"
+ - "'port dummy_port' in result.failed_conditions"
+ when: run_lldp_tests
diff --git a/tests/integration/targets/vyos_interface/tests/cli/net_interface.yaml b/tests/integration/targets/vyos_interface/tests/cli/net_interface.yaml
new file mode 100644
index 0000000..4bdb6ec
--- /dev/null
+++ b/tests/integration/targets/vyos_interface/tests/cli/net_interface.yaml
@@ -0,0 +1,56 @@
+---
+- debug: msg="START vyos cli/net_interface.yaml on connection={{ ansible_connection }}"
+
+# Add minimal testcase to check args are passed correctly to
+# implementation module and module run is successful.
+
+- name: Run vyos lsmod command
+ vyos.vyos.vyos_command:
+ commands:
+ - lsmod
+ register: lsmod_out
+
+- name: Set up - delete interface
+ net_interface:
+ name: eth1
+ state: absent
+
+- name: Create interface using platform agnostic module
+ net_interface:
+ name: eth1
+ state: present
+ description: test-interface
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces ethernet eth1" in result.commands'
+ - '"set interfaces ethernet eth1 description ''test-interface''" in result.commands'
+
+- name: Configure interface params using platform agnostic module
+ net_interface:
+ name: eth1
+ state: present
+ description: test-interface-1
+ speed: 100
+ duplex: half
+ mtu: 256
+ when: "'virtio_net' not in lsmod_out.stdout[0]"
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces ethernet eth1 description ''test-interface-1''" in result.commands'
+ - '"set interfaces ethernet eth1 speed 100" in result.commands'
+ - '"set interfaces ethernet eth1 duplex half" in result.commands'
+ - '"set interfaces ethernet eth1 mtu 256" in result.commands'
+ when: "'virtio_net' not in lsmod_out.stdout[0]"
+
+- name: teardown - delete interface
+ net_interface:
+ name: eth1
+ state: absent
+
+- debug: msg="END vyos cli/net_interface.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_interfaces/defaults/main.yaml b/tests/integration/targets/vyos_interfaces/defaults/main.yaml
new file mode 100644
index 0000000..164afea
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "[^_].*"
+test_items: []
diff --git a/tests/integration/targets/vyos_interfaces/meta/main.yaml b/tests/integration/targets/vyos_interfaces/meta/main.yaml
new file mode 100644
index 0000000..e380a13
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/meta/main.yaml
@@ -0,0 +1,2 @@
+dependencies:
+ - prepare_vyos_tests \ No newline at end of file
diff --git a/tests/integration/targets/vyos_interfaces/tasks/cli.yaml b/tests/integration/targets/vyos_interfaces/tasks/cli.yaml
new file mode 100644
index 0000000..655e51e
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/tasks/cli.yaml
@@ -0,0 +1,19 @@
+---
+- name: Collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ use_regex: true
+ register: test_cases
+ delegate_to: localhost
+
+- name: Set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: Run test case (connection=network_cli)
+ include: "{{ test_case_to_run }}"
+ vars:
+ ansible_connection: network_cli
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_interfaces/tasks/main.yaml b/tests/integration/targets/vyos_interfaces/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/_populate.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/_populate.yaml
new file mode 100644
index 0000000..0a44fa4
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/tests/cli/_populate.yaml
@@ -0,0 +1,17 @@
+---
+- name: Setup
+ network.cli.cli_config:
+ config: "{{ lines }}"
+ vars:
+ lines: |
+ set interfaces ethernet "{{ intf }}" description 'Configured by Ansible'
+ set interfaces ethernet "{{ intf }}" speed 'auto'
+ set interfaces ethernet "{{ intf }}" duplex 'auto'
+ set interfaces ethernet "{{ intf }}" mtu '1500'
+ set interfaces ethernet "{{ intf }}" vif 200
+ set interfaces ethernet "{{ intf }}" vif 200 description 'VIF - 200'
+ loop:
+ - eth1
+ - eth2
+ loop_control:
+ loop_var: intf \ No newline at end of file
diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml
new file mode 100644
index 0000000..ce4723d
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml
@@ -0,0 +1,17 @@
+---
+- name: Remove Config
+ network.cli.cli_config:
+ config: "{{ lines }}"
+ vars:
+ lines: |
+ delete interfaces ethernet "{{ intf }}" description
+ delete interfaces ethernet "{{ intf }}" speed
+ delete interfaces ethernet "{{ intf }}" duplex
+ delete interfaces ethernet "{{ intf }}" mtu
+ delete interfaces ethernet "{{ intf }}" disable
+ delete interfaces ethernet "{{ intf }}" vif
+ loop:
+ - eth1
+ - eth2
+ loop_control:
+ loop_var: intf \ No newline at end of file
diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/deleted.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/deleted.yaml
new file mode 100644
index 0000000..b48f916
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/tests/cli/deleted.yaml
@@ -0,0 +1,46 @@
+---
+- debug:
+ msg: "Start vyos_interfaces deleted integration tests ansible_connection={{ ansible_connection }}"
+
+- include_tasks: _populate.yaml
+
+- block:
+ - name: Delete attributes of given interfaces
+ vyos.vyos.vyos_interfaces: &deleted
+ config:
+ - name: eth1
+ - name: eth2
+ state: deleted
+ register: result
+
+ - name: Assert that the before dicts were correctly generated
+ assert:
+ that:
+ - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that the correct set of commands were generated
+ assert:
+ that:
+ - "{{ deleted['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that the after dicts were correctly generated
+ assert:
+ that:
+ - "{{ deleted['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Delete attributes of given interfaces (IDEMPOTENT)
+ vyos.vyos.vyos_interfaces: *deleted
+ register: result
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - "result.changed == false"
+
+ - name: Assert that the before dicts were correctly generated
+ assert:
+ that:
+ - "{{ deleted['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/merged.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/merged.yaml
new file mode 100644
index 0000000..89ed893
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/tests/cli/merged.yaml
@@ -0,0 +1,59 @@
+---
+- debug:
+ msg: "START vyos_interfaces merged integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- block:
+ - name: Merge the provided configuration with the exisiting running configuration
+ vyos.vyos.vyos_interfaces: &merged
+ config:
+ - name: eth1
+ description: "Configured by Ansible - Interface 1"
+ mtu: 1500
+ speed: auto
+ duplex: auto
+ vifs:
+ - vlan_id: 100
+ description: "Eth1 - VIF 100"
+ mtu: 400
+
+ - vlan_id: 101
+ description: "Eth1 - VIF 101"
+
+ - name: eth2
+ description: "Configured by Ansible - Interface 2 (ADMIN DOWN)"
+ mtu: 600
+ enabled: false
+ state: merged
+ register: result
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that: "{{ merged['before'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ merged['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that after dicts was correctly generated
+ assert:
+ that:
+ - "{{ merged['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Merge the provided configuration with the existing running configuration (IDEMPOTENT)
+ vyos.vyos.vyos_interfaces: *merged
+ register: result
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - "result['changed'] == false"
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that:
+ - "{{ merged['after'] | symmetric_difference(result['before']) |length == 0 }}"
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/overridden.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/overridden.yaml
new file mode 100644
index 0000000..c9eb1b7
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/tests/cli/overridden.yaml
@@ -0,0 +1,52 @@
+---
+- debug:
+ msg: "START vyos_interfaces overridden integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+ - name: Overrides all device configuration with provided configuration
+ vyos.vyos.vyos_interfaces: &overridden
+ config:
+ - name: eth0
+ speed: "auto"
+ duplex: "auto"
+ - name: eth2
+ description: "Overridden by Ansible"
+ mtu: 1200
+ state: overridden
+ register: result
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that:
+ - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that correct commands were generated
+ assert:
+ that:
+ - "{{ overridden['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that after dicts were correctly generated
+ assert:
+ that:
+ - "{{ overridden['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Overrides all device configuration with provided configurations (IDEMPOTENT)
+ vyos.vyos.vyos_interfaces: *overridden
+ register: result
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - "result['changed'] == false"
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that:
+ - "{{ overridden['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/replaced.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/replaced.yaml
new file mode 100644
index 0000000..1211f63
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/tests/cli/replaced.yaml
@@ -0,0 +1,55 @@
+---
+- debug:
+ msg: "START vyos_interfaces replaced integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+ - name: Replace device configurations of listed interfaces with provided configurations
+ vyos.vyos.vyos_interfaces: &replaced
+ config:
+ - name: eth1
+ description: "Replaced by Ansible"
+ vifs:
+ - vlan_id: 100
+ description: "VIF 100 - Replaced by Ansible"
+
+ - name: eth2
+ mtu: 1400
+ description: "Replaced by Ansible"
+ state: replaced
+ register: result
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ replaced['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that before dicts are correctly generated
+ assert:
+ that:
+ - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that after dict is correctly generated
+ assert:
+ that:
+ - "{{ replaced['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Replace device configurations of listed interfaces with provided configurarions (IDEMPOTENT)
+ vyos.vyos.vyos_interfaces: *replaced
+ register: result
+
+ - name: Assert that task was idempotent
+ assert:
+ that:
+ - "result['changed'] == false"
+
+ - name: Assert that before dict is correctly generated
+ assert:
+ that:
+ - "{{ replaced['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml \ No newline at end of file
diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/rtt.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/rtt.yaml
new file mode 100644
index 0000000..3ec4d3d
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/tests/cli/rtt.yaml
@@ -0,0 +1,78 @@
+---
+- debug:
+ msg: "START vyos_interfaces round trip integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- block:
+ - name: Apply the provided configuration (base config)
+ vyos.vyos.vyos_interfaces:
+ config:
+ - name: eth0
+ enabled: true
+ duplex: "auto"
+ speed: "auto"
+
+ - name: eth1
+ description: "Interface - 1"
+ mtu: 1500
+ vifs:
+ - vlan_id: 100
+ description: "Eth1 - VIF 100"
+ mtu: 200
+
+ - vlan_id: 101
+ enabled: false
+
+ - name: eth2
+ description: "Interface - 2"
+ enabled: true
+ mtu: 900
+ state: merged
+ register: base_config
+
+ - name: Gather interfaces facts
+ vyos.vyos.vyos_facts:
+ gather_subset:
+ - default
+ gather_network_resources:
+ - interfaces
+
+ - name: Apply the provided configuration (config to be reverted)
+ vyos.vyos.vyos_interfaces:
+ config:
+ - name: eth1
+ description: "Interface 1 - Description (WILL BE REVERTED)"
+ mtu: 1200
+ vifs:
+ - vlan_id: 100
+ description: "Eth1 - VIF 100 (WILL BE REVERTED)"
+ mtu: 400
+
+ - vlan_id: 101
+ description: "Eth1 - VIF 101 (WILL BE REMOVED)"
+ enabled: true
+
+ - name: eth2
+ description: "Interface 2 (ADMIN DOWN) (WILL BE REVERTED)"
+ mtu: 600
+ enabled: false
+ state: merged
+ register: result
+
+ - name: Assert that changes were applied
+ assert:
+ that: "{{ round_trip['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Revert back to base config using facts round trip
+ vyos.vyos.vyos_interfaces:
+ config: "{{ ansible_facts['network_resources']['interfaces'] }}"
+ state: replaced
+ register: revert
+
+ - name: Assert that config was reverted
+ assert:
+ that: "{{ base_config['after'] | symmetric_difference(revert['after']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_interfaces/vars/main.yaml b/tests/integration/targets/vyos_interfaces/vars/main.yaml
new file mode 100644
index 0000000..b973752
--- /dev/null
+++ b/tests/integration/targets/vyos_interfaces/vars/main.yaml
@@ -0,0 +1,209 @@
+---
+merged:
+ before:
+ - name: "eth0"
+ enabled: true
+ speed: "auto"
+ duplex: "auto"
+
+ - name: "eth1"
+ enabled: true
+
+ - name: "eth2"
+ enabled: true
+
+ commands:
+ - "set interfaces ethernet eth1 description 'Configured by Ansible - Interface 1'"
+ - "set interfaces ethernet eth1 mtu '1500'"
+ - "set interfaces ethernet eth1 duplex 'auto'"
+ - "set interfaces ethernet eth1 speed 'auto'"
+ - "set interfaces ethernet eth1 vif 100 description 'Eth1 - VIF 100'"
+ - "set interfaces ethernet eth1 vif 100 mtu '400'"
+ - "set interfaces ethernet eth1 vif 101 description 'Eth1 - VIF 101'"
+ - "set interfaces ethernet eth2 description 'Configured by Ansible - Interface 2 (ADMIN DOWN)'"
+ - "set interfaces ethernet eth2 mtu '600'"
+ - "set interfaces ethernet eth2 disable"
+
+ after:
+ - name: "eth0"
+ enabled: true
+ duplex: "auto"
+ speed: "auto"
+
+ - name: "eth1"
+ description: "Configured by Ansible - Interface 1"
+ mtu: 1500
+ speed: "auto"
+ duplex: "auto"
+ enabled: true
+ vifs:
+ - vlan_id: 100
+ description: "Eth1 - VIF 100"
+ mtu: 400
+ enabled: true
+
+ - vlan_id: 101
+ description: "Eth1 - VIF 101"
+ enabled: true
+
+ - name: "eth2"
+ description: "Configured by Ansible - Interface 2 (ADMIN DOWN)"
+ mtu: 600
+ enabled: false
+
+populate:
+ - name: "eth1"
+ enabled: true
+ speed: "auto"
+ duplex: "auto"
+ description: "Configured by Ansible"
+ mtu: 1500
+ vifs:
+ - vlan_id: 200
+ enabled: true
+ description: "VIF - 200"
+
+ - name: "eth2"
+ enabled: true
+ speed: "auto"
+ duplex: "auto"
+ description: "Configured by Ansible"
+ mtu: 1500
+ vifs:
+ - vlan_id: 200
+ enabled: true
+ description: "VIF - 200"
+
+ - name: "eth0"
+ enabled: true
+ duplex: "auto"
+ speed: "auto"
+
+replaced:
+ commands:
+ - "delete interfaces ethernet eth1 mtu"
+ - "delete interfaces ethernet eth1 speed"
+ - "delete interfaces ethernet eth1 duplex"
+ - "delete interfaces ethernet eth1 vif 200 description"
+ - "set interfaces ethernet eth1 description 'Replaced by Ansible'"
+ - "set interfaces ethernet eth1 vif 100 description 'VIF 100 - Replaced by Ansible'"
+ - "delete interfaces ethernet eth2 speed"
+ - "delete interfaces ethernet eth2 duplex"
+ - "delete interfaces ethernet eth2 vif 200 description"
+ - "set interfaces ethernet eth2 description 'Replaced by Ansible'"
+ - "set interfaces ethernet eth2 mtu '1400'"
+
+ after:
+ - name: "eth1"
+ description: "Replaced by Ansible"
+ enabled: true
+ vifs:
+ - vlan_id: 100
+ enabled: true
+ description: "VIF 100 - Replaced by Ansible"
+
+ - vlan_id: 200
+ enabled: true
+
+ - name: "eth2"
+ mtu: 1400
+ description: "Replaced by Ansible"
+ enabled: true
+ vifs:
+ - vlan_id: 200
+ enabled: true
+
+ - name: "eth0"
+ enabled: true
+ duplex: "auto"
+ speed: "auto"
+
+overridden:
+ commands:
+ - "delete interfaces ethernet eth1 description"
+ - "delete interfaces ethernet eth1 speed"
+ - "delete interfaces ethernet eth1 duplex"
+ - "delete interfaces ethernet eth1 mtu"
+ - "delete interfaces ethernet eth1 vif 200 description"
+ - "delete interfaces ethernet eth2 speed"
+ - "delete interfaces ethernet eth2 duplex"
+ - "delete interfaces ethernet eth2 vif 200 description"
+ - "set interfaces ethernet eth2 description 'Overridden by Ansible'"
+ - "set interfaces ethernet eth2 mtu '1200'"
+
+ after:
+ - name: "eth0"
+ enabled: true
+ speed: "auto"
+ duplex: "auto"
+
+ - name: "eth1"
+ enabled: true
+ vifs:
+ - vlan_id: 200
+ enabled: true
+
+ - name: "eth2"
+ enabled: true
+ description: "Overridden by Ansible"
+ mtu: 1200
+ vifs:
+ - vlan_id: 200
+ enabled: true
+
+deleted:
+ commands:
+ - "delete interfaces ethernet eth1 description"
+ - "delete interfaces ethernet eth1 speed"
+ - "delete interfaces ethernet eth1 duplex"
+ - "delete interfaces ethernet eth1 mtu"
+ - "delete interfaces ethernet eth1 vif 200 description"
+ - "delete interfaces ethernet eth2 description"
+ - "delete interfaces ethernet eth2 speed"
+ - "delete interfaces ethernet eth2 duplex"
+ - "delete interfaces ethernet eth2 mtu"
+ - "delete interfaces ethernet eth2 vif 200 description"
+
+ after:
+ - name: "eth0"
+ enabled: true
+ speed: "auto"
+ duplex: "auto"
+
+ - name: "eth1"
+ enabled: true
+ vifs:
+ - vlan_id: 200
+ enabled: true
+
+ - name: "eth2"
+ enabled: true
+ vifs:
+ - vlan_id: 200
+ enabled: true
+
+round_trip:
+ after:
+ - name: "eth0"
+ enabled: true
+ speed: "auto"
+ duplex: "auto"
+
+ - name: "eth1"
+ description: "Interface 1 - Description (WILL BE REVERTED)"
+ enabled: true
+ mtu: 1200
+ vifs:
+ - vlan_id: 100
+ description: "Eth1 - VIF 100 (WILL BE REVERTED)"
+ mtu: 400
+ enabled: true
+
+ - vlan_id: 101
+ description: "Eth1 - VIF 101 (WILL BE REMOVED)"
+ enabled: true
+
+ - name: "eth2"
+ description: "Interface 2 (ADMIN DOWN) (WILL BE REVERTED)"
+ mtu: 600
+ enabled: false
diff --git a/tests/integration/targets/vyos_l3_interface/aliases b/tests/integration/targets/vyos_l3_interface/aliases
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interface/aliases
diff --git a/tests/integration/targets/vyos_l3_interface/defaults/main.yaml b/tests/integration/targets/vyos_l3_interface/defaults/main.yaml
new file mode 100644
index 0000000..9ef5ba5
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interface/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "*"
+test_items: []
diff --git a/tests/integration/targets/vyos_l3_interface/tasks/cli.yaml b/tests/integration/targets/vyos_l3_interface/tasks/cli.yaml
new file mode 100644
index 0000000..890d3ac
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interface/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+ include: "{{ test_case_to_run }} ansible_connection=local"
+ with_first_found: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_l3_interface/tasks/main.yaml b/tests/integration/targets/vyos_l3_interface/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interface/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_l3_interface/tests/cli/basic.yaml b/tests/integration/targets/vyos_l3_interface/tests/cli/basic.yaml
new file mode 100644
index 0000000..9ad6955
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interface/tests/cli/basic.yaml
@@ -0,0 +1,203 @@
+---
+- debug: msg="START cli/basic.yaml on connection={{ ansible_connection }}"
+
+- name: Remove IP address
+ vyos.vyos.vyos_l3_interface:
+ name: eth1
+ state: absent
+
+- name: Remove IP address
+ vyos.vyos.vyos_l3_interface:
+ name: eth2
+ state: absent
+
+- name: Set IPv4 address
+ vyos.vyos.vyos_l3_interface:
+ name: eth1
+ ipv4: 192.168.2.10/24
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces ethernet eth1 address 192.168.2.10/24" in result.commands'
+
+- name: Set IPv4 address (idempotent)
+ vyos.vyos.vyos_l3_interface:
+ name: eth1
+ ipv4: 192.168.2.10/24
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Set IPv6 address
+ vyos.vyos.vyos_l3_interface:
+ name: eth1
+ ipv6: fd5d:12c9:2201:1::1/64
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces ethernet eth1 address fd5d:12c9:2201:1::1/64" in result.commands'
+
+- name: Set IPv6 address (idempotent)
+ vyos.vyos.vyos_l3_interface:
+ name: eth1
+ ipv6: fd5d:12c9:2201:1::1/64
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Remove all IP addresses
+ vyos.vyos.vyos_l3_interface:
+ name: eth1
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete interfaces ethernet eth1 address" in result.commands'
+
+- name: Remove all IP addresses again (idempotent)
+ vyos.vyos.vyos_l3_interface:
+ name: eth1
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Set IPv4 and IPv6 address
+ vyos.vyos.vyos_l3_interface:
+ name: eth1
+ ipv4: 192.168.2.10/24
+ ipv6: fd5d:12c9:2201:1::1/64
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces ethernet eth1 address 192.168.2.10/24" in result.commands'
+ - '"set interfaces ethernet eth1 address fd5d:12c9:2201:1::1/64" in result.commands'
+
+- name: Set IPv4 and IPv6 address again (idempotent)
+ vyos.vyos.vyos_l3_interface:
+ name: eth1
+ ipv4: 192.168.2.10/24
+ ipv6: fd5d:12c9:2201:1::1/64
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Remove IPv4 address
+ vyos.vyos.vyos_l3_interface:
+ name: eth1
+ ipv4: 192.168.2.10/24
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete interfaces ethernet eth1 address 192.168.2.10/24" in result.commands'
+
+- name: Remove IPv4 address again (idempotent)
+ vyos.vyos.vyos_l3_interface:
+ name: eth1
+ ipv4: 192.168.2.10/24
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Remove IPv6 address
+ vyos.vyos.vyos_l3_interface:
+ name: eth1
+ ipv6: fd5d:12c9:2201:1::1/64
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete interfaces ethernet eth1 address fd5d:12c9:2201:1::1/64" in result.commands'
+
+- name: Remove IPv6 address again (idempotent)
+ vyos.vyos.vyos_l3_interface:
+ name: eth1
+ ipv6: fd5d:12c9:2201:1::1/64
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Set IP addresses on aggregate
+ vyos.vyos.vyos_l3_interface:
+ aggregate:
+ - { name: eth1, ipv4: 192.168.2.10/24 }
+ - { name: eth2, ipv4: 192.168.3.10/24, ipv6: "fd5d:12c9:2201:1::1/64" }
+ - { name: eth2, ipv4: 192.168.4.10/24 }
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces ethernet eth1 address 192.168.2.10/24" in result.commands'
+ - '"set interfaces ethernet eth2 address 192.168.3.10/24" in result.commands'
+ - '"set interfaces ethernet eth2 address fd5d:12c9:2201:1::1/64" in result.commands'
+ - '"set interfaces ethernet eth2 address 192.168.4.10/24" in result.commands'
+
+- name: Set IP addresses on aggregate (idempotent)
+ vyos.vyos.vyos_l3_interface:
+ aggregate:
+ - { name: eth1, ipv4: 192.168.2.10/24 }
+ - { name: eth2, ipv4: 192.168.3.10/24, ipv6: "fd5d:12c9:2201:1::1/64" }
+ - { name: eth2, ipv4: 192.168.4.10/24 }
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Remove IP addresses on aggregate
+ vyos.vyos.vyos_l3_interface:
+ aggregate:
+ - { name: eth1, ipv4: 192.168.2.10/24 }
+ - { name: eth2, ipv4: 192.168.3.10/24, ipv6: "fd5d:12c9:2201:1::1/64" }
+ - { name: eth2, ipv4: 192.168.4.10/24 }
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete interfaces ethernet eth1 address 192.168.2.10/24" in result.commands'
+ - '"delete interfaces ethernet eth2 address 192.168.3.10/24" in result.commands'
+ - '"delete interfaces ethernet eth2 address fd5d:12c9:2201:1::1/64" in result.commands'
+ - '"delete interfaces ethernet eth2 address 192.168.4.10/24" in result.commands'
+
+- name: Remove IP addresses on aggregate (idempotent)
+ vyos.vyos.vyos_l3_interface:
+ aggregate:
+ - { name: eth1, ipv4: 192.168.2.10/24 }
+ - { name: eth2, ipv4: 192.168.3.10/24, ipv6: "fd5d:12c9:2201:1::1/64" }
+ - { name: eth2, ipv4: 192.168.4.10/24 }
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
diff --git a/tests/integration/targets/vyos_l3_interfaces/defaults/main.yaml b/tests/integration/targets/vyos_l3_interfaces/defaults/main.yaml
new file mode 100644
index 0000000..164afea
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interfaces/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "[^_].*"
+test_items: []
diff --git a/tests/integration/targets/vyos_l3_interfaces/meta/main.yml b/tests/integration/targets/vyos_l3_interfaces/meta/main.yml
new file mode 100644
index 0000000..e380a13
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interfaces/meta/main.yml
@@ -0,0 +1,2 @@
+dependencies:
+ - prepare_vyos_tests \ No newline at end of file
diff --git a/tests/integration/targets/vyos_l3_interfaces/tasks/cli.yaml b/tests/integration/targets/vyos_l3_interfaces/tasks/cli.yaml
new file mode 100644
index 0000000..337e341
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interfaces/tasks/cli.yaml
@@ -0,0 +1,20 @@
+---
+- name: Collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ use_regex: true
+ register: test_cases
+ delegate_to: localhost
+
+- name: Set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+ delegate_to: localhost
+
+- name: Run test case (connection=network_cli)
+ include: "{{ test_case_to_run }}"
+ vars:
+ ansible_connection: network_cli
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_l3_interfaces/tasks/main.yaml b/tests/integration/targets/vyos_l3_interfaces/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interfaces/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_l3_interfaces/tests/cli/_populate.yaml b/tests/integration/targets/vyos_l3_interfaces/tests/cli/_populate.yaml
new file mode 100644
index 0000000..fc0bbb2
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/_populate.yaml
@@ -0,0 +1,11 @@
+---
+- name: Setup
+ network.cli.cli_config:
+ config: "{{ lines }}"
+ vars:
+ lines: |
+ set interfaces ethernet eth1 address '192.0.2.14/24'
+ set interfaces ethernet eth2 address '192.0.2.10/24'
+ set interfaces ethernet eth2 address '192.0.2.11/24'
+ set interfaces ethernet eth2 address '2001:db8::10/32'
+ set interfaces ethernet eth2 address '2001:db8::12/32' \ No newline at end of file
diff --git a/tests/integration/targets/vyos_l3_interfaces/tests/cli/_remove_config.yaml b/tests/integration/targets/vyos_l3_interfaces/tests/cli/_remove_config.yaml
new file mode 100644
index 0000000..95b2b8c
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/_remove_config.yaml
@@ -0,0 +1,13 @@
+---
+- name: Remove Config
+ network.cli.cli_config:
+ config: "{{ lines }}"
+ vars:
+ lines: |
+ delete interfaces ethernet "{{ intf }}" address
+ delete interfaces ethernet "{{ intf }}" vif
+ loop:
+ - eth1
+ - eth2
+ loop_control:
+ loop_var: intf
diff --git a/tests/integration/targets/vyos_l3_interfaces/tests/cli/deleted.yaml b/tests/integration/targets/vyos_l3_interfaces/tests/cli/deleted.yaml
new file mode 100644
index 0000000..a40901c
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/deleted.yaml
@@ -0,0 +1,48 @@
+---
+- debug:
+ msg: "Start vyos_interfaces deleted integration tests ansible_connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- block:
+ - include_tasks: _populate.yaml
+
+ - name: Delete attributes of given interfaces
+ vyos.vyos.vyos_l3_interfaces: &deleted
+ config:
+ - name: eth1
+ - name: eth2
+ state: deleted
+ register: result
+
+ - name: Assert that the before dicts were correctly generated
+ assert:
+ that:
+ - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that the correct set of commands were generated
+ assert:
+ that:
+ - "{{ deleted['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that the after dicts were correctly generated
+ assert:
+ that:
+ - "{{ deleted['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Delete attributes of given interfaces (IDEMPOTENT)
+ vyos.vyos.vyos_l3_interfaces: *deleted
+ register: result
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - "result.changed == false"
+
+ - name: Assert that the before dicts were correctly generated
+ assert:
+ that:
+ - "{{ deleted['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_l3_interfaces/tests/cli/merged.yaml b/tests/integration/targets/vyos_l3_interfaces/tests/cli/merged.yaml
new file mode 100644
index 0000000..64724ef
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/merged.yaml
@@ -0,0 +1,58 @@
+---
+- debug:
+ msg: "START vyos_l3_interfaces merged integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- block:
+ - name: Merge the provided configuration with the exisiting running configuration
+ vyos.vyos.vyos_l3_interfaces: &merged
+ config:
+ - name: eth1
+ ipv4:
+ - address: 192.0.2.10/24
+ ipv6:
+ - address: 2001:db8::10/32
+
+ - name: eth2
+ ipv4:
+ - address: 198.51.100.10/24
+ vifs:
+ - vlan_id: 101
+ ipv4:
+ - address: 198.51.100.130/25
+ ipv6:
+ - address: 2001:db8::20/32
+ state: merged
+ register: result
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that: "{{ merged['before'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ merged['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that after dicts was correctly generated
+ assert:
+ that:
+ - "{{ merged['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Merge the provided configuration with the existing running configuration (IDEMPOTENT)
+ vyos.vyos.vyos_l3_interfaces: *merged
+ register: result
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - "result['changed'] == false"
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that:
+ - "{{ merged['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_l3_interfaces/tests/cli/overridden.yaml b/tests/integration/targets/vyos_l3_interfaces/tests/cli/overridden.yaml
new file mode 100644
index 0000000..6a9b013
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/overridden.yaml
@@ -0,0 +1,52 @@
+---
+- debug:
+ msg: "START vyos_l3_interfaces merged integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- block:
+ - include_tasks: _populate.yaml
+
+ - name: Overrides all device configuration with provided configuration
+ vyos.vyos.vyos_l3_interfaces: &overridden
+ config:
+ - name: eth0
+ ipv4:
+ - address: dhcp
+ - name: eth1
+ ipv4:
+ - address: "192.0.2.15/24"
+ state: overridden
+ register: result
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that:
+ - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that correct commands were generated
+ assert:
+ that:
+ - "{{ overridden['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that after dicts were correctly generated
+ assert:
+ that:
+ - "{{ overridden['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Overrides all device configuration with provided configurations (IDEMPOTENT)
+ vyos.vyos.vyos_l3_interfaces: *overridden
+ register: result
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - "result['changed'] == false"
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that:
+ - "{{ overridden['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_l3_interfaces/tests/cli/replaced.yaml b/tests/integration/targets/vyos_l3_interfaces/tests/cli/replaced.yaml
new file mode 100644
index 0000000..4d44983
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/replaced.yaml
@@ -0,0 +1,52 @@
+---
+- debug:
+ msg: "START vyos_l3_interfaces replaced integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- block:
+ - include_tasks: _populate.yaml
+
+ - name: Replace device configurations of listed interfaces with provided configurations
+ vyos.vyos.vyos_l3_interfaces: &replaced
+ config:
+ - name: eth1
+ ipv4:
+ - address: 192.0.2.19/24
+ - name: eth2
+ ipv6:
+ - address: 2001:db8::11/32
+ state: replaced
+ register: result
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ replaced['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that before dicts are correctly generated
+ assert:
+ that:
+ - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that after dict is correctly generated
+ assert:
+ that:
+ - "{{ replaced['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Replace device configurations of listed interfaces with provided configurarions (IDEMPOTENT)
+ vyos.vyos.vyos_l3_interfaces: *replaced
+ register: result
+
+ - name: Assert that task was idempotent
+ assert:
+ that:
+ - "result['changed'] == false"
+
+ - name: Assert that before dict is correctly generated
+ assert:
+ that:
+ - "{{ replaced['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_l3_interfaces/vars/main.yaml b/tests/integration/targets/vyos_l3_interfaces/vars/main.yaml
new file mode 100644
index 0000000..f908d2c
--- /dev/null
+++ b/tests/integration/targets/vyos_l3_interfaces/vars/main.yaml
@@ -0,0 +1,114 @@
+---
+merged:
+ before:
+ - name: "eth0"
+ ipv4:
+ - address: "dhcp"
+
+ - name: "eth1"
+
+ - name: "eth2"
+
+ commands:
+ - "set interfaces ethernet eth1 address '192.0.2.10/24'"
+ - "set interfaces ethernet eth1 address '2001:db8::10/32'"
+ - "set interfaces ethernet eth2 address '198.51.100.10/24'"
+ - "set interfaces ethernet eth2 vif 101 address '198.51.100.130/25'"
+ - "set interfaces ethernet eth2 vif 101 address '2001:db8::20/32'"
+
+ after:
+ - name: "eth0"
+ ipv4:
+ - address: "dhcp"
+
+ - name: "eth1"
+ ipv4:
+ - address: "192.0.2.10/24"
+ ipv6:
+ - address: "2001:db8::10/32"
+
+ - name: "eth2"
+ ipv4:
+ - address: "198.51.100.10/24"
+ vifs:
+ - vlan_id: 101
+ ipv4:
+ - address: "198.51.100.130/25"
+ ipv6:
+ - address: "2001:db8::20/32"
+
+populate:
+ - name: "eth1"
+ ipv4:
+ - address: "192.0.2.14/24"
+
+ - name: "eth2"
+ ipv4:
+ - address: "192.0.2.10/24"
+ - address: "192.0.2.11/24"
+ ipv6:
+ - address: "2001:db8::10/32"
+ - address: "2001:db8::12/32"
+
+ - name: "eth0"
+ ipv4:
+ - address: "dhcp"
+
+replaced:
+ commands:
+ - "delete interfaces ethernet eth2 address '192.0.2.10/24'"
+ - "delete interfaces ethernet eth2 address '192.0.2.11/24'"
+ - "delete interfaces ethernet eth2 address '2001:db8::10/32'"
+ - "delete interfaces ethernet eth2 address '2001:db8::12/32'"
+ - "set interfaces ethernet eth2 address '2001:db8::11/32'"
+ - "delete interfaces ethernet eth1 address '192.0.2.14/24'"
+ - "set interfaces ethernet eth1 address '192.0.2.19/24'"
+
+ after:
+ - name: "eth2"
+ ipv6:
+ - address: "2001:db8::11/32"
+
+ - name: "eth1"
+ ipv4:
+ - address: "192.0.2.19/24"
+
+ - name: "eth0"
+ ipv4:
+ - address: "dhcp"
+
+overridden:
+ commands:
+ - delete interfaces ethernet eth1 address '192.0.2.14/24'
+ - set interfaces ethernet eth1 address '192.0.2.15/24'
+ - delete interfaces ethernet eth2 address '192.0.2.10/24'
+ - delete interfaces ethernet eth2 address '192.0.2.11/24'
+ - delete interfaces ethernet eth2 address '2001:db8::10/32'
+ - delete interfaces ethernet eth2 address '2001:db8::12/32'
+
+ after:
+ - name: "eth0"
+ ipv4:
+ - address: "dhcp"
+
+ - name: "eth1"
+ ipv4:
+ - address: "192.0.2.15/24"
+
+ - name: "eth2"
+
+deleted:
+ commands:
+ - delete interfaces ethernet eth1 address '192.0.2.14/24'
+ - delete interfaces ethernet eth2 address '192.0.2.10/24'
+ - delete interfaces ethernet eth2 address '192.0.2.11/24'
+ - delete interfaces ethernet eth2 address '2001:db8::10/32'
+ - delete interfaces ethernet eth2 address '2001:db8::12/32'
+ after:
+ - name: "eth0"
+ ipv4:
+ - address: "dhcp"
+
+ - name: "eth1"
+
+ - name: "eth2"
diff --git a/tests/integration/targets/vyos_lag_interfaces/defaults/main.yaml b/tests/integration/targets/vyos_lag_interfaces/defaults/main.yaml
new file mode 100644
index 0000000..164afea
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "[^_].*"
+test_items: []
diff --git a/tests/integration/targets/vyos_lag_interfaces/meta/main.yaml b/tests/integration/targets/vyos_lag_interfaces/meta/main.yaml
new file mode 100644
index 0000000..f88bce5
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/meta/main.yaml
@@ -0,0 +1,2 @@
+dependencies:
+ - prepare_vyos_tests
diff --git a/tests/integration/targets/vyos_lag_interfaces/tasks/cli.yaml b/tests/integration/targets/vyos_lag_interfaces/tasks/cli.yaml
new file mode 100644
index 0000000..655e51e
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/tasks/cli.yaml
@@ -0,0 +1,19 @@
+---
+- name: Collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ use_regex: true
+ register: test_cases
+ delegate_to: localhost
+
+- name: Set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: Run test case (connection=network_cli)
+ include: "{{ test_case_to_run }}"
+ vars:
+ ansible_connection: network_cli
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_lag_interfaces/tasks/main.yaml b/tests/integration/targets/vyos_lag_interfaces/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/_add_bond.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/_add_bond.yaml
new file mode 100644
index 0000000..c479f79
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/_add_bond.yaml
@@ -0,0 +1,8 @@
+---
+- name: Add Bond
+ network.cli.cli_config:
+ config: "{{ lines }}"
+ vars:
+ lines: |
+ set interfaces bonding bond0
+ set interfaces bonding bond1
diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/_populate.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/_populate.yaml
new file mode 100644
index 0000000..6139508
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/_populate.yaml
@@ -0,0 +1,16 @@
+---
+- name: Setup
+ network.cli.cli_config:
+ config: "{{ lines }}"
+ vars:
+ lines: |
+ set interfaces bonding bond0
+ set interfaces bonding bond0 hash-policy 'layer2'
+ set interfaces bonding bond0 mode 'active-backup'
+ set interfaces ethernet eth1 bond-group bond0
+ set interfaces bonding bond1
+ set interfaces bonding bond0 primary 'eth1'
+ set interfaces bonding bond1 hash-policy 'layer2+3'
+ set interfaces bonding bond1 mode 'active-backup'
+ set interfaces ethernet eth2 bond-group bond1
+ set interfaces bonding bond1 primary 'eth2'
diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/_remove_bond.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/_remove_bond.yaml
new file mode 100644
index 0000000..1d7ee69
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/_remove_bond.yaml
@@ -0,0 +1,8 @@
+---
+- name: Remove Bond
+ network.cli.cli_config:
+ config: "{{ lines }}"
+ vars:
+ lines: |
+ delete interfaces bonding bond0
+ delete interfaces bonding bond1
diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/_remove_config.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/_remove_config.yaml
new file mode 100644
index 0000000..c5d3657
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/_remove_config.yaml
@@ -0,0 +1,14 @@
+---
+- name: Remove Config
+ network.cli.cli_config:
+ config: "{{ lines }}"
+ vars:
+ lines: |
+ delete interfaces bonding bond0 hash-policy
+ delete interfaces ethernet eth1 bond-group bond0
+ delete interfaces bonding bond0 mode
+ delete interfaces bonding bond0 primary
+ delete interfaces bonding bond1 hash-policy
+ delete interfaces ethernet eth2 bond-group bond1
+ delete interfaces bonding bond1 mode
+ delete interfaces bonding bond1 primary
diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/deleted.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/deleted.yaml
new file mode 100644
index 0000000..db6fb88
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/deleted.yaml
@@ -0,0 +1,46 @@
+---
+- debug:
+ msg: "Start vyos_lag_interfaces deleted integration tests ansible_connection={{ ansible_connection }}"
+
+- include_tasks: _populate.yaml
+
+- block:
+ - name: Delete attributes of given LAG interfaces.
+ vyos.vyos.vyos_lag_interfaces: &deleted
+ config:
+ - name: bond0
+ - name: bond1
+ state: deleted
+ register: result
+
+ - name: Assert that the before dicts were correctly generated
+ assert:
+ that:
+ - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that the correct set of commands were generated
+ assert:
+ that:
+ - "{{ deleted['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that the after dicts were correctly generated
+ assert:
+ that:
+ - "{{ deleted['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Delete attributes of given interfaces (IDEMPOTENT)
+ vyos.vyos.vyos_lag_interfaces: *deleted
+ register: result
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - "result.changed == false"
+
+ - name: Assert that the before dicts were correctly generated
+ assert:
+ that:
+ - "{{ deleted['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/merged.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/merged.yaml
new file mode 100644
index 0000000..78c9de1
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/merged.yaml
@@ -0,0 +1,60 @@
+---
+- debug:
+ msg: "START vyos_lag_interfaces merged integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _remove_bond.yaml
+
+- include_tasks: _add_bond.yaml
+
+- block:
+ - name: Merge the provided configuration with the exisiting running configuration
+ vyos.vyos.vyos_lag_interfaces: &merged
+ config:
+ - name: bond0
+ hash_policy: "layer2"
+ mode: "active-backup"
+ members:
+ - member: eth1
+ primary: eth1
+
+ - name: bond1
+ hash_policy: "layer2+3"
+ mode: "active-backup"
+ members:
+ - member: eth2
+ primary: eth2
+ state: merged
+ register: result
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that: "{{ merged['before'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ merged['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that after dicts was correctly generated
+ assert:
+ that:
+ - "{{ merged['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Merge the provided configuration with the existing running configuration (IDEMPOTENT)
+ vyos.vyos.vyos_lag_interfaces: *merged
+ register: result
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - "result['changed'] == false"
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that:
+ - "{{ merged['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/overridden.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/overridden.yaml
new file mode 100644
index 0000000..6139d9f
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/overridden.yaml
@@ -0,0 +1,54 @@
+---
+- debug:
+ msg: "START vyos_lag_interfaces overridden integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _remove_bond.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+ - name: Overrides all device configuration with provided configuration
+ vyos.vyos.vyos_lag_interfaces: &overridden
+ config:
+ - name: bond1
+ mode: "active-backup"
+ members:
+ - member: eth2
+ primary: eth2
+ hash_policy: layer2
+ state: overridden
+ register: result
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that:
+ - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that correct commands were generated
+ assert:
+ that:
+ - "{{ overridden['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that after dicts were correctly generated
+ assert:
+ that:
+ - "{{ overridden['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Overrides all device configuration with provided configurations (IDEMPOTENT)
+ vyos.vyos.vyos_lag_interfaces: *overridden
+ register: result
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - "result['changed'] == false"
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that:
+ - "{{ overridden['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/replaced.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/replaced.yaml
new file mode 100644
index 0000000..ce469e0
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/replaced.yaml
@@ -0,0 +1,51 @@
+---
+- debug:
+ msg: "START vyos_lag_interfaces replaced integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+ - name: Replace device configurations of listed LAG interfaces with provided configurations
+ vyos.vyos.vyos_lag_interfaces: &replaced
+ config:
+ - name: bond1
+ mode: "802.3ad"
+ hash_policy: "layer2"
+ members:
+ - member: eth2
+ state: replaced
+ register: result
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ replaced['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that before dicts are correctly generated
+ assert:
+ that:
+ - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that after dict is correctly generated
+ assert:
+ that:
+ - "{{ replaced['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Replace device configurations of listed LAG interfaces with provided configurarions (IDEMPOTENT)
+ vyos.vyos.vyos_lag_interfaces: *replaced
+ register: result
+
+ - name: Assert that task was idempotent
+ assert:
+ that:
+ - "result['changed'] == false"
+
+ - name: Assert that before dict is correctly generated
+ assert:
+ that:
+ - "{{ replaced['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/rtt.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/rtt.yaml
new file mode 100644
index 0000000..eb3814e
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/rtt.yaml
@@ -0,0 +1,69 @@
+---
+- debug:
+ msg: "START vyos_lag_interfaces round trip integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _remove_bond.yaml
+
+- block:
+ - name: Apply the provided configuration (base config)
+ vyos.vyos.vyos_lag_interfaces:
+ config:
+ - name: bond0
+ hash_policy: "layer2"
+ mode: "active-backup"
+ members:
+ - member: eth1
+ primary: eth1
+
+ - name: bond1
+ hash_policy: "layer2+3"
+ mode: "active-backup"
+ members:
+ - member: eth2
+ primary: eth2
+
+ state: merged
+ register: base_config
+
+ - name: Gather lag_interfaces facts
+ vyos.vyos.vyos_facts:
+ gather_subset:
+ - default
+ gather_network_resources:
+ - lag_interfaces
+
+ - name: Apply the provided configuration (config to be reverted)
+ vyos.vyos.vyos_lag_interfaces:
+ config:
+ - name: bond0
+ hash_policy: "layer2+3"
+ mode: "802.3ad"
+ members:
+ - member: eth1
+
+ - name: bond1
+ hash_policy: "layer2"
+ mode: "xor-hash"
+ members:
+ - member: eth2
+ state: merged
+ register: result
+
+ - name: Assert that changes were applied
+ assert:
+ that: "{{ round_trip['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Revert back to base config using facts round trip
+ vyos.vyos.vyos_lag_interfaces:
+ config: "{{ ansible_facts['network_resources']['lag_interfaces'] }}"
+ state: overridden
+ register: revert
+
+ - name: Assert that config was reverted
+ assert:
+ that: "{{ base_config['after'] | symmetric_difference(revert['after']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lag_interfaces/vars/main.yaml b/tests/integration/targets/vyos_lag_interfaces/vars/main.yaml
new file mode 100644
index 0000000..8726e39
--- /dev/null
+++ b/tests/integration/targets/vyos_lag_interfaces/vars/main.yaml
@@ -0,0 +1,115 @@
+---
+merged:
+ before:
+ - name: "bond0"
+
+ - name: "bond1"
+
+ commands:
+ - "set interfaces bonding bond0 hash-policy 'layer2'"
+ - "set interfaces bonding bond0 mode 'active-backup'"
+ - "set interfaces ethernet eth1 bond-group 'bond0'"
+ - "set interfaces bonding bond0 primary 'eth1'"
+ - "set interfaces bonding bond1 hash-policy 'layer2+3'"
+ - "set interfaces bonding bond1 mode 'active-backup'"
+ - "set interfaces ethernet eth2 bond-group 'bond1'"
+ - "set interfaces bonding bond1 primary 'eth2'"
+
+ after:
+ - name: "bond0"
+ hash_policy: "layer2"
+ members:
+ - member: eth1
+ mode: "active-backup"
+ primary: eth1
+
+ - name: "bond1"
+ hash_policy: "layer2+3"
+ members:
+ - member: eth2
+ mode: "active-backup"
+ primary: eth2
+
+populate:
+ - name: "bond0"
+ hash_policy: "layer2"
+ members:
+ - member: eth1
+ mode: "active-backup"
+ primary: eth1
+
+ - name: "bond1"
+ hash_policy: "layer2+3"
+ members:
+ - member: eth2
+ mode: "active-backup"
+ primary: eth2
+
+replaced:
+ commands:
+ - "delete interfaces bonding bond1 primary"
+ - "set interfaces bonding bond1 hash-policy 'layer2'"
+ - "set interfaces bonding bond1 mode '802.3ad'"
+
+ after:
+ - name: "bond0"
+ hash_policy: "layer2"
+ members:
+ - member: eth1
+ mode: "active-backup"
+ primary: eth1
+
+ - name: "bond1"
+ hash_policy: "layer2"
+ members:
+ - member: eth2
+ mode: "802.3ad"
+
+overridden:
+ commands:
+ - "delete interfaces bonding bond0 hash-policy"
+ - "delete interfaces ethernet eth1 bond-group 'bond0'"
+ - "delete interfaces bonding bond0 mode"
+ - "delete interfaces bonding bond0 primary"
+ - "set interfaces bonding bond1 hash-policy 'layer2'"
+
+ after:
+ - name: "bond0"
+ - name: "bond1"
+ hash_policy: "layer2"
+ members:
+ - member: eth2
+ mode: "active-backup"
+ primary: eth2
+
+deleted:
+ commands:
+ - "delete interfaces bonding bond0 hash-policy"
+ - "delete interfaces ethernet eth1 bond-group 'bond0'"
+ - "delete interfaces bonding bond0 mode"
+ - "delete interfaces bonding bond0 primary"
+ - "delete interfaces bonding bond1 hash-policy"
+ - "delete interfaces ethernet eth2 bond-group 'bond1'"
+ - "delete interfaces bonding bond1 mode"
+ - "delete interfaces bonding bond1 primary"
+
+ after:
+ - name: "bond0"
+
+ - name: "bond1"
+
+round_trip:
+ after:
+ - name: "bond0"
+ hash_policy: "layer2+3"
+ members:
+ - member: eth1
+ mode: "802.3ad"
+ primary: eth1
+
+ - name: "bond1"
+ hash_policy: "layer2"
+ members:
+ - member: eth2
+ mode: "xor-hash"
+ primary: eth2
diff --git a/tests/integration/targets/vyos_linkagg/aliases b/tests/integration/targets/vyos_linkagg/aliases
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/integration/targets/vyos_linkagg/aliases
diff --git a/tests/integration/targets/vyos_linkagg/defaults/main.yaml b/tests/integration/targets/vyos_linkagg/defaults/main.yaml
new file mode 100644
index 0000000..9ef5ba5
--- /dev/null
+++ b/tests/integration/targets/vyos_linkagg/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "*"
+test_items: []
diff --git a/tests/integration/targets/vyos_linkagg/tasks/cli.yaml b/tests/integration/targets/vyos_linkagg/tasks/cli.yaml
new file mode 100644
index 0000000..890d3ac
--- /dev/null
+++ b/tests/integration/targets/vyos_linkagg/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+ include: "{{ test_case_to_run }} ansible_connection=local"
+ with_first_found: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_linkagg/tasks/main.yaml b/tests/integration/targets/vyos_linkagg/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_linkagg/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_linkagg/tests/cli/basic.yaml b/tests/integration/targets/vyos_linkagg/tests/cli/basic.yaml
new file mode 100644
index 0000000..5a02255
--- /dev/null
+++ b/tests/integration/targets/vyos_linkagg/tests/cli/basic.yaml
@@ -0,0 +1,184 @@
+---
+- debug: msg="cli/basic.yaml on connection={{ ansible_connection }}"
+
+- name: Remove linkagg
+ vyos.vyos.vyos_linkagg:
+ name: bond0
+ state: absent
+
+- name: Remove linkagg
+ vyos.vyos.vyos_linkagg:
+ name: bond1
+ state: absent
+
+- name: Create linkagg
+ vyos.vyos.vyos_linkagg:
+ name: bond0
+ members:
+ - eth1
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces bonding bond0 mode 802.3ad" in result.commands'
+ - '"set interfaces ethernet eth1 bond-group bond0" in result.commands'
+
+- name: Create linkagg again (idempotent)
+ vyos.vyos.vyos_linkagg:
+ name: bond0
+ members:
+ - eth1
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Add linkagg member
+ vyos.vyos.vyos_linkagg:
+ name: bond0
+ members:
+ - eth2
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces ethernet eth2 bond-group bond0" in result.commands'
+
+- name: Add linkagg member again (idempotent)
+ vyos.vyos.vyos_linkagg:
+ name: bond0
+ members:
+ - eth2
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Disable linkagg
+ vyos.vyos.vyos_linkagg:
+ name: bond0
+ state: down
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces bonding bond0 disable" in result.commands'
+
+- name: Disable linkagg again (idempotent)
+ vyos.vyos.vyos_linkagg:
+ name: bond0
+ state: down
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Enable linkagg
+ vyos.vyos.vyos_linkagg:
+ name: bond0
+ state: up
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete interfaces bonding bond0 disable" in result.commands[0]'
+
+- name: Enable linkagg again (idempotent)
+ vyos.vyos.vyos_linkagg:
+ name: bond0
+ state: up
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Remove linkagg
+ vyos.vyos.vyos_linkagg:
+ name: bond0
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete interfaces ethernet eth1 bond-group" in result.commands'
+ - '"delete interfaces ethernet eth2 bond-group" in result.commands'
+ - '"delete interfaces bonding bond0" in result.commands'
+
+- name: Remove linkagg again (idempotent)
+ vyos.vyos.vyos_linkagg:
+ name: bond0
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Create collection of linkagg definitions
+ vyos.vyos.vyos_linkagg:
+ aggregate:
+ - { name: bond0, members: [eth1] }
+ - { name: bond1, members: [eth2] }
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces bonding bond0 mode 802.3ad" in result.commands'
+ - '"set interfaces ethernet eth1 bond-group bond0" in result.commands'
+ - '"set interfaces bonding bond1 mode 802.3ad" in result.commands'
+ - '"set interfaces ethernet eth2 bond-group bond1" in result.commands'
+
+- name: Create collection of linkagg definitions again (idempotent)
+ vyos.vyos.vyos_linkagg:
+ aggregate:
+ - { name: bond0, members: [eth1] }
+ - { name: bond1, members: [eth2] }
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Remove collection of linkagg definitions
+ vyos.vyos.vyos_linkagg:
+ aggregate:
+ - name: bond0
+ - name: bond1
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete interfaces ethernet eth1 bond-group" in result.commands'
+ - '"delete interfaces bonding bond0" in result.commands'
+ - '"delete interfaces ethernet eth2 bond-group" in result.commands'
+ - '"delete interfaces bonding bond1" in result.commands'
+
+- name: Remove collection of linkagg definitions again (idempotent)
+ vyos.vyos.vyos_linkagg:
+ aggregate:
+ - name: bond0
+ - name: bond1
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
diff --git a/tests/integration/targets/vyos_linkagg/tests/cli/net_linkagg.yaml b/tests/integration/targets/vyos_linkagg/tests/cli/net_linkagg.yaml
new file mode 100644
index 0000000..93f98e7
--- /dev/null
+++ b/tests/integration/targets/vyos_linkagg/tests/cli/net_linkagg.yaml
@@ -0,0 +1,31 @@
+---
+- debug: msg="START vyos cli/net_linkagg.yaml on connection={{ ansible_connection }}"
+
+# Add minimal testcase to check args are passed correctly to
+# implementation module and module run is successful.
+
+- name: Remove linkagg - set
+ net_linkagg:
+ name: bond0
+ state: absent
+
+- name: Create linkagg using platform agnostic module
+ net_linkagg:
+ name: bond0
+ members:
+ - eth1
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set interfaces bonding bond0 mode 802.3ad" in result.commands'
+ - '"set interfaces ethernet eth1 bond-group bond0" in result.commands'
+
+- name: Remove linkagg - teardown
+ net_linkagg:
+ name: bond0
+ state: absent
+
+- debug: msg="END vyos cli/net_linkagg.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_lldp/aliases b/tests/integration/targets/vyos_lldp/aliases
new file mode 100644
index 0000000..539d957
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp/aliases
@@ -0,0 +1 @@
+shippable/network
diff --git a/tests/integration/targets/vyos_lldp/defaults/main.yaml b/tests/integration/targets/vyos_lldp/defaults/main.yaml
new file mode 100644
index 0000000..9ef5ba5
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "*"
+test_items: []
diff --git a/tests/integration/targets/vyos_lldp/tasks/cli.yaml b/tests/integration/targets/vyos_lldp/tasks/cli.yaml
new file mode 100644
index 0000000..890d3ac
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+ include: "{{ test_case_to_run }} ansible_connection=local"
+ with_first_found: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_lldp/tasks/main.yaml b/tests/integration/targets/vyos_lldp/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_lldp/tests/cli/basic.yaml b/tests/integration/targets/vyos_lldp/tests/cli/basic.yaml
new file mode 100644
index 0000000..badd3a9
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp/tests/cli/basic.yaml
@@ -0,0 +1,44 @@
+---
+- debug: msg="START cli/basic.yaml on connection={{ ansible_connection }}"
+
+- name: Make sure LLDP is not running before tests
+ vyos.vyos.vyos_config:
+ lines: delete service lldp
+
+- name: Enable LLDP service
+ vyos.vyos.vyos_lldp:
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set service lldp" in result.commands'
+
+- name: Enable LLDP service again (idempotent)
+ vyos.vyos.vyos_lldp:
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Disable LLDP service
+ vyos.vyos.vyos_lldp:
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete service lldp" in result.commands'
+
+- name:
+ vyos.vyos.vyos_lldp:
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
diff --git a/tests/integration/targets/vyos_lldp/tests/cli/net_lldp.yaml b/tests/integration/targets/vyos_lldp/tests/cli/net_lldp.yaml
new file mode 100644
index 0000000..e68d5a6
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp/tests/cli/net_lldp.yaml
@@ -0,0 +1,25 @@
+---
+- debug: msg="START vyos cli/net_lldp.yaml on connection={{ ansible_connection }}"
+
+# Add minimal testcase to check args are passed correctly to
+# implementation module and module run is successful.
+
+- name: Make sure LLDP is not running - setup
+ vyos.vyos.vyos_config:
+ lines: delete service lldp
+
+- name: Enable LLDP service using platform agnostic module
+ net_lldp:
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set service lldp" in result.commands'
+
+- name: Make sure LLDP is not running - teardown
+ vyos.vyos.vyos_config:
+ lines: delete service lldp
+
+- debug: msg="END vyos cli/net_lldp.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_lldp_global/defaults/main.yaml b/tests/integration/targets/vyos_lldp_global/defaults/main.yaml
new file mode 100644
index 0000000..164afea
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_global/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "[^_].*"
+test_items: []
diff --git a/tests/integration/targets/vyos_lldp_global/tasks/cli.yaml b/tests/integration/targets/vyos_lldp_global/tasks/cli.yaml
new file mode 100644
index 0000000..655e51e
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_global/tasks/cli.yaml
@@ -0,0 +1,19 @@
+---
+- name: Collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ use_regex: true
+ register: test_cases
+ delegate_to: localhost
+
+- name: Set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: Run test case (connection=network_cli)
+ include: "{{ test_case_to_run }}"
+ vars:
+ ansible_connection: network_cli
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_lldp_global/tasks/main.yaml b/tests/integration/targets/vyos_lldp_global/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_global/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_lldp_global/tests/cli/_populate.yaml b/tests/integration/targets/vyos_lldp_global/tests/cli/_populate.yaml
new file mode 100644
index 0000000..088aa7b
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_global/tests/cli/_populate.yaml
@@ -0,0 +1,9 @@
+---
+- name: Setup
+ network.cli.cli_config:
+ config: "{{ lines }}"
+ vars:
+ lines: |
+ set service lldp
+ set service lldp legacy-protocols 'cdp'
+ set service lldp management-address '192.0.2.17'
diff --git a/tests/integration/targets/vyos_lldp_global/tests/cli/_remove_config.yaml b/tests/integration/targets/vyos_lldp_global/tests/cli/_remove_config.yaml
new file mode 100644
index 0000000..b000a94
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_global/tests/cli/_remove_config.yaml
@@ -0,0 +1,9 @@
+---
+- name: Remove Config
+ network.cli.cli_config:
+ config: "{{ lines }}"
+ vars:
+ lines: |
+ delete service lldp legacy-protocols
+ delete service lldp management-address
+ delete service lldp
diff --git a/tests/integration/targets/vyos_lldp_global/tests/cli/deleted.yaml b/tests/integration/targets/vyos_lldp_global/tests/cli/deleted.yaml
new file mode 100644
index 0000000..79660af
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_global/tests/cli/deleted.yaml
@@ -0,0 +1,44 @@
+---
+- debug:
+ msg: "Start vyos_lldp_global deleted integration tests ansible_connection={{ ansible_connection }}"
+
+- include_tasks: _populate.yaml
+
+- block:
+ - name: Delete attributes of LLDP service.
+ vyos.vyos.vyos_lldp_global: &deleted
+ config:
+ state: deleted
+ register: result
+
+ - name: Assert that the before dicts were correctly generated
+ assert:
+ that:
+ - "{{ populate == result['before']}}"
+
+ - name: Assert that the correct set of commands were generated
+ assert:
+ that:
+ - "{{ deleted['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that the after dicts were correctly generated
+ assert:
+ that:
+ - "{{ deleted['after'] == result['after']}}"
+
+ - name: Delete attributes of given interfaces (IDEMPOTENT)
+ vyos.vyos.vyos_lldp_global: *deleted
+ register: result
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - "result.changed == false"
+
+ - name: Assert that the before dicts were correctly generated
+ assert:
+ that:
+ - "{{ deleted['after'] == result['before'] }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lldp_global/tests/cli/merged.yaml b/tests/integration/targets/vyos_lldp_global/tests/cli/merged.yaml
new file mode 100644
index 0000000..b1687da
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_global/tests/cli/merged.yaml
@@ -0,0 +1,49 @@
+---
+- debug:
+ msg: "START vyos_lldp_global merged integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+ - name: Merge the provided configuration with the exisiting running configuration
+ vyos.vyos.vyos_lldp_global: &merged
+ config:
+ legacy_protocols:
+ - 'fdp'
+ - 'cdp'
+ address: 192.0.2.11
+ state: merged
+ register: result
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that: "{{ merged['before'] == result['before'] }}"
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ merged['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that after dicts was correctly generated
+ assert:
+ that:
+ - "{{ merged['after'] == result['after'] }}"
+
+ - name: Merge the provided configuration with the existing running configuration (IDEMPOTENT)
+ vyos.vyos.vyos_lldp_global: *merged
+ register: result
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - "result['changed'] == false"
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that:
+ - "{{ merged['after'] == result['before'] }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lldp_global/tests/cli/replaced.yaml b/tests/integration/targets/vyos_lldp_global/tests/cli/replaced.yaml
new file mode 100644
index 0000000..22bd8e5
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_global/tests/cli/replaced.yaml
@@ -0,0 +1,51 @@
+---
+- debug:
+ msg: "START vyos_lldp_global replaced integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+ - name: Replace device configurations of LLDP service with provided configurations
+ vyos.vyos.vyos_lldp_global: &replaced
+ config:
+ legacy_protocols:
+ - 'edp'
+ - 'sonmp'
+ - 'cdp'
+ address: 192.0.2.14
+ state: replaced
+ register: result
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ replaced['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that before dicts are correctly generated
+ assert:
+ that:
+ - "{{ populate == result['before'] }}"
+
+ - name: Assert that after dict is correctly generated
+ assert:
+ that:
+ - "{{ replaced['after'] == result['after'] }}"
+
+ - name: Replace device configurations of LLDP service with provided configurarions (IDEMPOTENT)
+ vyos.vyos.vyos_lldp_global: *replaced
+ register: result
+
+ - name: Assert that task was idempotent
+ assert:
+ that:
+ - "result['changed'] == false"
+
+ - name: Assert that before dict is correctly generated
+ assert:
+ that:
+ - "{{ replaced['after'] == result['before'] }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lldp_global/tests/cli/rtt.yaml b/tests/integration/targets/vyos_lldp_global/tests/cli/rtt.yaml
new file mode 100644
index 0000000..4f8ca9c
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_global/tests/cli/rtt.yaml
@@ -0,0 +1,51 @@
+---
+- debug:
+ msg: "START vyos_lldp_global round trip integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- block:
+ - name: Apply the provided configuration (base config)
+ vyos.vyos.vyos_lldp_global:
+ config:
+ legacy_protocols:
+ - 'fdp'
+ - 'cdp'
+ address: 192.0.2.11
+ state: merged
+ register: base_config
+
+ - name: Gather vyos_lldp_global facts
+ vyos.vyos.vyos_facts:
+ gather_subset:
+ - default
+ gather_network_resources:
+ - lldp_global
+
+ - name: Apply the provided configuration (config to be reverted)
+ vyos.vyos.vyos_lldp_global:
+ config:
+ legacy_protocols:
+ - 'edp'
+ - 'sonmp'
+ - 'cdp'
+ address: 192.0.2.14
+ state: merged
+ register: result
+
+ - name: Assert that changes were applied
+ assert:
+ that: "{{ round_trip['after'] == result['after'] }}"
+
+ - name: Revert back to base config using facts round trip
+ vyos.vyos.vyos_lldp_global:
+ config: "{{ ansible_facts['network_resources']['lldp_global'] }}"
+ state: replaced
+ register: revert
+
+ - name: Assert that config was reverted
+ assert:
+ that: "{{ base_config['after'] == revert['after'] }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lldp_global/vars/main.yaml b/tests/integration/targets/vyos_lldp_global/vars/main.yaml
new file mode 100644
index 0000000..f091f2c
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_global/vars/main.yaml
@@ -0,0 +1,56 @@
+---
+merged:
+ before:
+ address: '192.0.2.17'
+ enable: true
+ legacy_protocols:
+ - 'cdp'
+
+ commands:
+ - "set service lldp management-address '192.0.2.11'"
+ - "set service lldp legacy-protocols 'fdp'"
+
+ after:
+ address: '192.0.2.11'
+ enable: true
+ legacy_protocols:
+ - 'cdp'
+ - 'fdp'
+
+populate:
+ address: '192.0.2.17'
+ enable: true
+ legacy_protocols:
+ - 'cdp'
+
+replaced:
+ commands:
+ - "set service lldp legacy-protocols 'edp'"
+ - "set service lldp legacy-protocols 'sonmp'"
+ - "set service lldp management-address '192.0.2.14'"
+
+ after:
+ address: '192.0.2.14'
+ enable: true
+ legacy_protocols:
+ - 'cdp'
+ - 'edp'
+ - 'sonmp'
+
+deleted:
+ commands:
+ - "delete service lldp management-address"
+ - "delete service lldp legacy-protocols"
+
+ after:
+ "enable": true
+
+round_trip:
+ after:
+ address: '192.0.2.14'
+ enable: true
+ legacy_protocols:
+ - 'cdp'
+ - 'edp'
+ - 'fdp'
+ - 'sonmp'
diff --git a/tests/integration/targets/vyos_lldp_interface/aliases b/tests/integration/targets/vyos_lldp_interface/aliases
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interface/aliases
diff --git a/tests/integration/targets/vyos_lldp_interface/defaults/main.yaml b/tests/integration/targets/vyos_lldp_interface/defaults/main.yaml
new file mode 100644
index 0000000..9ef5ba5
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interface/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "*"
+test_items: []
diff --git a/tests/integration/targets/vyos_lldp_interface/tasks/cli.yaml b/tests/integration/targets/vyos_lldp_interface/tasks/cli.yaml
new file mode 100644
index 0000000..890d3ac
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interface/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+ include: "{{ test_case_to_run }} ansible_connection=local"
+ with_first_found: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_lldp_interface/tasks/main.yaml b/tests/integration/targets/vyos_lldp_interface/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interface/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_lldp_interface/tests/cli/basic.yaml b/tests/integration/targets/vyos_lldp_interface/tests/cli/basic.yaml
new file mode 100644
index 0000000..e91091b
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interface/tests/cli/basic.yaml
@@ -0,0 +1,167 @@
+---
+- debug: msg="START cli/basic.yaml on connection={{ ansible_connection }}"
+
+- name: Make sure LLDP is not running before tests
+ vyos.vyos.vyos_config:
+ lines: delete service lldp
+
+- name: Create LLDP configuration
+ vyos.vyos.vyos_lldp_interface:
+ name: eth1
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set service lldp interface eth1" in result.commands'
+
+- name: Create LLDP configuration again (idempotent)
+ vyos.vyos.vyos_lldp_interface:
+ name: eth1
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Disable LLDP configuration
+ vyos.vyos.vyos_lldp_interface:
+ name: eth1
+ state: disabled
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set service lldp interface eth1 disable" in result.commands'
+
+- name: Disable LLDP configuration again (idempotent)
+ vyos.vyos.vyos_lldp_interface:
+ name: eth1
+ state: disabled
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Enable LLDP configuration
+ vyos.vyos.vyos_lldp_interface:
+ name: eth1
+ state: enabled
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete service lldp interface eth1 disable" in result.commands'
+
+- name: Enable LLDP configuration again (idempotent)
+ vyos.vyos.vyos_lldp_interface:
+ name: eth1
+ state: enabled
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Delete LLDP configuration
+ vyos.vyos.vyos_lldp_interface:
+ name: eth1
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete service lldp interface eth1" in result.commands'
+
+- name: Delete LLDP configuration again (idempotent)
+ vyos.vyos.vyos_lldp_interface:
+ name: eth1
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Create aggregate of LLDP interface configurations
+ vyos.vyos.vyos_lldp_interface:
+ aggregate:
+ - name: eth1
+ - name: eth2
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set service lldp interface eth1" in result.commands'
+ - '"set service lldp interface eth2" in result.commands'
+
+- name: Create aggregate of LLDP interface configurations again (idempotent)
+ vyos.vyos.vyos_lldp_interface:
+ aggregate:
+ - name: eth1
+ - name: eth2
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Override LLDP interface configuration on aggregate
+ vyos.vyos.vyos_lldp_interface:
+ aggregate:
+ - name: eth1
+ - { name: eth2, state: disabled }
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set service lldp interface eth2 disable" in result.commands'
+
+- name: Override LLDP interface configuration on aggregate again (idempotent)
+ vyos.vyos.vyos_lldp_interface:
+ aggregate:
+ - name: eth1
+ - { name: eth2, state: disabled }
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Delete aggregate of LLDP interface configurations
+ vyos.vyos.vyos_lldp_interface:
+ aggregate:
+ - name: eth1
+ - name: eth2
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete service lldp interface eth1" in result.commands'
+ - '"delete service lldp interface eth2" in result.commands'
+
+- name: Delete aggregate of LLDP interface configurations (idempotent)
+ vyos.vyos.vyos_lldp_interface:
+ aggregate:
+ - name: eth1
+ - name: eth2
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
diff --git a/tests/integration/targets/vyos_lldp_interface/tests/cli/net_lldp_interface.yaml b/tests/integration/targets/vyos_lldp_interface/tests/cli/net_lldp_interface.yaml
new file mode 100644
index 0000000..1710b7e
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interface/tests/cli/net_lldp_interface.yaml
@@ -0,0 +1,26 @@
+---
+- debug: msg="START vyos cli/net_lldp_interface.yaml on connection={{ ansible_connection }}"
+
+# Add minimal testcase to check args are passed correctly to
+# implementation module and module run is successful.
+
+- name: Make sure LLDP is not running - setup
+ vyos.vyos.vyos_config:
+ lines: delete service lldp
+
+- name: Create LLDP configuration using platform agnostic module
+ net_lldp_interface:
+ name: eth1
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set service lldp interface eth1" in result.commands'
+
+- name: Make sure LLDP is not running - teardown
+ vyos.vyos.vyos_config:
+ lines: delete service lldp
+
+- debug: msg="END vyos cli/net_lldp_interface.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_lldp_interfaces/defaults/main.yaml b/tests/integration/targets/vyos_lldp_interfaces/defaults/main.yaml
new file mode 100644
index 0000000..164afea
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "[^_].*"
+test_items: []
diff --git a/tests/integration/targets/vyos_lldp_interfaces/meta/main.yaml b/tests/integration/targets/vyos_lldp_interfaces/meta/main.yaml
new file mode 100644
index 0000000..f88bce5
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/meta/main.yaml
@@ -0,0 +1,2 @@
+dependencies:
+ - prepare_vyos_tests
diff --git a/tests/integration/targets/vyos_lldp_interfaces/tasks/cli.yaml b/tests/integration/targets/vyos_lldp_interfaces/tasks/cli.yaml
new file mode 100644
index 0000000..655e51e
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/tasks/cli.yaml
@@ -0,0 +1,19 @@
+---
+- name: Collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ use_regex: true
+ register: test_cases
+ delegate_to: localhost
+
+- name: Set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: Run test case (connection=network_cli)
+ include: "{{ test_case_to_run }}"
+ vars:
+ ansible_connection: network_cli
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_lldp_interfaces/tasks/main.yaml b/tests/integration/targets/vyos_lldp_interfaces/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_populate.yaml b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_populate.yaml
new file mode 100644
index 0000000..80f7d1a
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_populate.yaml
@@ -0,0 +1,14 @@
+---
+- name: Setup
+ network.cli.cli_config:
+ config: "{{ lines }}"
+ vars:
+ lines: |
+ set service lldp interface eth1
+ set service lldp interface eth1 location civic-based country-code US
+ set service lldp interface eth1 location civic-based ca-type 0 ca-value ENGLISH
+ set service lldp interface eth2
+ set service lldp interface eth2 location coordinate-based latitude 33.524449N
+ set service lldp interface eth2 location coordinate-based altitude 2200
+ set service lldp interface eth2 location coordinate-based datum WGS84
+ set service lldp interface eth2 location coordinate-based longitude 222.267255W
diff --git a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_populate_intf.yaml b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_populate_intf.yaml
new file mode 100644
index 0000000..ee9a9bd
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_populate_intf.yaml
@@ -0,0 +1,10 @@
+---
+- name: Setup
+ network.cli.cli_config:
+ config: "{{ lines }}"
+ vars:
+ lines: |
+ set service lldp interface eth2
+ set service lldp interface eth2 location civic-based country-code US
+ set service lldp interface eth2 location civic-based ca-type 0 ca-value ENGLISH
+ set service lldp interface eth2 disable
diff --git a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_remove_config.yaml b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_remove_config.yaml
new file mode 100644
index 0000000..e3abbdb
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_remove_config.yaml
@@ -0,0 +1,8 @@
+---
+- name: Remove Config
+ network.cli.cli_config:
+ config: "{{ lines }}"
+ vars:
+ lines: |
+ delete service lldp interface
+ delete service lldp
diff --git a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/deleted.yaml b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/deleted.yaml
new file mode 100644
index 0000000..bd7c713
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/deleted.yaml
@@ -0,0 +1,46 @@
+---
+- debug:
+ msg: "Start vyos_lldp_interfaces deleted integration tests ansible_connection={{ ansible_connection }}"
+
+- include_tasks: _populate.yaml
+
+- block:
+ - name: Delete attributes of given LLDP interfaces.
+ vyos.vyos.vyos_lldp_interfaces: &deleted
+ config:
+ - name: 'eth1'
+ - name: 'eth2'
+ state: deleted
+ register: result
+
+ - name: Assert that the before dicts were correctly generated
+ assert:
+ that:
+ - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that the correct set of commands were generated
+ assert:
+ that:
+ - "{{ deleted['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that the after dicts were correctly generated
+ assert:
+ that:
+ - "{{ deleted['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Delete attributes of given interfaces (IDEMPOTENT)
+ vyos.vyos.vyos_lldp_interfaces: *deleted
+ register: result
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - "result.changed == false"
+ - "result.commands|length == 0"
+
+ - name: Assert that the before dicts were correctly generated
+ assert:
+ that:
+ - "{{ deleted['after'] | symmetric_difference(result['before']) |length == 0 }}"
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/merged.yaml b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/merged.yaml
new file mode 100644
index 0000000..ae5b10b
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/merged.yaml
@@ -0,0 +1,58 @@
+---
+- debug:
+ msg: "START vyos_lldp_interfaces merged integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- block:
+ - name: Merge the provided configuration with the exisiting running configuration
+ vyos.vyos.vyos_lldp_interfaces: &merged
+ config:
+ - name: 'eth1'
+ location:
+ civic_based:
+ country_code: 'US'
+ ca_info:
+ - ca_type: 0
+ ca_value: 'ENGLISH'
+
+ - name: 'eth2'
+ location:
+ coordinate_based:
+ altitude: 2200
+ datum: 'WGS84'
+ longitude: '222.267255W'
+ latitude: '33.524449N'
+ state: merged
+ register: result
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that: "{{ merged['before'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ merged['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that after dicts was correctly generated
+ assert:
+ that:
+ - "{{ merged['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Merge the provided configuration with the existing running configuration (IDEMPOTENT)
+ vyos.vyos.vyos_lldp_interfaces: *merged
+ register: result
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - "result['changed'] == false"
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that:
+ - "{{ merged['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/overridden.yaml b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/overridden.yaml
new file mode 100644
index 0000000..eedb563
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/overridden.yaml
@@ -0,0 +1,49 @@
+---
+- debug:
+ msg: "START vyos_lldp_interfaces overridden integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate_intf.yaml
+
+- block:
+ - name: Overrides all device configuration with provided configuration
+ vyos.vyos.vyos_lldp_interfaces: &overridden
+ config:
+ - name: 'eth2'
+ location:
+ elin: '0000000911'
+ state: overridden
+ register: result
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that:
+ - "{{ populate_intf | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that correct commands were generated
+ assert:
+ that:
+ - "{{ overridden['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that after dicts were correctly generated
+ assert:
+ that:
+ - "{{ overridden['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Overrides all device configuration with provided configurations (IDEMPOTENT)
+ vyos.vyos.vyos_lldp_interfaces: *overridden
+ register: result
+
+ - name: Assert that the previous task was idempotent
+ assert:
+ that:
+ - "result['changed'] == false"
+
+ - name: Assert that before dicts were correctly generated
+ assert:
+ that:
+ - "{{ overridden['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/replaced.yaml b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/replaced.yaml
new file mode 100644
index 0000000..07fec9e
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/replaced.yaml
@@ -0,0 +1,63 @@
+---
+- debug:
+ msg: "START vyos_lldp_interfaces replaced integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+ - name: Replace device configurations of listed LLDP interfaces with provided configurations
+ vyos.vyos.vyos_lldp_interfaces: &replaced
+ config:
+ - name: 'eth2'
+ enable: false
+ location:
+ civic_based:
+ country_code: 'US'
+ ca_info:
+ - ca_type: 0
+ ca_value: 'ENGLISH'
+
+ - name: 'eth1'
+ enable: false
+ location:
+ coordinate_based:
+ altitude: 2200
+ datum: 'WGS84'
+ longitude: '222.267255W'
+ latitude: '33.524449N'
+ state: replaced
+ register: result
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ replaced['commands'] | symmetric_difference(result['commands']) |length == 0 }}"
+
+ - name: Assert that before dicts are correctly generated
+ assert:
+ that:
+ - "{{ populate | symmetric_difference(result['before']) |length == 0 }}"
+
+ - name: Assert that after dict is correctly generated
+ assert:
+ that:
+ - "{{ replaced['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Replace device configurations of listed LLDP interfaces with provided configurarions (IDEMPOTENT)
+ vyos.vyos.vyos_lldp_interfaces: *replaced
+ register: result
+
+ - name: Assert that task was idempotent
+ assert:
+ that:
+ - "result['changed'] == false"
+
+ - name: Assert that before dict is correctly generated
+ assert:
+ that:
+ - "{{ replaced['after'] | symmetric_difference(result['before']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/rtt.yaml b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/rtt.yaml
new file mode 100644
index 0000000..d97cf9c
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/rtt.yaml
@@ -0,0 +1,57 @@
+---
+- debug:
+ msg: "START vyos_lldp_interfaces round trip integration tests on connection={{ ansible_connection }}"
+
+- include_tasks: _remove_config.yaml
+
+- block:
+ - name: Apply the provided configuration (base config)
+ vyos.vyos.vyos_lldp_interfaces:
+ config:
+ - name: 'eth1'
+ location:
+ civic_based:
+ country_code: 'US'
+ ca_info:
+ - ca_type: 0
+ ca_value: 'ENGLISH'
+
+ state: merged
+ register: base_config
+
+ - name: Gather lldp_interfaces facts
+ vyos.vyos.vyos_facts:
+ gather_subset:
+ - default
+ gather_network_resources:
+ - lldp_interfaces
+
+ - name: Apply the provided configuration (config to be reverted)
+ vyos.vyos.vyos_lldp_interfaces:
+ config:
+ - name: 'eth2'
+ location:
+ coordinate_based:
+ altitude: 2200
+ datum: 'WGS84'
+ longitude: '222.267255W'
+ latitude: '33.524449N'
+ state: merged
+ register: result
+
+ - name: Assert that changes were applied
+ assert:
+ that: "{{ round_trip['after'] | symmetric_difference(result['after']) |length == 0 }}"
+
+ - name: Revert back to base config using facts round trip
+ vyos.vyos.vyos_lldp_interfaces:
+ config: "{{ ansible_facts['network_resources']['lldp_interfaces'] }}"
+ state: overridden
+ register: revert
+
+ - name: Assert that config was reverted
+ assert:
+ that: "{{ base_config['after'] | symmetric_difference(revert['after']) |length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_lldp_interfaces/vars/main.yaml b/tests/integration/targets/vyos_lldp_interfaces/vars/main.yaml
new file mode 100644
index 0000000..6f33343
--- /dev/null
+++ b/tests/integration/targets/vyos_lldp_interfaces/vars/main.yaml
@@ -0,0 +1,130 @@
+---
+merged:
+ before: []
+
+
+ commands:
+ - "set service lldp interface eth1 location civic-based country-code 'US'"
+ - "set service lldp interface eth1 location civic-based ca-type 0 ca-value 'ENGLISH'"
+ - "set service lldp interface eth1"
+ - "set service lldp interface eth2 location coordinate-based latitude '33.524449N'"
+ - "set service lldp interface eth2 location coordinate-based altitude '2200'"
+ - "set service lldp interface eth2 location coordinate-based datum 'WGS84'"
+ - "set service lldp interface eth2 location coordinate-based longitude '222.267255W'"
+ - "set service lldp interface eth2 location coordinate-based latitude '33.524449N'"
+ - "set service lldp interface eth2 location coordinate-based altitude '2200'"
+ - "set service lldp interface eth2 location coordinate-based datum 'WGS84'"
+ - "set service lldp interface eth2 location coordinate-based longitude '222.267255W'"
+ - "set service lldp interface eth2"
+
+ after:
+ - name: 'eth1'
+ location:
+ civic_based:
+ country_code: 'US'
+ ca_info:
+ - ca_type: 0
+ ca_value: 'ENGLISH'
+
+ - name: 'eth2'
+ location:
+ coordinate_based:
+ altitude: 2200
+ datum: 'WGS84'
+ longitude: '222.267255W'
+ latitude: '33.524449N'
+
+populate:
+ - name: 'eth1'
+ location:
+ civic_based:
+ country_code: 'US'
+ ca_info:
+ - ca_type: 0
+ ca_value: 'ENGLISH'
+
+ - name: 'eth2'
+ location:
+ coordinate_based:
+ altitude: 2200
+ datum: 'WGS84'
+ longitude: '222.267255W'
+ latitude: '33.524449N'
+
+replaced:
+ commands:
+ - "delete service lldp interface eth2 location"
+ - "set service lldp interface eth2 'disable'"
+ - "set service lldp interface eth2 location civic-based country-code 'US'"
+ - "set service lldp interface eth2 location civic-based ca-type 0 ca-value 'ENGLISH'"
+ - "delete service lldp interface eth1 location"
+ - "set service lldp interface eth1 'disable'"
+ - "set service lldp interface eth1 location coordinate-based latitude '33.524449N'"
+ - "set service lldp interface eth1 location coordinate-based altitude '2200'"
+ - "set service lldp interface eth1 location coordinate-based datum 'WGS84'"
+ - "set service lldp interface eth1 location coordinate-based longitude '222.267255W'"
+
+ after:
+ - name: 'eth2'
+ enable: false
+ location:
+ civic_based:
+ country_code: 'US'
+ ca_info:
+ - ca_type: 0
+ ca_value: 'ENGLISH'
+
+ - name: 'eth1'
+ enable: false
+ location:
+ coordinate_based:
+ altitude: 2200
+ datum: 'WGS84'
+ longitude: '222.267255W'
+ latitude: '33.524449N'
+
+populate_intf:
+ - name: 'eth2'
+ enable: false
+ location:
+ civic_based:
+ country_code: 'US'
+ ca_info:
+ - ca_type: 0
+ ca_value: 'ENGLISH'
+
+overridden:
+ commands:
+ - "delete service lldp interface eth2 location"
+ - "delete service lldp interface eth2 'disable'"
+ - "set service lldp interface eth2 location elin '0000000911'"
+
+ after:
+ - name: 'eth2'
+ location:
+ elin: 0000000911
+
+deleted:
+ commands:
+ - "delete service lldp interface eth1"
+ - "delete service lldp interface eth2"
+
+ after: []
+
+round_trip:
+ after:
+ - name: 'eth1'
+ location:
+ civic_based:
+ country_code: 'US'
+ ca_info:
+ - ca_type: 0
+ ca_value: 'ENGLISH'
+
+ - name: 'eth2'
+ location:
+ coordinate_based:
+ altitude: 2200
+ datum: 'WGS84'
+ longitude: '222.267255W'
+ latitude: '33.524449N'
diff --git a/tests/integration/targets/vyos_logging/aliases b/tests/integration/targets/vyos_logging/aliases
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/integration/targets/vyos_logging/aliases
diff --git a/tests/integration/targets/vyos_logging/defaults/main.yaml b/tests/integration/targets/vyos_logging/defaults/main.yaml
new file mode 100644
index 0000000..9ef5ba5
--- /dev/null
+++ b/tests/integration/targets/vyos_logging/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "*"
+test_items: []
diff --git a/tests/integration/targets/vyos_logging/tasks/cli.yaml b/tests/integration/targets/vyos_logging/tasks/cli.yaml
new file mode 100644
index 0000000..890d3ac
--- /dev/null
+++ b/tests/integration/targets/vyos_logging/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+ include: "{{ test_case_to_run }} ansible_connection=local"
+ with_first_found: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_logging/tasks/main.yaml b/tests/integration/targets/vyos_logging/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_logging/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_logging/tests/cli/basic.yaml b/tests/integration/targets/vyos_logging/tests/cli/basic.yaml
new file mode 100644
index 0000000..144f8d3
--- /dev/null
+++ b/tests/integration/targets/vyos_logging/tests/cli/basic.yaml
@@ -0,0 +1,126 @@
+---
+- debug: msg="START cli/basic.yaml on connection={{ ansible_connection }}"
+
+- name: set-up logging
+ vyos.vyos.vyos_logging:
+ dest: console
+ facility: all
+ level: info
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set system syslog console facility all level info" in result.commands'
+
+- name: set-up logging again (idempotent)
+ vyos.vyos.vyos_logging:
+ dest: console
+ facility: all
+ level: info
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: file logging
+ vyos.vyos.vyos_logging:
+ dest: file
+ name: test
+ facility: all
+ level: notice
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set system syslog file test facility all level notice" in result.commands'
+
+- name: file logging again (idempotent)
+ vyos.vyos.vyos_logging:
+ dest: file
+ name: test
+ facility: all
+ level: notice
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: delete logging
+ vyos.vyos.vyos_logging:
+ dest: file
+ name: test
+ facility: all
+ level: notice
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete system syslog file test facility all level notice" in result.commands'
+
+- name: delete logging again (idempotent)
+ vyos.vyos.vyos_logging:
+ dest: file
+ name: test
+ facility: all
+ level: notice
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Add logging collections
+ vyos.vyos.vyos_logging:
+ aggregate:
+ - { dest: file, name: test1, facility: all, level: info }
+ - { dest: file, name: test2, facility: news, level: debug }
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set system syslog file test1 facility all level info" in result.commands'
+ - '"set system syslog file test2 facility news level debug" in result.commands'
+
+- name: Add and remove logging collections with overrides
+ vyos.vyos.vyos_logging:
+ aggregate:
+ - { dest: console, facility: all, level: info }
+ - { dest: file, name: test1, facility: all, level: info, state: absent }
+ - { dest: console, facility: daemon, level: warning }
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete system syslog file test1 facility all level info" in result.commands'
+ - '"set system syslog console facility daemon level warning" in result.commands'
+
+- name: Remove logging collections
+ vyos.vyos.vyos_logging:
+ aggregate:
+ - { dest: console, facility: all, level: info }
+ - { dest: console, facility: daemon, level: warning }
+ - { dest: file, name: test2, facility: news, level: debug }
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete system syslog console facility all level info" in result.commands'
+ - '"delete system syslog console facility daemon level warning" in result.commands'
+ - '"delete system syslog file test2 facility news level debug" in result.commands'
diff --git a/tests/integration/targets/vyos_logging/tests/cli/net_logging.yaml b/tests/integration/targets/vyos_logging/tests/cli/net_logging.yaml
new file mode 100644
index 0000000..7c62d72
--- /dev/null
+++ b/tests/integration/targets/vyos_logging/tests/cli/net_logging.yaml
@@ -0,0 +1,39 @@
+---
+- debug: msg="START vyos cli/net_logging.yaml on connection={{ ansible_connection }}"
+
+# Add minimal testcase to check args are passed correctly to
+# implementation module and module run is successful.
+
+- name: delete logging - setup
+ net_logging:
+ dest: file
+ name: test
+ facility: all
+ level: notice
+ state: absent
+ register: result
+
+- name: file logging using platform agnostic module
+ net_logging:
+ dest: file
+ name: test
+ facility: all
+ level: notice
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set system syslog file test facility all level notice" in result.commands'
+
+- name: delete logging - teardown
+ net_logging:
+ dest: file
+ name: test
+ facility: all
+ level: notice
+ state: absent
+ register: result
+
+- debug: msg="END vyos cli/net_logging.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_smoke/defaults/main.yaml b/tests/integration/targets/vyos_smoke/defaults/main.yaml
new file mode 100644
index 0000000..9ef5ba5
--- /dev/null
+++ b/tests/integration/targets/vyos_smoke/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "*"
+test_items: []
diff --git a/tests/integration/targets/vyos_smoke/tasks/cli.yaml b/tests/integration/targets/vyos_smoke/tasks/cli.yaml
new file mode 100644
index 0000000..890d3ac
--- /dev/null
+++ b/tests/integration/targets/vyos_smoke/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+ include: "{{ test_case_to_run }} ansible_connection=local"
+ with_first_found: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_smoke/tasks/main.yaml b/tests/integration/targets/vyos_smoke/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_smoke/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_smoke/tests/cli/common_config.yaml b/tests/integration/targets/vyos_smoke/tests/cli/common_config.yaml
new file mode 100644
index 0000000..1c07980
--- /dev/null
+++ b/tests/integration/targets/vyos_smoke/tests/cli/common_config.yaml
@@ -0,0 +1,10 @@
+# vyos.py in plugins and module_utils/network covered by these as well
+# hit NetworkConfig
+- name: configure simple config command
+ vyos.vyos.vyos_config:
+ lines: set system host-name smoke
+
+- name: return host name to inventory_hostname
+ vyos.vyos.vyos_config:
+ lines: set system host-name {{ inventory_hostname_short }}
+ match: none
diff --git a/tests/integration/targets/vyos_smoke/tests/cli/common_utils.yaml b/tests/integration/targets/vyos_smoke/tests/cli/common_utils.yaml
new file mode 100644
index 0000000..db837c5
--- /dev/null
+++ b/tests/integration/targets/vyos_smoke/tests/cli/common_utils.yaml
@@ -0,0 +1,49 @@
+# vyos.py in plugins and module_utils/network covered by these as well
+# remove_default_spec() hit by multiple plays
+
+# hit ComplexList
+- name: get output for single command
+ vyos.vyos.vyos_command:
+ commands:
+ - show version
+ register: result
+
+- assert:
+ that:
+ - result.changed == false
+ - result.stdout is defined
+ - result.stdout_lines is defined
+
+# hit conditional() - used for declarative intent
+# Note, this can't be run on AWS because fully testing the vyos_interface dependencies
+# requires the ability to create and remove interfaces other than eth0
+- name: enable eth1
+ vyos.vyos.vyos_interface:
+ name: eth1
+ enabled: True
+ state: present
+ register: result
+
+- name: Check intent arguments
+ vyos.vyos.vyos_interface:
+ name: eth1
+ state: up
+ register: result
+
+- name: Check intent arguments (failed condition)
+ vyos.vyos.vyos_interface:
+ name: eth1
+ state: down
+ ignore_errors: yes
+ register: result
+
+- assert:
+ that:
+ - "result.failed == true"
+ - "'state eq(down)' in result.failed_conditions"
+
+- name: Config + intent
+ vyos.vyos.vyos_interface:
+ name: eth1
+ enabled: False
+ state: down
diff --git a/tests/integration/targets/vyos_smoke/tests/cli/misc_tests.yaml b/tests/integration/targets/vyos_smoke/tests/cli/misc_tests.yaml
new file mode 100644
index 0000000..720f95e
--- /dev/null
+++ b/tests/integration/targets/vyos_smoke/tests/cli/misc_tests.yaml
@@ -0,0 +1,13 @@
+# hit check conditional in module_utils.network.vyos -> load_config()
+- name: configure simple config command
+ vyos.vyos.vyos_config:
+ lines: set system host-name check-test
+ check_mode: yes
+
+- name: get host name
+ vyos.vyos.vyos_command:
+ commands: show host name
+ register: result
+
+- assert:
+ that: '"check-test" not in result.stdout'
diff --git a/tests/integration/targets/vyos_static_route/aliases b/tests/integration/targets/vyos_static_route/aliases
new file mode 100644
index 0000000..539d957
--- /dev/null
+++ b/tests/integration/targets/vyos_static_route/aliases
@@ -0,0 +1 @@
+shippable/network
diff --git a/tests/integration/targets/vyos_static_route/defaults/main.yaml b/tests/integration/targets/vyos_static_route/defaults/main.yaml
new file mode 100644
index 0000000..9ef5ba5
--- /dev/null
+++ b/tests/integration/targets/vyos_static_route/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "*"
+test_items: []
diff --git a/tests/integration/targets/vyos_static_route/tasks/cli.yaml b/tests/integration/targets/vyos_static_route/tasks/cli.yaml
new file mode 100644
index 0000000..890d3ac
--- /dev/null
+++ b/tests/integration/targets/vyos_static_route/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+ include: "{{ test_case_to_run }} ansible_connection=local"
+ with_first_found: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_static_route/tasks/main.yaml b/tests/integration/targets/vyos_static_route/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_static_route/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_static_route/tests/cli/basic.yaml b/tests/integration/targets/vyos_static_route/tests/cli/basic.yaml
new file mode 100644
index 0000000..122e49a
--- /dev/null
+++ b/tests/integration/targets/vyos_static_route/tests/cli/basic.yaml
@@ -0,0 +1,120 @@
+---
+- debug: msg="START cli/basic.yaml on connection={{ ansible_connection }}"
+
+- name: create static route
+ vyos.vyos.vyos_static_route:
+ prefix: 172.24.0.0/24
+ next_hop: 192.168.42.64
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set protocols static route 172.24.0.0/24 next-hop 192.168.42.64" in result.commands'
+
+- name: create static route again (idempotent)
+ vyos.vyos.vyos_static_route:
+ prefix: 172.24.0.0
+ mask: 24
+ next_hop: 192.168.42.64
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: modify admin distance of static route
+ vyos.vyos.vyos_static_route:
+ prefix: 172.24.0.0/24
+ next_hop: 192.168.42.64
+ admin_distance: 1
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set protocols static route 172.24.0.0/24 next-hop 192.168.42.64 distance 1" in result.commands'
+
+- name: modify admin distance of static route again (idempotent)
+ vyos.vyos.vyos_static_route:
+ prefix: 172.24.0.0
+ mask: 24
+ next_hop: 192.168.42.64
+ admin_distance: 1
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: delete static route
+ vyos.vyos.vyos_static_route:
+ prefix: 172.24.0.0/24
+ next_hop: 192.168.42.64
+ admin_distance: 1
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete protocols static route 172.24.0.0/24" in result.commands'
+
+- name: delete static route again (idempotent)
+ vyos.vyos.vyos_static_route:
+ prefix: 172.24.0.0/24
+ next_hop: 192.168.42.64
+ admin_distance: 1
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+
+- name: Add static route collections
+ vyos.vyos.vyos_static_route:
+ aggregate:
+ - { prefix: 172.24.1.0/24, next_hop: 192.168.42.64 }
+ - { prefix: 172.24.2.0, mask: 24, next_hop: 192.168.42.64 }
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set protocols static route 172.24.1.0/24 next-hop 192.168.42.64" in result.commands'
+ - '"set protocols static route 172.24.2.0/24 next-hop 192.168.42.64" in result.commands'
+
+- name: Add and remove static route collections with overrides
+ vyos.vyos.vyos_static_route:
+ aggregate:
+ - { prefix: 172.24.1.0/24, next_hop: 192.168.42.64 }
+ - { prefix: 172.24.2.0/24, next_hop: 192.168.42.64, state: absent }
+ - { prefix: 172.24.3.0/24, next_hop: 192.168.42.64 }
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete protocols static route 172.24.2.0/24" in result.commands'
+ - '"set protocols static route 172.24.3.0/24 next-hop 192.168.42.64" in result.commands'
+
+- name: Remove static route collections
+ vyos.vyos.vyos_static_route:
+ aggregate:
+ - { prefix: 172.24.1.0/24, next_hop: 192.168.42.64 }
+ - { prefix: 172.24.3.0/24, next_hop: 192.168.42.64 }
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"delete protocols static route 172.24.1.0/24" in result.commands'
+ - '"delete protocols static route 172.24.3.0/24" in result.commands'
diff --git a/tests/integration/targets/vyos_static_route/tests/cli/net_static_route.yaml b/tests/integration/targets/vyos_static_route/tests/cli/net_static_route.yaml
new file mode 100644
index 0000000..e2529eb
--- /dev/null
+++ b/tests/integration/targets/vyos_static_route/tests/cli/net_static_route.yaml
@@ -0,0 +1,33 @@
+---
+- debug: msg="START vyos cli/net_static_route.yaml on connection={{ ansible_connection }}"
+
+# Add minimal testcase to check args are passed correctly to
+# implementation module and module run is successful.
+
+- name: delete static route - setup
+ net_static_route:
+ prefix: 172.24.0.0/24
+ next_hop: 192.168.42.64
+ state: absent
+ register: result
+
+- name: create static route using platform agnostic module
+ net_static_route:
+ prefix: 172.24.0.0/24
+ next_hop: 192.168.42.64
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set protocols static route 172.24.0.0/24 next-hop 192.168.42.64" in result.commands'
+
+- name: delete static route - teardown
+ net_static_route:
+ prefix: 172.24.0.0/24
+ next_hop: 192.168.42.64
+ state: absent
+ register: result
+
+- debug: msg="END vyos cli/net_static_route.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_system/defaults/main.yaml b/tests/integration/targets/vyos_system/defaults/main.yaml
new file mode 100644
index 0000000..9ef5ba5
--- /dev/null
+++ b/tests/integration/targets/vyos_system/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "*"
+test_items: []
diff --git a/tests/integration/targets/vyos_system/tasks/cli.yaml b/tests/integration/targets/vyos_system/tasks/cli.yaml
new file mode 100644
index 0000000..890d3ac
--- /dev/null
+++ b/tests/integration/targets/vyos_system/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+ include: "{{ test_case_to_run }} ansible_connection=local"
+ with_first_found: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_system/tasks/main.yaml b/tests/integration/targets/vyos_system/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_system/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_system/tests/cli/basic.yaml b/tests/integration/targets/vyos_system/tests/cli/basic.yaml
new file mode 100644
index 0000000..474042f
--- /dev/null
+++ b/tests/integration/targets/vyos_system/tests/cli/basic.yaml
@@ -0,0 +1,61 @@
+---
+- debug: msg="START cli/basic.yaml on connection={{ ansible_connection }}"
+
+- name: setup
+ vyos.vyos.vyos_config:
+ lines:
+ - delete system name-server 192.0.2.1
+ - delete system name-server 192.0.2.2
+ - delete system name-server 192.0.2.3
+ match: none
+
+- name: configure name servers
+ vyos.vyos.vyos_system:
+ name_servers:
+ - 192.0.2.1
+ - 192.0.2.2
+ - 192.0.2.3
+ register: result
+
+- assert:
+ that:
+ - result.changed == true
+ - result.commands|length == 3
+ - result.commands[0] is search("set system name-server '192.0.2.1'")
+ - result.commands[1] is search("set system name-server '192.0.2.2'")
+ - result.commands[2] is search("set system name-server '192.0.2.3'")
+
+- name: verify name_servers
+ vyos.vyos.vyos_system:
+ name_servers:
+ - 192.0.2.1
+ - 192.0.2.2
+ - 192.0.2.3
+ register: result
+
+- assert:
+ that:
+ - result.changed == false
+
+- name: remove one
+ vyos.vyos.vyos_system:
+ name_servers:
+ - 192.0.2.3
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - result.changed == true
+ - result.commands|length == 1
+ - result.commands[0] is search("delete system name-server '192.0.2.3'")
+
+- name: teardown
+ vyos.vyos.vyos_config:
+ lines:
+ - delete system name-server name-server 192.0.2.1
+ - delete system name-server name-server 192.0.2.2
+ - delete system name-server name-server 192.0.2.3
+ match: none
+
+- debug: msg="END cli/basic.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_system/tests/cli/net_system.yaml b/tests/integration/targets/vyos_system/tests/cli/net_system.yaml
new file mode 100644
index 0000000..3688866
--- /dev/null
+++ b/tests/integration/targets/vyos_system/tests/cli/net_system.yaml
@@ -0,0 +1,30 @@
+---
+- debug: msg="START vyos cli/net_system.yaml on connection={{ ansible_connection }}"
+
+# Add minimal testcase to check args are passed correctly to
+# implementation module and module run is successful.
+
+- name: setup
+ vyos.vyos.vyos_config:
+ lines:
+ - delete system name-server 192.0.2.1
+ match: none
+
+- name: configure name servers using platform agnostic module
+ net_system:
+ name_servers:
+ - 192.0.2.1
+ register: result
+
+- assert:
+ that:
+ - result.changed == true
+ - result.commands[0] is search("set system name-server '192.0.2.1'")
+
+- name: setup
+ vyos.vyos.vyos_config:
+ lines:
+ - delete system name-server 192.0.2.1
+ match: none
+
+- debug: msg="END vyos cli/net_system.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_user/aliases b/tests/integration/targets/vyos_user/aliases
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/integration/targets/vyos_user/aliases
diff --git a/tests/integration/targets/vyos_user/defaults/main.yaml b/tests/integration/targets/vyos_user/defaults/main.yaml
new file mode 100644
index 0000000..9ef5ba5
--- /dev/null
+++ b/tests/integration/targets/vyos_user/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "*"
+test_items: []
diff --git a/tests/integration/targets/vyos_user/tasks/cli.yaml b/tests/integration/targets/vyos_user/tasks/cli.yaml
new file mode 100644
index 0000000..890d3ac
--- /dev/null
+++ b/tests/integration/targets/vyos_user/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+ include: "{{ test_case_to_run }} ansible_connection=local"
+ with_first_found: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_user/tasks/main.yaml b/tests/integration/targets/vyos_user/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_user/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_user/tests/cli/auth.yaml b/tests/integration/targets/vyos_user/tests/cli/auth.yaml
new file mode 100644
index 0000000..566191e
--- /dev/null
+++ b/tests/integration/targets/vyos_user/tests/cli/auth.yaml
@@ -0,0 +1,34 @@
+---
+- block:
+ - name: Create user with password
+ vyos.vyos.vyos_user:
+ name: auth_user
+ role: admin
+ state: present
+ configured_password: pass123
+
+ - name: test login via ssh with new user
+ expect:
+ command: "ssh auth_user@{{ ansible_ssh_host }} -p {{ ansible_port | default(22) }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no '/opt/vyatta/sbin/vyatta-cfg-cmd-wrapper show version'"
+ responses:
+ (?i)password: "pass123"
+
+ - name: test login via ssh with invalid password (should fail)
+ expect:
+ command: "ssh auth_user@{{ ansible_ssh_host }} -p {{ ansible_port | default(22) }} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no '/opt/vyatta/sbin/vyatta-cfg-cmd-wrapper show version'"
+ responses:
+ (?i)password: "badpass"
+ ignore_errors: yes
+ register: results
+
+ - name: check that attempt failed
+ assert:
+ that:
+ - results.failed
+
+ always:
+ - name: delete user
+ vyos.vyos.vyos_user:
+ name: auth_user
+ state: absent
+ register: result
diff --git a/tests/integration/targets/vyos_user/tests/cli/basic.yaml b/tests/integration/targets/vyos_user/tests/cli/basic.yaml
new file mode 100644
index 0000000..a71f9c6
--- /dev/null
+++ b/tests/integration/targets/vyos_user/tests/cli/basic.yaml
@@ -0,0 +1,77 @@
+---
+- debug: msg="START cli/basic.yaml on connection={{ ansible_connection }}"
+
+- name: Setup
+ vyos.vyos.vyos_config:
+ lines:
+ - delete system login user ansibletest1
+ - delete system login user ansibletest2
+ - delete system login user ansibletest3
+
+- name: Create user
+ vyos.vyos.vyos_user:
+ name: ansibletest1
+ configured_password: test
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - '"set system login user" in result.commands[0]'
+ - '"authentication plaintext-password" in result.commands[0]'
+
+- name: Collection of users (SetUp)
+ vyos.vyos.vyos_user:
+ aggregate:
+ - name: ansibletest2
+ - name: ansibletest3
+ level: operator
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - 'result.commands == ["set system login user ansibletest2 level operator", "set system login user ansibletest3 level operator"]'
+
+- name: Add user again (Idempotent)
+ vyos.vyos.vyos_user:
+ name: ansibletest1
+ configured_password: test
+ state: present
+ update_password: on_create
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+ - 'result.commands | length == 0'
+
+- name: Add collection of users (Idempotent)
+ vyos.vyos.vyos_user:
+ aggregate:
+ - name: ansibletest2
+ - name: ansibletest3
+ level: operator
+ state: present
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == false'
+ - 'result.commands | length == 0'
+
+- name: tearDown
+ vyos.vyos.vyos_user:
+ users:
+ - name: ansibletest1
+ - name: ansibletest2
+ - name: ansibletest3
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - 'result.changed == true'
+ - 'result.commands == ["delete system login user ansibletest1", "delete system login user ansibletest2", "delete system login user ansibletest3"]'
diff --git a/tests/integration/targets/vyos_vlan/aliases b/tests/integration/targets/vyos_vlan/aliases
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/integration/targets/vyos_vlan/aliases
diff --git a/tests/integration/targets/vyos_vlan/defaults/main.yaml b/tests/integration/targets/vyos_vlan/defaults/main.yaml
new file mode 100644
index 0000000..9ef5ba5
--- /dev/null
+++ b/tests/integration/targets/vyos_vlan/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: "*"
+test_items: []
diff --git a/tests/integration/targets/vyos_vlan/tasks/cli.yaml b/tests/integration/targets/vyos_vlan/tasks/cli.yaml
new file mode 100644
index 0000000..890d3ac
--- /dev/null
+++ b/tests/integration/targets/vyos_vlan/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+ find:
+ paths: "{{ role_path }}/tests/cli"
+ patterns: "{{ testcase }}.yaml"
+ register: test_cases
+ delegate_to: localhost
+
+- name: set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test case (connection=network_cli)
+ include: "{{ test_case_to_run }} ansible_connection=network_cli"
+ with_items: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+ include: "{{ test_case_to_run }} ansible_connection=local"
+ with_first_found: "{{ test_items }}"
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_vlan/tasks/main.yaml b/tests/integration/targets/vyos_vlan/tasks/main.yaml
new file mode 100644
index 0000000..415c99d
--- /dev/null
+++ b/tests/integration/targets/vyos_vlan/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/tests/integration/targets/vyos_vlan/tests/cli/basic.yaml b/tests/integration/targets/vyos_vlan/tests/cli/basic.yaml
new file mode 100644
index 0000000..6e4417e
--- /dev/null
+++ b/tests/integration/targets/vyos_vlan/tests/cli/basic.yaml
@@ -0,0 +1,101 @@
+---
+- debug: msg="START cli/basic.yaml on connection={{ ansible_connection }}"
+
+- name: setup - remove vlan used in test
+ vyos.vyos.vyos_config:
+ lines:
+ - delete interfaces ethernet eth1 vif 100
+ - delete interfaces ethernet eth0 vif 5
+ - delete interfaces ethernet eth0 vif 100
+ - delete interfaces ethernet eth0 vif 101
+ - delete interfaces ethernet eth1 vif 201
+
+- name: set vlan with name
+ vyos.vyos.vyos_vlan: &name
+ vlan_id: 100
+ name: vlan-100
+ interfaces: eth1
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+ - "'set interfaces ethernet eth1 vif 100 description vlan-100' in result.commands"
+
+- name: set vlan with name(idempotence)
+ vyos.vyos.vyos_vlan: *name
+ register: result
+
+- assert:
+ that:
+ - "result.changed == false"
+
+- name: set vlan with address
+ vyos.vyos.vyos_vlan: &address
+ vlan_id: 5
+ address: 192.168.5.12/24
+ interfaces: eth0
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+ - "'set interfaces ethernet eth0 vif 5 address 192.168.5.12/24' in result.commands"
+
+- name: set vlan with address(idempotence)
+ vyos.vyos.vyos_vlan: *address
+ register: result
+
+- assert:
+ that:
+ - "result.changed == false"
+
+- name: delete
+ vyos.vyos.vyos_vlan: &delete
+ vlan_id: 100
+ interfaces: eth1
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+ - "'delete interfaces ethernet eth1 vif 100' in result.commands"
+
+- name: delete(idempotence)
+ vyos.vyos.vyos_vlan: *delete
+ register: result
+
+- assert:
+ that:
+ - "result.changed == false"
+
+- name: Create VLANs using aggregate
+ vyos.vyos.vyos_vlan: &agg_vlan
+ aggregate:
+ - { vlan_id: 101, name: voice, interfaces: "eth0" }
+ - { vlan_id: 201, name: mgm, interfaces: "eth1" }
+ state: present
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+ - "'set interfaces ethernet eth0 vif 101 description voice' in result.commands"
+ - "'set interfaces ethernet eth1 vif 201 description mgm' in result.commands"
+
+- name: Create VLANs using aggregate (idempotent)
+ vyos.vyos.vyos_vlan: *agg_vlan
+ register: result
+
+- assert:
+ that:
+ - "result.changed == false"
+
+- name: teardown
+ vyos.vyos.vyos_config:
+ lines:
+ - delete interfaces ethernet eth1 vif 100
+ - delete interfaces ethernet eth0 vif 5
+ - delete interfaces ethernet eth0 vif 101
+ - delete interfaces ethernet eth1 vif 201
diff --git a/tests/integration/targets/vyos_vlan/tests/cli/intent.yaml b/tests/integration/targets/vyos_vlan/tests/cli/intent.yaml
new file mode 100644
index 0000000..7c78937
--- /dev/null
+++ b/tests/integration/targets/vyos_vlan/tests/cli/intent.yaml
@@ -0,0 +1,59 @@
+---
+- debug: msg="START cli/intent.yaml on connection={{ ansible_connection }}"
+
+- name: setup - remove vlan used in test
+ vyos.vyos.vyos_config: &delete
+ lines:
+ - delete interfaces ethernet eth1 vif 100
+ - delete interfaces ethernet eth0 vif 100
+
+- name: set vlan with name
+ vyos.vyos.vyos_vlan:
+ vlan_id: 100
+ name: vlan-100
+ interfaces: eth1
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+ - "'set interfaces ethernet eth1 vif 100 description vlan-100' in result.commands"
+
+- name: check vlan interface intent
+ vyos.vyos.vyos_vlan:
+ vlan_id: 100
+ name: vlan-100
+ associated_interfaces: eth1
+ register: result
+
+- assert:
+ that:
+ - "result.failed == false"
+
+- name: vlan interface config + intent
+ vyos.vyos.vyos_vlan:
+ vlan_id: 100
+ interfaces: eth0
+ associated_interfaces:
+ - eth0
+ - eth1
+ register: result
+
+- assert:
+ that:
+ - "result.failed == false"
+
+- name: vlan intent fail
+ vyos.vyos.vyos_vlan:
+ vlan_id: 100
+ associated_interfaces:
+ - eth3
+ - eth4
+ register: result
+ ignore_errors: yes
+
+- assert:
+ that:
+ - "result.failed == True"
+
+- debug: msg="End cli/intent.yaml on connection={{ ansible_connection }}"
diff --git a/tests/integration/targets/vyos_vlan/tests/cli/multiple.yaml b/tests/integration/targets/vyos_vlan/tests/cli/multiple.yaml
new file mode 100644
index 0000000..53e93fd
--- /dev/null
+++ b/tests/integration/targets/vyos_vlan/tests/cli/multiple.yaml
@@ -0,0 +1,60 @@
+---
+- debug: msg="START cli/multiple.yaml on connection={{ ansible_connection }}"
+
+- name: setup - remove vlan used in test
+ vyos.vyos.vyos_config:
+ lines:
+ - delete interfaces ethernet eth0 vif 5
+ - delete interfaces ethernet eth0 vif 100
+ - delete interfaces ethernet eth1 vif 100
+
+- name: Add multiple interfaces to vlan
+ vyos.vyos.vyos_vlan: &multiple
+ vlan_id: 100
+ interfaces:
+ - eth0
+ - eth1
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+ - "'set interfaces ethernet eth0 vif 100' in result.commands"
+ - "'set interfaces ethernet eth1 vif 100' in result.commands"
+
+- name: Add multiple interfaces to vlan(idempotence)
+ vyos.vyos.vyos_vlan: *multiple
+ register: result
+
+- assert:
+ that:
+ - "result.changed == false"
+
+- name: delete vlan with multiple interfaces
+ vyos.vyos.vyos_vlan: &delete_multiple
+ vlan_id: 100
+ interfaces:
+ - eth0
+ - eth1
+ state: absent
+ register: result
+
+- assert:
+ that:
+ - "result.changed == true"
+ - "'delete interfaces ethernet eth0 vif 100' in result.commands"
+ - "'delete interfaces ethernet eth1 vif 100' in result.commands"
+
+- name: delete vlan with multiple interfaces(idempotence)
+ vyos.vyos.vyos_vlan: *delete_multiple
+ register: result
+
+- assert:
+ that:
+ - "result.changed == false"
+
+- name: teardown
+ vyos.vyos.vyos_config:
+ lines:
+ - delete interfaces ethernet eth0 vif 100
+ - delete interfaces ethernet eth1 vif 100