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

VMware: Add check for valid VLAN id range #55023

Merged
merged 1 commit into from
Apr 10, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 5 additions & 2 deletions lib/ansible/modules/cloud/vmware/vmware_dvs_portgroup.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
description:
- The VLAN ID that should be configured with the portgroup, use 0 for no VLAN.
- 'If C(vlan_trunk) is configured to be I(true), this can be a combination of multiple ranges and numbers, example: 1-200, 205, 400-4094.'
- The valid C(vlan_id) range is from 0 to 4094. Overlapping ranges are allowed.
required: True
num_ports:
description:
Expand Down Expand Up @@ -260,8 +261,10 @@ def create_port_group(self):
vlan_id_list = []
for vlan_id_splitted in self.module.params['vlan_id'].split(','):
try:
vlan_id_start, vlan_id_end = vlan_id_splitted.split('-')
vlan_id_list.append(vim.NumericRange(start=int(vlan_id_start.strip()), end=int(vlan_id_end.strip())))
vlan_id_start, vlan_id_end = map(int, vlan_id_splitted.split('-'))
if vlan_id_start not in range(0, 4095) or vlan_id_end not in range(0, 4095):
self.module.fail_json(msg="vlan_id range %s specified is incorrect. The valid vlan_id range is from 0 to 4094." % vlan_id_splitted)
vlan_id_list.append(vim.NumericRange(start=vlan_id_start, end=vlan_id_end))
except ValueError:
vlan_id_list.append(vim.NumericRange(start=int(vlan_id_splitted.strip()), end=int(vlan_id_splitted.strip())))
config.defaultPortConfig.vlan.vlanId = vlan_id_list
Expand Down
25 changes: 24 additions & 1 deletion test/integration/targets/vmware_dvs_portgroup/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@
password: "{{ vcsim_instance['json']['password'] }}"
switch_name: "{{ new_dvs_0001['json'][0] | basename }}"
portgroup_name: "basic-trunk"
vlan_id: 1-4096
vlan_id: 1-4094
vlan_trunk: True
num_ports: 32
portgroup_type: earlyBinding
Expand Down Expand Up @@ -231,3 +231,26 @@
assert:
that:
- "{{ dvs_pg_result_0008.changed == false }}"

# Testcase 0009: Check valid VLAN id range in DVS Portgroup
- name: Check valid VLAN id range in DVS Portgroup
vmware_dvs_portgroup:
validate_certs: False
hostname: "{{ vcsim }}"
username: "{{ vcsim_instance['json']['username'] }}"
password: "{{ vcsim_instance['json']['password'] }}"
switch_name: "{{ new_dvs_0001['json'][0] | basename }}"
portgroup_name: "basic_trunk_0001"
vlan_id: 1-4096
vlan_trunk: True
num_ports: 32
portgroup_type: earlyBinding
state: present
register: dvs_pg_result_0009
ignore_errors: True

- name: Ensure module fails for invalid VLAN id
assert:
that:
- not dvs_pg_result_0009.changed
- "'vlan_id range 1-4096 specified is incorrect. The valid vlan_id range is from 0 to 4094.' == '{{ dvs_pg_result_0009.msg }}'"