Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test: Adding integration tests for cv_device_v3 #621

Merged
merged 19 commits into from
Aug 15, 2023
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
- name: Run cv_device_v3
import_playbook: test_cv_device_v3.yaml
25 changes: 25 additions & 0 deletions ansible_collections/arista/cvp/molecule/cv_device_v3/molecule.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
scenario:
test_sequence:
- converge
driver:
name: delegated
platforms:
- name: dummy
managed: false
provisioner:
name: ansible
config_options:
defaults:
jinja2_extensions: 'jinja2.ext.loopcontrols,jinja2.ext.do,jinja2.ext.i18n'
gathering: explicit
command_warnings: False
remote_tmp: /tmp/.ansible-${USER}/tmp
stdout_callback: yaml
playbooks:
converge: converge.yml
ansible_args:
- --inventory
- ${MOLECULE_SCENARIO_DIRECTORY}/../../examples/inventory.yml
verifier:
name: ansible
Original file line number Diff line number Diff line change
@@ -0,0 +1,308 @@
---
- name: Test cv_device_v3
hosts: CloudVision
connection: local
gather_facts: no
vars:
CVP_DEVICES_MOVE_DEVICE:
- fqdn: leaf1
parentContainerName: "Leaf"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's create a new container and then move it there.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed


CVP_DEVICES_PARENT_CONTAINER_NONE:
- fqdn: leaf1
parentContainerName: None

CVP_DEVICES_PARENT_CONTAINER_SAME:
- fqdn: leaf1
parentContainerName: "Leaf"
CVP_DEVICES_STATE_ABSENT:
Shivani-chourasiya marked this conversation as resolved.
Show resolved Hide resolved
- fqdn: leaf2
parentContainerName: ""

CVP_DEVICES_FACT0RY_RESET:
- fqdn: leaf2
parentContainerName: ""

CVP_DEVICES_PROVISIONING_RESET:
- fqdn: leaf3
parentContainerName: ""

CVP_DEVICES_BUNDLE_ATTACHED:
- serialNumber: JPE504a004ea054
parentContainerName: L2_Leaf
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did we create this container or is it something that is assumed to exist on ATD by default?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

configlets:
- 'AVD_Ipmi3'
Copy link
Contributor

@sugetha24 sugetha24 Jul 27, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we use a custom configlet and not what we assume to already be present on ATD?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

imageBundle: leaf_bundle
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we upload an image and then use it here instead of using something that's already present on ATD?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed


CVP_DEVICES_BUNDLE_DETACHED:
- serialNumber: JPE504a004ea054
parentContainerName: L2_Leaf
configlets:
- 'AVD_Ipmi3'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as above

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed


CVP_CONFIGLETS:
configlet1: '! This is first configlet'
configlet2: '! This is second configlet'

CVP_DEVICES_APPLY_CONFIGLET:
- fqdn: leaf1
parentContainerName: "Leaf"
configlets:
- 'configlet1'
- 'configlet2'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

upload these configlets before attaching please

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed


CVP_DEVICES_DETACH_CONFIGLET:
- fqdn: leaf1
parentContainerName: "Leaf"

CVP_DEVICES_DEPLOY:
- fqdn: leaf3 # leaf1 must be in undefined container
parentContainerName: "pod2"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This container doesn't exist on ATD. Please create container and then deploy it there.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed


tasks:
#####################################
## MOVE DEVICE ##
#####################################

- name: Run CV_DEVICE_V3 To Move Device
arista.cvp.cv_device_v3:
devices: '{{CVP_DEVICES_MOVE_DEVICE}}'
state: present
register: MOVE_DEVICE_RUN

- name: Check Move Device
assert:
that:
- "MOVE_DEVICE_RUN.devices_moved.changed == true"
- "MOVE_DEVICE_RUN.devices_moved.devices_moved_count == 1"
- "MOVE_DEVICE_RUN.devices_moved.devices_moved_list == ['leaf1_to_Leaf']"
- "MOVE_DEVICE_RUN.devices_moved.success == true"
- "MOVE_DEVICE_RUN.failed == false"

- name: Run CV_DEVICE_V3 To Move Device With Parent Container None
arista.cvp.cv_device_v3:
devices: '{{CVP_DEVICES_PARENT_CONTAINER_NONE}}'
state: present
ignore_errors: yes
register: MOVE_DEVICE_NONE

- name: Negative Test Check Move Device With Parent Container None
assert:
that:
- MOVE_DEVICE_NONE.msg == "The target container 'None' for the device 'leaf1' does not exist on CVP."
- MOVE_DEVICE_NONE.changed == false
- MOVE_DEVICE_NONE.failed == true

