diff options
| author | ansible-zuul[bot] <48994755+ansible-zuul[bot]@users.noreply.github.com> | 2020-01-16 18:56:16 +0000 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-01-16 18:56:16 +0000 | 
| commit | 03addce56012d4bd360e18612d2eb3af04d8f01a (patch) | |
| tree | 9cf59872c2ddc7e99595db4f47c72a7ce08b6c10 /tests | |
| parent | d31b74ba6c74a6e3cdebd80b9eb5272aeb9b0fb4 (diff) | |
| parent | 6b6166151faa3d811ae0ec3010a89e518a26287b (diff) | |
| download | vyos.vyos-03addce56012d4bd360e18612d2eb3af04d8f01a.tar.gz vyos.vyos-03addce56012d4bd360e18612d2eb3af04d8f01a.zip | |
Merge pull request #59 from CaptTrews/master
Updated from network content collector
Reviewed-by: https://github.com/apps/ansible-zuul
Diffstat (limited to 'tests')
191 files changed, 3787 insertions, 1673 deletions
| diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 00000000..ea1472ec --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1 @@ +output/ diff --git a/tests/integration/targets/prepare_vyos_tests/tasks/main.yaml b/tests/integration/targets/prepare_vyos_tests/tasks/main.yaml index 5813284c..afbc291e 100644 --- a/tests/integration/targets/prepare_vyos_tests/tasks/main.yaml +++ b/tests/integration/targets/prepare_vyos_tests/tasks/main.yaml @@ -1,13 +1,9 @@  ---  - 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 +    lines: "set interfaces ethernet eth0 address dhcp\nset interfaces ethernet eth0\ +      \ speed auto\nset interfaces ethernet eth0 duplex auto\nset interfaces ethernet\ +      \ eth1\nset interfaces ethernet eth2\ndelete interfaces loopback lo\n"    ignore_errors: true +  ansible.netcommon.cli_config: +    config: '{{ lines }}' diff --git a/tests/integration/targets/vyos_banner/defaults/main.yaml b/tests/integration/targets/vyos_banner/defaults/main.yaml index 9ef5ba51..a845c24b 100644 --- a/tests/integration/targets/vyos_banner/defaults/main.yaml +++ b/tests/integration/targets/vyos_banner/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "*" +testcase: '*'  test_items: [] diff --git a/tests/integration/targets/vyos_banner/tasks/cli.yaml b/tests/integration/targets/vyos_banner/tasks/cli.yaml index 890d3acf..90f265f5 100644 --- a/tests/integration/targets/vyos_banner/tasks/cli.yaml +++ b/tests/integration/targets/vyos_banner/tasks/cli.yaml @@ -1,22 +1,22 @@  ---  - name: collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    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 }}" +- name: run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }} ansible_connection=ansible.netcommon.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 }}" +  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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_banner/tasks/main.yaml +++ b/tests/integration/targets/vyos_banner/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index 5efdf8ed..1ade232f 100644 --- a/tests/integration/targets/vyos_banner/tests/cli/basic-no-login.yaml +++ b/tests/integration/targets/vyos_banner/tests/cli/basic-no-login.yaml @@ -1,41 +1,34 @@  ---  - debug: -    msg: "cli/basic-no-login.yaml on connection={{ ansible_connection }}" +    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 +    text: "Junk pre-login banner\nover multiple lines\n"      state: present  - name: remove pre-login +  register: result    vyos.vyos.vyos_banner:      banner: pre-login      state: absent -  register: result  - debug: -    msg: "{{ result }}" +    msg: '{{ result }}'  - assert:      that: -      - "result.changed == true" +      - result.changed == true        - "'delete system login banner pre-login' in result.commands"  - name: remove pre-login (idempotent) +  register: result    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" +      - result.changed == false +      - result.commands | length == 0 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 index ff6cbad0..17cc07d3 100644 --- a/tests/integration/targets/vyos_banner/tests/cli/basic-post-login.yaml +++ b/tests/integration/targets/vyos_banner/tests/cli/basic-post-login.yaml @@ -1,6 +1,6 @@  ---  - debug: -    msg: "cli/basic-post-login.yaml on connection={{ ansible_connection }}" +    msg: cli/basic-post-login.yaml on connection={{ ansible_connection }}  - name: setup - remove post-login    vyos.vyos.vyos_banner: @@ -8,40 +8,29 @@      state: absent  - name: Set post-login +  register: result    vyos.vyos.vyos_banner:      banner: post-login -    text: | -      this is my post-login banner -      that has a multiline -      string +    text: "this is my post-login banner\nthat has a multiline\nstring\n"      state: present -  register: result  - debug: -    msg: "{{ result }}" +    msg: '{{ result }}'  - assert:      that: -      - "result.changed == true" +      - 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) +  register: result    vyos.vyos.vyos_banner:      banner: post-login -    text: | -      this is my post-login banner -      that has a multiline -      string +    text: "this is my post-login banner\nthat has a multiline\nstring\n"      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" +      - result.changed == false +      - result.commands | length == 0 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 index 8489d87b..526c657e 100644 --- a/tests/integration/targets/vyos_banner/tests/cli/basic-pre-login.yaml +++ b/tests/integration/targets/vyos_banner/tests/cli/basic-pre-login.yaml @@ -1,6 +1,6 @@  ---  - debug: -    msg: "cli/basic-pre-login.yaml on connection={{ ansible_connection }}" +    msg: cli/basic-pre-login.yaml on connection={{ ansible_connection }}  - name: setup - remove pre-login    vyos.vyos.vyos_banner: @@ -8,40 +8,29 @@      state: absent  - name: Set pre-login +  register: result    vyos.vyos.vyos_banner:      banner: pre-login -    text: | -      this is my pre-login banner -      that has a multiline -      string +    text: "this is my pre-login banner\nthat has a multiline\nstring\n"      state: present -  register: result  - debug: -    msg: "{{ result }}" +    msg: '{{ result }}'  - assert:      that: -      - "result.changed == true" +      - 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) +  register: result    vyos.vyos.vyos_banner:      banner: pre-login -    text: | -      this is my pre-login banner -      that has a multiline -      string +    text: "this is my pre-login banner\nthat has a multiline\nstring\n"      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" +      - result.changed == false +      - result.commands | length == 0 diff --git a/tests/integration/targets/vyos_command/defaults/main.yaml b/tests/integration/targets/vyos_command/defaults/main.yaml index 9ef5ba51..a845c24b 100644 --- a/tests/integration/targets/vyos_command/defaults/main.yaml +++ b/tests/integration/targets/vyos_command/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "*" +testcase: '*'  test_items: [] diff --git a/tests/integration/targets/vyos_command/tasks/cli.yaml b/tests/integration/targets/vyos_command/tasks/cli.yaml index 890d3acf..90f265f5 100644 --- a/tests/integration/targets/vyos_command/tasks/cli.yaml +++ b/tests/integration/targets/vyos_command/tasks/cli.yaml @@ -1,22 +1,22 @@  ---  - name: collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    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 }}" +- name: run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }} ansible_connection=ansible.netcommon.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 }}" +  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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_command/tasks/main.yaml +++ b/tests/integration/targets/vyos_command/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index 5ff72fa2..690937fa 100644 --- a/tests/integration/targets/vyos_command/tests/cli/bad_operator.yaml +++ b/tests/integration/targets/vyos_command/tests/cli/bad_operator.yaml @@ -2,14 +2,14 @@  - debug: msg="START cli/bad_operator.yaml on connection={{ ansible_connection }}"  - name: test bad operator +  register: result +  ignore_errors: true    vyos.vyos.vyos_command:      commands:        - show version        - show interfaces      wait_for:        - result[0] is 'VyOS' -  register: result -  ignore_errors: true  - assert:      that: diff --git a/tests/integration/targets/vyos_command/tests/cli/cli_command.yaml b/tests/integration/targets/vyos_command/tests/cli/cli_command.yaml index a10f2bcd..61ed0548 100644 --- a/tests/integration/targets/vyos_command/tests/cli/cli_command.yaml +++ b/tests/integration/targets/vyos_command/tests/cli/cli_command.yaml @@ -1,41 +1,43 @@  ---  - debug: -    msg: "START cli/cli_command.yaml on connection={{ ansible_connection }}" +    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 +      ansible.netcommon.cli_command: +        command: show version      - assert:          that: -          - "result.changed == false" -          - "result.stdout is defined" +          - result.changed == false +          - result.stdout is defined      - name: send invalid command -      network.cli.cli_command: -        command: 'show foo'        register: result        ignore_errors: true +      ansible.netcommon.cli_command: +        command: show foo      - assert:          that: -          - "result.failed == true" -          - "result.msg is defined" -  when: "ansible_connection == 'network_cli'" +          - result.failed == true +          - result.msg is defined +  when: ansible_connection == 'ansible.netcommon.network_cli'  - block: +      - name: test failure for local connection -      network.cli.cli_command: -        command: show version        register: result        ignore_errors: true +      ansible.netcommon.cli_command: +        command: show version      - assert:          that: -          - 'result.failed == true' +          - result.failed == true            - "'Connection type local is not valid for this module' in result.msg" -  when: "ansible_connection == 'local'" +  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 index b8665fa7..efaf811f 100644 --- a/tests/integration/targets/vyos_command/tests/cli/contains.yaml +++ b/tests/integration/targets/vyos_command/tests/cli/contains.yaml @@ -2,6 +2,7 @@  - debug: msg="START cli/contains.yaml on connection={{ ansible_connection }}"  - name: test contains operator +  register: result    vyos.vyos.vyos_command:      commands:        - show version @@ -9,7 +10,6 @@      wait_for:        - result[0] contains VyOS        - result[1] contains eth0 -  register: result  - assert:      that: diff --git a/tests/integration/targets/vyos_command/tests/cli/invalid.yaml b/tests/integration/targets/vyos_command/tests/cli/invalid.yaml index 04d203d4..ac8af3fe 100644 --- a/tests/integration/targets/vyos_command/tests/cli/invalid.yaml +++ b/tests/integration/targets/vyos_command/tests/cli/invalid.yaml @@ -2,21 +2,23 @@  - 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: true +  vyos.vyos.vyos_command: +    commands: show foo -- assert: {that: result.failed} +- assert: +    that: result.failed  - name: run commands that include invalid command +  register: result +  ignore_errors: true    vyos.vyos.vyos_command:      commands:        - show version        - show foo -  register: result -  ignore_errors: true -- assert: {that: result.failed} +- 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 index 1bc0dc67..9ed19067 100644 --- a/tests/integration/targets/vyos_command/tests/cli/output.yaml +++ b/tests/integration/targets/vyos_command/tests/cli/output.yaml @@ -2,9 +2,9 @@  - debug: msg="START cli/output.yaml on connection={{ ansible_connection }}"  - name: get output for single command +  register: result    vyos.vyos.vyos_command:      commands: show version -  register: result  - assert:      that: @@ -13,11 +13,11 @@        - result.stdout_lines is defined  - name: get output for multiple commands +  register: result    vyos.vyos.vyos_command:      commands:        - show version        - show interfaces -  register: result  - assert:      that: @@ -26,14 +26,12 @@        - result.stdout | length == 2  - name: Get output for multiple commands that call less explicitly +  register: result    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: diff --git a/tests/integration/targets/vyos_command/tests/cli/timeout.yaml b/tests/integration/targets/vyos_command/tests/cli/timeout.yaml index 57120ac6..fceea5c5 100644 --- a/tests/integration/targets/vyos_command/tests/cli/timeout.yaml +++ b/tests/integration/targets/vyos_command/tests/cli/timeout.yaml @@ -2,13 +2,13 @@  - debug: msg="START cli/timeout.yaml on connection={{ ansible_connection }}"  - name: test bad condition +  register: result +  ignore_errors: true    vyos.vyos.vyos_command:      commands:        - show version      wait_for:        - result[0] contains bad_value_string -  register: result -  ignore_errors: true  - assert:      that: diff --git a/tests/integration/targets/vyos_config/defaults/main.yaml b/tests/integration/targets/vyos_config/defaults/main.yaml index 9ef5ba51..a845c24b 100644 --- a/tests/integration/targets/vyos_config/defaults/main.yaml +++ b/tests/integration/targets/vyos_config/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "*" +testcase: '*'  test_items: [] diff --git a/tests/integration/targets/vyos_config/tasks/cli.yaml b/tests/integration/targets/vyos_config/tasks/cli.yaml index 890d3acf..90f265f5 100644 --- a/tests/integration/targets/vyos_config/tasks/cli.yaml +++ b/tests/integration/targets/vyos_config/tasks/cli.yaml @@ -1,22 +1,22 @@  ---  - name: collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    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 }}" +- name: run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }} ansible_connection=ansible.netcommon.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 }}" +  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 index f5d5b551..98bd1fce 100644 --- a/tests/integration/targets/vyos_config/tasks/cli_config.yaml +++ b/tests/integration/targets/vyos_config/tasks/cli_config.yaml @@ -1,16 +1,16 @@  ---  - name: collect all cli_config test cases    find: -    paths: "{{ role_path }}/tests/cli_config" -    patterns: "{{ testcase }}.yaml" +    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 }}" +- name: run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }} ansible_connection=ansible.netcommon.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 index 13977a44..8d10ebb2 100644 --- a/tests/integration/targets/vyos_config/tasks/main.yaml +++ b/tests/integration/targets/vyos_config/tasks/main.yaml @@ -1,3 +1,8 @@  --- -- {include: cli.yaml, tags: ['cli']} -- {include: cli_config.yaml, tags: ['cli_config']} +- 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 index af6a772f..ae59a0d5 100644 --- a/tests/integration/targets/vyos_config/tests/cli/backup.yaml +++ b/tests/integration/targets/vyos_config/tests/cli/backup.yaml @@ -3,111 +3,111 @@  - name: collect any backup files    find: -    paths: "{{ role_path }}/backup" -    pattern: "{{ inventory_hostname_short }}_config*" +    paths: '{{ role_path }}/backup' +    pattern: '{{ inventory_hostname_short }}_config*'    register: backup_files    connection: local  - name: delete backup files    file: -    path: "{{ item.path }}" +    path: '{{ item.path }}'      state: absent -  with_items: "{{backup_files.files|default([])}}" +  with_items: '{{backup_files.files|default([])}}'  - name: take configure backup +  register: result    vyos.vyos.vyos_config:      backup: true -  register: result  - assert:      that: -      - "result.changed == true" +      - result.changed == true  - name: collect any backup files    find: -    paths: "{{ role_path }}/backup" -    pattern: "{{ inventory_hostname_short }}_config*" +    paths: '{{ role_path }}/backup' +    pattern: '{{ inventory_hostname_short }}_config*'    register: backup_files    connection: local  - assert:      that: -      - "backup_files.files is defined" +      - backup_files.files is defined  - name: delete configurable backup file path    file: -    path: "{{ item }}" +    path: '{{ item }}'      state: absent    with_items: -    - "{{ role_path }}/backup_test_dir/" -    - "{{ role_path }}/backup/backup.cfg" +    - '{{ role_path }}/backup_test_dir/' +    - '{{ role_path }}/backup/backup.cfg'  - name: take configuration backup in custom filename and directory path +  become: true +  register: result    vyos.vyos.vyos_config:      backup: true      backup_options:        filename: backup.cfg -      dir_path: "{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}" -  become: true -  register: result +      dir_path: '{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}'  - assert:      that: -      - "result.changed == true" +      - result.changed == true  - name: check if the backup file-1 exist    find: -    paths: "{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}/backup.cfg" +    paths: '{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}/backup.cfg'    register: backup_file    connection: local  - assert:      that: -      - "backup_file.files is defined" +      - backup_file.files is defined  - name: take configuration backup in custom filename +  become: true +  register: result    vyos.vyos.vyos_config:      backup: true      backup_options:        filename: backup.cfg -  become: true -  register: result  - assert:      that: -      - "result.changed == true" +      - result.changed == true  - name: check if the backup file-2 exist    find: -    paths: "{{ role_path }}/backup/backup.cfg" +    paths: '{{ role_path }}/backup/backup.cfg'    register: backup_file    connection: local  - assert:      that: -      - "backup_file.files is defined" +      - backup_file.files is defined  - name: take configuration backup in custom path and default filename +  become: true +  register: result    vyos.vyos.vyos_config:      backup: true      backup_options: -      dir_path: "{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}" -  become: true -  register: result +      dir_path: '{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}'  - assert:      that: -      - "result.changed == true" +      - 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*" +    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" +      - 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 index f1ddc71b..4300c10e 100644 --- a/tests/integration/targets/vyos_config/tests/cli/check_config.yaml +++ b/tests/integration/targets/vyos_config/tests/cli/check_config.yaml @@ -6,58 +6,52 @@      lines: delete interfaces loopback lo  - name: setup- create interface +  register: result    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" +      - '{{ result.commands|length }} == 1'  - name: Check that set is correctly prepended    assert:      that: -      - "result.commands[0] == 'set interfaces loopback lo description test'" +      - result.commands[0] == 'set interfaces loopback lo description test'  - name: configure config_check config command +  register: result    vyos.vyos.vyos_config:      lines: delete interfaces loopback lo -  register: result  - assert:      that: -      - "result.changed == true" +      - result.changed == true  - name: check config_check config command idempontent +  register: result    vyos.vyos.vyos_config:      lines: delete interfaces loopback lo -  register: result  - assert:      that: -      - "result.changed == false" +      - result.changed == false  - name: check multiple line config filter is working +  register: result    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" +      - '{{ 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 index 2cd13509..30325856 100644 --- a/tests/integration/targets/vyos_config/tests/cli/comment.yaml +++ b/tests/integration/targets/vyos_config/tests/cli/comment.yaml @@ -7,20 +7,20 @@      match: none  - name: configure using comment +  register: result    vyos.vyos.vyos_config:      lines: set system host-name foo      comment: this is a test -  register: result  - assert:      that: -      - "result.changed == true" +      - result.changed == true        - "'set system host-name foo' in result.commands"  - name: collect system commits +  register: result    vyos.vyos.vyos_command:      commands: show system commit -  register: result  - assert:      that: diff --git a/tests/integration/targets/vyos_config/tests/cli/config.cfg b/tests/integration/targets/vyos_config/tests/cli/config.cfg new file mode 100644 index 00000000..36c98f19 --- /dev/null +++ b/tests/integration/targets/vyos_config/tests/cli/config.cfg @@ -0,0 +1,3 @@ +    set service lldp +       set protocols static + diff --git a/tests/integration/targets/vyos_config/tests/cli/save.yaml b/tests/integration/targets/vyos_config/tests/cli/save.yaml index d8e45e25..e8a9035b 100644 --- a/tests/integration/targets/vyos_config/tests/cli/save.yaml +++ b/tests/integration/targets/vyos_config/tests/cli/save.yaml @@ -7,43 +7,43 @@      match: none  - name: configure hostaname and save +  register: result    vyos.vyos.vyos_config:      lines: set system host-name foo      save: true -  register: result  - assert:      that: -      - "result.changed == true" +      - result.changed == true        - "'set system host-name foo' in result.commands"  - name: configure hostaname and don't save +  register: result    vyos.vyos.vyos_config:      lines: set system host-name bar -  register: result  - assert:      that: -      - "result.changed == true" +      - result.changed == true        - "'set system host-name bar' in result.commands"  - name: save config +  register: result    vyos.vyos.vyos_config:      save: true -  register: result  - assert:      that: -      - "result.changed == true" +      - result.changed == true  - name: save config again +  register: result    vyos.vyos.vyos_config:      save: true -  register: result  - assert:      that: -      - "result.changed == false" +      - result.changed == false  - name: teardown    vyos.vyos.vyos_config: diff --git a/tests/integration/targets/vyos_config/tests/cli/simple.yaml b/tests/integration/targets/vyos_config/tests/cli/simple.yaml index af211f59..4e2db4e9 100644 --- a/tests/integration/targets/vyos_config/tests/cli/simple.yaml +++ b/tests/integration/targets/vyos_config/tests/cli/simple.yaml @@ -7,23 +7,43 @@      match: none  - name: configure simple config command +  register: result    vyos.vyos.vyos_config:      lines: set system host-name foo -  register: result  - assert:      that: -      - "result.changed == true" +      - result.changed == true        - "'set system host-name foo' in result.commands"  - name: check simple config command idempontent +  register: result    vyos.vyos.vyos_config:      lines: set system host-name foo + +- assert: +    that: +      - result.changed == false + +- name: Delete services +  vyos.vyos.vyos_config: &id001 +    lines: +      - delete service lldp +      - delete protocols static + +- name: Configuring when commands starts with whitespaces    register: result +  vyos.vyos.vyos_config: +    src: '{{ role_path }}/tests/cli/config.cfg'  - assert:      that: -      - "result.changed == false" +      - result.changed == true +      - '"set service lldp" in result.commands' +      - '"set protocols static" in result.commands' + +- name: Delete services +  vyos.vyos.vyos_config: *id001  - name: teardown    vyos.vyos.vyos_config: 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 index a573d6cc..3880a040 100644 --- a/tests/integration/targets/vyos_config/tests/cli_config/cli_backup.yaml +++ b/tests/integration/targets/vyos_config/tests/cli_config/cli_backup.yaml @@ -3,112 +3,112 @@  - name: delete configurable backup file path    file: -    path: "{{ item }}" +    path: '{{ item }}'      state: absent    with_items: -    - "{{ role_path }}/backup_test_dir/" -    - "{{ role_path }}/backup/backup.cfg" +    - '{{ 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*" +    paths: '{{ role_path }}/backup' +    pattern: '{{ inventory_hostname_short }}_config*'    register: backup_files    connection: local  - name: delete backup files    file: -    path: "{{ item.path }}" +    path: '{{ item.path }}'      state: absent -  with_items: "{{backup_files.files|default([])}}" +  with_items: '{{backup_files.files|default([])}}'  - name: take config backup -  network.cli.cli_config: -    backup: true    become: true    register: result +  ansible.netcommon.cli_config: +    backup: true  - assert:      that: -      - "result.changed == true" +      - result.changed == true  - name: collect any backup files    find: -    paths: "{{ role_path }}/backup" -    pattern: "{{ inventory_hostname_short }}_config*" +    paths: '{{ role_path }}/backup' +    pattern: '{{ inventory_hostname_short }}_config*'    register: backup_files    connection: local  - assert:      that: -      - "backup_files.files is defined" +      - backup_files.files is defined  - name: take configuration backup in custom filename and directory path -  network.cli.cli_config: +  become: true +  register: result +  ansible.netcommon.cli_config:      backup: true      backup_options:        filename: backup.cfg -      dir_path: "{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}" -  become: true -  register: result +      dir_path: '{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}'  - assert:      that: -      - "result.changed == true" +      - result.changed == true  - name: check if the backup file-1 exist    find: -    paths: "{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}/backup.cfg" +    paths: '{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}/backup.cfg'    register: backup_file    connection: local  - assert:      that: -      - "backup_file.files is defined" +      - backup_file.files is defined  - name: take configuration backup in custom filename -  network.cli.cli_config: +  become: true +  register: result +  ansible.netcommon.cli_config:      backup: true      backup_options:        filename: backup.cfg -  become: true -  register: result  - assert:      that: -      - "result.changed == true" +      - result.changed == true  - name: check if the backup file-2 exist    find: -    paths: "{{ role_path }}/backup/backup.cfg" +    paths: '{{ role_path }}/backup/backup.cfg'    register: backup_file    connection: local  - assert:      that: -      - "backup_file.files is defined" +      - backup_file.files is defined  - name: take configuration backup in custom path and default filename -  network.cli.cli_config: -    backup: true -    backup_options: -      dir_path: "{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}"    become: true    register: result +  ansible.netcommon.cli_config: +    backup: true +    backup_options: +      dir_path: '{{ role_path }}/backup_test_dir/{{ inventory_hostname_short }}'  - assert:      that: -      - "result.changed == true" +      - 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*" +    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" +      - 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 index e5e3edb1..6b711443 100644 --- a/tests/integration/targets/vyos_config/tests/cli_config/cli_basic.yaml +++ b/tests/integration/targets/vyos_config/tests/cli_config/cli_basic.yaml @@ -1,28 +1,30 @@  --- -- debug: msg="START cli_config/cli_basic.yaml on connection={{ ansible_connection }}" +- debug: msg="START cli_config/cli_basic.yaml on connection={{ ansible_connection +    }}"  - name: setup - remove interface description -  network.cli.cli_config: &rm +  ansible.netcommon.cli_config: &id002      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 +  ansible.netcommon.cli_config: &id001 +    config: set interfaces loopback lo description 'this is a test'  - assert:      that: -      - "result.changed == true" +      - result.changed == true  - name: Idempotence -  network.cli.cli_config: *conf    register: result +  ansible.netcommon.cli_config: *id001  - assert:      that: -      - "result.changed == false" +      - result.changed == false  - name: teardown -  network.cli.cli_config: *rm +  ansible.netcommon.cli_config: *id002 -- debug: msg="END cli_config/cli_basic.yaml on connection={{ ansible_connection }}" +- 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 index ecc9e8c9..030b75d2 100644 --- a/tests/integration/targets/vyos_config/tests/cli_config/cli_comment.yaml +++ b/tests/integration/targets/vyos_config/tests/cli_config/cli_comment.yaml @@ -1,30 +1,32 @@  --- -- debug: msg="START cli_config/cli_comment.yaml on connection={{ ansible_connection }}" +- debug: msg="START cli_config/cli_comment.yaml on connection={{ ansible_connection +    }}"  - name: setup -  network.cli.cli_config: &rm +  ansible.netcommon.cli_config: &id001      config: set system host-name {{ inventory_hostname_short }}  - name: configure using comment -  network.cli.cli_config: +  register: result +  ansible.netcommon.cli_config:      config: set system host-name foo      commit_comment: this is a test -  register: result  - assert:      that: -      - "result.changed == true" +      - result.changed == true  - name: collect system commits +  register: result    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 +  ansible.netcommon.cli_config: *id001 -- debug: msg="END cli_config/cli_comment.yaml on connection={{ ansible_connection }}" +- debug: msg="END cli_config/cli_comment.yaml on connection={{ ansible_connection +    }}" diff --git a/tests/integration/targets/vyos_facts/defaults/main.yaml b/tests/integration/targets/vyos_facts/defaults/main.yaml index 9ef5ba51..a845c24b 100644 --- a/tests/integration/targets/vyos_facts/defaults/main.yaml +++ b/tests/integration/targets/vyos_facts/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "*" +testcase: '*'  test_items: [] diff --git a/tests/integration/targets/vyos_facts/tasks/cli.yaml b/tests/integration/targets/vyos_facts/tasks/cli.yaml index 890d3acf..90f265f5 100644 --- a/tests/integration/targets/vyos_facts/tasks/cli.yaml +++ b/tests/integration/targets/vyos_facts/tasks/cli.yaml @@ -1,22 +1,22 @@  ---  - name: collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    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 }}" +- name: run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }} ansible_connection=ansible.netcommon.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 }}" +  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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_facts/tasks/main.yaml +++ b/tests/integration/targets/vyos_facts/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index 33382eac..5802f731 100644 --- a/tests/integration/targets/vyos_facts/tests/cli/basic_facts.yaml +++ b/tests/integration/targets/vyos_facts/tests/cli/basic_facts.yaml @@ -1,46 +1,42 @@  ---  - name: get host name +  register: vyos_host    vyos.vyos.vyos_command:      commands:        - show host name -  register: vyos_host  - name: get version info +  register: vyos_version    vyos.vyos.vyos_command:      commands:        - show version -  register: vyos_version  - name: collect all facts from the device +  register: result    vyos.vyos.vyos_facts:      gather_subset: all -  register: result -- name: "check that hostname is present" +- 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" +- 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" +- 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" +- 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/defaults/main.yaml b/tests/integration/targets/vyos_interface/defaults/main.yaml index 9ef5ba51..a845c24b 100644 --- a/tests/integration/targets/vyos_interface/defaults/main.yaml +++ b/tests/integration/targets/vyos_interface/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "*" +testcase: '*'  test_items: [] diff --git a/tests/integration/targets/vyos_interface/tasks/cli.yaml b/tests/integration/targets/vyos_interface/tasks/cli.yaml index 890d3acf..90f265f5 100644 --- a/tests/integration/targets/vyos_interface/tasks/cli.yaml +++ b/tests/integration/targets/vyos_interface/tasks/cli.yaml @@ -1,22 +1,22 @@  ---  - name: collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    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 }}" +- name: run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }} ansible_connection=ansible.netcommon.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 }}" +  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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_interface/tasks/main.yaml +++ b/tests/integration/targets/vyos_interface/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index 168d666d..b50d7daf 100644 --- a/tests/integration/targets/vyos_interface/tests/cli/basic.yaml +++ b/tests/integration/targets/vyos_interface/tests/cli/basic.yaml @@ -2,10 +2,10 @@  - debug: msg="START cli/basic.yaml on connection={{ ansible_connection }}"  - name: Run vyos lsmod command +  register: lsmod_out    vyos.vyos.vyos_command:      commands:        - lsmod -  register: lsmod_out  - name: Set up - delete interface    vyos.vyos.vyos_interface: @@ -13,19 +13,21 @@      state: absent  - name: Set up - Create interface +  register: result    vyos.vyos.vyos_interface:      name: eth1      state: present      description: test-interface -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set interfaces ethernet eth1" in result.commands' -      - '"set interfaces ethernet eth1 description ''test-interface''" in result.commands' +      - "\"set interfaces ethernet eth1 description 'test-interface'\" in result.commands"  - name: Configure interface params +  when: "'virtio_net' not in lsmod_out.stdout[0]" +  register: result    vyos.vyos.vyos_interface:      name: eth1      state: present @@ -33,19 +35,19 @@      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' +      - 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) +  register: result +  when: "'virtio_net' not in lsmod_out.stdout[0]"    vyos.vyos.vyos_interface:      name: eth1      state: present @@ -53,15 +55,15 @@      speed: 100      duplex: half      mtu: 256 -  register: result -  when: "'virtio_net' not in lsmod_out.stdout[0]"  - assert:      that: -      - 'result.changed == false' +      - result.changed == false    when: "'virtio' not in lsmod_out.stdout[0]"  - name: Change interface params +  register: result +  when: "'virtio_net' not in lsmod_out.stdout[0]"    vyos.vyos.vyos_interface:      name: eth1      state: present @@ -69,152 +71,178 @@      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' +      - 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 +  register: result    vyos.vyos.vyos_interface:      name: eth1      enabled: false -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set interfaces ethernet eth1 disable" in result.commands'  - name: Enable interface +  register: result    vyos.vyos.vyos_interface:      name: eth1      enabled: true -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"delete interfaces ethernet eth1 disable" in result.commands'  - name: Delete interface +  register: result    vyos.vyos.vyos_interface:      name: eth1      state: absent -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"delete interfaces ethernet eth1" in result.commands'  - name: Delete interface (idempotent) +  register: result    vyos.vyos.vyos_interface:      name: eth1      state: absent -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Aggregate setup- delete interface +  register: result    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]" +  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  - assert:      that: -      - 'result.changed == true' -      - '"set interfaces ethernet eth1 description ''test-interface-1''" in result.commands' +      - 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 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]" +  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  - assert:      that: -      - 'result.changed == false' +      - result.changed == false    when: "'virtio_net' not in lsmod_out.stdout[0]"  - name: Disable interface on aggregate +  register: result    vyos.vyos.vyos_interface:      aggregate: +        - name: eth1 +        - name: eth2      description: test-interface      enabled: false -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set interfaces ethernet eth1 disable" in result.commands'        - '"set interfaces ethernet eth2 disable" in result.commands'  - name: Enable interface on aggregate +  register: result    vyos.vyos.vyos_interface:      aggregate: +        - name: eth1 +        - name: eth2      enabled: true -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"delete interfaces ethernet eth1 disable" in result.commands'        - '"delete interfaces ethernet eth2 disable" in result.commands'  - name: Delete interface aggregate +  register: result    vyos.vyos.vyos_interface:      aggregate: +        - name: eth1 +        - name: eth2      state: absent -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"delete interfaces ethernet eth1" in result.commands'        - '"delete interfaces ethernet eth2" in result.commands'  - name: Delete interface aggregate (idempotent) +  register: result    vyos.vyos.vyos_interface:      aggregate: +        - name: eth1 +        - name: eth2      state: absent -  register: result  - assert:      that: -      - 'result.changed == false' +      - 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 index 1c14a7b8..69ab7795 100644 --- a/tests/integration/targets/vyos_interface/tests/cli/intent.yaml +++ b/tests/integration/targets/vyos_interface/tests/cli/intent.yaml @@ -1,157 +1,160 @@  ---  - 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 +  register: neighbors_out    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 +  when: run_lldp_tests    vyos.vyos.vyos_lldp:      state: present -  when: run_lldp_tests  - name: Create LLDP configuration +  when: run_lldp_tests    vyos.vyos.vyos_lldp_interface:      name: eth1      state: present -  when: run_lldp_tests  - name: Setup (interface is up) +  register: result    vyos.vyos.vyos_interface:      name: eth1      enabled: true      state: present -  register: result  - name: Check intent arguments +  register: result    vyos.vyos.vyos_interface:      name: eth1      state: up -  register: result  - assert:      that: -      - "result.failed == false" +      - result.failed == false  - name: Check lldp neighbors intent arguments +  when: run_lldp_tests +  register: result    vyos.vyos.vyos_interface:      name: eth0      neighbors: +        - port: eth0 -  when: run_lldp_tests -  register: result  - assert:      that: -      - "result.failed == false" +      - result.failed == false    when: run_lldp_tests  - name: Check intent arguments (failed condition) +  ignore_errors: true +  register: result    vyos.vyos.vyos_interface:      name: eth1      state: down -  ignore_errors: true -  register: result  - assert:      that: -      - "result.failed == true" +      - result.failed == true        - "'state eq(down)' in result.failed_conditions"  - name: Check lldp neighbors intent arguments (failed) +  ignore_errors: true +  when: run_lldp_tests +  register: result    vyos.vyos.vyos_interface:      name: eth0      neighbors: +        - port: dummy_port          host: dummy_host -  ignore_errors: true -  when: run_lldp_tests -  register: result  - assert:      that: -      - "result.failed == true" +      - result.failed == true        - "'host dummy_host' in result.failed_conditions"        - "'port dummy_port' in result.failed_conditions"    when: run_lldp_tests  - name: Config + intent +  register: result    vyos.vyos.vyos_interface:      name: eth1      enabled: false      state: down -  register: result  - assert:      that: -      - "result.failed == false" +      - result.failed == false  - name: Config + intent (fail) +  ignore_errors: true +  register: result    vyos.vyos.vyos_interface:      name: eth1      enabled: false      state: up -  ignore_errors: true -  register: result  - assert:      that: -      - "result.failed == true" +      - result.failed == true        - "'state eq(up)' in result.failed_conditions"  - name: Aggregate config + intent (pass) +  ignore_errors: true +  register: result    vyos.vyos.vyos_interface:      aggregate: +        - name: eth1          enabled: true          state: up -  ignore_errors: true -  register: result  - assert:      that: -      - "result.failed == false" +      - result.failed == false  - name: Check lldp neighbors intent aggregate arguments +  when: run_lldp_tests +  register: result    vyos.vyos.vyos_interface:      aggregate: +        - name: eth0          neighbors: +            - port: eth0 -  when: run_lldp_tests -  register: result  - assert:      that: -      - "result.failed == false" +      - result.failed == false    when: run_lldp_tests  - name: Check lldp neighbors intent aggregate arguments (failed) +  ignore_errors: true +  when: run_lldp_tests +  register: result    vyos.vyos.vyos_interface:      aggregate: +        - name: eth0          neighbors: +            - port: eth0 +            - port: dummy_port              host: dummy_host -  ignore_errors: true -  when: run_lldp_tests -  register: result  - assert:      that: -      - "result.failed == true" +      - 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 index 4bdb6ecc..045daa25 100644 --- a/tests/integration/targets/vyos_interface/tests/cli/net_interface.yaml +++ b/tests/integration/targets/vyos_interface/tests/cli/net_interface.yaml @@ -1,56 +1,55 @@  --- -- 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. +- debug: msg="START vyos cli/net_interface.yaml on connection={{ ansible_connection +    }}"  - name: Run vyos lsmod command +  register: lsmod_out    vyos.vyos.vyos_command:      commands:        - lsmod -  register: lsmod_out  - name: Set up - delete interface -  net_interface: +  ansible.netcommon.net_interface:      name: eth1      state: absent  - name: Create interface using platform agnostic module -  net_interface: +  register: result +  ansible.netcommon.net_interface:      name: eth1      state: present      description: test-interface -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set interfaces ethernet eth1" in result.commands' -      - '"set interfaces ethernet eth1 description ''test-interface''" in result.commands' +      - "\"set interfaces ethernet eth1 description 'test-interface'\" in result.commands"  - name: Configure interface params using platform agnostic module -  net_interface: +  when: "'virtio_net' not in lsmod_out.stdout[0]" +  register: result +  ansible.netcommon.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' +      - 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: +  ansible.netcommon.net_interface:      name: eth1      state: absent -- debug: msg="END vyos cli/net_interface.yaml on connection={{ ansible_connection }}" +- 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 index 164afead..852a6bee 100644 --- a/tests/integration/targets/vyos_interfaces/defaults/main.yaml +++ b/tests/integration/targets/vyos_interfaces/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "[^_].*" +testcase: '[^_].*'  test_items: [] diff --git a/tests/integration/targets/vyos_interfaces/tasks/cli.yaml b/tests/integration/targets/vyos_interfaces/tasks/cli.yaml index 655e51ee..93eb2fe4 100644 --- a/tests/integration/targets/vyos_interfaces/tasks/cli.yaml +++ b/tests/integration/targets/vyos_interfaces/tasks/cli.yaml @@ -1,8 +1,8 @@  ---  - name: Collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    paths: '{{ role_path }}/tests/cli' +    patterns: '{{ testcase }}.yaml'      use_regex: true    register: test_cases    delegate_to: localhost @@ -10,10 +10,10 @@  - 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 }}" +- name: Run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }}'    vars: -    ansible_connection: network_cli -  with_items: "{{ test_items }}" +    ansible_connection: ansible.netcommon.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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_interfaces/tasks/main.yaml +++ b/tests/integration/targets/vyos_interfaces/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index 4dd5f18a..686236f2 100644 --- a/tests/integration/targets/vyos_interfaces/tests/cli/_populate.yaml +++ b/tests/integration/targets/vyos_interfaces/tests/cli/_populate.yaml @@ -1,17 +1,15 @@  ---  - 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' +    lines: "set interfaces ethernet \"{{ intf }}\" description 'Configured by Ansible'\n\ +      set interfaces ethernet \"{{ intf }}\" speed 'auto'\nset interfaces ethernet\ +      \ \"{{ intf }}\" duplex 'auto'\nset interfaces ethernet \"{{ intf }}\" mtu\ +      \ '1500'\nset interfaces ethernet \"{{ intf }}\" vif 200\nset interfaces ethernet\ +      \ \"{{ intf }}\" vif 200 description 'VIF - 200'\n"    loop:      - eth1      - eth2    loop_control:      loop_var: intf +  ansible.netcommon.cli_config: +    config: '{{ lines }}' diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml index 9157f552..298cf5d7 100644 --- a/tests/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml +++ b/tests/integration/targets/vyos_interfaces/tests/cli/_remove_config.yaml @@ -1,17 +1,15 @@  ---  - 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 +    lines: "delete interfaces ethernet \"{{ intf }}\" description\ndelete interfaces\ +      \ ethernet \"{{ intf }}\" speed\ndelete interfaces ethernet \"{{ intf }}\"\ +      \ duplex\ndelete interfaces ethernet \"{{ intf }}\" mtu\ndelete interfaces\ +      \ ethernet \"{{ intf }}\" disable\ndelete interfaces ethernet \"{{ intf }}\"\ +      \ vif\n"    loop:      - eth1      - eth2    loop_control:      loop_var: intf +  ansible.netcommon.cli_config: +    config: '{{ lines }}' diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/deleted.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/deleted.yaml index fc86ca75..56e747a9 100644 --- a/tests/integration/targets/vyos_interfaces/tests/cli/deleted.yaml +++ b/tests/integration/targets/vyos_interfaces/tests/cli/deleted.yaml @@ -1,17 +1,21 @@  ---  - debug: -    msg: "Start vyos_interfaces deleted integration tests ansible_connection={{ ansible_connection }}" +    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 +      register: result +      vyos.vyos.vyos_interfaces: &id001          config: +            - name: eth1 +            - name: eth2          state: deleted -      register: result      - name: Assert that the before dicts were correctly generated        assert: @@ -21,26 +25,29 @@      - name: Assert that the correct set of commands were generated        assert:          that: -          - "{{ deleted['commands'] | symmetric_difference(result['commands']) |length == 0 }}" +          - "{{ 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 }}" +          - "{{ deleted['after'] | symmetric_difference(result['after']) |length\ +            \ == 0 }}"      - name: Delete attributes of given interfaces (IDEMPOTENT) -      vyos.vyos.vyos_interfaces: *deleted        register: result +      vyos.vyos.vyos_interfaces: *id001      - name: Assert that the previous task was idempotent        assert:          that: -          - "result.changed == false" +          - result.changed == false      - name: Assert that the before dicts were correctly generated        assert:          that: -          - "{{ deleted['after'] | symmetric_difference(result['before']) |length == 0 }}" - +          - "{{ deleted['after'] | symmetric_difference(result['before']) |length\ +            \ == 0 }}"    always: +      - include_tasks: _remove_config.yaml diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/empty_config.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/empty_config.yaml index 4a72c8aa..e1e154dc 100644 --- a/tests/integration/targets/vyos_interfaces/tests/cli/empty_config.yaml +++ b/tests/integration/targets/vyos_interfaces/tests/cli/empty_config.yaml @@ -1,35 +1,36 @@  ---  - debug: -    msg: "START vyos_interfaces empty_config integration tests on connection={{ ansible_connection }}" +    msg: START vyos_interfaces empty_config integration tests on connection={{ ansible_connection +      }}  - name: Merged with empty config should give appropriate error message +  register: result +  ignore_errors: true    vyos.vyos.vyos_interfaces:      config:      state: merged -  register: result -  ignore_errors: true  - assert:      that:        - result.msg == 'value of config parameter must not be empty for state merged'  - name: Replaced with empty config should give appropriate error message +  register: result +  ignore_errors: true    vyos.vyos.vyos_interfaces:      config:      state: replaced -  register: result -  ignore_errors: true  - assert:      that:        - result.msg == 'value of config parameter must not be empty for state replaced'  - name: Overridden with empty config should give appropriate error message +  register: result +  ignore_errors: true    vyos.vyos.vyos_interfaces:      config:      state: overridden -  register: result -  ignore_errors: true  - assert:      that: diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/merged.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/merged.yaml index 50e49367..e0fa0b97 100644 --- a/tests/integration/targets/vyos_interfaces/tests/cli/merged.yaml +++ b/tests/integration/targets/vyos_interfaces/tests/cli/merged.yaml @@ -1,59 +1,69 @@  ---  - debug: -    msg: "START vyos_interfaces merged integration tests on connection={{ ansible_connection }}" +    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 +      register: result +      vyos.vyos.vyos_interfaces: &id001          config: +            - name: eth1 -            description: "Configured by Ansible - Interface 1" +            description: Configured by Ansible - Interface 1              mtu: 1500              speed: auto              duplex: auto              vifs: +                - vlan_id: 100 -                description: "Eth1 - VIF 100" +                description: Eth1 - VIF 100                  mtu: 400                - vlan_id: 101 -                description: "Eth1 - VIF 101" +                description: Eth1 - VIF 101            - name: eth2 -            description: "Configured by Ansible - Interface 2 (ADMIN DOWN)" +            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 }}" +        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 }}" +          - "{{ 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 }}" +          - "{{ merged['after'] | symmetric_difference(result['after']) |length\ +            \ == 0 }}" -    - name: Merge the provided configuration with the existing running configuration (IDEMPOTENT) -      vyos.vyos.vyos_interfaces: *merged +    - name: Merge the provided configuration with the existing running configuration +        (IDEMPOTENT)        register: result +      vyos.vyos.vyos_interfaces: *id001      - name: Assert that the previous task was idempotent        assert:          that: -          - "result['changed'] == false" +          - result['changed'] == false      - name: Assert that before dicts were correctly generated        assert:          that: -          - "{{ merged['after'] | symmetric_difference(result['before']) |length == 0 }}" +          - "{{ 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 index 74669f73..9921e5dd 100644 --- a/tests/integration/targets/vyos_interfaces/tests/cli/overridden.yaml +++ b/tests/integration/targets/vyos_interfaces/tests/cli/overridden.yaml @@ -1,23 +1,27 @@  ---  - debug: -    msg: "START vyos_interfaces overridden integration tests on connection={{ ansible_connection }}" +    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 +      register: result +      vyos.vyos.vyos_interfaces: &id001          config: +            - name: eth0 -            speed: "auto" -            duplex: "auto" +            speed: auto +            duplex: auto +            - name: eth2 -            description: "Overridden by Ansible" +            description: Overridden by Ansible              mtu: 1200          state: overridden -      register: result      - name: Assert that before dicts were correctly generated        assert: @@ -27,26 +31,29 @@      - name: Assert that correct commands were generated        assert:          that: -          - "{{ overridden['commands'] | symmetric_difference(result['commands']) |length == 0 }}" +          - "{{ 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 }}" +          - "{{ overridden['after'] | symmetric_difference(result['after']) |length\ +            \ == 0 }}"      - name: Overrides all device configuration with provided configurations (IDEMPOTENT) -      vyos.vyos.vyos_interfaces: *overridden        register: result +      vyos.vyos.vyos_interfaces: *id001      - name: Assert that the previous task was idempotent        assert:          that: -          - "result['changed'] == false" +          - result['changed'] == false      - name: Assert that before dicts were correctly generated        assert:          that: -          - "{{ overridden['after'] | symmetric_difference(result['before']) |length == 0 }}" - +          - "{{ 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 index 64510d7d..8b68c5a5 100644 --- a/tests/integration/targets/vyos_interfaces/tests/cli/replaced.yaml +++ b/tests/integration/targets/vyos_interfaces/tests/cli/replaced.yaml @@ -1,31 +1,36 @@  ---  - debug: -    msg: "START vyos_interfaces replaced integration tests on connection={{ ansible_connection }}" +    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 +      register: result +      vyos.vyos.vyos_interfaces: &id001          config: +            - name: eth1 -            description: "Replaced by Ansible" +            description: Replaced by Ansible              vifs: +                - vlan_id: 100 -                description: "VIF 100 - Replaced by Ansible" +                description: VIF 100 - Replaced by Ansible            - name: eth2              mtu: 1400 -            description: "Replaced by Ansible" +            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 }}" +          - "{{ replaced['commands'] | symmetric_difference(result['commands'])\ +            \ |length == 0 }}"      - name: Assert that before dicts are correctly generated        assert: @@ -35,21 +40,24 @@      - name: Assert that after dict is correctly generated        assert:          that: -          - "{{ replaced['after'] | symmetric_difference(result['after']) |length == 0 }}" +          - "{{ replaced['after'] | symmetric_difference(result['after']) |length\ +            \ == 0 }}" -    - name: Replace device configurations of listed interfaces with provided configurarions (IDEMPOTENT) -      vyos.vyos.vyos_interfaces: *replaced +    - name: Replace device configurations of listed interfaces with provided configurarions +        (IDEMPOTENT)        register: result +      vyos.vyos.vyos_interfaces: *id001      - name: Assert that task was idempotent        assert:          that: -          - "result['changed'] == false" +          - result['changed'] == false      - name: Assert that before dict is correctly generated        assert:          that: -          - "{{ replaced['after'] | symmetric_difference(result['before']) |length == 0 }}" - +          - "{{ replaced['after'] | symmetric_difference(result['before']) |length\ +            \ == 0 }}"    always: +      - include_tasks: _remove_config.yaml diff --git a/tests/integration/targets/vyos_interfaces/tests/cli/rtt.yaml b/tests/integration/targets/vyos_interfaces/tests/cli/rtt.yaml index f947513d..f003c0bb 100644 --- a/tests/integration/targets/vyos_interfaces/tests/cli/rtt.yaml +++ b/tests/integration/targets/vyos_interfaces/tests/cli/rtt.yaml @@ -1,35 +1,39 @@  ---  - debug: -    msg: "START vyos_interfaces round trip integration tests on connection={{ ansible_connection }}" +    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) +      register: base_config        vyos.vyos.vyos_interfaces:          config: +            - name: eth0              enabled: true -            duplex: "auto" -            speed: "auto" +            duplex: auto +            speed: auto            - name: eth1 -            description: "Interface - 1" +            description: Interface - 1              mtu: 1500              vifs: +                - vlan_id: 100 -                description: "Eth1 - VIF 100" +                description: Eth1 - VIF 100                  mtu: 200                - vlan_id: 101                  enabled: false            - name: eth2 -            description: "Interface - 2" +            description: Interface - 2              enabled: true              mtu: 900          state: merged -      register: base_config      - name: Gather interfaces facts        vyos.vyos.vyos_facts: @@ -39,40 +43,44 @@            - interfaces      - name: Apply the provided configuration (config to be reverted) +      register: result        vyos.vyos.vyos_interfaces:          config: +            - name: eth1 -            description: "Interface 1 - Description (WILL BE REVERTED)" +            description: Interface 1 - Description (WILL BE REVERTED)              mtu: 1200              vifs: +                - vlan_id: 100 -                description: "Eth1 - VIF 100 (WILL BE REVERTED)" +                description: Eth1 - VIF 100 (WILL BE REVERTED)                  mtu: 400                - vlan_id: 101 -                description: "Eth1 - VIF 101 (WILL BE REMOVED)" +                description: Eth1 - VIF 101 (WILL BE REMOVED)                  enabled: true            - name: eth2 -            description: "Interface 2 (ADMIN DOWN) (WILL BE REVERTED)" +            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 }}" +        that: "{{ round_trip['after'] | symmetric_difference(result['after']) |length\ +          \ == 0 }}"      - name: Revert back to base config using facts round trip +      register: revert        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 }}" - +        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 index b9737522..b7300800 100644 --- a/tests/integration/targets/vyos_interfaces/vars/main.yaml +++ b/tests/integration/targets/vyos_interfaces/vars/main.yaml @@ -1,209 +1,184 @@  ---  merged:    before: -    - name: "eth0" +    - name: eth0        enabled: true -      speed: "auto" -      duplex: "auto" - -    - name: "eth1" +      speed: auto +      duplex: auto +    - name: eth1        enabled: true - -    - name: "eth2" +    - 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" - +    - 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" +    - name: eth0        enabled: true -      duplex: "auto" -      speed: "auto" - -    - name: "eth1" -      description: "Configured by Ansible - Interface 1" +      duplex: auto +      speed: auto +    - name: eth1 +      description: Configured by Ansible - Interface 1        mtu: 1500 -      speed: "auto" -      duplex: "auto" +      speed: auto +      duplex: auto        enabled: true        vifs:          - vlan_id: 100 -          description: "Eth1 - VIF 100" +          description: Eth1 - VIF 100            mtu: 400            enabled: true -          - vlan_id: 101 -          description: "Eth1 - VIF 101" +          description: Eth1 - VIF 101            enabled: true - -    - name: "eth2" -      description: "Configured by Ansible - Interface 2 (ADMIN DOWN)" +    - name: eth2 +      description: Configured by Ansible - Interface 2 (ADMIN DOWN)        mtu: 600        enabled: false -  populate: -  - name: "eth1" +  - name: eth1      enabled: true -    speed: "auto" -    duplex: "auto" -    description: "Configured by Ansible" +    speed: auto +    duplex: auto +    description: Configured by Ansible      mtu: 1500      vifs:        - vlan_id: 200          enabled: true -        description: "VIF - 200" - -  - name: "eth2" +        description: VIF - 200 +  - name: eth2      enabled: true -    speed: "auto" -    duplex: "auto" -    description: "Configured by Ansible" +    speed: auto +    duplex: auto +    description: Configured by Ansible      mtu: 1500      vifs:        - vlan_id: 200          enabled: true -        description: "VIF - 200" - -  - name: "eth0" +        description: VIF - 200 +  - name: eth0      enabled: true -    duplex: "auto" -    speed: "auto" - +    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'" - +    - 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" +    - name: eth1 +      description: Replaced by Ansible        enabled: true        vifs:          - vlan_id: 100            enabled: true -          description: "VIF 100 - Replaced by Ansible" - +          description: VIF 100 - Replaced by Ansible          - vlan_id: 200            enabled: true - -    - name: "eth2" +    - name: eth2        mtu: 1400 -      description: "Replaced by Ansible" +      description: Replaced by Ansible        enabled: true        vifs:          - vlan_id: 200            enabled: true - -    - name: "eth0" +    - name: eth0        enabled: true -      duplex: "auto" -      speed: "auto" - +      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'" - +    - 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" +    - name: eth0        enabled: true -      speed: "auto" -      duplex: "auto" - -    - name: "eth1" +      speed: auto +      duplex: auto +    - name: eth1        enabled: true        vifs:          - vlan_id: 200            enabled: true - -    - name: "eth2" +    - name: eth2        enabled: true -      description: "Overridden by Ansible" +      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" - +    - 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" +    - name: eth0        enabled: true -      speed: "auto" -      duplex: "auto" - -    - name: "eth1" +      speed: auto +      duplex: auto +    - name: eth1        enabled: true        vifs:          - vlan_id: 200            enabled: true - -    - name: "eth2" +    - name: eth2        enabled: true        vifs:          - vlan_id: 200            enabled: true -  round_trip:    after: -    - name: "eth0" +    - name: eth0        enabled: true -      speed: "auto" -      duplex: "auto" - -    - name: "eth1" -      description: "Interface 1 - Description (WILL BE REVERTED)" +      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)" +          description: Eth1 - VIF 100 (WILL BE REVERTED)            mtu: 400            enabled: true -          - vlan_id: 101 -          description: "Eth1 - VIF 101 (WILL BE REMOVED)" +          description: Eth1 - VIF 101 (WILL BE REMOVED)            enabled: true - -    - name: "eth2" -      description: "Interface 2 (ADMIN DOWN) (WILL BE REVERTED)" +    - name: eth2 +      description: Interface 2 (ADMIN DOWN) (WILL BE REVERTED)        mtu: 600        enabled: false diff --git a/tests/integration/targets/vyos_l3_interface/defaults/main.yaml b/tests/integration/targets/vyos_l3_interface/defaults/main.yaml index 9ef5ba51..a845c24b 100644 --- a/tests/integration/targets/vyos_l3_interface/defaults/main.yaml +++ b/tests/integration/targets/vyos_l3_interface/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "*" +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 index 890d3acf..90f265f5 100644 --- a/tests/integration/targets/vyos_l3_interface/tasks/cli.yaml +++ b/tests/integration/targets/vyos_l3_interface/tasks/cli.yaml @@ -1,22 +1,22 @@  ---  - name: collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    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 }}" +- name: run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }} ansible_connection=ansible.netcommon.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 }}" +  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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_l3_interface/tasks/main.yaml +++ b/tests/integration/targets/vyos_l3_interface/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index 3c24b110..2ffb1abd 100644 --- a/tests/integration/targets/vyos_l3_interface/tests/cli/basic.yaml +++ b/tests/integration/targets/vyos_l3_interface/tests/cli/basic.yaml @@ -12,192 +12,220 @@      state: absent  - name: Set IPv4 address +  register: result    vyos.vyos.vyos_l3_interface:      name: eth1      ipv4: 192.168.2.10/24 -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set interfaces ethernet eth1 address 192.168.2.10/24" in result.commands'  - name: Set IPv4 address (idempotent) +  register: result    vyos.vyos.vyos_l3_interface:      name: eth1      ipv4: 192.168.2.10/24 -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Set IPv6 address +  register: result    vyos.vyos.vyos_l3_interface:      name: eth1      ipv6: fd5d:12c9:2201:1::1/64 -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set interfaces ethernet eth1 address fd5d:12c9:2201:1::1/64" in result.commands'  - name: Set IPv6 address (idempotent) +  register: result    vyos.vyos.vyos_l3_interface:      name: eth1      ipv6: fd5d:12c9:2201:1::1/64 -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Remove all IP addresses +  register: result    vyos.vyos.vyos_l3_interface:      name: eth1      state: absent -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"delete interfaces ethernet eth1 address" in result.commands'  - name: Remove all IP addresses again (idempotent) +  register: result    vyos.vyos.vyos_l3_interface:      name: eth1      state: absent -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Set IPv4 and IPv6 address +  register: result    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' +      - 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) +  register: result    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' +      - result.changed == false  - name: Remove IPv4 address +  register: result    vyos.vyos.vyos_l3_interface:      name: eth1      ipv4: 192.168.2.10/24      state: absent -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"delete interfaces ethernet eth1 address 192.168.2.10/24" in result.commands'  - name: Remove IPv4 address again (idempotent) +  register: result    vyos.vyos.vyos_l3_interface:      name: eth1      ipv4: 192.168.2.10/24      state: absent -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Remove IPv6 address +  register: result    vyos.vyos.vyos_l3_interface:      name: eth1      ipv6: fd5d:12c9:2201:1::1/64      state: absent -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"delete interfaces ethernet eth1 address fd5d:12c9:2201:1::1/64" in result.commands'  - name: Remove IPv6 address again (idempotent) +  register: result    vyos.vyos.vyos_l3_interface:      name: eth1      ipv6: fd5d:12c9:2201:1::1/64      state: absent -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Set IP addresses on aggregate +  register: result    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 + +      - 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  - assert:      that: -      - 'result.changed == true' +      - 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) +  register: result    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 + +      - 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  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Remove IP addresses on aggregate +  register: result    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} + +      - 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' +      - 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) +  register: result    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} + +      - 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' +      - 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 index 164afead..852a6bee 100644 --- a/tests/integration/targets/vyos_l3_interfaces/defaults/main.yaml +++ b/tests/integration/targets/vyos_l3_interfaces/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "[^_].*" +testcase: '[^_].*'  test_items: [] diff --git a/tests/integration/targets/vyos_l3_interfaces/tasks/cli.yaml b/tests/integration/targets/vyos_l3_interfaces/tasks/cli.yaml index 337e3413..f622cf94 100644 --- a/tests/integration/targets/vyos_l3_interfaces/tasks/cli.yaml +++ b/tests/integration/targets/vyos_l3_interfaces/tasks/cli.yaml @@ -1,8 +1,8 @@  ---  - name: Collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    paths: '{{ role_path }}/tests/cli' +    patterns: '{{ testcase }}.yaml'      use_regex: true    register: test_cases    delegate_to: localhost @@ -11,10 +11,10 @@    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 }}" +- name: Run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }}'    vars: -    ansible_connection: network_cli -  with_items: "{{ test_items }}" +    ansible_connection: ansible.netcommon.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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_l3_interfaces/tasks/main.yaml +++ b/tests/integration/targets/vyos_l3_interfaces/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index d598c42c..563b1d7b 100644 --- a/tests/integration/targets/vyos_l3_interfaces/tests/cli/_populate.yaml +++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/_populate.yaml @@ -1,11 +1,9 @@  ---  - 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' +    lines: "set interfaces ethernet eth1 address '192.0.2.14/24'\nset interfaces\ +      \ ethernet eth2 address '192.0.2.10/24'\nset interfaces ethernet eth2 address\ +      \ '192.0.2.11/24'\nset interfaces ethernet eth2 address '2001:db8::10/32'\n\ +      set interfaces ethernet eth2 address '2001:db8::12/32'\n" +  ansible.netcommon.cli_config: +    config: '{{ lines }}' 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 index 95b2b8cc..1fb0dd3e 100644 --- a/tests/integration/targets/vyos_l3_interfaces/tests/cli/_remove_config.yaml +++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/_remove_config.yaml @@ -1,13 +1,12 @@  ---  - name: Remove Config -  network.cli.cli_config: -    config: "{{ lines }}"    vars: -    lines: | -      delete interfaces ethernet "{{ intf }}" address -      delete interfaces ethernet "{{ intf }}" vif +    lines: "delete interfaces ethernet \"{{ intf }}\" address\ndelete interfaces\ +      \ ethernet \"{{ intf }}\" vif\n"    loop:      - eth1      - eth2    loop_control:      loop_var: intf +  ansible.netcommon.cli_config: +    config: '{{ lines }}' diff --git a/tests/integration/targets/vyos_l3_interfaces/tests/cli/deleted.yaml b/tests/integration/targets/vyos_l3_interfaces/tests/cli/deleted.yaml index b95bcdb6..ff4aabfd 100644 --- a/tests/integration/targets/vyos_l3_interfaces/tests/cli/deleted.yaml +++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/deleted.yaml @@ -1,19 +1,23 @@  ---  - debug: -    msg: "Start vyos_interfaces deleted integration tests ansible_connection={{ ansible_connection }}" +    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 +      register: result +      vyos.vyos.vyos_l3_interfaces: &id001          config: +            - name: eth1 +            - name: eth2          state: deleted -      register: result      - name: Assert that the before dicts were correctly generated        assert: @@ -23,26 +27,29 @@      - name: Assert that the correct set of commands were generated        assert:          that: -          - "{{ deleted['commands'] | symmetric_difference(result['commands']) |length == 0 }}" +          - "{{ 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 }}" +          - "{{ deleted['after'] | symmetric_difference(result['after']) |length\ +            \ == 0 }}"      - name: Delete attributes of given interfaces (IDEMPOTENT) -      vyos.vyos.vyos_l3_interfaces: *deleted        register: result +      vyos.vyos.vyos_l3_interfaces: *id001      - name: Assert that the previous task was idempotent        assert:          that: -          - "result.changed == false" +          - result.changed == false      - name: Assert that the before dicts were correctly generated        assert:          that: -          - "{{ deleted['after'] | symmetric_difference(result['before']) |length == 0 }}" - +          - "{{ 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/empty_config.yaml b/tests/integration/targets/vyos_l3_interfaces/tests/cli/empty_config.yaml index 7b1f100f..96d4cda9 100644 --- a/tests/integration/targets/vyos_l3_interfaces/tests/cli/empty_config.yaml +++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/empty_config.yaml @@ -1,35 +1,36 @@  ---  - debug: -    msg: "START vyos_l3_interfaces empty_config integration tests on connection={{ ansible_connection }}" +    msg: START vyos_l3_interfaces empty_config integration tests on connection={{ +      ansible_connection }}  - name: Merged with empty config should give appropriate error message +  register: result +  ignore_errors: true    vyos.vyos.vyos_l3_interfaces:      config:      state: merged -  register: result -  ignore_errors: true  - assert:      that:        - result.msg == 'value of config parameter must not be empty for state merged'  - name: Replaced with empty config should give appropriate error message +  register: result +  ignore_errors: true    vyos.vyos.vyos_l3_interfaces:      config:      state: replaced -  register: result -  ignore_errors: true  - assert:      that:        - result.msg == 'value of config parameter must not be empty for state replaced'  - name: Overridden with empty config should give appropriate error message +  register: result +  ignore_errors: true    vyos.vyos.vyos_l3_interfaces:      config:      state: overridden -  register: result -  ignore_errors: true  - assert:      that: diff --git a/tests/integration/targets/vyos_l3_interfaces/tests/cli/merged.yaml b/tests/integration/targets/vyos_l3_interfaces/tests/cli/merged.yaml index 1b3b9ea1..99fb5524 100644 --- a/tests/integration/targets/vyos_l3_interfaces/tests/cli/merged.yaml +++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/merged.yaml @@ -1,58 +1,72 @@  ---  - debug: -    msg: "START vyos_l3_interfaces merged integration tests on connection={{ ansible_connection }}" +    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 +      register: result +      vyos.vyos.vyos_l3_interfaces: &id001          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 }}" +        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 }}" +          - "{{ 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 }}" +          - "{{ 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 +    - name: Merge the provided configuration with the existing running configuration +        (IDEMPOTENT)        register: result +      vyos.vyos.vyos_l3_interfaces: *id001      - name: Assert that the previous task was idempotent        assert:          that: -          - "result['changed'] == false" +          - result['changed'] == false      - name: Assert that before dicts were correctly generated        assert:          that: -          - "{{ merged['after'] | symmetric_difference(result['before']) |length == 0 }}" - +          - "{{ 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 index 06d6fc7a..644fe080 100644 --- a/tests/integration/targets/vyos_l3_interfaces/tests/cli/overridden.yaml +++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/overridden.yaml @@ -1,23 +1,29 @@  ---  - debug: -    msg: "START vyos_l3_interfaces merged integration tests on connection={{ ansible_connection }}" +    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 +      register: result +      vyos.vyos.vyos_l3_interfaces: &id001          config: +            - name: eth0              ipv4: +                - address: dhcp +            - name: eth1              ipv4: -              - address: "192.0.2.15/24" + +              - address: 192.0.2.15/24          state: overridden -      register: result      - name: Assert that before dicts were correctly generated        assert: @@ -27,26 +33,29 @@      - name: Assert that correct commands were generated        assert:          that: -          - "{{ overridden['commands'] | symmetric_difference(result['commands']) |length == 0 }}" +          - "{{ 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 }}" +          - "{{ 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 +      vyos.vyos.vyos_l3_interfaces: *id001      - name: Assert that the previous task was idempotent        assert:          that: -          - "result['changed'] == false" +          - result['changed'] == false      - name: Assert that before dicts were correctly generated        assert:          that: -          - "{{ overridden['after'] | symmetric_difference(result['before']) |length == 0 }}" - +          - "{{ 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 index 6f1228a8..2c664bbd 100644 --- a/tests/integration/targets/vyos_l3_interfaces/tests/cli/replaced.yaml +++ b/tests/integration/targets/vyos_l3_interfaces/tests/cli/replaced.yaml @@ -1,28 +1,35 @@  ---  - debug: -    msg: "START vyos_l3_interfaces replaced integration tests on connection={{ ansible_connection }}" +    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 +      register: result +      vyos.vyos.vyos_l3_interfaces: &id001          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 }}" +          - "{{ replaced['commands'] | symmetric_difference(result['commands'])\ +            \ |length == 0 }}"      - name: Assert that before dicts are correctly generated        assert: @@ -32,21 +39,24 @@      - name: Assert that after dict is correctly generated        assert:          that: -          - "{{ replaced['after'] | symmetric_difference(result['after']) |length == 0 }}" +          - "{{ 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 +    - name: Replace device configurations of listed interfaces with provided configurarions +        (IDEMPOTENT)        register: result +      vyos.vyos.vyos_l3_interfaces: *id001      - name: Assert that task was idempotent        assert:          that: -          - "result['changed'] == false" +          - result['changed'] == false      - name: Assert that before dict is correctly generated        assert:          that: -          - "{{ replaced['after'] | symmetric_difference(result['before']) |length == 0 }}" - +          - "{{ 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 index 12417634..ee329d30 100644 --- a/tests/integration/targets/vyos_l3_interfaces/vars/main.yaml +++ b/tests/integration/targets/vyos_l3_interfaces/vars/main.yaml @@ -1,82 +1,68 @@  ---  merged:    before: -    - name: "eth0" +    - name: eth0        ipv4: -        - address: "dhcp" - -    - name: "eth1" - -    - name: "eth2" - +        - 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'" - +    - 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" +    - name: eth0        ipv4: -        - address: "dhcp" - -    - name: "eth1" +        - address: dhcp +    - name: eth1        ipv4: -        - address: "192.0.2.10/24" +        - address: 192.0.2.10/24        ipv6: -        - address: "2001:db8::10/32" - -    - name: "eth2" +        - address: 2001:db8::10/32 +    - name: eth2        ipv4: -        - address: "198.51.100.10/24" +        - address: 198.51.100.10/24        vifs:          - vlan_id: 101            ipv4: -            - address: "198.51.100.130/25" +            - address: 198.51.100.130/25            ipv6: -            - address: "2001:db8::20/32" - +            - address: 2001:db8::20/32  populate: -  - name: "eth1" +  - name: eth1      ipv4: -      - address: "192.0.2.14/24" - -  - name: "eth2" +      - address: 192.0.2.14/24 +  - name: eth2      ipv4: -      - address: "192.0.2.10/24" -      - address: "192.0.2.11/24" +      - 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" +      - address: 2001:db8::10/32 +      - address: 2001:db8::12/32 +  - name: eth0      ipv4: -      - address: "dhcp" - +      - 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'" - +    - 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" +    - name: eth2        ipv6: -        - address: "2001:db8::11/32" - -    - name: "eth1" +        - address: 2001:db8::11/32 +    - name: eth1        ipv4: -        - address: "192.0.2.19/24" - -    - name: "eth0" +        - address: 192.0.2.19/24 +    - name: eth0        ipv4: -        - address: "dhcp" - +        - address: dhcp  overridden:    commands:      - delete interfaces ethernet eth1 address '192.0.2.14/24' @@ -85,18 +71,14 @@ overridden:      - 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" +    - name: eth0        ipv4: -        - address: "dhcp" - -    - name: "eth1" +        - address: dhcp +    - name: eth1        ipv4: -        - address: "192.0.2.15/24" - -    - name: "eth2" - +        - address: 192.0.2.15/24 +    - name: eth2  deleted:    commands:      - delete interfaces ethernet eth1 address '192.0.2.14/24' @@ -105,10 +87,8 @@ deleted:      - delete interfaces ethernet eth2 address '2001:db8::10/32'      - delete interfaces ethernet eth2 address '2001:db8::12/32'    after: -    - name: "eth0" +    - name: eth0        ipv4: -        - address: "dhcp" - -    - name: "eth1" - -    - name: "eth2" +        - 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 index 164afead..852a6bee 100644 --- a/tests/integration/targets/vyos_lag_interfaces/defaults/main.yaml +++ b/tests/integration/targets/vyos_lag_interfaces/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "[^_].*" +testcase: '[^_].*'  test_items: [] diff --git a/tests/integration/targets/vyos_lag_interfaces/tasks/cli.yaml b/tests/integration/targets/vyos_lag_interfaces/tasks/cli.yaml index 655e51ee..93eb2fe4 100644 --- a/tests/integration/targets/vyos_lag_interfaces/tasks/cli.yaml +++ b/tests/integration/targets/vyos_lag_interfaces/tasks/cli.yaml @@ -1,8 +1,8 @@  ---  - name: Collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    paths: '{{ role_path }}/tests/cli' +    patterns: '{{ testcase }}.yaml'      use_regex: true    register: test_cases    delegate_to: localhost @@ -10,10 +10,10 @@  - 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 }}" +- name: Run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }}'    vars: -    ansible_connection: network_cli -  with_items: "{{ test_items }}" +    ansible_connection: ansible.netcommon.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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_lag_interfaces/tasks/main.yaml +++ b/tests/integration/targets/vyos_lag_interfaces/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index adacb0c5..927a6cec 100644 --- a/tests/integration/targets/vyos_lag_interfaces/tests/cli/_add_bond.yaml +++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/_add_bond.yaml @@ -1,8 +1,6 @@  ---  - name: Add Bond -  network.cli.cli_config: -    config: "{{ lines }}"    vars: -    lines: | -      set interfaces bonding bond0 -      set interfaces bonding bond1 +    lines: "set interfaces bonding bond0\nset interfaces bonding bond1\n" +  ansible.netcommon.cli_config: +    config: '{{ lines }}' diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/_populate.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/_populate.yaml index 61395082..f6467425 100644 --- a/tests/integration/targets/vyos_lag_interfaces/tests/cli/_populate.yaml +++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/_populate.yaml @@ -1,16 +1,11 @@  ---  - 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' +    lines: "set interfaces bonding bond0\nset interfaces bonding bond0 hash-policy\ +      \ 'layer2'\nset interfaces bonding bond0 mode 'active-backup'\nset interfaces\ +      \ ethernet eth1 bond-group bond0\nset interfaces bonding bond1\nset interfaces\ +      \ bonding bond0 primary 'eth1'\nset interfaces bonding bond1 hash-policy 'layer2+3'\n\ +      set interfaces bonding bond1 mode 'active-backup'\nset interfaces ethernet\ +      \ eth2 bond-group bond1\nset interfaces bonding bond1 primary 'eth2'\n" +  ansible.netcommon.cli_config: +    config: '{{ lines }}' 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 index 29085bdc..6679d6a0 100644 --- a/tests/integration/targets/vyos_lag_interfaces/tests/cli/_remove_bond.yaml +++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/_remove_bond.yaml @@ -1,8 +1,6 @@  ---  - name: Remove Bond -  network.cli.cli_config: -    config: "{{ lines }}"    vars: -    lines: | -      delete interfaces bonding bond0 -      delete interfaces bonding bond1 +    lines: "delete interfaces bonding bond0\ndelete interfaces bonding bond1\n" +  ansible.netcommon.cli_config: +    config: '{{ lines }}' 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 index c5d3657f..5469bf58 100644 --- a/tests/integration/targets/vyos_lag_interfaces/tests/cli/_remove_config.yaml +++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/_remove_config.yaml @@ -1,14 +1,10 @@  ---  - 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 +    lines: "delete interfaces bonding bond0 hash-policy\ndelete interfaces ethernet\ +      \ eth1 bond-group bond0\ndelete interfaces bonding bond0 mode\ndelete interfaces\ +      \ bonding bond0 primary\ndelete interfaces bonding bond1 hash-policy\ndelete\ +      \ interfaces ethernet eth2 bond-group bond1\ndelete interfaces bonding bond1\ +      \ mode\ndelete interfaces bonding bond1 primary\n" +  ansible.netcommon.cli_config: +    config: '{{ lines }}' diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/deleted.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/deleted.yaml index af6e6322..ac8204f9 100644 --- a/tests/integration/targets/vyos_lag_interfaces/tests/cli/deleted.yaml +++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/deleted.yaml @@ -1,17 +1,21 @@  ---  - debug: -    msg: "Start vyos_lag_interfaces deleted integration tests ansible_connection={{ ansible_connection }}" +    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 +      register: result +      vyos.vyos.vyos_lag_interfaces: &id001          config: +            - name: bond0 +            - name: bond1          state: deleted -      register: result      - name: Assert that the before dicts were correctly generated        assert: @@ -21,26 +25,29 @@      - name: Assert that the correct set of commands were generated        assert:          that: -          - "{{ deleted['commands'] | symmetric_difference(result['commands']) |length == 0 }}" +          - "{{ 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 }}" +          - "{{ deleted['after'] | symmetric_difference(result['after']) |length\ +            \ == 0 }}"      - name: Delete attributes of given interfaces (IDEMPOTENT) -      vyos.vyos.vyos_lag_interfaces: *deleted        register: result +      vyos.vyos.vyos_lag_interfaces: *id001      - name: Assert that the previous task was idempotent        assert:          that: -          - "result.changed == false" +          - result.changed == false      - name: Assert that the before dicts were correctly generated        assert:          that: -          - "{{ deleted['after'] | symmetric_difference(result['before']) |length == 0 }}" - +          - "{{ 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/empty_config.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/empty_config.yaml index 74d34667..3894fb59 100644 --- a/tests/integration/targets/vyos_lag_interfaces/tests/cli/empty_config.yaml +++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/empty_config.yaml @@ -1,35 +1,36 @@  ---  - debug: -    msg: "START vyos_lag_interfaces empty_config integration tests on connection={{ ansible_connection }}" +    msg: START vyos_lag_interfaces empty_config integration tests on connection={{ +      ansible_connection }}  - name: Merged with empty config should give appropriate error message +  register: result +  ignore_errors: true    vyos.vyos.vyos_lag_interfaces:      config:      state: merged -  register: result -  ignore_errors: true  - assert:      that:        - result.msg == 'value of config parameter must not be empty for state merged'  - name: Replaced with empty config should give appropriate error message +  register: result +  ignore_errors: true    vyos.vyos.vyos_lag_interfaces:      config:      state: replaced -  register: result -  ignore_errors: true  - assert:      that:        - result.msg == 'value of config parameter must not be empty for state replaced'  - name: Overridden with empty config should give appropriate error message +  register: result +  ignore_errors: true    vyos.vyos.vyos_lag_interfaces:      config:      state: overridden -  register: result -  ignore_errors: true  - assert:      that: diff --git a/tests/integration/targets/vyos_lag_interfaces/tests/cli/merged.yaml b/tests/integration/targets/vyos_lag_interfaces/tests/cli/merged.yaml index 7b1931fd..35f1e358 100644 --- a/tests/integration/targets/vyos_lag_interfaces/tests/cli/merged.yaml +++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/merged.yaml @@ -1,6 +1,7 @@  ---  - debug: -    msg: "START vyos_lag_interfaces merged integration tests on connection={{ ansible_connection }}" +    msg: START vyos_lag_interfaces merged integration tests on connection={{ ansible_connection +      }}  - include_tasks: _remove_config.yaml @@ -9,52 +10,61 @@  - include_tasks: _add_bond.yaml  - block: +      - name: Merge the provided configuration with the exisiting running configuration -      vyos.vyos.vyos_lag_interfaces: &merged +      register: result +      vyos.vyos.vyos_lag_interfaces: &id001          config: +            - name: bond0 -            hash_policy: "layer2" -            mode: "active-backup" +            hash_policy: layer2 +            mode: active-backup              members: +                - member: eth1              primary: eth1            - name: bond1 -            hash_policy: "layer2+3" -            mode: "active-backup" +            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 }}" +        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 }}" +          - "{{ 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 }}" +          - "{{ 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 +    - name: Merge the provided configuration with the existing running configuration +        (IDEMPOTENT)        register: result +      vyos.vyos.vyos_lag_interfaces: *id001      - name: Assert that the previous task was idempotent        assert:          that: -          - "result['changed'] == false" +          - result['changed'] == false      - name: Assert that before dicts were correctly generated        assert:          that: -          - "{{ merged['after'] | symmetric_difference(result['before']) |length == 0 }}" - +          - "{{ 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 index c44cc33e..aa6e2473 100644 --- a/tests/integration/targets/vyos_lag_interfaces/tests/cli/overridden.yaml +++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/overridden.yaml @@ -1,6 +1,7 @@  ---  - debug: -    msg: "START vyos_lag_interfaces overridden integration tests on connection={{ ansible_connection }}" +    msg: START vyos_lag_interfaces overridden integration tests on connection={{ +      ansible_connection }}  - include_tasks: _remove_config.yaml @@ -9,17 +10,20 @@  - include_tasks: _populate.yaml  - block: +      - name: Overrides all device configuration with provided configuration -      vyos.vyos.vyos_lag_interfaces: &overridden +      register: result +      vyos.vyos.vyos_lag_interfaces: &id001          config: +            - name: bond1 -            mode: "active-backup" +            mode: active-backup              members: +                - member: eth2              primary: eth2              hash_policy: layer2          state: overridden -      register: result      - name: Assert that before dicts were correctly generated        assert: @@ -29,26 +33,29 @@      - name: Assert that correct commands were generated        assert:          that: -          - "{{ overridden['commands'] | symmetric_difference(result['commands']) |length == 0 }}" +          - "{{ 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 }}" +          - "{{ 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 +      vyos.vyos.vyos_lag_interfaces: *id001      - name: Assert that the previous task was idempotent        assert:          that: -          - "result['changed'] == false" +          - result['changed'] == false      - name: Assert that before dicts were correctly generated        assert:          that: -          - "{{ overridden['after'] | symmetric_difference(result['before']) |length == 0 }}" - +          - "{{ 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 index 894d505e..c080056d 100644 --- a/tests/integration/targets/vyos_lag_interfaces/tests/cli/replaced.yaml +++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/replaced.yaml @@ -1,27 +1,33 @@  ---  - debug: -    msg: "START vyos_lag_interfaces replaced integration tests on connection={{ ansible_connection }}" +    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 + +    - name: Replace device configurations of listed LAG interfaces with provided +        configurations +      register: result +      vyos.vyos.vyos_lag_interfaces: &id001          config: +            - name: bond1 -            mode: "802.3ad" -            hash_policy: "layer2" +            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 }}" +          - "{{ replaced['commands'] | symmetric_difference(result['commands'])\ +            \ |length == 0 }}"      - name: Assert that before dicts are correctly generated        assert: @@ -31,21 +37,24 @@      - name: Assert that after dict is correctly generated        assert:          that: -          - "{{ replaced['after'] | symmetric_difference(result['after']) |length == 0 }}" +          - "{{ 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 +    - name: Replace device configurations of listed LAG interfaces with provided +        configurarions (IDEMPOTENT)        register: result +      vyos.vyos.vyos_lag_interfaces: *id001      - name: Assert that task was idempotent        assert:          that: -          - "result['changed'] == false" +          - result['changed'] == false      - name: Assert that before dict is correctly generated        assert:          that: -          - "{{ replaced['after'] | symmetric_difference(result['before']) |length == 0 }}" - +          - "{{ 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 index 3095a12d..55e2bbf5 100644 --- a/tests/integration/targets/vyos_lag_interfaces/tests/cli/rtt.yaml +++ b/tests/integration/targets/vyos_lag_interfaces/tests/cli/rtt.yaml @@ -1,31 +1,35 @@  ---  - debug: -    msg: "START vyos_lag_interfaces round trip integration tests on connection={{ ansible_connection }}" +    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) +      register: base_config        vyos.vyos.vyos_lag_interfaces:          config: +            - name: bond0 -            hash_policy: "layer2" -            mode: "active-backup" +            hash_policy: layer2 +            mode: active-backup              members: +                - member: eth1              primary: eth1            - name: bond1 -            hash_policy: "layer2+3" -            mode: "active-backup" +            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: @@ -35,35 +39,40 @@            - lag_interfaces      - name: Apply the provided configuration (config to be reverted) +      register: result        vyos.vyos.vyos_lag_interfaces:          config: +            - name: bond0 -            hash_policy: "layer2+3" -            mode: "802.3ad" +            hash_policy: layer2+3 +            mode: 802.3ad              members: +                - member: eth1            - name: bond1 -            hash_policy: "layer2" -            mode: "xor-hash" +            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 }}" +        that: "{{ round_trip['after'] | symmetric_difference(result['after']) |length\ +          \ == 0 }}"      - name: Revert back to base config using facts round trip +      register: revert        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 }}" - +        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 index 8726e399..57836936 100644 --- a/tests/integration/targets/vyos_lag_interfaces/vars/main.yaml +++ b/tests/integration/targets/vyos_lag_interfaces/vars/main.yaml @@ -1,115 +1,99 @@  ---  merged:    before: -    - name: "bond0" - -    - name: "bond1" - +    - 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'" - +    - 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" +    - name: bond0 +      hash_policy: layer2        members:          - member: eth1 -      mode: "active-backup" +      mode: active-backup        primary: eth1 - -    - name: "bond1" -      hash_policy: "layer2+3" +    - name: bond1 +      hash_policy: layer2+3        members:          - member: eth2 -      mode: "active-backup" +      mode: active-backup        primary: eth2 -  populate: -  - name: "bond0" -    hash_policy: "layer2" +  - name: bond0 +    hash_policy: layer2      members:        - member: eth1 -    mode: "active-backup" +    mode: active-backup      primary: eth1 - -  - name: "bond1" -    hash_policy: "layer2+3" +  - name: bond1 +    hash_policy: layer2+3      members:        - member: eth2 -    mode: "active-backup" +    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'" - +    - 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" +    - name: bond0 +      hash_policy: layer2        members:          - member: eth1 -      mode: "active-backup" +      mode: active-backup        primary: eth1 - -    - name: "bond1" -      hash_policy: "layer2" +    - name: bond1 +      hash_policy: layer2        members:          - member: eth2 -      mode: "802.3ad" - +      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'" - +    - 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" +    - name: bond0 +    - name: bond1 +      hash_policy: layer2        members:          - member: eth2 -      mode: "active-backup" +      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" - +    - 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" - +    - name: bond0 +    - name: bond1  round_trip:    after: -    - name: "bond0" -      hash_policy: "layer2+3" +    - name: bond0 +      hash_policy: layer2+3        members:          - member: eth1 -      mode: "802.3ad" +      mode: 802.3ad        primary: eth1 - -    - name: "bond1" -      hash_policy: "layer2" +    - name: bond1 +      hash_policy: layer2        members:          - member: eth2 -      mode: "xor-hash" +      mode: xor-hash        primary: eth2 diff --git a/tests/integration/targets/vyos_linkagg/defaults/main.yaml b/tests/integration/targets/vyos_linkagg/defaults/main.yaml index 9ef5ba51..a845c24b 100644 --- a/tests/integration/targets/vyos_linkagg/defaults/main.yaml +++ b/tests/integration/targets/vyos_linkagg/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "*" +testcase: '*'  test_items: [] diff --git a/tests/integration/targets/vyos_linkagg/tasks/cli.yaml b/tests/integration/targets/vyos_linkagg/tasks/cli.yaml index 890d3acf..90f265f5 100644 --- a/tests/integration/targets/vyos_linkagg/tasks/cli.yaml +++ b/tests/integration/targets/vyos_linkagg/tasks/cli.yaml @@ -1,22 +1,22 @@  ---  - name: collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    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 }}" +- name: run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }} ansible_connection=ansible.netcommon.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 }}" +  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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_linkagg/tasks/main.yaml +++ b/tests/integration/targets/vyos_linkagg/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index fadbbd78..ffe0c42e 100644 --- a/tests/integration/targets/vyos_linkagg/tests/cli/basic.yaml +++ b/tests/integration/targets/vyos_linkagg/tests/cli/basic.yaml @@ -12,173 +12,189 @@      state: absent  - name: Create linkagg +  register: result    vyos.vyos.vyos_linkagg:      name: bond0      members:        - eth1      state: present -  register: result  - assert:      that: -      - 'result.changed == true' +      - 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) +  register: result    vyos.vyos.vyos_linkagg:      name: bond0      members:        - eth1      state: present -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Add linkagg member +  register: result    vyos.vyos.vyos_linkagg:      name: bond0      members:        - eth2      state: present -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set interfaces ethernet eth2 bond-group bond0" in result.commands'  - name: Add linkagg member again (idempotent) +  register: result    vyos.vyos.vyos_linkagg:      name: bond0      members:        - eth2      state: present -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Disable linkagg +  register: result    vyos.vyos.vyos_linkagg:      name: bond0      state: down -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set interfaces bonding bond0 disable" in result.commands'  - name: Disable linkagg again (idempotent) +  register: result    vyos.vyos.vyos_linkagg:      name: bond0      state: down -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Enable linkagg +  register: result    vyos.vyos.vyos_linkagg:      name: bond0      state: up -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"delete interfaces bonding bond0 disable" in result.commands[0]'  - name: Enable linkagg again (idempotent) +  register: result    vyos.vyos.vyos_linkagg:      name: bond0      state: up -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Remove linkagg +  register: result    vyos.vyos.vyos_linkagg:      name: bond0      state: absent -  register: result  - assert:      that: -      - 'result.changed == true' +      - 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) +  register: result    vyos.vyos.vyos_linkagg:      name: bond0      state: absent -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Create collection of linkagg definitions +  register: result    vyos.vyos.vyos_linkagg:      aggregate: -      - {name: bond0, members: [eth1]} -      - {name: bond1, members: [eth2]} + +      - name: bond0 +        members: +          - eth1 + +      - name: bond1 +        members: +          - eth2      state: present -  register: result  - assert:      that: -      - 'result.changed == true' +      - 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) +  register: result    vyos.vyos.vyos_linkagg:      aggregate: -      - {name: bond0, members: [eth1]} -      - {name: bond1, members: [eth2]} + +      - name: bond0 +        members: +          - eth1 + +      - name: bond1 +        members: +          - eth2      state: present -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Remove collection of linkagg definitions +  register: result    vyos.vyos.vyos_linkagg:      aggregate: +        - name: bond0 +        - name: bond1      state: absent -  register: result  - assert:      that: -      - 'result.changed == true' +      - 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) +  register: result    vyos.vyos.vyos_linkagg:      aggregate: +        - name: bond0 +        - name: bond1      state: absent -  register: result  - assert:      that: -      - 'result.changed == false' +      - 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 index 93f98e7a..8178f921 100644 --- a/tests/integration/targets/vyos_linkagg/tests/cli/net_linkagg.yaml +++ b/tests/integration/targets/vyos_linkagg/tests/cli/net_linkagg.yaml @@ -1,31 +1,30 @@  --- -- 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. +- debug: msg="START vyos cli/net_linkagg.yaml on connection={{ ansible_connection +    }}"  - name: Remove linkagg - set -  net_linkagg: +  ansible.netcommon.net_linkagg:      name: bond0      state: absent  - name: Create linkagg using platform agnostic module -  net_linkagg: +  register: result +  ansible.netcommon.net_linkagg:      name: bond0      members:        - eth1      state: present -  register: result  - assert:      that: -      - 'result.changed == true' +      - 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: +  ansible.netcommon.net_linkagg:      name: bond0      state: absent -- debug: msg="END vyos cli/net_linkagg.yaml on connection={{ ansible_connection }}" +- debug: msg="END vyos cli/net_linkagg.yaml on connection={{ ansible_connection +    }}" diff --git a/tests/integration/targets/vyos_lldp/defaults/main.yaml b/tests/integration/targets/vyos_lldp/defaults/main.yaml index 9ef5ba51..a845c24b 100644 --- a/tests/integration/targets/vyos_lldp/defaults/main.yaml +++ b/tests/integration/targets/vyos_lldp/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "*" +testcase: '*'  test_items: [] diff --git a/tests/integration/targets/vyos_lldp/tasks/cli.yaml b/tests/integration/targets/vyos_lldp/tasks/cli.yaml index 890d3acf..90f265f5 100644 --- a/tests/integration/targets/vyos_lldp/tasks/cli.yaml +++ b/tests/integration/targets/vyos_lldp/tasks/cli.yaml @@ -1,22 +1,22 @@  ---  - name: collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    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 }}" +- name: run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }} ansible_connection=ansible.netcommon.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 }}" +  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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_lldp/tasks/main.yaml +++ b/tests/integration/targets/vyos_lldp/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index badd3a97..b108bbfc 100644 --- a/tests/integration/targets/vyos_lldp/tests/cli/basic.yaml +++ b/tests/integration/targets/vyos_lldp/tests/cli/basic.yaml @@ -6,39 +6,39 @@      lines: delete service lldp  - name: Enable LLDP service +  register: result    vyos.vyos.vyos_lldp:      state: present -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set service lldp" in result.commands'  - name: Enable LLDP service again (idempotent) +  register: result    vyos.vyos.vyos_lldp:      state: present -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Disable LLDP service +  register: result    vyos.vyos.vyos_lldp:      state: absent -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"delete service lldp" in result.commands'  - name: +  register: result    vyos.vyos.vyos_lldp:      state: absent -  register: result  - assert:      that: -      - 'result.changed == false' +      - 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 index e68d5a62..d19b126c 100644 --- a/tests/integration/targets/vyos_lldp/tests/cli/net_lldp.yaml +++ b/tests/integration/targets/vyos_lldp/tests/cli/net_lldp.yaml @@ -1,21 +1,18 @@  ---  - 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 +  ansible.netcommon.net_lldp: +    state: present  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set service lldp" in result.commands'  - name: Make sure LLDP is not running - teardown diff --git a/tests/integration/targets/vyos_lldp_global/defaults/main.yaml b/tests/integration/targets/vyos_lldp_global/defaults/main.yaml index 164afead..852a6bee 100644 --- a/tests/integration/targets/vyos_lldp_global/defaults/main.yaml +++ b/tests/integration/targets/vyos_lldp_global/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "[^_].*" +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 index 655e51ee..93eb2fe4 100644 --- a/tests/integration/targets/vyos_lldp_global/tasks/cli.yaml +++ b/tests/integration/targets/vyos_lldp_global/tasks/cli.yaml @@ -1,8 +1,8 @@  ---  - name: Collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    paths: '{{ role_path }}/tests/cli' +    patterns: '{{ testcase }}.yaml'      use_regex: true    register: test_cases    delegate_to: localhost @@ -10,10 +10,10 @@  - 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 }}" +- name: Run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }}'    vars: -    ansible_connection: network_cli -  with_items: "{{ test_items }}" +    ansible_connection: ansible.netcommon.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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_lldp_global/tasks/main.yaml +++ b/tests/integration/targets/vyos_lldp_global/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index 088aa7b3..e4392426 100644 --- a/tests/integration/targets/vyos_lldp_global/tests/cli/_populate.yaml +++ b/tests/integration/targets/vyos_lldp_global/tests/cli/_populate.yaml @@ -1,9 +1,7 @@  ---  - 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' +    lines: "set service lldp\nset service lldp legacy-protocols 'cdp'\nset service\ +      \ lldp management-address '192.0.2.17'\n" +  ansible.netcommon.cli_config: +    config: '{{ lines }}' 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 index b000a94a..b8234491 100644 --- a/tests/integration/targets/vyos_lldp_global/tests/cli/_remove_config.yaml +++ b/tests/integration/targets/vyos_lldp_global/tests/cli/_remove_config.yaml @@ -1,9 +1,7 @@  ---  - name: Remove Config -  network.cli.cli_config: -    config: "{{ lines }}"    vars: -    lines: | -      delete service lldp legacy-protocols -      delete service lldp management-address -      delete service lldp +    lines: "delete service lldp legacy-protocols\ndelete service lldp management-address\n\ +      delete service lldp\n" +  ansible.netcommon.cli_config: +    config: '{{ lines }}' diff --git a/tests/integration/targets/vyos_lldp_global/tests/cli/deleted.yaml b/tests/integration/targets/vyos_lldp_global/tests/cli/deleted.yaml index 8017e93f..f4c6cbc5 100644 --- a/tests/integration/targets/vyos_lldp_global/tests/cli/deleted.yaml +++ b/tests/integration/targets/vyos_lldp_global/tests/cli/deleted.yaml @@ -1,15 +1,17 @@  ---  - debug: -    msg: "Start vyos_lldp_global deleted integration tests ansible_connection={{ ansible_connection }}" +    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 +      register: result +      vyos.vyos.vyos_lldp_global: &id001          config:          state: deleted -      register: result      - name: Assert that the before dicts were correctly generated        assert: @@ -19,7 +21,8 @@      - name: Assert that the correct set of commands were generated        assert:          that: -          - "{{ deleted['commands'] | symmetric_difference(result['commands']) |length == 0 }}" +          - "{{ deleted['commands'] | symmetric_difference(result['commands']) |length\ +            \ == 0 }}"      - name: Assert that the after dicts were correctly generated        assert: @@ -27,18 +30,18 @@            - "{{ deleted['after'] == result['after']}}"      - name: Delete attributes of given interfaces (IDEMPOTENT) -      vyos.vyos.vyos_lldp_global: *deleted        register: result +      vyos.vyos.vyos_lldp_global: *id001      - name: Assert that the previous task was idempotent        assert:          that: -          - "result.changed == false" +          - 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/empty_config.yaml b/tests/integration/targets/vyos_lldp_global/tests/cli/empty_config.yaml index 05609b6d..a197c454 100644 --- a/tests/integration/targets/vyos_lldp_global/tests/cli/empty_config.yaml +++ b/tests/integration/targets/vyos_lldp_global/tests/cli/empty_config.yaml @@ -1,24 +1,25 @@  ---  - debug: -    msg: "START vyos_lldp_global empty_config integration tests on connection={{ ansible_connection }}" +    msg: START vyos_lldp_global empty_config integration tests on connection={{ +      ansible_connection }}  - name: Merged with empty config should give appropriate error message +  register: result +  ignore_errors: true    vyos.vyos.vyos_lldp_global:      config:      state: merged -  register: result -  ignore_errors: true  - assert:      that:        - result.msg == 'value of config parameter must not be empty for state merged'  - name: Replaced with empty config should give appropriate error message +  register: result +  ignore_errors: true    vyos.vyos.vyos_lldp_global:      config:      state: replaced -  register: result -  ignore_errors: true  - assert:      that: diff --git a/tests/integration/targets/vyos_lldp_global/tests/cli/merged.yaml b/tests/integration/targets/vyos_lldp_global/tests/cli/merged.yaml index a17bd61b..aeabc9f6 100644 --- a/tests/integration/targets/vyos_lldp_global/tests/cli/merged.yaml +++ b/tests/integration/targets/vyos_lldp_global/tests/cli/merged.yaml @@ -1,21 +1,23 @@  ---  - debug: -    msg: "START vyos_lldp_global merged integration tests on connection={{ ansible_connection }}" +    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 +      register: result +      vyos.vyos.vyos_lldp_global: &id001          config:            legacy_protocols: -            - 'fdp' -            - 'cdp' +            - fdp +            - cdp            address: 192.0.2.11          state: merged -      register: result      - name: Assert that before dicts were correctly generated        assert: @@ -24,26 +26,28 @@      - name: Assert that correct set of commands were generated        assert:          that: -          - "{{ merged['commands'] | symmetric_difference(result['commands']) |length == 0 }}" +          - "{{ 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 +    - name: Merge the provided configuration with the existing running configuration +        (IDEMPOTENT)        register: result +      vyos.vyos.vyos_lldp_global: *id001      - name: Assert that the previous task was idempotent        assert:          that: -          - "result['changed'] == false" +          - 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 index 371e7f3f..9a833f5e 100644 --- a/tests/integration/targets/vyos_lldp_global/tests/cli/replaced.yaml +++ b/tests/integration/targets/vyos_lldp_global/tests/cli/replaced.yaml @@ -1,27 +1,30 @@  ---  - debug: -    msg: "START vyos_lldp_global replaced integration tests on connection={{ ansible_connection }}" +    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 +      register: result +      vyos.vyos.vyos_lldp_global: &id001          config:            legacy_protocols: -            - 'edp' -            - 'sonmp' -            - 'cdp' +            - 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 }}" +          - "{{ replaced['commands'] | symmetric_difference(result['commands'])\ +            \ |length == 0 }}"      - name: Assert that before dicts are correctly generated        assert: @@ -33,19 +36,20 @@          that:            - "{{ replaced['after'] == result['after'] }}" -    - name: Replace device configurations of LLDP service with provided configurarions (IDEMPOTENT) -      vyos.vyos.vyos_lldp_global: *replaced +    - name: Replace device configurations of LLDP service with provided configurarions +        (IDEMPOTENT)        register: result +      vyos.vyos.vyos_lldp_global: *id001      - name: Assert that task was idempotent        assert:          that: -          - "result['changed'] == false" +          - 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 index 02902bc3..2e8284f1 100644 --- a/tests/integration/targets/vyos_lldp_global/tests/cli/rtt.yaml +++ b/tests/integration/targets/vyos_lldp_global/tests/cli/rtt.yaml @@ -1,19 +1,21 @@  ---  - debug: -    msg: "START vyos_lldp_global round trip integration tests on connection={{ ansible_connection }}" +    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) +      register: base_config        vyos.vyos.vyos_lldp_global:          config:            legacy_protocols: -            - 'fdp' -            - 'cdp' +            - fdp +            - cdp            address: 192.0.2.11          state: merged -      register: base_config      - name: Gather vyos_lldp_global facts        vyos.vyos.vyos_facts: @@ -23,29 +25,29 @@            - lldp_global      - name: Apply the provided configuration (config to be reverted) +      register: result        vyos.vyos.vyos_lldp_global:          config:            legacy_protocols: -            - 'edp' -            - 'sonmp' -            - 'cdp' +            - 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 +      register: revert        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 index 420b2b4e..81e71bed 100644 --- a/tests/integration/targets/vyos_lldp_global/vars/main.yaml +++ b/tests/integration/targets/vyos_lldp_global/vars/main.yaml @@ -1,56 +1,48 @@  ---  merged:    before: -    address: '192.0.2.17' +    address: 192.0.2.17      enable: true      legacy_protocols: -      - 'cdp' - +      - cdp    commands: -    - "set service lldp management-address '192.0.2.11'" -    - "set service lldp legacy-protocols 'fdp'" - +    - set service lldp management-address '192.0.2.11' +    - set service lldp legacy-protocols 'fdp'    after: -    address: '192.0.2.11' +    address: 192.0.2.11      enable: true      legacy_protocols: -      - 'cdp' -      - 'fdp' - +      - cdp +      - fdp  populate: -  address: '192.0.2.17' +  address: 192.0.2.17    enable: true    legacy_protocols: -    - 'cdp' - +    - cdp  replaced:    commands: -    - "set service lldp legacy-protocols 'edp'" -    - "set service lldp legacy-protocols 'sonmp'" -    - "set service lldp management-address '192.0.2.14'" - +    - 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' +    address: 192.0.2.14      enable: true      legacy_protocols: -      - 'cdp' -      - 'edp' -      - 'sonmp' - +      - cdp +      - edp +      - sonmp  deleted:    commands: -    - "delete service lldp management-address" -    - "delete service lldp legacy-protocols" - +    - delete service lldp management-address +    - delete service lldp legacy-protocols    after: -    "enable": true - +    enable: true  round_trip:    after: -    address: '192.0.2.14' +    address: 192.0.2.14      enable: true      legacy_protocols: -      - 'cdp' -      - 'edp' -      - 'fdp' -      - 'sonmp' +      - cdp +      - edp +      - fdp +      - sonmp diff --git a/tests/integration/targets/vyos_lldp_interface/defaults/main.yaml b/tests/integration/targets/vyos_lldp_interface/defaults/main.yaml index 9ef5ba51..a845c24b 100644 --- a/tests/integration/targets/vyos_lldp_interface/defaults/main.yaml +++ b/tests/integration/targets/vyos_lldp_interface/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "*" +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 index 890d3acf..90f265f5 100644 --- a/tests/integration/targets/vyos_lldp_interface/tasks/cli.yaml +++ b/tests/integration/targets/vyos_lldp_interface/tasks/cli.yaml @@ -1,22 +1,22 @@  ---  - name: collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    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 }}" +- name: run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }} ansible_connection=ansible.netcommon.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 }}" +  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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_lldp_interface/tasks/main.yaml +++ b/tests/integration/targets/vyos_lldp_interface/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index 0690e9e7..2697f484 100644 --- a/tests/integration/targets/vyos_lldp_interface/tests/cli/basic.yaml +++ b/tests/integration/targets/vyos_lldp_interface/tests/cli/basic.yaml @@ -6,162 +6,176 @@      lines: delete service lldp  - name: Create LLDP configuration +  register: result    vyos.vyos.vyos_lldp_interface:      name: eth1      state: present -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set service lldp interface eth1" in result.commands'  - name: Create LLDP configuration again (idempotent) +  register: result    vyos.vyos.vyos_lldp_interface:      name: eth1      state: present -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Disable LLDP configuration +  register: result    vyos.vyos.vyos_lldp_interface:      name: eth1      state: disabled -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set service lldp interface eth1 disable" in result.commands'  - name: Disable LLDP configuration again (idempotent) +  register: result    vyos.vyos.vyos_lldp_interface:      name: eth1      state: disabled -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Enable LLDP configuration +  register: result    vyos.vyos.vyos_lldp_interface:      name: eth1      state: enabled -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"delete service lldp interface eth1 disable" in result.commands'  - name: Enable LLDP configuration again (idempotent) +  register: result    vyos.vyos.vyos_lldp_interface:      name: eth1      state: enabled -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Delete LLDP configuration +  register: result    vyos.vyos.vyos_lldp_interface:      name: eth1      state: absent -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"delete service lldp interface eth1" in result.commands'  - name: Delete LLDP configuration again (idempotent) +  register: result    vyos.vyos.vyos_lldp_interface:      name: eth1      state: absent -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Create aggregate of LLDP interface configurations +  register: result    vyos.vyos.vyos_lldp_interface:      aggregate: +        - name: eth1 +        - name: eth2      state: present -  register: result  - assert:      that: -      - 'result.changed == true' +      - 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) +  register: result    vyos.vyos.vyos_lldp_interface:      aggregate: +        - name: eth1 +        - name: eth2      state: present -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Override LLDP interface configuration on aggregate +  register: result    vyos.vyos.vyos_lldp_interface:      aggregate: +        - name: eth1 -      - {name: eth2, state: disabled} + +      - name: eth2 +        state: disabled      state: present -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set service lldp interface eth2 disable" in result.commands'  - name: Override LLDP interface configuration on aggregate again (idempotent) +  register: result    vyos.vyos.vyos_lldp_interface:      aggregate: +        - name: eth1 -      - {name: eth2, state: disabled} + +      - name: eth2 +        state: disabled      state: present -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Delete aggregate of LLDP interface configurations +  register: result    vyos.vyos.vyos_lldp_interface:      aggregate: +        - name: eth1 +        - name: eth2      state: absent -  register: result  - assert:      that: -      - 'result.changed == true' +      - 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) +  register: result    vyos.vyos.vyos_lldp_interface:      aggregate: +        - name: eth1 +        - name: eth2      state: absent -  register: result  - assert:      that: -      - 'result.changed == false' +      - 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 index 1710b7e2..98fc93a4 100644 --- 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 @@ -1,26 +1,25 @@  --- -- 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. +- debug: msg="START vyos cli/net_lldp_interface.yaml on connection={{ ansible_connection +    }}"  - 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: +  register: result +  ansible.netcommon.net_lldp_interface:      name: eth1      state: present -  register: result  - assert:      that: -      - 'result.changed == true' +      - 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 }}" +- 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 index 164afead..852a6bee 100644 --- a/tests/integration/targets/vyos_lldp_interfaces/defaults/main.yaml +++ b/tests/integration/targets/vyos_lldp_interfaces/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "[^_].*" +testcase: '[^_].*'  test_items: [] diff --git a/tests/integration/targets/vyos_lldp_interfaces/tasks/cli.yaml b/tests/integration/targets/vyos_lldp_interfaces/tasks/cli.yaml index 655e51ee..93eb2fe4 100644 --- a/tests/integration/targets/vyos_lldp_interfaces/tasks/cli.yaml +++ b/tests/integration/targets/vyos_lldp_interfaces/tasks/cli.yaml @@ -1,8 +1,8 @@  ---  - name: Collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    paths: '{{ role_path }}/tests/cli' +    patterns: '{{ testcase }}.yaml'      use_regex: true    register: test_cases    delegate_to: localhost @@ -10,10 +10,10 @@  - 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 }}" +- name: Run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }}'    vars: -    ansible_connection: network_cli -  with_items: "{{ test_items }}" +    ansible_connection: ansible.netcommon.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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_lldp_interfaces/tasks/main.yaml +++ b/tests/integration/targets/vyos_lldp_interfaces/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index 80f7d1a1..4353cec4 100644 --- a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_populate.yaml +++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_populate.yaml @@ -1,14 +1,12 @@  ---  - 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 +    lines: "set service lldp interface eth1\nset service lldp interface eth1 location\ +      \ civic-based country-code US\nset service lldp interface eth1 location civic-based\ +      \ ca-type 0 ca-value ENGLISH\nset service lldp interface eth2\nset service\ +      \ lldp interface eth2 location coordinate-based latitude 33.524449N\nset service\ +      \ lldp interface eth2 location coordinate-based altitude 2200\nset service\ +      \ lldp interface eth2 location coordinate-based datum WGS84\nset service lldp\ +      \ interface eth2 location coordinate-based longitude 222.267255W\n" +  ansible.netcommon.cli_config: +    config: '{{ lines }}' 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 index ee9a9bda..11e2940d 100644 --- a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_populate_intf.yaml +++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_populate_intf.yaml @@ -1,10 +1,8 @@  ---  - 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 +    lines: "set service lldp interface eth2\nset service lldp interface eth2 location\ +      \ civic-based country-code US\nset service lldp interface eth2 location civic-based\ +      \ ca-type 0 ca-value ENGLISH\nset service lldp interface eth2 disable\n" +  ansible.netcommon.cli_config: +    config: '{{ lines }}' 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 index d012f7bb..a885f01a 100644 --- a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_remove_config.yaml +++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/_remove_config.yaml @@ -1,8 +1,6 @@  ---  - name: Remove Config -  network.cli.cli_config: -    config: "{{ lines }}"    vars: -    lines: | -      delete service lldp interface -      delete service lldp +    lines: "delete service lldp interface\ndelete service lldp\n" +  ansible.netcommon.cli_config: +    config: '{{ lines }}' diff --git a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/deleted.yaml b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/deleted.yaml index 7b2d53a3..21bf96d0 100644 --- a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/deleted.yaml +++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/deleted.yaml @@ -1,17 +1,21 @@  ---  - debug: -    msg: "Start vyos_lldp_interfaces deleted integration tests ansible_connection={{ ansible_connection }}" +    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 +      register: result +      vyos.vyos.vyos_lldp_interfaces: &id001          config: -          - name: 'eth1' -          - name: 'eth2' + +          - name: eth1 + +          - name: eth2          state: deleted -      register: result      - name: Assert that the before dicts were correctly generated        assert: @@ -21,26 +25,30 @@      - name: Assert that the correct set of commands were generated        assert:          that: -          - "{{ deleted['commands'] | symmetric_difference(result['commands']) |length == 0 }}" +          - "{{ 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 }}" +          - "{{ deleted['after'] | symmetric_difference(result['after']) |length\ +            \ == 0 }}"      - name: Delete attributes of given interfaces (IDEMPOTENT) -      vyos.vyos.vyos_lldp_interfaces: *deleted        register: result +      vyos.vyos.vyos_lldp_interfaces: *id001      - name: Assert that the previous task was idempotent        assert:          that: -          - "result.changed == false" -          - "result.commands|length == 0" +          - 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 }}" +          - "{{ 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/empty_config.yaml b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/empty_config.yaml index 44c0b894..a5ff0a8e 100644 --- a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/empty_config.yaml +++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/empty_config.yaml @@ -1,35 +1,36 @@  ---  - debug: -    msg: "START vyos_lldp_interfaces empty_config integration tests on connection={{ ansible_connection }}" +    msg: START vyos_lldp_interfaces empty_config integration tests on connection={{ +      ansible_connection }}  - name: Merged with empty config should give appropriate error message +  register: result +  ignore_errors: true    vyos.vyos.vyos_lldp_interfaces:      config:      state: merged -  register: result -  ignore_errors: true  - assert:      that:        - result.msg == 'value of config parameter must not be empty for state merged'  - name: Replaced with empty config should give appropriate error message +  register: result +  ignore_errors: true    vyos.vyos.vyos_lldp_interfaces:      config:      state: replaced -  register: result -  ignore_errors: true  - assert:      that:        - result.msg == 'value of config parameter must not be empty for state replaced'  - name: Overridden with empty config should give appropriate error message +  register: result +  ignore_errors: true    vyos.vyos.vyos_lldp_interfaces:      config:      state: overridden -  register: result -  ignore_errors: true  - assert:      that: diff --git a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/merged.yaml b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/merged.yaml index bf968b21..657961ff 100644 --- a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/merged.yaml +++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/merged.yaml @@ -1,58 +1,67 @@  ---  - debug: -    msg: "START vyos_lldp_interfaces merged integration tests on connection={{ ansible_connection }}" +    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 +      register: result +      vyos.vyos.vyos_lldp_interfaces: &id001          config: -          - name: 'eth1' + +          - name: eth1              location:                civic_based: -                country_code: 'US' +                country_code: US                  ca_info: +                    - ca_type: 0 -                    ca_value: 'ENGLISH' +                    ca_value: ENGLISH -          - name: 'eth2' +          - name: eth2              location:                coordinate_based:                  altitude: 2200 -                datum: 'WGS84' -                longitude: '222.267255W' -                latitude: '33.524449N' +                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 }}" +        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 }}" +          - "{{ 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 }}" +          - "{{ 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 +    - name: Merge the provided configuration with the existing running configuration +        (IDEMPOTENT)        register: result +      vyos.vyos.vyos_lldp_interfaces: *id001      - name: Assert that the previous task was idempotent        assert:          that: -          - "result['changed'] == false" +          - result['changed'] == false      - name: Assert that before dicts were correctly generated        assert:          that: -          - "{{ merged['after'] | symmetric_difference(result['before']) |length == 0 }}" - +          - "{{ 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 index 8cf038c9..3e6ce408 100644 --- a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/overridden.yaml +++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/overridden.yaml @@ -1,49 +1,56 @@  ---  - debug: -    msg: "START vyos_lldp_interfaces overridden integration tests on connection={{ ansible_connection }}" +    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 +      register: result +      vyos.vyos.vyos_lldp_interfaces: &id001          config: -          - name: 'eth2' + +          - name: eth2              location: -              elin: '0000000911' +              elin: 0000000911          state: overridden -      register: result      - name: Assert that before dicts were correctly generated        assert:          that: -          - "{{ populate_intf | symmetric_difference(result['before']) |length == 0 }}" +          - "{{ 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 }}" +          - "{{ 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 }}" +          - "{{ 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 +      vyos.vyos.vyos_lldp_interfaces: *id001      - name: Assert that the previous task was idempotent        assert:          that: -          - "result['changed'] == false" +          - result['changed'] == false      - name: Assert that before dicts were correctly generated        assert:          that: -          - "{{ overridden['after'] | symmetric_difference(result['before']) |length == 0 }}" - +          - "{{ 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 index 17acf065..3218e800 100644 --- a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/replaced.yaml +++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/replaced.yaml @@ -1,39 +1,45 @@  ---  - debug: -    msg: "START vyos_lldp_interfaces replaced integration tests on connection={{ ansible_connection }}" +    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 + +    - name: Replace device configurations of listed LLDP interfaces with provided +        configurations +      register: result +      vyos.vyos.vyos_lldp_interfaces: &id001          config: -          - name: 'eth2' + +          - name: eth2              enable: false              location:                civic_based: -                country_code: 'US' +                country_code: US                  ca_info: +                    - ca_type: 0 -                    ca_value: 'ENGLISH' +                    ca_value: ENGLISH -          - name: 'eth1' +          - name: eth1              enable: false              location:                coordinate_based:                  altitude: 2200 -                datum: 'WGS84' -                longitude: '222.267255W' -                latitude: '33.524449N' +                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 }}" +          - "{{ replaced['commands'] | symmetric_difference(result['commands'])\ +            \ |length == 0 }}"      - name: Assert that before dicts are correctly generated        assert: @@ -43,21 +49,24 @@      - name: Assert that after dict is correctly generated        assert:          that: -          - "{{ replaced['after'] | symmetric_difference(result['after']) |length == 0 }}" +          - "{{ 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 +    - name: Replace device configurations of listed LLDP interfaces with provided +        configurarions (IDEMPOTENT)        register: result +      vyos.vyos.vyos_lldp_interfaces: *id001      - name: Assert that task was idempotent        assert:          that: -          - "result['changed'] == false" +          - result['changed'] == false      - name: Assert that before dict is correctly generated        assert:          that: -          - "{{ replaced['after'] | symmetric_difference(result['before']) |length == 0 }}" - +          - "{{ 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 index 4d4cf82c..e6189a3d 100644 --- a/tests/integration/targets/vyos_lldp_interfaces/tests/cli/rtt.yaml +++ b/tests/integration/targets/vyos_lldp_interfaces/tests/cli/rtt.yaml @@ -1,23 +1,26 @@  ---  - debug: -    msg: "START vyos_lldp_interfaces round trip integration tests on connection={{ ansible_connection }}" +    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) +      register: base_config        vyos.vyos.vyos_lldp_interfaces:          config: -          - name: 'eth1' + +          - name: eth1              location:                civic_based: -                country_code: 'US' +                country_code: US                  ca_info: -                  - ca_type: 0 -                    ca_value: 'ENGLISH' +                  - ca_type: 0 +                    ca_value: ENGLISH          state: merged -      register: base_config      - name: Gather lldp_interfaces facts        vyos.vyos.vyos_facts: @@ -27,31 +30,34 @@            - lldp_interfaces      - name: Apply the provided configuration (config to be reverted) +      register: result        vyos.vyos.vyos_lldp_interfaces:          config: -          - name: 'eth2' + +          - name: eth2              location:                coordinate_based:                  altitude: 2200 -                datum: 'WGS84' -                longitude: '222.267255W' -                latitude: '33.524449N' +                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 }}" +        that: "{{ round_trip['after'] | symmetric_difference(result['after']) |length\ +          \ == 0 }}"      - name: Revert back to base config using facts round trip +      register: revert        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 }}" - +        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 index 169b0d5d..3cb684ea 100644 --- a/tests/integration/targets/vyos_lldp_interfaces/vars/main.yaml +++ b/tests/integration/targets/vyos_lldp_interfaces/vars/main.yaml @@ -1,130 +1,114 @@  ---  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" - +    - 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' +    - name: eth1        location:          civic_based: -          country_code: 'US' +          country_code: US            ca_info:              - ca_type: 0 -              ca_value: 'ENGLISH' - -    - name: 'eth2' +              ca_value: ENGLISH +    - name: eth2        location:          coordinate_based:            altitude: 2200 -          datum: 'WGS84' -          longitude: '222.267255W' -          latitude: '33.524449N' - +          datum: WGS84 +          longitude: 222.267255W +          latitude: 33.524449N  populate: -  - name: 'eth1' +  - name: eth1      location:        civic_based: -        country_code: 'US' +        country_code: US          ca_info:            - ca_type: 0 -            ca_value: 'ENGLISH' - -  - name: 'eth2' +            ca_value: ENGLISH +  - name: eth2      location:        coordinate_based:          altitude: 2200 -        datum: 'WGS84' -        longitude: '222.267255W' -        latitude: '33.524449N' - +        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'" - +    - 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' +    - name: eth2        enable: false        location:          civic_based: -          country_code: 'US' +          country_code: US            ca_info:              - ca_type: 0 -              ca_value: 'ENGLISH' - -    - name: 'eth1' +              ca_value: ENGLISH +    - name: eth1        enable: false        location:          coordinate_based:            altitude: 2200 -          datum: 'WGS84' -          longitude: '222.267255W' -          latitude: '33.524449N' - +          datum: WGS84 +          longitude: 222.267255W +          latitude: 33.524449N  populate_intf: -  - name: 'eth2' +  - name: eth2      enable: false      location:        civic_based: -        country_code: 'US' +        country_code: US          ca_info:            - ca_type: 0 -            ca_value: 'ENGLISH' - +            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'" - +    - delete service lldp interface eth2 location +    - delete service lldp interface eth2 'disable' +    - set service lldp interface eth2 location elin '0000000911'    after: -    - name: 'eth2' +    - name: eth2        location:          elin: 0000000911 -  deleted:    commands: -    - "delete service lldp interface eth1" -    - "delete service lldp interface eth2" - +    - delete service lldp interface eth1 +    - delete service lldp interface eth2    after: [] -  round_trip:    after: -    - name: 'eth1' +    - name: eth1        location:          civic_based: -          country_code: 'US' +          country_code: US            ca_info:              - ca_type: 0 -              ca_value: 'ENGLISH' - -    - name: 'eth2' +              ca_value: ENGLISH +    - name: eth2        location:          coordinate_based:            altitude: 2200 -          datum: 'WGS84' -          longitude: '222.267255W' -          latitude: '33.524449N' +          datum: WGS84 +          longitude: 222.267255W +          latitude: 33.524449N diff --git a/tests/integration/targets/vyos_logging/defaults/main.yaml b/tests/integration/targets/vyos_logging/defaults/main.yaml index 9ef5ba51..a845c24b 100644 --- a/tests/integration/targets/vyos_logging/defaults/main.yaml +++ b/tests/integration/targets/vyos_logging/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "*" +testcase: '*'  test_items: [] diff --git a/tests/integration/targets/vyos_logging/tasks/cli.yaml b/tests/integration/targets/vyos_logging/tasks/cli.yaml index 890d3acf..90f265f5 100644 --- a/tests/integration/targets/vyos_logging/tasks/cli.yaml +++ b/tests/integration/targets/vyos_logging/tasks/cli.yaml @@ -1,22 +1,22 @@  ---  - name: collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    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 }}" +- name: run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }} ansible_connection=ansible.netcommon.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 }}" +  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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_logging/tasks/main.yaml +++ b/tests/integration/targets/vyos_logging/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index d5884564..a025047b 100644 --- a/tests/integration/targets/vyos_logging/tests/cli/basic.yaml +++ b/tests/integration/targets/vyos_logging/tests/cli/basic.yaml @@ -2,125 +2,154 @@  - debug: msg="START cli/basic.yaml on connection={{ ansible_connection }}"  - name: set-up logging +  register: result    vyos.vyos.vyos_logging:      dest: console      facility: all      level: info      state: present -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set system syslog console facility all level info" in result.commands'  - name: set-up logging again (idempotent) +  register: result    vyos.vyos.vyos_logging:      dest: console      facility: all      level: info      state: present -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: file logging +  register: result    vyos.vyos.vyos_logging:      dest: file      name: test      facility: all      level: notice      state: present -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set system syslog file test facility all level notice" in result.commands'  - name: file logging again (idempotent) +  register: result    vyos.vyos.vyos_logging:      dest: file      name: test      facility: all      level: notice      state: present -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: delete logging +  register: result    vyos.vyos.vyos_logging:      dest: file      name: test      facility: all      level: notice      state: absent -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"delete system syslog file test facility all level notice" in result.commands'  - name: delete logging again (idempotent) +  register: result    vyos.vyos.vyos_logging:      dest: file      name: test      facility: all      level: notice      state: absent -  register: result  - assert:      that: -      - 'result.changed == false' +      - result.changed == false  - name: Add logging collections +  register: result    vyos.vyos.vyos_logging:      aggregate: -      - {dest: file, name: test1, facility: all, level: info} -      - {dest: file, name: test2, facility: news, level: debug} + +      - 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' +      - 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 +  register: result    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} + +      - 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' +      - 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 +  register: result    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} + +      - 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' +      - 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 index 7c62d72f..f8bda74c 100644 --- a/tests/integration/targets/vyos_logging/tests/cli/net_logging.yaml +++ b/tests/integration/targets/vyos_logging/tests/cli/net_logging.yaml @@ -1,39 +1,38 @@  --- -- 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. +- debug: msg="START vyos cli/net_logging.yaml on connection={{ ansible_connection +    }}"  - name: delete logging - setup -  net_logging: +  register: result +  ansible.netcommon.net_logging:      dest: file      name: test      facility: all      level: notice      state: absent -  register: result  - name: file logging using platform agnostic module -  net_logging: +  register: result +  ansible.netcommon.net_logging:      dest: file      name: test      facility: all      level: notice      state: present -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set system syslog file test facility all level notice" in result.commands'  - name: delete logging - teardown -  net_logging: +  register: result +  ansible.netcommon.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 }}" +- 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 deleted file mode 100644 index 9ef5ba51..00000000 --- a/tests/integration/targets/vyos_smoke/defaults/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -testcase: "*" -test_items: [] diff --git a/tests/integration/targets/vyos_smoke/tasks/cli.yaml b/tests/integration/targets/vyos_smoke/tasks/cli.yaml deleted file mode 100644 index 890d3acf..00000000 --- a/tests/integration/targets/vyos_smoke/tasks/cli.yaml +++ /dev/null @@ -1,22 +0,0 @@ ---- -- 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 deleted file mode 100644 index d4cf26fc..00000000 --- a/tests/integration/targets/vyos_smoke/tasks/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -- {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 deleted file mode 100644 index cfac2546..00000000 --- a/tests/integration/targets/vyos_smoke/tests/cli/common_config.yaml +++ /dev/null @@ -1,11 +0,0 @@ ---- -# 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 deleted file mode 100644 index fb80c93c..00000000 --- a/tests/integration/targets/vyos_smoke/tests/cli/common_utils.yaml +++ /dev/null @@ -1,50 +0,0 @@ ---- -# 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: true -  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 deleted file mode 100644 index 456effcc..00000000 --- a/tests/integration/targets/vyos_smoke/tests/cli/misc_tests.yaml +++ /dev/null @@ -1,14 +0,0 @@ ---- -# 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: true - -- 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/defaults/main.yaml b/tests/integration/targets/vyos_static_route/defaults/main.yaml index 9ef5ba51..a845c24b 100644 --- a/tests/integration/targets/vyos_static_route/defaults/main.yaml +++ b/tests/integration/targets/vyos_static_route/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "*" +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 index 890d3acf..90f265f5 100644 --- a/tests/integration/targets/vyos_static_route/tasks/cli.yaml +++ b/tests/integration/targets/vyos_static_route/tasks/cli.yaml @@ -1,22 +1,22 @@  ---  - name: collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    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 }}" +- name: run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }} ansible_connection=ansible.netcommon.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 }}" +  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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_static_route/tasks/main.yaml +++ b/tests/integration/targets/vyos_static_route/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index 4b1ef1c6..be93e89e 100644 --- a/tests/integration/targets/vyos_static_route/tests/cli/basic.yaml +++ b/tests/integration/targets/vyos_static_route/tests/cli/basic.yaml @@ -2,119 +2,136 @@  - debug: msg="START cli/basic.yaml on connection={{ ansible_connection }}"  - name: create static route +  register: result    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' +      - 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) +  register: result    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' +      - result.changed == false  - name: modify admin distance of static route +  register: result    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' +      - 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) +  register: result    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' +      - result.changed == false  - name: delete static route +  register: result    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' +      - result.changed == true        - '"delete protocols static route 172.24.0.0/24" in result.commands'  - name: delete static route again (idempotent) +  register: result    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' +      - result.changed == false  - name: Add static route collections +  register: result    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} + +      - 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' +      - 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 +  register: result    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} + +      - 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' +      - 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 +  register: result    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} + +      - 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' +      - 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 index e2529ebc..c53c838c 100644 --- 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 @@ -1,33 +1,32 @@  --- -- 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. +- debug: msg="START vyos cli/net_static_route.yaml on connection={{ ansible_connection +    }}"  - name: delete static route - setup -  net_static_route: +  register: result +  ansible.netcommon.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: +  register: result +  ansible.netcommon.net_static_route:      prefix: 172.24.0.0/24      next_hop: 192.168.42.64      state: present -  register: result  - assert:      that: -      - 'result.changed == true' +      - 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: +  register: result +  ansible.netcommon.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 }}" +- 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 index 9ef5ba51..a845c24b 100644 --- a/tests/integration/targets/vyos_system/defaults/main.yaml +++ b/tests/integration/targets/vyos_system/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "*" +testcase: '*'  test_items: [] diff --git a/tests/integration/targets/vyos_system/tasks/cli.yaml b/tests/integration/targets/vyos_system/tasks/cli.yaml index 890d3acf..90f265f5 100644 --- a/tests/integration/targets/vyos_system/tasks/cli.yaml +++ b/tests/integration/targets/vyos_system/tasks/cli.yaml @@ -1,22 +1,22 @@  ---  - name: collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    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 }}" +- name: run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }} ansible_connection=ansible.netcommon.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 }}" +  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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_system/tasks/main.yaml +++ b/tests/integration/targets/vyos_system/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index 474042fc..9c3c09ff 100644 --- a/tests/integration/targets/vyos_system/tests/cli/basic.yaml +++ b/tests/integration/targets/vyos_system/tests/cli/basic.yaml @@ -10,12 +10,12 @@      match: none  - name: configure name servers +  register: result    vyos.vyos.vyos_system:      name_servers:        - 192.0.2.1        - 192.0.2.2        - 192.0.2.3 -  register: result  - assert:      that: @@ -26,23 +26,23 @@        - result.commands[2]  is search("set system name-server '192.0.2.3'")  - name: verify name_servers +  register: result    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 +  register: result    vyos.vyos.vyos_system:      name_servers:        - 192.0.2.3      state: absent -  register: result  - assert:      that: diff --git a/tests/integration/targets/vyos_system/tests/cli/net_system.yaml b/tests/integration/targets/vyos_system/tests/cli/net_system.yaml index 36888669..3e68d204 100644 --- a/tests/integration/targets/vyos_system/tests/cli/net_system.yaml +++ b/tests/integration/targets/vyos_system/tests/cli/net_system.yaml @@ -1,8 +1,6 @@  --- -- 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. +- debug: msg="START vyos cli/net_system.yaml on connection={{ ansible_connection +    }}"  - name: setup    vyos.vyos.vyos_config: @@ -11,10 +9,10 @@      match: none  - name: configure name servers using platform agnostic module -  net_system: +  register: result +  ansible.netcommon.net_system:      name_servers:        - 192.0.2.1 -  register: result  - assert:      that: diff --git a/tests/integration/targets/vyos_user/defaults/main.yaml b/tests/integration/targets/vyos_user/defaults/main.yaml index 9ef5ba51..a845c24b 100644 --- a/tests/integration/targets/vyos_user/defaults/main.yaml +++ b/tests/integration/targets/vyos_user/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "*" +testcase: '*'  test_items: [] diff --git a/tests/integration/targets/vyos_user/tasks/cli.yaml b/tests/integration/targets/vyos_user/tasks/cli.yaml index 890d3acf..90f265f5 100644 --- a/tests/integration/targets/vyos_user/tasks/cli.yaml +++ b/tests/integration/targets/vyos_user/tasks/cli.yaml @@ -1,22 +1,22 @@  ---  - name: collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    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 }}" +- name: run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }} ansible_connection=ansible.netcommon.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 }}" +  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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_user/tasks/main.yaml +++ b/tests/integration/targets/vyos_user/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index bbd67bcb..bc4e7880 100644 --- a/tests/integration/targets/vyos_user/tests/cli/auth.yaml +++ b/tests/integration/targets/vyos_user/tests/cli/auth.yaml @@ -1,34 +1,39 @@  ---  - 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: Create user with password +      vyos.vyos.vyos_user: +        name: auth_user +        role: admin +        state: present +        configured_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: true -    register: results +    - 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: check that attempt failed -    assert: -      that: -        - results.failed +    - 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: true +      register: results +    - name: check that attempt failed +      assert: +        that: +          - results.failed    always: +      - name: delete user +      register: result        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 index a71f9c6f..00a7a264 100644 --- a/tests/integration/targets/vyos_user/tests/cli/basic.yaml +++ b/tests/integration/targets/vyos_user/tests/cli/basic.yaml @@ -9,69 +9,78 @@        - delete system login user ansibletest3  - name: Create user +  register: result    vyos.vyos.vyos_user:      name: ansibletest1      configured_password: test      state: present -  register: result  - assert:      that: -      - 'result.changed == true' +      - result.changed == true        - '"set system login user" in result.commands[0]'        - '"authentication plaintext-password" in result.commands[0]'  - name: Collection of users (SetUp) +  register: result    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"]' +      - result.changed == true +      - result.commands == ["set system login user ansibletest2 level operator", +        "set system login user ansibletest3 level operator"]  - name: Add user again (Idempotent) +  register: result    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' +      - result.changed == false +      - result.commands | length == 0  - name: Add collection of users (Idempotent) +  register: result    vyos.vyos.vyos_user:      aggregate: +        - name: ansibletest2 +        - name: ansibletest3      level: operator      state: present -  register: result  - assert:      that: -      - 'result.changed == false' -      - 'result.commands | length == 0' +      - result.changed == false +      - result.commands | length == 0  - name: tearDown +  register: result    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"]' +      - 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/defaults/main.yaml b/tests/integration/targets/vyos_vlan/defaults/main.yaml index 9ef5ba51..a845c24b 100644 --- a/tests/integration/targets/vyos_vlan/defaults/main.yaml +++ b/tests/integration/targets/vyos_vlan/defaults/main.yaml @@ -1,3 +1,3 @@  --- -testcase: "*" +testcase: '*'  test_items: [] diff --git a/tests/integration/targets/vyos_vlan/tasks/cli.yaml b/tests/integration/targets/vyos_vlan/tasks/cli.yaml index 890d3acf..90f265f5 100644 --- a/tests/integration/targets/vyos_vlan/tasks/cli.yaml +++ b/tests/integration/targets/vyos_vlan/tasks/cli.yaml @@ -1,22 +1,22 @@  ---  - name: collect all cli test cases    find: -    paths: "{{ role_path }}/tests/cli" -    patterns: "{{ testcase }}.yaml" +    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 }}" +- name: run test case (connection=ansible.netcommon.network_cli) +  include: '{{ test_case_to_run }} ansible_connection=ansible.netcommon.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 }}" +  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 index d4cf26fc..a3db933e 100644 --- a/tests/integration/targets/vyos_vlan/tasks/main.yaml +++ b/tests/integration/targets/vyos_vlan/tasks/main.yaml @@ -1,2 +1,4 @@  --- -- {include: cli.yaml, tags: ['cli']} +- 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 index cb0f3484..eade5a42 100644 --- a/tests/integration/targets/vyos_vlan/tests/cli/basic.yaml +++ b/tests/integration/targets/vyos_vlan/tests/cli/basic.yaml @@ -11,86 +11,92 @@        - delete interfaces ethernet eth1 vif 201  - name: set vlan with name -  vyos.vyos.vyos_vlan: &name +  register: result +  vyos.vyos.vyos_vlan: &id001      vlan_id: 100      name: vlan-100      interfaces: eth1 -  register: result  - assert:      that: -      - "result.changed == true" +      - 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 +  vyos.vyos.vyos_vlan: *id001  - assert:      that: -      - "result.changed == false" +      - result.changed == false  - name: set vlan with address -  vyos.vyos.vyos_vlan: &address +  register: result +  vyos.vyos.vyos_vlan: &id002      vlan_id: 5      address: 192.168.5.12/24      interfaces: eth0 -  register: result  - assert:      that: -      - "result.changed == true" +      - 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 +  vyos.vyos.vyos_vlan: *id002  - assert:      that: -      - "result.changed == false" +      - result.changed == false  - name: delete -  vyos.vyos.vyos_vlan: &delete +  register: result +  vyos.vyos.vyos_vlan: &id003      vlan_id: 100      interfaces: eth1      state: absent -  register: result  - assert:      that: -      - "result.changed == true" +      - result.changed == true        - "'delete interfaces ethernet eth1 vif 100' in result.commands"  - name: delete(idempotence) -  vyos.vyos.vyos_vlan: *delete    register: result +  vyos.vyos.vyos_vlan: *id003  - assert:      that: -      - "result.changed == false" +      - result.changed == false  - name: Create VLANs using aggregate -  vyos.vyos.vyos_vlan: &agg_vlan +  register: result +  vyos.vyos.vyos_vlan: &id004      aggregate: -      - {vlan_id: 101, name: voice, interfaces: "eth0"} -      - {vlan_id: 201, name: mgm, interfaces: "eth1"} + +      - vlan_id: 101 +        name: voice +        interfaces: eth0 + +      - vlan_id: 201 +        name: mgm +        interfaces: eth1      state: present -  register: result  - assert:      that: -      - "result.changed == true" +      - 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 +  vyos.vyos.vyos_vlan: *id004  - assert:      that: -      - "result.changed == false" +      - result.changed == false  - name: teardown    vyos.vyos.vyos_config: diff --git a/tests/integration/targets/vyos_vlan/tests/cli/intent.yaml b/tests/integration/targets/vyos_vlan/tests/cli/intent.yaml index 4a123173..f180d177 100644 --- a/tests/integration/targets/vyos_vlan/tests/cli/intent.yaml +++ b/tests/integration/targets/vyos_vlan/tests/cli/intent.yaml @@ -2,58 +2,58 @@  - debug: msg="START cli/intent.yaml on connection={{ ansible_connection }}"  - name: setup - remove vlan used in test -  vyos.vyos.vyos_config: &delete +  vyos.vyos.vyos_config:      lines:        - delete interfaces ethernet eth1 vif 100        - delete interfaces ethernet eth0 vif 100  - name: set vlan with name +  register: result    vyos.vyos.vyos_vlan:      vlan_id: 100      name: vlan-100      interfaces: eth1 -  register: result  - assert:      that: -      - "result.changed == true" +      - result.changed == true        - "'set interfaces ethernet eth1 vif 100 description vlan-100' in result.commands"  - name: check vlan interface intent +  register: result    vyos.vyos.vyos_vlan:      vlan_id: 100      name: vlan-100      associated_interfaces: eth1 -  register: result  - assert:      that: -      - "result.failed == false" +      - result.failed == false  - name: vlan interface config + intent +  register: result    vyos.vyos.vyos_vlan:      vlan_id: 100      interfaces: eth0      associated_interfaces:        - eth0        - eth1 -  register: result  - assert:      that: -      - "result.failed == false" +      - result.failed == false  - name: vlan intent fail +  register: result +  ignore_errors: true    vyos.vyos.vyos_vlan:      vlan_id: 100      associated_interfaces:        - eth3        - eth4 -  register: result -  ignore_errors: true  - assert:      that: -      - "result.failed == True" +      - 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 index 53e93fde..2059a438 100644 --- a/tests/integration/targets/vyos_vlan/tests/cli/multiple.yaml +++ b/tests/integration/targets/vyos_vlan/tests/cli/multiple.yaml @@ -9,49 +9,49 @@        - delete interfaces ethernet eth1 vif 100  - name: Add multiple interfaces to vlan -  vyos.vyos.vyos_vlan: &multiple +  register: result +  vyos.vyos.vyos_vlan: &id001      vlan_id: 100      interfaces:        - eth0        - eth1 -  register: result  - assert:      that: -      - "result.changed == true" +      - 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 +  vyos.vyos.vyos_vlan: *id001  - assert:      that: -      - "result.changed == false" +      - result.changed == false  - name: delete vlan with multiple interfaces -  vyos.vyos.vyos_vlan: &delete_multiple +  register: result +  vyos.vyos.vyos_vlan: &id002      vlan_id: 100      interfaces:        - eth0        - eth1      state: absent -  register: result  - assert:      that: -      - "result.changed == true" +      - 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 +  vyos.vyos.vyos_vlan: *id002  - assert:      that: -      - "result.changed == false" +      - result.changed == false  - name: teardown    vyos.vyos.vyos_config: diff --git a/tests/sanity/ignore-2.10.txt b/tests/sanity/ignore-2.10.txt new file mode 100644 index 00000000..a90966fe --- /dev/null +++ b/tests/sanity/ignore-2.10.txt @@ -0,0 +1,79 @@ +plugins/module_utils/network/vyos/vyos.py future-import-boilerplate +plugins/module_utils/network/vyos/vyos.py metaclass-boilerplate +plugins/modules/vyos_banner.py future-import-boilerplate +plugins/modules/vyos_banner.py metaclass-boilerplate +plugins/modules/vyos_banner.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_banner.py validate-modules:doc-missing-type +plugins/modules/vyos_banner.py validate-modules:doc-required-mismatch +plugins/modules/vyos_command.py future-import-boilerplate +plugins/modules/vyos_command.py metaclass-boilerplate +plugins/modules/vyos_command.py pylint:blacklisted-name +plugins/modules/vyos_command.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_command.py validate-modules:doc-missing-type +plugins/modules/vyos_command.py validate-modules:doc-required-mismatch +plugins/modules/vyos_command.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_config.py future-import-boilerplate +plugins/modules/vyos_config.py metaclass-boilerplate +plugins/modules/vyos_config.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_config.py validate-modules:doc-missing-type +plugins/modules/vyos_config.py validate-modules:doc-required-mismatch +plugins/modules/vyos_config.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_facts.py future-import-boilerplate +plugins/modules/vyos_facts.py metaclass-boilerplate +plugins/modules/vyos_facts.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_facts.py validate-modules:doc-required-mismatch +plugins/modules/vyos_facts.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_lldp_interfaces.py validate-modules:doc-required-mismatch +plugins/modules/vyos_logging.py future-import-boilerplate +plugins/modules/vyos_logging.py metaclass-boilerplate +plugins/modules/vyos_logging.py validate-modules:doc-choices-do-not-match-spec +plugins/modules/vyos_logging.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_logging.py validate-modules:doc-missing-type +plugins/modules/vyos_logging.py validate-modules:doc-required-mismatch +plugins/modules/vyos_logging.py validate-modules:missing-suboption-docs +plugins/modules/vyos_logging.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_logging.py validate-modules:undocumented-parameter +plugins/modules/vyos_ping.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_ping.py validate-modules:doc-required-mismatch +plugins/modules/vyos_ping.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_static_route.py future-import-boilerplate +plugins/modules/vyos_static_route.py metaclass-boilerplate +plugins/modules/vyos_static_route.py validate-modules:doc-choices-do-not-match-spec +plugins/modules/vyos_static_route.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_static_route.py validate-modules:doc-missing-type +plugins/modules/vyos_static_route.py validate-modules:doc-required-mismatch +plugins/modules/vyos_static_route.py validate-modules:missing-suboption-docs +plugins/modules/vyos_static_route.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_static_route.py validate-modules:undocumented-parameter +plugins/modules/vyos_system.py future-import-boilerplate +plugins/modules/vyos_system.py metaclass-boilerplate +plugins/modules/vyos_system.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_system.py validate-modules:doc-required-mismatch +plugins/modules/vyos_system.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_user.py future-import-boilerplate +plugins/modules/vyos_user.py metaclass-boilerplate +plugins/modules/vyos_user.py validate-modules:doc-choices-do-not-match-spec +plugins/modules/vyos_user.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_user.py validate-modules:doc-missing-type +plugins/modules/vyos_user.py validate-modules:doc-required-mismatch +plugins/modules/vyos_user.py validate-modules:missing-suboption-docs +plugins/modules/vyos_user.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_user.py validate-modules:undocumented-parameter +plugins/modules/vyos_vlan.py validate-modules:doc-choices-do-not-match-spec +plugins/modules/vyos_vlan.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_vlan.py validate-modules:doc-missing-type +plugins/modules/vyos_vlan.py validate-modules:doc-required-mismatch +plugins/modules/vyos_vlan.py validate-modules:missing-suboption-docs +plugins/modules/vyos_vlan.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_vlan.py validate-modules:undocumented-parameter +plugins/action/vyos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` +plugins/doc_fragments/vyos.py future-import-boilerplate +plugins/doc_fragments/vyos.py metaclass-boilerplate +tests/unit/mock/path.py future-import-boilerplate +tests/unit/mock/path.py metaclass-boilerplate +tests/unit/mock/yaml_helper.py future-import-boilerplate +tests/unit/mock/yaml_helper.py metaclass-boilerplate +tests/unit/modules/conftest.py future-import-boilerplate +tests/unit/modules/conftest.py metaclass-boilerplate +tests/unit/modules/utils.py future-import-boilerplate +tests/unit/modules/utils.py metaclass-boilerplate
\ No newline at end of file diff --git a/tests/sanity/ignore-2.9.txt b/tests/sanity/ignore-2.9.txt new file mode 100644 index 00000000..a90966fe --- /dev/null +++ b/tests/sanity/ignore-2.9.txt @@ -0,0 +1,79 @@ +plugins/module_utils/network/vyos/vyos.py future-import-boilerplate +plugins/module_utils/network/vyos/vyos.py metaclass-boilerplate +plugins/modules/vyos_banner.py future-import-boilerplate +plugins/modules/vyos_banner.py metaclass-boilerplate +plugins/modules/vyos_banner.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_banner.py validate-modules:doc-missing-type +plugins/modules/vyos_banner.py validate-modules:doc-required-mismatch +plugins/modules/vyos_command.py future-import-boilerplate +plugins/modules/vyos_command.py metaclass-boilerplate +plugins/modules/vyos_command.py pylint:blacklisted-name +plugins/modules/vyos_command.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_command.py validate-modules:doc-missing-type +plugins/modules/vyos_command.py validate-modules:doc-required-mismatch +plugins/modules/vyos_command.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_config.py future-import-boilerplate +plugins/modules/vyos_config.py metaclass-boilerplate +plugins/modules/vyos_config.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_config.py validate-modules:doc-missing-type +plugins/modules/vyos_config.py validate-modules:doc-required-mismatch +plugins/modules/vyos_config.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_facts.py future-import-boilerplate +plugins/modules/vyos_facts.py metaclass-boilerplate +plugins/modules/vyos_facts.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_facts.py validate-modules:doc-required-mismatch +plugins/modules/vyos_facts.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_lldp_interfaces.py validate-modules:doc-required-mismatch +plugins/modules/vyos_logging.py future-import-boilerplate +plugins/modules/vyos_logging.py metaclass-boilerplate +plugins/modules/vyos_logging.py validate-modules:doc-choices-do-not-match-spec +plugins/modules/vyos_logging.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_logging.py validate-modules:doc-missing-type +plugins/modules/vyos_logging.py validate-modules:doc-required-mismatch +plugins/modules/vyos_logging.py validate-modules:missing-suboption-docs +plugins/modules/vyos_logging.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_logging.py validate-modules:undocumented-parameter +plugins/modules/vyos_ping.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_ping.py validate-modules:doc-required-mismatch +plugins/modules/vyos_ping.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_static_route.py future-import-boilerplate +plugins/modules/vyos_static_route.py metaclass-boilerplate +plugins/modules/vyos_static_route.py validate-modules:doc-choices-do-not-match-spec +plugins/modules/vyos_static_route.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_static_route.py validate-modules:doc-missing-type +plugins/modules/vyos_static_route.py validate-modules:doc-required-mismatch +plugins/modules/vyos_static_route.py validate-modules:missing-suboption-docs +plugins/modules/vyos_static_route.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_static_route.py validate-modules:undocumented-parameter +plugins/modules/vyos_system.py future-import-boilerplate +plugins/modules/vyos_system.py metaclass-boilerplate +plugins/modules/vyos_system.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_system.py validate-modules:doc-required-mismatch +plugins/modules/vyos_system.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_user.py future-import-boilerplate +plugins/modules/vyos_user.py metaclass-boilerplate +plugins/modules/vyos_user.py validate-modules:doc-choices-do-not-match-spec +plugins/modules/vyos_user.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_user.py validate-modules:doc-missing-type +plugins/modules/vyos_user.py validate-modules:doc-required-mismatch +plugins/modules/vyos_user.py validate-modules:missing-suboption-docs +plugins/modules/vyos_user.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_user.py validate-modules:undocumented-parameter +plugins/modules/vyos_vlan.py validate-modules:doc-choices-do-not-match-spec +plugins/modules/vyos_vlan.py validate-modules:doc-default-does-not-match-spec +plugins/modules/vyos_vlan.py validate-modules:doc-missing-type +plugins/modules/vyos_vlan.py validate-modules:doc-required-mismatch +plugins/modules/vyos_vlan.py validate-modules:missing-suboption-docs +plugins/modules/vyos_vlan.py validate-modules:parameter-type-not-in-doc +plugins/modules/vyos_vlan.py validate-modules:undocumented-parameter +plugins/action/vyos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` +plugins/doc_fragments/vyos.py future-import-boilerplate +plugins/doc_fragments/vyos.py metaclass-boilerplate +tests/unit/mock/path.py future-import-boilerplate +tests/unit/mock/path.py metaclass-boilerplate +tests/unit/mock/yaml_helper.py future-import-boilerplate +tests/unit/mock/yaml_helper.py metaclass-boilerplate +tests/unit/modules/conftest.py future-import-boilerplate +tests/unit/modules/conftest.py metaclass-boilerplate +tests/unit/modules/utils.py future-import-boilerplate +tests/unit/modules/utils.py metaclass-boilerplate
\ No newline at end of file diff --git a/tests/sanity/requirements.txt b/tests/sanity/requirements.txt new file mode 100644 index 00000000..3e3a9669 --- /dev/null +++ b/tests/sanity/requirements.txt @@ -0,0 +1,4 @@ +packaging  # needed for update-bundled and changelog +sphinx ; python_version >= '3.5' # docs build requires python 3+ +sphinx-notfound-page ; python_version >= '3.5' # docs build requires python 3+ +straight.plugin ; python_version >= '3.5' # needed for hacking/build-ansible.py which will host changelog generation and requires python 3+ diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/unit/__init__.py diff --git a/tests/unit/compat/__init__.py b/tests/unit/compat/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/unit/compat/__init__.py diff --git a/tests/unit/compat/builtins.py b/tests/unit/compat/builtins.py new file mode 100644 index 00000000..bfc8adfb --- /dev/null +++ b/tests/unit/compat/builtins.py @@ -0,0 +1,34 @@ +# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com> +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +# +# Compat for python2.7 +# + +# One unittest needs to import builtins via __import__() so we need to have +# the string that represents it +try: +    import __builtin__ +except ImportError: +    BUILTINS = "builtins" +else: +    BUILTINS = "__builtin__" diff --git a/tests/unit/compat/mock.py b/tests/unit/compat/mock.py new file mode 100644 index 00000000..b45d6b5c --- /dev/null +++ b/tests/unit/compat/mock.py @@ -0,0 +1,127 @@ +# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com> +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +""" +Compat module for Python3.x's unittest.mock module +""" +import sys + +# Python 2.7 + +# Note: Could use the pypi mock library on python3.x as well as python2.x.  It +# is the same as the python3 stdlib mock library + +try: +    # Allow wildcard import because we really do want to import all of mock's +    # symbols into this compat shim +    # pylint: disable=wildcard-import,unused-wildcard-import +    from unittest.mock import * +except ImportError: +    # Python 2 +    # pylint: disable=wildcard-import,unused-wildcard-import +    try: +        from mock import * +    except ImportError: +        print("You need the mock library installed on python2.x to run tests") + + +# Prior to 3.4.4, mock_open cannot handle binary read_data +if sys.version_info >= (3,) and sys.version_info < (3, 4, 4): +    file_spec = None + +    def _iterate_read_data(read_data): +        # Helper for mock_open: +        # Retrieve lines from read_data via a generator so that separate calls to +        # readline, read, and readlines are properly interleaved +        sep = b"\n" if isinstance(read_data, bytes) else "\n" +        data_as_list = [l + sep for l in read_data.split(sep)] + +        if data_as_list[-1] == sep: +            # If the last line ended in a newline, the list comprehension will have an +            # extra entry that's just a newline.  Remove this. +            data_as_list = data_as_list[:-1] +        else: +            # If there wasn't an extra newline by itself, then the file being +            # emulated doesn't have a newline to end the last line  remove the +            # newline that our naive format() added +            data_as_list[-1] = data_as_list[-1][:-1] + +        for line in data_as_list: +            yield line + +    def mock_open(mock=None, read_data=""): +        """ +        A helper function to create a mock to replace the use of `open`. It works +        for `open` called directly or used as a context manager. + +        The `mock` argument is the mock object to configure. If `None` (the +        default) then a `MagicMock` will be created for you, with the API limited +        to methods or attributes available on standard file handles. + +        `read_data` is a string for the `read` methoddline`, and `readlines` of the +        file handle to return.  This is an empty string by default. +        """ + +        def _readlines_side_effect(*args, **kwargs): +            if handle.readlines.return_value is not None: +                return handle.readlines.return_value +            return list(_data) + +        def _read_side_effect(*args, **kwargs): +            if handle.read.return_value is not None: +                return handle.read.return_value +            return type(read_data)().join(_data) + +        def _readline_side_effect(): +            if handle.readline.return_value is not None: +                while True: +                    yield handle.readline.return_value +            for line in _data: +                yield line + +        global file_spec +        if file_spec is None: +            import _io + +            file_spec = list( +                set(dir(_io.TextIOWrapper)).union(set(dir(_io.BytesIO))) +            ) + +        if mock is None: +            mock = MagicMock(name="open", spec=open) + +        handle = MagicMock(spec=file_spec) +        handle.__enter__.return_value = handle + +        _data = _iterate_read_data(read_data) + +        handle.write.return_value = None +        handle.read.return_value = None +        handle.readline.return_value = None +        handle.readlines.return_value = None + +        handle.read.side_effect = _read_side_effect +        handle.readline.side_effect = _readline_side_effect() +        handle.readlines.side_effect = _readlines_side_effect + +        mock.return_value = handle +        return mock diff --git a/tests/unit/compat/unittest.py b/tests/unit/compat/unittest.py new file mode 100644 index 00000000..df3379b8 --- /dev/null +++ b/tests/unit/compat/unittest.py @@ -0,0 +1,39 @@ +# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com> +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +""" +Compat module for Python2.7's unittest module +""" + +import sys + +# Allow wildcard import because we really do want to import all of +# unittests's symbols into this compat shim +# pylint: disable=wildcard-import,unused-wildcard-import +if sys.version_info < (2, 7): +    try: +        # Need unittest2 on python2.6 +        from unittest2 import * +    except ImportError: +        print("You need unittest2 installed on python2.6.x to run tests") +else: +    from unittest import * diff --git a/tests/unit/mock/__init__.py b/tests/unit/mock/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/unit/mock/__init__.py diff --git a/tests/unit/mock/loader.py b/tests/unit/mock/loader.py new file mode 100644 index 00000000..c21188ee --- /dev/null +++ b/tests/unit/mock/loader.py @@ -0,0 +1,116 @@ +# (c) 2012-2014, Michael DeHaan <michael.dehaan@gmail.com> +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +import os + +from ansible.errors import AnsibleParserError +from ansible.parsing.dataloader import DataLoader +from ansible.module_utils._text import to_bytes, to_text + + +class DictDataLoader(DataLoader): +    def __init__(self, file_mapping=None): +        file_mapping = {} if file_mapping is None else file_mapping +        assert type(file_mapping) == dict + +        super(DictDataLoader, self).__init__() + +        self._file_mapping = file_mapping +        self._build_known_directories() +        self._vault_secrets = None + +    def load_from_file(self, path, cache=True, unsafe=False): +        path = to_text(path) +        if path in self._file_mapping: +            return self.load(self._file_mapping[path], path) +        return None + +    # TODO: the real _get_file_contents returns a bytestring, so we actually convert the +    #       unicode/text it's created with to utf-8 +    def _get_file_contents(self, path): +        path = to_text(path) +        if path in self._file_mapping: +            return (to_bytes(self._file_mapping[path]), False) +        else: +            raise AnsibleParserError("file not found: %s" % path) + +    def path_exists(self, path): +        path = to_text(path) +        return path in self._file_mapping or path in self._known_directories + +    def is_file(self, path): +        path = to_text(path) +        return path in self._file_mapping + +    def is_directory(self, path): +        path = to_text(path) +        return path in self._known_directories + +    def list_directory(self, path): +        ret = [] +        path = to_text(path) +        for x in list(self._file_mapping.keys()) + self._known_directories: +            if x.startswith(path): +                if os.path.dirname(x) == path: +                    ret.append(os.path.basename(x)) +        return ret + +    def is_executable(self, path): +        # FIXME: figure out a way to make paths return true for this +        return False + +    def _add_known_directory(self, directory): +        if directory not in self._known_directories: +            self._known_directories.append(directory) + +    def _build_known_directories(self): +        self._known_directories = [] +        for path in self._file_mapping: +            dirname = os.path.dirname(path) +            while dirname not in ("/", ""): +                self._add_known_directory(dirname) +                dirname = os.path.dirname(dirname) + +    def push(self, path, content): +        rebuild_dirs = False +        if path not in self._file_mapping: +            rebuild_dirs = True + +        self._file_mapping[path] = content + +        if rebuild_dirs: +            self._build_known_directories() + +    def pop(self, path): +        if path in self._file_mapping: +            del self._file_mapping[path] +            self._build_known_directories() + +    def clear(self): +        self._file_mapping = dict() +        self._known_directories = [] + +    def get_basedir(self): +        return os.getcwd() + +    def set_vault_secrets(self, vault_secrets): +        self._vault_secrets = vault_secrets diff --git a/tests/unit/mock/path.py b/tests/unit/mock/path.py new file mode 100644 index 00000000..aea8ba1e --- /dev/null +++ b/tests/unit/mock/path.py @@ -0,0 +1,7 @@ +from ansible_collections.vyos.vyos.tests.unit.compat.mock import MagicMock +from ansible.utils.path import unfrackpath + + +mock_unfrackpath_noop = MagicMock( +    spec_set=unfrackpath, side_effect=lambda x, *args, **kwargs: x +) diff --git a/tests/unit/mock/procenv.py b/tests/unit/mock/procenv.py new file mode 100644 index 00000000..1587949e --- /dev/null +++ b/tests/unit/mock/procenv.py @@ -0,0 +1,94 @@ +# (c) 2016, Matt Davis <mdavis@ansible.com> +# (c) 2016, Toshio Kuratomi <tkuratomi@ansible.com> +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +import sys +import json + +from contextlib import contextmanager +from io import BytesIO, StringIO +from ansible_collections.vyos.vyos.tests.unit.compat import unittest +from ansible.module_utils.six import PY3 +from ansible.module_utils._text import to_bytes + + +@contextmanager +def swap_stdin_and_argv(stdin_data="", argv_data=tuple()): +    """ +    context manager that temporarily masks the test runner's values for stdin and argv +    """ +    real_stdin = sys.stdin +    real_argv = sys.argv + +    if PY3: +        fake_stream = StringIO(stdin_data) +        fake_stream.buffer = BytesIO(to_bytes(stdin_data)) +    else: +        fake_stream = BytesIO(to_bytes(stdin_data)) + +    try: +        sys.stdin = fake_stream +        sys.argv = argv_data + +        yield +    finally: +        sys.stdin = real_stdin +        sys.argv = real_argv + + +@contextmanager +def swap_stdout(): +    """ +    context manager that temporarily replaces stdout for tests that need to verify output +    """ +    old_stdout = sys.stdout + +    if PY3: +        fake_stream = StringIO() +    else: +        fake_stream = BytesIO() + +    try: +        sys.stdout = fake_stream + +        yield fake_stream +    finally: +        sys.stdout = old_stdout + + +class ModuleTestCase(unittest.TestCase): +    def setUp(self, module_args=None): +        if module_args is None: +            module_args = { +                "_ansible_remote_tmp": "/tmp", +                "_ansible_keep_remote_files": False, +            } + +        args = json.dumps(dict(ANSIBLE_MODULE_ARGS=module_args)) + +        # unittest doesn't have a clean place to use a context manager, so we have to enter/exit manually +        self.stdin_swap = swap_stdin_and_argv(stdin_data=args) +        self.stdin_swap.__enter__() + +    def tearDown(self): +        # unittest doesn't have a clean place to use a context manager, so we have to enter/exit manually +        self.stdin_swap.__exit__(None, None, None) diff --git a/tests/unit/mock/vault_helper.py b/tests/unit/mock/vault_helper.py new file mode 100644 index 00000000..b34ae134 --- /dev/null +++ b/tests/unit/mock/vault_helper.py @@ -0,0 +1,42 @@ +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +from ansible.module_utils._text import to_bytes + +from ansible.parsing.vault import VaultSecret + + +class TextVaultSecret(VaultSecret): +    """A secret piece of text. ie, a password. Tracks text encoding. + +    The text encoding of the text may not be the default text encoding so +    we keep track of the encoding so we encode it to the same bytes.""" + +    def __init__(self, text, encoding=None, errors=None, _bytes=None): +        super(TextVaultSecret, self).__init__() +        self.text = text +        self.encoding = encoding or "utf-8" +        self._bytes = _bytes +        self.errors = errors or "strict" + +    @property +    def bytes(self): +        """The text encoded with encoding, unless we specifically set _bytes.""" +        return self._bytes or to_bytes( +            self.text, encoding=self.encoding, errors=self.errors +        ) diff --git a/tests/unit/mock/yaml_helper.py b/tests/unit/mock/yaml_helper.py new file mode 100644 index 00000000..1a945f1b --- /dev/null +++ b/tests/unit/mock/yaml_helper.py @@ -0,0 +1,164 @@ +import io +import yaml + +from ansible.module_utils.six import PY3 +from ansible.parsing.yaml.loader import AnsibleLoader +from ansible.parsing.yaml.dumper import AnsibleDumper + + +class YamlTestUtils(object): +    """Mixin class to combine with a unittest.TestCase subclass.""" + +    def _loader(self, stream): +        """Vault related tests will want to override this. + +        Vault cases should setup a AnsibleLoader that has the vault password.""" +        return AnsibleLoader(stream) + +    def _dump_stream(self, obj, stream, dumper=None): +        """Dump to a py2-unicode or py3-string stream.""" +        if PY3: +            return yaml.dump(obj, stream, Dumper=dumper) +        else: +            return yaml.dump(obj, stream, Dumper=dumper, encoding=None) + +    def _dump_string(self, obj, dumper=None): +        """Dump to a py2-unicode or py3-string""" +        if PY3: +            return yaml.dump(obj, Dumper=dumper) +        else: +            return yaml.dump(obj, Dumper=dumper, encoding=None) + +    def _dump_load_cycle(self, obj): +        # Each pass though a dump or load revs the 'generation' +        # obj to yaml string +        string_from_object_dump = self._dump_string(obj, dumper=AnsibleDumper) + +        # wrap a stream/file like StringIO around that yaml +        stream_from_object_dump = io.StringIO(string_from_object_dump) +        loader = self._loader(stream_from_object_dump) +        # load the yaml stream to create a new instance of the object (gen 2) +        obj_2 = loader.get_data() + +        # dump the gen 2 objects directory to strings +        string_from_object_dump_2 = self._dump_string( +            obj_2, dumper=AnsibleDumper +        ) + +        # The gen 1 and gen 2 yaml strings +        self.assertEqual(string_from_object_dump, string_from_object_dump_2) +        # the gen 1 (orig) and gen 2 py object +        self.assertEqual(obj, obj_2) + +        # again! gen 3... load strings into py objects +        stream_3 = io.StringIO(string_from_object_dump_2) +        loader_3 = self._loader(stream_3) +        obj_3 = loader_3.get_data() + +        string_from_object_dump_3 = self._dump_string( +            obj_3, dumper=AnsibleDumper +        ) + +        self.assertEqual(obj, obj_3) +        # should be transitive, but... +        self.assertEqual(obj_2, obj_3) +        self.assertEqual(string_from_object_dump, string_from_object_dump_3) + +    def _old_dump_load_cycle(self, obj): +        """Dump the passed in object to yaml, load it back up, dump again, compare.""" +        stream = io.StringIO() + +        yaml_string = self._dump_string(obj, dumper=AnsibleDumper) +        self._dump_stream(obj, stream, dumper=AnsibleDumper) + +        yaml_string_from_stream = stream.getvalue() + +        # reset stream +        stream.seek(0) + +        loader = self._loader(stream) +        # loader = AnsibleLoader(stream, vault_password=self.vault_password) +        obj_from_stream = loader.get_data() + +        stream_from_string = io.StringIO(yaml_string) +        loader2 = self._loader(stream_from_string) +        # loader2 = AnsibleLoader(stream_from_string, vault_password=self.vault_password) +        obj_from_string = loader2.get_data() + +        stream_obj_from_stream = io.StringIO() +        stream_obj_from_string = io.StringIO() + +        if PY3: +            yaml.dump( +                obj_from_stream, stream_obj_from_stream, Dumper=AnsibleDumper +            ) +            yaml.dump( +                obj_from_stream, stream_obj_from_string, Dumper=AnsibleDumper +            ) +        else: +            yaml.dump( +                obj_from_stream, +                stream_obj_from_stream, +                Dumper=AnsibleDumper, +                encoding=None, +            ) +            yaml.dump( +                obj_from_stream, +                stream_obj_from_string, +                Dumper=AnsibleDumper, +                encoding=None, +            ) + +        yaml_string_stream_obj_from_stream = stream_obj_from_stream.getvalue() +        yaml_string_stream_obj_from_string = stream_obj_from_string.getvalue() + +        stream_obj_from_stream.seek(0) +        stream_obj_from_string.seek(0) + +        if PY3: +            yaml_string_obj_from_stream = yaml.dump( +                obj_from_stream, Dumper=AnsibleDumper +            ) +            yaml_string_obj_from_string = yaml.dump( +                obj_from_string, Dumper=AnsibleDumper +            ) +        else: +            yaml_string_obj_from_stream = yaml.dump( +                obj_from_stream, Dumper=AnsibleDumper, encoding=None +            ) +            yaml_string_obj_from_string = yaml.dump( +                obj_from_string, Dumper=AnsibleDumper, encoding=None +            ) + +        assert yaml_string == yaml_string_obj_from_stream +        assert ( +            yaml_string +            == yaml_string_obj_from_stream +            == yaml_string_obj_from_string +        ) +        assert ( +            yaml_string +            == yaml_string_obj_from_stream +            == yaml_string_obj_from_string +            == yaml_string_stream_obj_from_stream +            == yaml_string_stream_obj_from_string +        ) +        assert obj == obj_from_stream +        assert obj == obj_from_string +        assert obj == yaml_string_obj_from_stream +        assert obj == yaml_string_obj_from_string +        assert ( +            obj +            == obj_from_stream +            == obj_from_string +            == yaml_string_obj_from_stream +            == yaml_string_obj_from_string +        ) +        return { +            "obj": obj, +            "yaml_string": yaml_string, +            "yaml_string_from_stream": yaml_string_from_stream, +            "obj_from_stream": obj_from_stream, +            "obj_from_string": obj_from_string, +            "yaml_string_obj_from_string": yaml_string_obj_from_string, +        } diff --git a/tests/unit/modules/__init__.py b/tests/unit/modules/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/unit/modules/__init__.py diff --git a/tests/unit/modules/conftest.py b/tests/unit/modules/conftest.py new file mode 100644 index 00000000..ac56c9c7 --- /dev/null +++ b/tests/unit/modules/conftest.py @@ -0,0 +1,37 @@ +# Copyright (c) 2017 Ansible Project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +import json + +import pytest + +from ansible.module_utils.six import string_types +from ansible.module_utils._text import to_bytes +from ansible.module_utils.common._collections_compat import MutableMapping + + +@pytest.fixture +def patch_ansible_module(request, mocker): +    if isinstance(request.param, string_types): +        args = request.param +    elif isinstance(request.param, MutableMapping): +        if "ANSIBLE_MODULE_ARGS" not in request.param: +            request.param = {"ANSIBLE_MODULE_ARGS": request.param} +        if "_ansible_remote_tmp" not in request.param["ANSIBLE_MODULE_ARGS"]: +            request.param["ANSIBLE_MODULE_ARGS"][ +                "_ansible_remote_tmp" +            ] = "/tmp" +        if ( +            "_ansible_keep_remote_files" +            not in request.param["ANSIBLE_MODULE_ARGS"] +        ): +            request.param["ANSIBLE_MODULE_ARGS"][ +                "_ansible_keep_remote_files" +            ] = False +        args = json.dumps(request.param) +    else: +        raise Exception( +            "Malformed data to the patch_ansible_module pytest fixture" +        ) + +    mocker.patch("ansible.module_utils.basic._ANSIBLE_ARGS", to_bytes(args)) diff --git a/tests/unit/modules/network/__init__.py b/tests/unit/modules/network/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/unit/modules/network/__init__.py diff --git a/tests/unit/modules/network/vyos/__init__.py b/tests/unit/modules/network/vyos/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/unit/modules/network/vyos/__init__.py diff --git a/tests/unit/modules/network/vyos/fixtures/__init__.py b/tests/unit/modules/network/vyos/fixtures/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/unit/modules/network/vyos/fixtures/__init__.py diff --git a/tests/unit/modules/network/vyos/fixtures/show_host_name b/tests/unit/modules/network/vyos/fixtures/show_host_name new file mode 100644 index 00000000..e89bc064 --- /dev/null +++ b/tests/unit/modules/network/vyos/fixtures/show_host_name @@ -0,0 +1 @@ +vyos01 diff --git a/tests/unit/modules/network/vyos/fixtures/show_version b/tests/unit/modules/network/vyos/fixtures/show_version new file mode 100644 index 00000000..a015d554 --- /dev/null +++ b/tests/unit/modules/network/vyos/fixtures/show_version @@ -0,0 +1,14 @@ +Version:      VyOS 1.1.7 +Description:  VyOS 1.1.7 (helium) +Copyright:    2016 VyOS maintainers and contributors +Built by:     maintainers@vyos.net +Built on:     Wed Feb 17 09:57:31 UTC 2016 +Build ID:     1602170957-4459750 +System type:  x86 64-bit +Boot via:     image +Hypervisor:   VMware +HW model:     VMware Virtual Platform +HW S/N:       VMware-42 3c 26 25 44 c5 0a 91-cf 2c 97 2b fe 9b 25 be +HW UUID:      423C2625-44C5-0A91-CF2C-972BFE9B25BE +Uptime:       01:08:20 up 52 days,  2:13,  1 user,  load average: 0.00, 0.01, 0.05 + diff --git a/tests/unit/modules/network/vyos/fixtures/vyos_config_config.cfg b/tests/unit/modules/network/vyos/fixtures/vyos_config_config.cfg new file mode 100644 index 00000000..fcef8ebd --- /dev/null +++ b/tests/unit/modules/network/vyos/fixtures/vyos_config_config.cfg @@ -0,0 +1,10 @@ +set system host-name 'router' +set system domain-name 'example.com' +set system domain-search domain 'example.com' +set system name-server '8.8.8.8' +set system name-server '8.8.4.4' +set interfaces ethernet eth0 address '1.2.3.4/24' +set interfaces ethernet eth0 description 'test string' +set interfaces ethernet eth1 address '6.7.8.9/24' +set interfaces ethernet eth1 description 'test string' +set interfaces ethernet eth1 disable diff --git a/tests/unit/modules/network/vyos/fixtures/vyos_config_src.cfg b/tests/unit/modules/network/vyos/fixtures/vyos_config_src.cfg new file mode 100644 index 00000000..410f6115 --- /dev/null +++ b/tests/unit/modules/network/vyos/fixtures/vyos_config_src.cfg @@ -0,0 +1,6 @@ +set system host-name foo + +delete interfaces ethernet eth0 address +set interfaces ethernet eth1 address '6.7.8.9/24' +     set interfaces ethernet eth1 description 'test string' +set interfaces ethernet eth1 disable diff --git a/tests/unit/modules/network/vyos/fixtures/vyos_config_src_brackets.cfg b/tests/unit/modules/network/vyos/fixtures/vyos_config_src_brackets.cfg new file mode 100644 index 00000000..468b32c2 --- /dev/null +++ b/tests/unit/modules/network/vyos/fixtures/vyos_config_src_brackets.cfg @@ -0,0 +1,13 @@ +interfaces { +    ethernet eth0 { +        address 10.10.10.10/24 +    } +    ethernet eth1 { +        address 6.7.8.9/24 +        description test string +        disable +    } +} +system { +    host-name foo +} diff --git a/tests/unit/modules/network/vyos/fixtures/vyos_ping_ping_10.10.10.10_count_2 b/tests/unit/modules/network/vyos/fixtures/vyos_ping_ping_10.10.10.10_count_2 new file mode 100644 index 00000000..c28fba15 --- /dev/null +++ b/tests/unit/modules/network/vyos/fixtures/vyos_ping_ping_10.10.10.10_count_2 @@ -0,0 +1,7 @@ +PING 10.10.10.10 (10.10.10.10) 56(84) bytes of data. +64 bytes from 10.10.10.10: icmp_req=1 ttl=255 time=1.27 ms +64 bytes from 10.10.10.10: icmp_req=2 ttl=255 time=2.28 ms + +--- 10.8.38.66 ping statistics --- +2 packets transmitted, 2 received, 0% packet loss, time 1001ms +rtt min/avg/max/mdev = 12.1222/17.124/22.225/10.143 ms diff --git a/tests/unit/modules/network/vyos/fixtures/vyos_ping_ping_10.10.10.11_count_10_ttl_128_size_512 b/tests/unit/modules/network/vyos/fixtures/vyos_ping_ping_10.10.10.11_count_10_ttl_128_size_512 new file mode 100644 index 00000000..54e026c2 --- /dev/null +++ b/tests/unit/modules/network/vyos/fixtures/vyos_ping_ping_10.10.10.11_count_10_ttl_128_size_512 @@ -0,0 +1,15 @@ +PING 10.10.10.11 (10.8.38.65) 512(540) bytes of data. +520 bytes from 10.10.10.11: icmp_req=1 ttl=255 time=1.17 ms +520 bytes from 10.10.10.11: icmp_req=2 ttl=255 time=1.32 ms +520 bytes from 10.10.10.11: icmp_req=3 ttl=255 time=1.21 ms +520 bytes from 10.10.10.11: icmp_req=4 ttl=255 time=1.46 ms +520 bytes from 10.10.10.11: icmp_req=5 ttl=255 time=1.32 ms +520 bytes from 10.10.10.11: icmp_req=6 ttl=255 time=1.28 ms +520 bytes from 10.10.10.11: icmp_req=7 ttl=255 time=1.25 ms +520 bytes from 10.10.10.11: icmp_req=8 ttl=255 time=1.23 ms +520 bytes from 10.10.10.11: icmp_req=9 ttl=255 time=1.34 ms +520 bytes from 10.10.10.11: icmp_req=10 ttl=255 time=21.0 ms + +--- 10.10.10.11 ping statistics --- +10 packets transmitted, 10 received, 0% packet loss, time 9012ms +rtt min/avg/max/mdev = 1.170/3.262/21.002/5.913 ms diff --git a/tests/unit/modules/network/vyos/fixtures/vyos_ping_ping_10.10.10.20_count_4 b/tests/unit/modules/network/vyos/fixtures/vyos_ping_ping_10.10.10.20_count_4 new file mode 100644 index 00000000..08e61817 --- /dev/null +++ b/tests/unit/modules/network/vyos/fixtures/vyos_ping_ping_10.10.10.20_count_4 @@ -0,0 +1,9 @@ +PING 10.10.10.20 (10.10.10.20) 56(84) bytes of data. +From 10.10.10.20 icmp_seq=1 Destination Host Unreachable +From 10.10.10.20 icmp_seq=2 Destination Host Unreachable +From 10.10.10.20 icmp_seq=3 Destination Host Unreachable +From 10.10.10.20 icmp_seq=4 Destination Host Unreachable + +--- 10.10.10.20 ping statistics --- +4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3053ms +pipe 3 diff --git a/tests/unit/modules/network/vyos/fixtures/vyos_user_config.cfg b/tests/unit/modules/network/vyos/fixtures/vyos_user_config.cfg new file mode 100644 index 00000000..81cd1a48 --- /dev/null +++ b/tests/unit/modules/network/vyos/fixtures/vyos_user_config.cfg @@ -0,0 +1,2 @@ +set system login user admin level operator authentication encrypted-password '$6$V5oWW3JM9NFAwOG$P2L4raFvIrZjjs3g0qmH4Ns5ti7flRpSs6aEqy4TrGZYXGeBiYzwi2A6jy' +set system login user ansible level operator authentication encrypted-password '$6$ZfvSv6A50W6yNPYX$4HP5eg2sywcXYxTqhApQ7zvUvx0HsQHrI9xuJoFLy2gM/' diff --git a/tests/unit/modules/network/vyos/test_vyos_banner.py b/tests/unit/modules/network/vyos/test_vyos_banner.py new file mode 100644 index 00000000..c575409c --- /dev/null +++ b/tests/unit/modules/network/vyos/test_vyos_banner.py @@ -0,0 +1,63 @@ +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +from ansible_collections.vyos.vyos.tests.unit.compat.mock import patch +from ansible_collections.vyos.vyos.plugins.modules import vyos_banner +from ansible_collections.vyos.vyos.tests.unit.modules.utils import ( +    set_module_args, +) +from .vyos_module import TestVyosModule + + +class TestVyosBannerModule(TestVyosModule): + +    module = vyos_banner + +    def setUp(self): +        super(TestVyosBannerModule, self).setUp() + +        self.mock_get_config = patch( +            "ansible_collections.vyos.vyos.plugins.modules.vyos_banner.get_config" +        ) +        self.get_config = self.mock_get_config.start() + +        self.mock_load_config = patch( +            "ansible_collections.vyos.vyos.plugins.modules.vyos_banner.load_config" +        ) +        self.load_config = self.mock_load_config.start() + +    def tearDown(self): +        super(TestVyosBannerModule, self).tearDown() +        self.mock_get_config.stop() +        self.mock_load_config.stop() + +    def load_fixtures(self, commands=None): +        self.load_config.return_value = dict(diff=None, session="session") + +    def test_vyos_banner_create(self): +        set_module_args(dict(banner="pre-login", text="test\nbanner\nstring")) +        commands = [ +            "set system login banner pre-login 'test\\nbanner\\nstring'" +        ] +        self.execute_module(changed=True, commands=commands) + +    def test_vyos_banner_remove(self): +        set_module_args(dict(banner="pre-login", state="absent")) +        self.execute_module(changed=False, commands=[]) diff --git a/tests/unit/modules/network/vyos/test_vyos_command.py b/tests/unit/modules/network/vyos/test_vyos_command.py new file mode 100644 index 00000000..820c6c44 --- /dev/null +++ b/tests/unit/modules/network/vyos/test_vyos_command.py @@ -0,0 +1,122 @@ +# (c) 2016 Red Hat Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +from ansible_collections.vyos.vyos.tests.unit.compat.mock import patch +from ansible_collections.vyos.vyos.plugins.modules import vyos_command +from ansible_collections.vyos.vyos.tests.unit.modules.utils import ( +    set_module_args, +) +from .vyos_module import TestVyosModule, load_fixture + + +class TestVyosCommandModule(TestVyosModule): + +    module = vyos_command + +    def setUp(self): +        super(TestVyosCommandModule, self).setUp() +        self.mock_run_commands = patch( +            "ansible_collections.vyos.vyos.plugins.modules.vyos_command.run_commands" +        ) +        self.run_commands = self.mock_run_commands.start() + +    def tearDown(self): +        super(TestVyosCommandModule, self).tearDown() +        self.mock_run_commands.stop() + +    def load_fixtures(self, commands=None): +        def load_from_file(*args, **kwargs): +            module, commands = args +            output = list() + +            for item in commands: +                try: +                    command = item["command"] +                except ValueError: +                    command = item +                filename = str(command).replace(" ", "_") +                output.append(load_fixture(filename)) +            return output + +        self.run_commands.side_effect = load_from_file + +    def test_vyos_command_simple(self): +        set_module_args(dict(commands=["show version"])) +        result = self.execute_module() +        self.assertEqual(len(result["stdout"]), 1) +        self.assertTrue(result["stdout"][0].startswith("Version:      VyOS")) + +    def test_vyos_command_multiple(self): +        set_module_args(dict(commands=["show version", "show version"])) +        result = self.execute_module() +        self.assertEqual(len(result["stdout"]), 2) +        self.assertTrue(result["stdout"][0].startswith("Version:      VyOS")) + +    def test_vyos_command_wait_for(self): +        wait_for = 'result[0] contains "VyOS maintainers"' +        set_module_args(dict(commands=["show version"], wait_for=wait_for)) +        self.execute_module() + +    def test_vyos_command_wait_for_fails(self): +        wait_for = 'result[0] contains "test string"' +        set_module_args(dict(commands=["show version"], wait_for=wait_for)) +        self.execute_module(failed=True) +        self.assertEqual(self.run_commands.call_count, 10) + +    def test_vyos_command_retries(self): +        wait_for = 'result[0] contains "test string"' +        set_module_args( +            dict(commands=["show version"], wait_for=wait_for, retries=2) +        ) +        self.execute_module(failed=True) +        self.assertEqual(self.run_commands.call_count, 2) + +    def test_vyos_command_match_any(self): +        wait_for = [ +            'result[0] contains "VyOS maintainers"', +            'result[0] contains "test string"', +        ] +        set_module_args( +            dict(commands=["show version"], wait_for=wait_for, match="any") +        ) +        self.execute_module() + +    def test_vyos_command_match_all(self): +        wait_for = [ +            'result[0] contains "VyOS maintainers"', +            'result[0] contains "maintainers@vyos.net"', +        ] +        set_module_args( +            dict(commands=["show version"], wait_for=wait_for, match="all") +        ) +        self.execute_module() + +    def test_vyos_command_match_all_failure(self): +        wait_for = [ +            'result[0] contains "VyOS maintainers"', +            'result[0] contains "test string"', +        ] +        commands = ["show version", "show version"] +        set_module_args( +            dict(commands=commands, wait_for=wait_for, match="all") +        ) +        self.execute_module(failed=True) diff --git a/tests/unit/modules/network/vyos/test_vyos_config.py b/tests/unit/modules/network/vyos/test_vyos_config.py new file mode 100644 index 00000000..a471edd4 --- /dev/null +++ b/tests/unit/modules/network/vyos/test_vyos_config.py @@ -0,0 +1,159 @@ +# +# (c) 2016 Red Hat Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +from ansible_collections.vyos.vyos.tests.unit.compat.mock import ( +    patch, +    MagicMock, +) +from ansible_collections.vyos.vyos.plugins.modules import vyos_config +from ansible_collections.vyos.vyos.plugins.cliconf.vyos import Cliconf +from ansible_collections.vyos.vyos.tests.unit.modules.utils import ( +    set_module_args, +) +from .vyos_module import TestVyosModule, load_fixture + + +class TestVyosConfigModule(TestVyosModule): + +    module = vyos_config + +    def setUp(self): +        super(TestVyosConfigModule, self).setUp() + +        self.mock_get_config = patch( +            "ansible_collections.vyos.vyos.plugins.modules.vyos_config.get_config" +        ) +        self.get_config = self.mock_get_config.start() + +        self.mock_load_config = patch( +            "ansible_collections.vyos.vyos.plugins.modules.vyos_config.load_config" +        ) +        self.load_config = self.mock_load_config.start() + +        self.mock_run_commands = patch( +            "ansible_collections.vyos.vyos.plugins.modules.vyos_config.run_commands" +        ) +        self.run_commands = self.mock_run_commands.start() + +        self.mock_get_connection = patch( +            "ansible_collections.vyos.vyos.plugins.modules.vyos_config.get_connection" +        ) +        self.get_connection = self.mock_get_connection.start() + +        self.cliconf_obj = Cliconf(MagicMock()) +        self.running_config = load_fixture("vyos_config_config.cfg") + +        self.conn = self.get_connection() +        self.conn.edit_config = MagicMock() +        self.running_config = load_fixture("vyos_config_config.cfg") + +    def tearDown(self): +        super(TestVyosConfigModule, self).tearDown() + +        self.mock_get_config.stop() +        self.mock_load_config.stop() +        self.mock_run_commands.stop() +        self.mock_get_connection.stop() + +    def load_fixtures(self, commands=None): +        config_file = "vyos_config_config.cfg" +        self.get_config.return_value = load_fixture(config_file) +        self.load_config.return_value = None + +    def test_vyos_config_unchanged(self): +        src = load_fixture("vyos_config_config.cfg") +        self.conn.get_diff = MagicMock( +            return_value=self.cliconf_obj.get_diff(src, src) +        ) +        set_module_args(dict(src=src)) +        self.execute_module() + +    def test_vyos_config_src(self): +        src = load_fixture("vyos_config_src.cfg") +        set_module_args(dict(src=src)) +        candidate = "\n".join(self.module.format_commands(src.splitlines())) +        commands = [ +            "set system host-name foo", +            "delete interfaces ethernet eth0 address", +        ] +        self.conn.get_diff = MagicMock( +            return_value=self.cliconf_obj.get_diff( +                candidate, self.running_config +            ) +        ) +        self.execute_module(changed=True, commands=commands) + +    def test_vyos_config_src_brackets(self): +        src = load_fixture("vyos_config_src_brackets.cfg") +        set_module_args(dict(src=src)) +        candidate = "\n".join(self.module.format_commands(src.splitlines())) +        commands = [ +            "set interfaces ethernet eth0 address 10.10.10.10/24", +            "set system host-name foo", +        ] +        self.conn.get_diff = MagicMock( +            return_value=self.cliconf_obj.get_diff( +                candidate, self.running_config +            ) +        ) +        self.execute_module(changed=True, commands=commands) + +    def test_vyos_config_backup(self): +        set_module_args(dict(backup=True)) +        result = self.execute_module() +        self.assertIn("__backup__", result) + +    def test_vyos_config_lines(self): +        commands = ["set system host-name foo"] +        set_module_args(dict(lines=commands)) +        candidate = "\n".join(commands) +        self.conn.get_diff = MagicMock( +            return_value=self.cliconf_obj.get_diff( +                candidate, self.running_config +            ) +        ) +        self.execute_module(changed=True, commands=commands) + +    def test_vyos_config_config(self): +        config = "set system host-name localhost" +        new_config = ["set system host-name router"] +        set_module_args(dict(lines=new_config, config=config)) +        candidate = "\n".join(new_config) +        self.conn.get_diff = MagicMock( +            return_value=self.cliconf_obj.get_diff(candidate, config) +        ) +        self.execute_module(changed=True, commands=new_config) + +    def test_vyos_config_match_none(self): +        lines = [ +            "set system interfaces ethernet eth0 address 1.2.3.4/24", +            "set system interfaces ethernet eth0 description test string", +        ] +        set_module_args(dict(lines=lines, match="none")) +        candidate = "\n".join(lines) +        self.conn.get_diff = MagicMock( +            return_value=self.cliconf_obj.get_diff( +                candidate, None, diff_match="none" +            ) +        ) +        self.execute_module(changed=True, commands=lines, sort=False) diff --git a/tests/unit/modules/network/vyos/test_vyos_facts.py b/tests/unit/modules/network/vyos/test_vyos_facts.py new file mode 100644 index 00000000..b22a5232 --- /dev/null +++ b/tests/unit/modules/network/vyos/test_vyos_facts.py @@ -0,0 +1,109 @@ +# (c) 2016 Red Hat Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>. +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +import json +from ansible_collections.vyos.vyos.tests.unit.compat.mock import patch +from ansible_collections.vyos.vyos.plugins.modules import vyos_facts +from ansible_collections.vyos.vyos.tests.unit.modules.utils import ( +    set_module_args, +) +from .vyos_module import TestVyosModule, load_fixture + + +class TestVyosFactsModule(TestVyosModule): +    module = vyos_facts + +    def setUp(self): +        super(TestVyosFactsModule, self).setUp() +        self.mock_run_commands = patch( +            "ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.facts.legacy.base.run_commands" +        ) +        self.run_commands = self.mock_run_commands.start() + +        self.mock_get_resource_connection = patch( +            "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.facts.facts.get_resource_connection" +        ) +        self.get_resource_connection = ( +            self.mock_get_resource_connection.start() +        ) + +        self.mock_get_capabilities = patch( +            "ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.facts.legacy.base.get_capabilities" +        ) +        self.get_capabilities = self.mock_get_capabilities.start() +        self.get_capabilities.return_value = { +            "device_info": { +                "network_os": "vyos", +                "network_os_hostname": "vyos01", +                "network_os_model": "VMware", +                "network_os_version": "VyOS 1.1.7", +            }, +            "network_api": "cliconf", +        } + +    def tearDown(self): +        super(TestVyosFactsModule, self).tearDown() +        self.mock_run_commands.stop() +        self.mock_get_capabilities.stop() +        self.mock_get_resource_connection.stop() + +    def load_fixtures(self, commands=None): +        def load_from_file(*args, **kwargs): +            module, commands = args +            output = list() +            for item in commands: +                try: +                    obj = json.loads(item) +                    command = obj["command"] +                except ValueError: +                    command = item +                filename = str(command).replace(" ", "_") +                output.append(load_fixture(filename)) +            return output + +        self.run_commands.side_effect = load_from_file + +    def test_vyos_facts_default(self): +        set_module_args(dict(gather_subset="default")) +        result = self.execute_module() +        facts = result.get("ansible_facts") +        self.assertEqual(len(facts), 10) +        self.assertEqual(facts["ansible_net_hostname"].strip(), "vyos01") +        self.assertEqual(facts["ansible_net_version"], "VyOS 1.1.7") + +    def test_vyos_facts_not_all(self): +        set_module_args(dict(gather_subset="!all")) +        result = self.execute_module() +        facts = result.get("ansible_facts") +        self.assertEqual(len(facts), 10) +        self.assertEqual(facts["ansible_net_hostname"].strip(), "vyos01") +        self.assertEqual(facts["ansible_net_version"], "VyOS 1.1.7") + +    def test_vyos_facts_exclude_most(self): +        set_module_args(dict(gather_subset=["!neighbors", "!config"])) +        result = self.execute_module() +        facts = result.get("ansible_facts") +        self.assertEqual(len(facts), 10) +        self.assertEqual(facts["ansible_net_hostname"].strip(), "vyos01") +        self.assertEqual(facts["ansible_net_version"], "VyOS 1.1.7") + +    def test_vyos_facts_invalid_subset(self): +        set_module_args(dict(gather_subset="cereal")) +        self.execute_module(failed=True) diff --git a/tests/unit/modules/network/vyos/test_vyos_ping.py b/tests/unit/modules/network/vyos/test_vyos_ping.py new file mode 100644 index 00000000..e3076103 --- /dev/null +++ b/tests/unit/modules/network/vyos/test_vyos_ping.py @@ -0,0 +1,107 @@ +# (c) 2016 Red Hat Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +from ansible_collections.vyos.vyos.tests.unit.compat.mock import patch +from ansible_collections.vyos.vyos.plugins.modules import vyos_ping +from ansible_collections.vyos.vyos.tests.unit.modules.utils import ( +    set_module_args, +) +from .vyos_module import TestVyosModule, load_fixture + + +class TestVyosPingModule(TestVyosModule): + +    module = vyos_ping + +    def setUp(self): +        super(TestVyosPingModule, self).setUp() +        self.mock_run_commands = patch( +            "ansible_collections.vyos.vyos.plugins.modules.vyos_ping.run_commands" +        ) +        self.run_commands = self.mock_run_commands.start() + +    def tearDown(self): +        super(TestVyosPingModule, self).tearDown() +        self.mock_run_commands.stop() + +    def load_fixtures(self, commands=None): +        def load_from_file(*args, **kwargs): +            commands = kwargs["commands"] +            output = list() + +            for command in commands: +                filename = str(command).split(" | ")[0].replace(" ", "_") +                output.append(load_fixture("vyos_ping_%s" % filename)) +            return output + +        self.run_commands.side_effect = load_from_file + +    def test_vyos_ping_expected_success(self): +        """ Test for successful pings when destination should be reachable """ +        set_module_args(dict(count=2, dest="10.10.10.10")) +        self.execute_module() + +    def test_vyos_ping_expected_failure(self): +        """ Test for unsuccessful pings when destination should not be reachable """ +        set_module_args(dict(count=4, dest="10.10.10.20", state="absent")) +        self.execute_module() + +    def test_vyos_ping_unexpected_success(self): +        """ Test for successful pings when destination should not be reachable - FAIL. """ +        set_module_args(dict(count=2, dest="10.10.10.10", state="absent")) +        self.execute_module(failed=True) + +    def test_vyos_ping_unexpected_failure(self): +        """ Test for unsuccessful pings when destination should be reachable - FAIL. """ +        set_module_args(dict(count=4, dest="10.10.10.20")) +        self.execute_module(failed=True) + +    def test_vyos_ping_failure_stats(self): +        """Test for asserting stats when ping fails""" +        set_module_args(dict(count=4, dest="10.10.10.20")) +        result = self.execute_module(failed=True) +        self.assertEqual(result["packet_loss"], "100%") +        self.assertEqual(result["packets_rx"], 0) +        self.assertEqual(result["packets_tx"], 4) + +    def test_vyos_ping_success_stats(self): +        """Test for asserting stats when ping passes""" +        set_module_args(dict(count=2, dest="10.10.10.10")) +        result = self.execute_module() +        self.assertEqual(result["packet_loss"], "0%") +        self.assertEqual(result["packets_rx"], 2) +        self.assertEqual(result["packets_tx"], 2) +        self.assertEqual(result["rtt"]["min"], 12) +        self.assertEqual(result["rtt"]["avg"], 17) +        self.assertEqual(result["rtt"]["max"], 22) +        self.assertEqual(result["rtt"]["mdev"], 10) + +    def test_vyos_ping_success_stats_with_options(self): +        set_module_args(dict(count=10, ttl=128, size=512, dest="10.10.10.11")) +        result = self.execute_module() +        self.assertEqual(result["packet_loss"], "0%") +        self.assertEqual(result["packets_rx"], 10) +        self.assertEqual(result["packets_tx"], 10) +        self.assertEqual(result["rtt"]["min"], 1) +        self.assertEqual(result["rtt"]["avg"], 3) +        self.assertEqual(result["rtt"]["max"], 21) +        self.assertEqual(result["rtt"]["mdev"], 5) diff --git a/tests/unit/modules/network/vyos/test_vyos_static_route.py b/tests/unit/modules/network/vyos/test_vyos_static_route.py new file mode 100644 index 00000000..e020ca51 --- /dev/null +++ b/tests/unit/modules/network/vyos/test_vyos_static_route.py @@ -0,0 +1,71 @@ +# (c) 2016 Red Hat Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +from ansible_collections.vyos.vyos.tests.unit.compat.mock import patch +from ansible_collections.vyos.vyos.plugins.modules import vyos_static_route +from ansible_collections.vyos.vyos.tests.unit.modules.utils import ( +    set_module_args, +) +from .vyos_module import TestVyosModule + + +class TestVyosStaticRouteModule(TestVyosModule): + +    module = vyos_static_route + +    def setUp(self): +        super(TestVyosStaticRouteModule, self).setUp() + +        self.mock_get_config = patch( +            "ansible_collections.vyos.vyos.plugins.modules.vyos_static_route.get_config" +        ) +        self.get_config = self.mock_get_config.start() + +        self.mock_load_config = patch( +            "ansible_collections.vyos.vyos.plugins.modules.vyos_static_route.load_config" +        ) +        self.load_config = self.mock_load_config.start() + +    def tearDown(self): +        super(TestVyosStaticRouteModule, self).tearDown() + +        self.mock_get_config.stop() +        self.mock_load_config.stop() + +    def load_fixtures(self, commands=None, transport="cli"): +        self.load_config.return_value = dict(diff=None, session="session") + +    def test_vyos_static_route_present(self): +        set_module_args( +            dict( +                prefix="172.26.0.0/16", +                next_hop="172.26.4.1", +                admin_distance="1", +            ) +        ) +        result = self.execute_module(changed=True) +        self.assertEqual( +            result["commands"], +            [ +                "set protocols static route 172.26.0.0/16 next-hop 172.26.4.1 distance 1" +            ], +        ) diff --git a/tests/unit/modules/network/vyos/test_vyos_system.py b/tests/unit/modules/network/vyos/test_vyos_system.py new file mode 100644 index 00000000..c22f7c18 --- /dev/null +++ b/tests/unit/modules/network/vyos/test_vyos_system.py @@ -0,0 +1,116 @@ +# (c) 2016 Red Hat Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +from ansible_collections.vyos.vyos.tests.unit.compat.mock import patch +from ansible_collections.vyos.vyos.plugins.modules import vyos_system +from ansible_collections.vyos.vyos.tests.unit.modules.utils import ( +    set_module_args, +) +from .vyos_module import TestVyosModule, load_fixture + + +class TestVyosSystemModule(TestVyosModule): + +    module = vyos_system + +    def setUp(self): +        super(TestVyosSystemModule, self).setUp() + +        self.mock_get_config = patch( +            "ansible_collections.vyos.vyos.plugins.modules.vyos_system.get_config" +        ) +        self.get_config = self.mock_get_config.start() + +        self.mock_load_config = patch( +            "ansible_collections.vyos.vyos.plugins.modules.vyos_system.load_config" +        ) +        self.load_config = self.mock_load_config.start() + +    def tearDown(self): +        super(TestVyosSystemModule, self).tearDown() + +        self.mock_get_config.stop() +        self.mock_load_config.stop() + +    def load_fixtures(self, commands=None): +        self.get_config.return_value = load_fixture("vyos_config_config.cfg") + +    def test_vyos_system_hostname(self): +        set_module_args(dict(host_name="foo")) +        commands = ["set system host-name 'foo'"] +        self.execute_module(changed=True, commands=commands) + +    def test_vyos_system_clear_hostname(self): +        set_module_args(dict(host_name="foo", state="absent")) +        commands = ["delete system host-name"] +        self.execute_module(changed=True, commands=commands) + +    def test_vyos_remove_single_name_server(self): +        set_module_args(dict(name_server=["8.8.4.4"], state="absent")) +        commands = ["delete system name-server '8.8.4.4'"] +        self.execute_module(changed=True, commands=commands) + +    def test_vyos_system_domain_name(self): +        set_module_args(dict(domain_name="example2.com")) +        commands = ["set system domain-name 'example2.com'"] +        self.execute_module(changed=True, commands=commands) + +    def test_vyos_system_clear_domain_name(self): +        set_module_args(dict(domain_name="example.com", state="absent")) +        commands = ["delete system domain-name"] +        self.execute_module(changed=True, commands=commands) + +    def test_vyos_system_domain_search(self): +        set_module_args( +            dict(domain_search=["foo.example.com", "bar.example.com"]) +        ) +        commands = [ +            "set system domain-search domain 'foo.example.com'", +            "set system domain-search domain 'bar.example.com'", +        ] +        self.execute_module(changed=True, commands=commands) + +    def test_vyos_system_clear_domain_search(self): +        set_module_args(dict(domain_search=[])) +        commands = ["delete system domain-search domain"] +        self.execute_module(changed=True, commands=commands) + +    def test_vyos_system_no_change(self): +        set_module_args( +            dict( +                host_name="router", +                domain_name="example.com", +                name_server=["8.8.8.8", "8.8.4.4"], +            ) +        ) +        result = self.execute_module() +        self.assertEqual([], result["commands"]) + +    def test_vyos_system_clear_all(self): +        set_module_args(dict(state="absent")) +        commands = [ +            "delete system host-name", +            "delete system domain-search domain", +            "delete system domain-name", +            "delete system name-server", +        ] +        self.execute_module(changed=True, commands=commands) diff --git a/tests/unit/modules/network/vyos/test_vyos_user.py b/tests/unit/modules/network/vyos/test_vyos_user.py new file mode 100644 index 00000000..d4c2dbe6 --- /dev/null +++ b/tests/unit/modules/network/vyos/test_vyos_user.py @@ -0,0 +1,139 @@ +# (c) 2016 Red Hat Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +from ansible_collections.vyos.vyos.tests.unit.compat.mock import patch +from ansible_collections.vyos.vyos.plugins.modules import vyos_user +from ansible_collections.vyos.vyos.tests.unit.modules.utils import ( +    set_module_args, +) +from .vyos_module import TestVyosModule, load_fixture + + +class TestVyosUserModule(TestVyosModule): + +    module = vyos_user + +    def setUp(self): +        super(TestVyosUserModule, self).setUp() + +        self.mock_get_config = patch( +            "ansible_collections.vyos.vyos.plugins.modules.vyos_user.get_config" +        ) +        self.get_config = self.mock_get_config.start() + +        self.mock_load_config = patch( +            "ansible_collections.vyos.vyos.plugins.modules.vyos_user.load_config" +        ) +        self.load_config = self.mock_load_config.start() + +    def tearDown(self): +        super(TestVyosUserModule, self).tearDown() +        self.mock_get_config.stop() +        self.mock_load_config.stop() + +    def load_fixtures(self, commands=None, transport="cli"): +        self.get_config.return_value = load_fixture("vyos_user_config.cfg") +        self.load_config.return_value = dict(diff=None, session="session") + +    def test_vyos_user_password(self): +        set_module_args(dict(name="ansible", configured_password="test")) +        result = self.execute_module(changed=True) +        self.assertEqual( +            result["commands"], +            [ +                "set system login user ansible authentication plaintext-password test" +            ], +        ) + +    def test_vyos_user_delete(self): +        set_module_args(dict(name="ansible", state="absent")) +        result = self.execute_module(changed=True) +        self.assertEqual( +            result["commands"], ["delete system login user ansible"] +        ) + +    def test_vyos_user_level(self): +        set_module_args(dict(name="ansible", level="operator")) +        result = self.execute_module(changed=True) +        self.assertEqual( +            result["commands"], +            ["set system login user ansible level operator"], +        ) + +    def test_vyos_user_level_invalid(self): +        set_module_args(dict(name="ansible", level="sysadmin")) +        self.execute_module(failed=True) + +    def test_vyos_user_purge(self): +        set_module_args(dict(purge=True)) +        result = self.execute_module(changed=True) +        self.assertEqual( +            sorted(result["commands"]), +            sorted( +                [ +                    "delete system login user ansible", +                    "delete system login user admin", +                ] +            ), +        ) + +    def test_vyos_user_update_password_changed(self): +        set_module_args( +            dict( +                name="test", +                configured_password="test", +                update_password="on_create", +            ) +        ) +        result = self.execute_module(changed=True) +        self.assertEqual( +            result["commands"], +            [ +                "set system login user test authentication plaintext-password test" +            ], +        ) + +    def test_vyos_user_update_password_on_create_ok(self): +        set_module_args( +            dict( +                name="ansible", +                configured_password="test", +                update_password="on_create", +            ) +        ) +        self.execute_module() + +    def test_vyos_user_update_password_always(self): +        set_module_args( +            dict( +                name="ansible", +                configured_password="test", +                update_password="always", +            ) +        ) +        result = self.execute_module(changed=True) +        self.assertEqual( +            result["commands"], +            [ +                "set system login user ansible authentication plaintext-password test" +            ], +        ) diff --git a/tests/unit/modules/network/vyos/vyos_module.py b/tests/unit/modules/network/vyos/vyos_module.py new file mode 100644 index 00000000..fb15c715 --- /dev/null +++ b/tests/unit/modules/network/vyos/vyos_module.py @@ -0,0 +1,104 @@ +# (c) 2016 Red Hat Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +import os +import json + +from ansible_collections.vyos.vyos.tests.unit.modules.utils import ( +    AnsibleExitJson, +    AnsibleFailJson, +    ModuleTestCase, +) + + +fixture_path = os.path.join(os.path.dirname(__file__), "fixtures") +fixture_data = {} + + +def load_fixture(name): +    path = os.path.join(fixture_path, name) + +    if path in fixture_data: +        return fixture_data[path] + +    with open(path) as f: +        data = f.read() + +    try: +        data = json.loads(data) +    except Exception: +        pass + +    fixture_data[path] = data +    return data + + +class TestVyosModule(ModuleTestCase): +    def execute_module( +        self, +        failed=False, +        changed=False, +        commands=None, +        sort=True, +        defaults=False, +    ): +        self.load_fixtures(commands) + +        if failed: +            result = self.failed() +            self.assertTrue(result["failed"], result) +        else: +            result = self.changed(changed) +            self.assertEqual(result["changed"], changed, result) + +        if commands is not None: +            if sort: +                self.assertEqual( +                    sorted(commands), +                    sorted(result["commands"]), +                    result["commands"], +                ) +            else: +                self.assertEqual( +                    commands, result["commands"], result["commands"] +                ) + +        return result + +    def failed(self): +        with self.assertRaises(AnsibleFailJson) as exc: +            self.module.main() + +        result = exc.exception.args[0] +        self.assertTrue(result["failed"], result) +        return result + +    def changed(self, changed=False): +        with self.assertRaises(AnsibleExitJson) as exc: +            self.module.main() + +        result = exc.exception.args[0] +        self.assertEqual(result["changed"], changed, result) +        return result + +    def load_fixtures(self, commands=None): +        pass diff --git a/tests/unit/modules/utils.py b/tests/unit/modules/utils.py new file mode 100644 index 00000000..2c9c602e --- /dev/null +++ b/tests/unit/modules/utils.py @@ -0,0 +1,48 @@ +import json + +from ansible_collections.vyos.vyos.tests.unit.compat import unittest +from ansible_collections.vyos.vyos.tests.unit.compat.mock import patch +from ansible.module_utils import basic +from ansible.module_utils._text import to_bytes + + +def set_module_args(args): +    if "_ansible_remote_tmp" not in args: +        args["_ansible_remote_tmp"] = "/tmp" +    if "_ansible_keep_remote_files" not in args: +        args["_ansible_keep_remote_files"] = False + +    args = json.dumps({"ANSIBLE_MODULE_ARGS": args}) +    basic._ANSIBLE_ARGS = to_bytes(args) + + +class AnsibleExitJson(Exception): +    pass + + +class AnsibleFailJson(Exception): +    pass + + +def exit_json(*args, **kwargs): +    if "changed" not in kwargs: +        kwargs["changed"] = False +    raise AnsibleExitJson(kwargs) + + +def fail_json(*args, **kwargs): +    kwargs["failed"] = True +    raise AnsibleFailJson(kwargs) + + +class ModuleTestCase(unittest.TestCase): +    def setUp(self): +        self.mock_module = patch.multiple( +            basic.AnsibleModule, exit_json=exit_json, fail_json=fail_json +        ) +        self.mock_module.start() +        self.mock_sleep = patch("time.sleep") +        self.mock_sleep.start() +        set_module_args({}) +        self.addCleanup(self.mock_module.stop) +        self.addCleanup(self.mock_sleep.stop) diff --git a/tests/unit/requirements.txt b/tests/unit/requirements.txt new file mode 100644 index 00000000..a9772bea --- /dev/null +++ b/tests/unit/requirements.txt @@ -0,0 +1,42 @@ +boto3 +placebo +pycrypto +passlib +pypsrp +python-memcached +pytz +pyvmomi +redis +requests +setuptools > 0.6 # pytest-xdist installed via requirements does not work with very old setuptools (sanity_ok) +unittest2 ; python_version < '2.7' +importlib ; python_version < '2.7' +netaddr +ipaddress +netapp-lib +solidfire-sdk-python + +# requirements for F5 specific modules +f5-sdk ; python_version >= '2.7' +f5-icontrol-rest ; python_version >= '2.7' +deepdiff + +# requirement for Fortinet specific modules +pyFMG + +# requirement for aci_rest module +xmljson + +# requirement for winrm connection plugin tests +pexpect + +# requirement for the linode module +linode-python # APIv3 +linode_api4 ; python_version > '2.6' # APIv4 + +# requirement for the gitlab module +python-gitlab +httmock + +# requirment for kubevirt modules +openshift ; python_version >= '2.7' | 
