From ca31e59b7926946042cef7db4f528ab27fb5ad39 Mon Sep 17 00:00:00 2001 From: Abhijeet Kasurde Date: Tue, 23 Jan 2018 20:21:50 +0530 Subject: [PATCH] VMware: Add teaming policy for DVS Portgroup. (#35215) Signed-off-by: Abhijeet Kasurde --- .../cloud/vmware/vmware_dvs_portgroup.py | 45 ++++++++++++++++++- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/lib/ansible/modules/cloud/vmware/vmware_dvs_portgroup.py b/lib/ansible/modules/cloud/vmware/vmware_dvs_portgroup.py index 1aa06d0b9c8..1b130fb227d 100644 --- a/lib/ansible/modules/cloud/vmware/vmware_dvs_portgroup.py +++ b/lib/ansible/modules/cloud/vmware/vmware_dvs_portgroup.py @@ -81,6 +81,17 @@ options: - '- C(mac_changes) (bool): indicates whether mac changes are allowed. (default: false)' required: False version_added: '2.5' + teaming_policy: + description: + - Dictionary which configures the different teaming values for portgroup. + - 'Valid attributes are:' + - '- C(load_balance_policy) (string): Network adapter teaming policy. (default: loadbalance_srcid)' + - ' - choices: [ loadbalance_ip, loadbalance_srcmac, loadbalance_srcid, failover_explicit]' + - '- C(inbound_policy) (bool): Indicate whether or not the teaming policy is applied to inbound frames as well. (default: False)' + - '- C(notify_switches) (bool): Indicate whether or not to notify the physical switch if a link fails. (default: True)' + - '- C(rolling_order) (bool): Indicate whether or not to use a rolling policy when restoring links. (default: False)' + required: False + version_added: '2.5' port_policy: description: - Dictionary which configures the advanced policy settings for the portgroup. @@ -252,6 +263,14 @@ class VMwareDvsPortgroup(PyVmomi): config.defaultPortConfig.securityPolicy.forgedTransmits = vim.BoolPolicy(value=self.security_forged_transmits) config.defaultPortConfig.securityPolicy.macChanges = vim.BoolPolicy(value=self.security_mac_changes) + # Teaming Policy + teamingPolicy = vim.dvs.VmwareDistributedVirtualSwitch.UplinkPortTeamingPolicy() + teamingPolicy.policy = vim.StringPolicy(value=self.module.params['teaming_policy']['load_balance_policy']) + teamingPolicy.reversePolicy = vim.BoolPolicy(value=self.module.params['teaming_policy']['inbound_policy']) + teamingPolicy.notifySwitches = vim.BoolPolicy(value=self.module.params['teaming_policy']['notify_switches']) + teamingPolicy.rollingOrder = vim.BoolPolicy(value=self.module.params['teaming_policy']['rolling_order']) + config.defaultPortConfig.uplinkTeamingPolicy = teamingPolicy + # PG policy (advanced_policy) config.policy = vim.dvs.VmwareDistributedVirtualSwitch.VMwarePortgroupPolicy() config.policy.blockOverrideAllowed = self.policy_block_override @@ -269,8 +288,7 @@ class VMwareDvsPortgroup(PyVmomi): # PG Type config.type = self.portgroup_type - spec = [config] - task = self.dv_switch.AddDVPortgroup_Task(spec) + task = self.dv_switch.AddDVPortgroup_Task([config]) changed, result = wait_for_task(task) return changed, result @@ -334,6 +352,29 @@ def main(): mac_changes=False ) ), + teaming_policy=dict( + type='dict', + options=dict( + inbound_policy=dict(type='bool', default=False), + notify_switches=dict(type='bool', default=True), + rolling_order=dict(type='bool', default=False), + load_balance_policy=dict(type='str', + default='loadbalance_srcid', + choices=[ + 'loadbalance_ip', + 'loadbalance_srcmac', + 'loadbalance_srcid', + 'failover_explicit', + ], + ) + ), + default=dict( + inbound_policy=False, + notify_switches=True, + rolling_order=False, + load_balance_policy='loadbalance_srcid', + ), + ), port_policy=dict( type='dict', options=dict(