- name: Run CV_DEVICE_V3 To Move Device With Parent Container Same
arista.cvp.cv_device_v3:
devices: '{{CVP_DEVICES_PARENT_CONTAINER_SAME}}'
state: present
ignore_errors: yes
register: MOVE_DEVICE

- name: Negative Test Check Move Device With With Parent Container Same
assert:
that:
- MOVE_DEVICE.devices_moved.changed == false
- MOVE_DEVICE.devices_moved.devices_moved_count == 0
- MOVE_DEVICE.devices_moved.devices_moved_list == []
- MOVE_DEVICE.devices_moved.success == false
- MOVE_DEVICE.failed == false
- MOVE_DEVICE.taskIds: []

######################################
## STATE ABSENT (DECOMMISSION) ##
######################################
- name: Run CV_DEVICE_V3 With State Absent
arista.cvp.cv_device_v3:
devices: '{{CVP_DEVICES_STATE_ABSENT}}'
state: absent
register: DECOMMISSION_DEVICE
- assert:
that:
- DECOMMISSION_DEVICE.devices_decommissioned.changed == true
- DECOMMISSION_DEVICE.devices_decommissioned.devices_decommissioned_count == 0
- DECOMMISSION_DEVICE.devices_decommissioned.devices_decommissioned_list == ['leaf2_delete']
- DECOMMISSION_DEVICE.devices_decommissioned.success == true
- DECOMMISSION_DEVICE.devices_decommissioned.taskIds == []
- DECOMMISSION_DEVICE.failed == false

- name: Run CV_DEVICE_V3 With State Absent # when device does not exist in CVP
arista.cvp.cv_device_v3:
devices: '{{CVP_DEVICES_STATE_ABSENT}}'
state: absent
ignore_errors: yes
register: DECOMMISSION_DEVICE_ABSENT
- assert:
that:
- DECOMMISSION_DEVICE_ABSENT.changed == false
- DECOMMISSION_DEVICE_ABSENT.failed == true
- DECOMMISSION_DEVICE_ABSENT.msg == "Error - the following devices do not exist in CVP ['leaf2'] but are defined in the playbook. Make sure that the devices are provisioned and defined with the full fqdn name (including the domain name) if needed."

######################################
## STATE FACTORY RESET ##
######################################
- name: Run CV_DEVICE_V3 With State Factory reset
arista.cvp.cv_device_v3:
devices: '{{CVP_DEVICES_FACT0RY_RESET}}'
state: factory_reset
register: FACTORY_RESET_RESULT

# it does not move device to undefined container, just creates a task on CVP

- name: Check State Factory reset
assert:
that:
- FACTORY_RESET_RESULT.devices_reset.changed == true
- FACTORY_RESET_RESULT.devices_reset.devices_reset_count == 1
- FACTORY_RESET_RESULT.devices_reset.devices_reset_list == ['leaf2_reset']
- FACTORY_RESET_RESULT.devices_reset.success == true
- FACTORY_RESET_RESULT.devices_reset.taskIds is defined
- FACTORY_RESET_RESULT.failed == false
- FACTORY_RESET_RESULT.success == true

######################################
## STATE PROVISIONING RESET ##
######################################

- name: Run CV_DEVICE_V3 With State Provisioning Reset
arista.cvp.cv_device_v3:
devices: '{{CVP_DEVICES_PROVISIONING_RESET}}'
state: provisioning_reset
register: PROVISIONING_RESET_RESULT

# if we try to delete the same device again(already in undefined container), it does not raise any error and gives the same result

- name: check provisioning reset
assert:
that:
- PROVISIONING_RESET_RESULT.devices_removed.changed == true
- PROVISIONING_RESET_RESULT.devices_removed.devices_removed_count == 1
- PROVISIONING_RESET_RESULT.devices_removed. devices_removed_list == ['leaf3_delete']
- PROVISIONING_RESET_RESULT.devices_removed.success == true
- PROVISIONING_RESET_RESULT.devices_removed.taskIds is defined
- PROVISIONING_RESET_RESULT.failed == false
- PROVISIONING_RESET_RESULT.success == true

#################################
## ASSIGN/REMOVE BUNDLE ##
#################################

- name: "Attach bundle on {{inventory_hostname}}"
arista.cvp.cv_device_v3:
devices: '{{CVP_DEVICES_BUNDLE_ATTACHED}}'
state: present
search_key: serialNumber
apply_mode: strict
register: ATTACH_BUNDLE

