diff options
Diffstat (limited to 'tests/integration')
163 files changed, 5334 insertions, 0 deletions
| diff --git a/tests/integration/target-prefixes.network b/tests/integration/target-prefixes.network new file mode 100644 index 00000000..0c45ebaf --- /dev/null +++ b/tests/integration/target-prefixes.network @@ -0,0 +1 @@ +vyos
\ No newline at end of file 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 00000000..1a81fb17 --- /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 00000000..539d9574 --- /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 00000000..9ef5ba51 --- /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 00000000..890d3acf --- /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 00000000..415c99d8 --- /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 00000000..5efdf8ed --- /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 00000000..ff6cbad0 --- /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 00000000..8489d87b --- /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 00000000..539d9574 --- /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 00000000..9ef5ba51 --- /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 00000000..890d3acf --- /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 00000000..415c99d8 --- /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 00000000..bf3334f2 --- /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 00000000..08a7675b --- /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 00000000..b8665fa7 --- /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 00000000..672f6e81 --- /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 00000000..bdc8b2a8 --- /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 00000000..e4716ed6 --- /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 00000000..539d9574 --- /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 00000000..9ef5ba51 --- /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 00000000..890d3acf --- /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 00000000..f5d5b551 --- /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 00000000..5e327e8d --- /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 00000000..0ef0986d --- /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 00000000..b90ec7b6 --- /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 00000000..2cd13509 --- /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 00000000..d8e45e25 --- /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 00000000..af211f59 --- /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 00000000..80577059 --- /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 00000000..e5e3edb1 --- /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 00000000..ecc9e8c9 --- /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 00000000..539d9574 --- /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 00000000..9ef5ba51 --- /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 00000000..890d3acf --- /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 00000000..415c99d8 --- /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 00000000..e0a3bcae --- /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 00000000..e69de29b --- /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 00000000..9ef5ba51 --- /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 00000000..890d3acf --- /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 00000000..415c99d8 --- /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 00000000..22957e14 --- /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 00000000..946728db --- /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 00000000..4bdb6ecc --- /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 00000000..164afead --- /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 00000000..e380a13e --- /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 00000000..655e51ee --- /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 00000000..415c99d8 --- /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 00000000..0a44fa45 --- /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 00000000..ce4723df --- /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 00000000..b48f916e --- /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 00000000..89ed893e --- /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 00000000..c9eb1b76 --- /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 00000000..1211f63e --- /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 00000000..3ec4d3de --- /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 00000000..b9737522 --- /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 00000000..e69de29b --- /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 00000000..9ef5ba51 --- /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 00000000..890d3acf --- /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 00000000..415c99d8 --- /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 00000000..9ad69554 --- /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 00000000..164afead --- /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 00000000..e380a13e --- /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 00000000..337e3413 --- /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 00000000..415c99d8 --- /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 00000000..fc0bbb24 --- /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 00000000..95b2b8cc --- /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 00000000..a40901ca --- /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 00000000..64724ef6 --- /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 00000000..6a9b0136 --- /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 00000000..4d449838 --- /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 00000000..f908d2c8 --- /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 00000000..164afead --- /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 00000000..f88bce55 --- /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 00000000..655e51ee --- /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 00000000..415c99d8 --- /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 00000000..c479f797 --- /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 00000000..61395082 --- /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 00000000..1d7ee695 --- /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 00000000..c5d3657f --- /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 00000000..db6fb88d --- /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 00000000..78c9de16 --- /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 00000000..6139d9f0 --- /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 00000000..ce469e06 --- /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 00000000..eb3814eb --- /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 00000000..8726e399 --- /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 00000000..e69de29b --- /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 00000000..9ef5ba51 --- /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 00000000..890d3acf --- /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 00000000..415c99d8 --- /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 00000000..5a022550 --- /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 00000000..93f98e7a --- /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 00000000..539d9574 --- /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 00000000..9ef5ba51 --- /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 00000000..890d3acf --- /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 00000000..415c99d8 --- /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 00000000..badd3a97 --- /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 00000000..e68d5a62 --- /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 00000000..164afead --- /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 00000000..655e51ee --- /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 00000000..415c99d8 --- /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 00000000..088aa7b3 --- /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 00000000..b000a94a --- /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 00000000..79660afd --- /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 00000000..b1687dab --- /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 00000000..22bd8e56 --- /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 00000000..4f8ca9cc --- /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 00000000..f091f2c7 --- /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 00000000..e69de29b --- /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 00000000..9ef5ba51 --- /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 00000000..890d3acf --- /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 00000000..415c99d8 --- /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 00000000..e91091b4 --- /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 00000000..1710b7e2 --- /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 00000000..164afead --- /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 00000000..f88bce55 --- /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 00000000..655e51ee --- /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 00000000..415c99d8 --- /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 00000000..80f7d1a1 --- /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 00000000..ee9a9bda --- /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 00000000..e3abbdb3 --- /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 00000000..bd7c713f --- /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 00000000..ae5b10b2 --- /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 00000000..eedb563e --- /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 00000000..07fec9ed --- /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 00000000..d97cf9c4 --- /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 00000000..6f33343c --- /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 00000000..e69de29b --- /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 00000000..9ef5ba51 --- /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 00000000..890d3acf --- /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 00000000..415c99d8 --- /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 00000000..144f8d38 --- /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 00000000..7c62d72f --- /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 00000000..9ef5ba51 --- /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 00000000..890d3acf --- /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 00000000..415c99d8 --- /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 00000000..1c07980d --- /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 00000000..db837c50 --- /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 00000000..720f95ea --- /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 00000000..539d9574 --- /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 00000000..9ef5ba51 --- /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 00000000..890d3acf --- /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 00000000..415c99d8 --- /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 00000000..122e49a6 --- /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 00000000..e2529ebc --- /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 00000000..9ef5ba51 --- /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 00000000..890d3acf --- /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 00000000..415c99d8 --- /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 00000000..474042fc --- /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 00000000..36888669 --- /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 00000000..e69de29b --- /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 00000000..9ef5ba51 --- /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 00000000..890d3acf --- /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 00000000..415c99d8 --- /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 00000000..566191ee --- /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 00000000..a71f9c6f --- /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 00000000..e69de29b --- /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 00000000..9ef5ba51 --- /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 00000000..890d3acf --- /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 00000000..415c99d8 --- /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 00000000..6e4417ed --- /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 00000000..7c789376 --- /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 00000000..53e93fde --- /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 | 