- name: "Check attach bundle"
assert:
that:
- ATTACH_BUNDLE.bundle_attached.changed == true
- ATTACH_BUNDLE.bundle_attached.bundle_attached_count == 1
- ATTACH_BUNDLE.bundle_attached.bundle_attached_list != []
- ATTACH_BUNDLE.bundle_attached.success == true
- ATTACH_BUNDLE.bundle_attached.taskIds != []

- name: "Detach bundle on {{inventory_hostname}}"
arista.cvp.cv_device_v3:
devices: '{{CVP_DEVICES_BUNDLE_DETACHED}}'
state: present
search_key: serialNumber
apply_mode: strict
register: DETACH_BUNDLE

- name: "Check detach bundle"
assert:
that:
- DETACH_BUNDLE.bundle_detached.changed == true
- DETACH_BUNDLE.bundle_detached.bundle_detached_count == 1
- DETACH_BUNDLE.bundle_detached.bundle_detached_list != []
- DETACH_BUNDLE.bundle_detached.success == true

#################################
## APPLY/DETACH CONFIGLET ##
#################################

- name: "Push config"
arista.cvp.cv_configlet_v3:
configlets: "{{CVP_CONFIGLETS}}"
state: present
register: CV_CONFIGLET

- name: "Apply configlet on {{inventory_hostname}}"
arista.cvp.cv_device_v3:
devices: '{{CVP_DEVICES_APPLY_CONFIGLET}}'
state: present
search_key: fqdn
register: CV_DEVICE_V3_RESULT

- name: "Check apply_configlet with apply_mode loose"
assert:
that:
- CV_DEVICE_V3_RESULT.changed == true
- CV_DEVICE_V3_RESULT.configlets_attached.changed == true
- CV_DEVICE_V3_RESULT.configlets_attached.configlets_attached_count == 2
- CV_DEVICE_V3_RESULT.configlets_attached.configlets_attached_list == ["leaf1_configlet_attached"]
- CV_DEVICE_V3_RESULT.configlets_attached.success == true
- CV_DEVICE_V3_RESULT.configlets_attached.taskIds != []

- name: "Apply same configlet again on {{inventory_hostname}}"
arista.cvp.cv_device_v3:
devices: '{{CVP_DEVICES_APPLY_CONFIGLET}}'
state: present
register: CV_DEVICE_V3_RESULT

- name: "Check apply_configlet with same configlets"
assert:
that:
- CV_DEVICE_V3_RESULT.changed == false
- CV_DEVICE_V3_RESULT.configlets_attached.changed == false
- CV_DEVICE_V3_RESULT.configlets_attached.configlets_attached_count == 0
- CV_DEVICE_V3_RESULT.configlets_attached.configlets_attached_list == []
- CV_DEVICE_V3_RESULT.configlets_attached.success == false
- CV_DEVICE_V3_RESULT.configlets_attached.taskIds == []

- name: "Detach configlet from {{inventory_hostname}}"
arista.cvp.cv_device_v3:
devices: '{{CVP_DEVICES_DETACH_CONFIGLET}}'
state: present
apply_mode: strict
register: CV_DEVICE_V3_RESULT

- name: "Check detach_configlet with apply_mode strict"
assert:
that:
- CV_DEVICE_V3_RESULT.changed == true
- CV_DEVICE_V3_RESULT.configlets_detached.changed == true
- CV_DEVICE_V3_RESULT.configlets_detached.configlets_detached_count == 2
- CV_DEVICE_V3_RESULT.configlets_detached.configlets_detached_list == ["leaf1_configlet_removed - configlet1 - configlet2"]
- CV_DEVICE_V3_RESULT.configlets_detached.success == true
- CV_DEVICE_V3_RESULT.configlets_detached.taskIds != []

- name: "Delete config"
arista.cvp.cv_configlet_v3:
configlets: "{{CVP_CONFIGLETS}}"
state: absent
register: DELETE_CONFIGLET_RESULT

#################################
## DEPLOY DEVICE ##
#################################

- name: "Deploy device on {{inventory_hostname}}"
arista.cvp.cv_device_v3:
devices: '{{CVP_DEVICES_DEPLOY}}'
state: present
register: CV_DEVICE_V3_RESULT

- name: "Check deploy_device"
assert:
that:
- CV_DEVICE_V3_RESULT.changed == true
- CV_DEVICE_V3_RESULT.devices_deployed.changed == true
- CV_DEVICE_V3_RESULT.devices_deployed.devices_deployed_count == 1
- CV_DEVICE_V3_RESULT.devices_deployed.devices_deployed_list == ["leaf3_deployed"]
- CV_DEVICE_V3_RESULT.devices_deployed.success == true
- CV_DEVICE_V3_RESULT.devices_deployed.taskIds != []
Loading