diff --git a/changelogs/fragments/59677-ce_vrrp-to-fix-bugs.yml b/changelogs/fragments/59677-ce_vrrp-to-fix-bugs.yml new file mode 100644 index 00000000000..86dd1dd810f --- /dev/null +++ b/changelogs/fragments/59677-ce_vrrp-to-fix-bugs.yml @@ -0,0 +1,2 @@ +bugfixes: +- ce_vrrp - update to fix some bugs - Solving the mistake of parameter judgment, update_cmds statement missing. (https://github.com/ansible/ansible/pull/59677) diff --git a/lib/ansible/modules/network/cloudengine/ce_vrrp.py b/lib/ansible/modules/network/cloudengine/ce_vrrp.py index 25787e5b167..b908aa80b91 100644 --- a/lib/ansible/modules/network/cloudengine/ce_vrrp.py +++ b/lib/ansible/modules/network/cloudengine/ce_vrrp.py @@ -49,7 +49,7 @@ options: description: - mVRRP ignores an interface Down event. type: bool - default: 'no' + default: 'false' admin_vrid: description: - Tracked mVRRP ID. The value is an integer ranging from 1 to 255. @@ -60,7 +60,7 @@ options: description: - Disable the flowdown function for service VRRP. type: bool - default: 'no' + default: 'false' priority: description: - Configured VRRP priority. @@ -101,7 +101,7 @@ options: - Select the display mode of an authentication key. By default, an authentication key is displayed in ciphertext. type: bool - default: 'no' + default: 'false' auth_key: description: - This object is set based on the authentication type. @@ -117,7 +117,6 @@ options: - Specify desired state of the resource. default: present choices: ['present','absent'] - ''' EXAMPLES = ''' @@ -132,60 +131,50 @@ EXAMPLES = ''' username: "{{ username }}" password: "{{ password }}" transport: cli - tasks: - - name: Set vrrp version ce_vrrp: version: v3 provider: "{{ cli }}" - - name: Set vrrp gratuitous-arp interval ce_vrrp: gratuitous_arp_interval: 40 mlag_id: 4 provider: "{{ cli }}" - - name: Set vrrp recover-delay ce_vrrp: recover_delay: 10 provider: "{{ cli }}" - - name: Set vrrp vrid virtual-ip ce_vrrp: interface: 40GE2/0/8 vrid: 1 virtual_ip: 10.14.2.7 provider: "{{ cli }}" - - name: Set vrrp vrid admin ce_vrrp: interface: 40GE2/0/8 vrid: 1 vrrp_type: admin provider: "{{ cli }}" - - name: Set vrrp vrid fast_resume ce_vrrp: interface: 40GE2/0/8 vrid: 1 fast_resume: enable provider: "{{ cli }}" - - name: Set vrrp vrid holding-multiplier ce_vrrp: interface: 40GE2/0/8 vrid: 1 holding_multiplier: 4 provider: "{{ cli }}" - - name: Set vrrp vrid preempt timer delay ce_vrrp: interface: 40GE2/0/8 vrid: 1 preempt_timer_delay: 10 provider: "{{ cli }}" - - name: Set vrrp vrid admin-vrrp ce_vrrp: interface: 40GE2/0/8 @@ -194,7 +183,6 @@ EXAMPLES = ''' admin_vrid: 2 vrrp_type: member provider: "{{ cli }}" - - name: Set vrrp vrid authentication-mode ce_vrrp: interface: 40GE2/0/8 @@ -278,14 +266,12 @@ CE_NC_SET_VRRP_GROUP_INFO_HEAD = """ %s %s - """ CE_NC_SET_VRRP_GROUP_INFO_TAIL = """ - """ CE_NC_GET_VRRP_GLOBAL_INFO = """ @@ -298,7 +284,6 @@ CE_NC_GET_VRRP_GLOBAL_INFO = """ - """ CE_NC_SET_VRRP_GLOBAL_HEAD = """ @@ -310,7 +295,6 @@ CE_NC_SET_VRRP_GLOBAL_TAIL = """ - """ CE_NC_GET_VRRP_VIRTUAL_IP_INFO = """ @@ -329,7 +313,6 @@ CE_NC_GET_VRRP_VIRTUAL_IP_INFO = """ - """ CE_NC_CREATE_VRRP_VIRTUAL_IP_INFO = """ @@ -347,7 +330,6 @@ CE_NC_CREATE_VRRP_VIRTUAL_IP_INFO = """ - """ CE_NC_DELETE_VRRP_VIRTUAL_IP_INFO = """ @@ -365,7 +347,6 @@ CE_NC_DELETE_VRRP_VIRTUAL_IP_INFO = """ - """ @@ -431,10 +412,10 @@ class Vrrp(object): self.vrid = self.module.params['vrid'] self.virtual_ip = self.module.params['virtual_ip'] self.vrrp_type = self.module.params['vrrp_type'] - self.admin_ignore_if_down = self.module.params['admin_ignore_if_down'] + self.admin_ignore_if_down = 'false' if self.module.params['admin_ignore_if_down'] is False else 'true' self.admin_vrid = self.module.params['admin_vrid'] self.admin_interface = self.module.params['admin_interface'] - self.admin_flowdown = self.module.params['admin_flowdown'] + self.admin_flowdown = 'false' if self.module.params['admin_flowdown'] is False else 'true' self.priority = self.module.params['priority'] self.version = self.module.params['version'] self.advertise_interval = self.module.params['advertise_interval'] @@ -444,7 +425,7 @@ class Vrrp(object): self.recover_delay = self.module.params['recover_delay'] self.holding_multiplier = self.module.params['holding_multiplier'] self.auth_mode = self.module.params['auth_mode'] - self.is_plain = self.module.params['is_plain'] + self.is_plain = 'false' if self.module.params['is_plain'] is False else 'true' self.auth_key = self.module.params['auth_key'] self.fast_resume = self.module.params['fast_resume'] self.state = self.module.params['state'] @@ -601,10 +582,12 @@ class Vrrp(object): if not self.advertise_interval.isdigit(): self.module.fail_json( msg='Error: The value of advertise_interval is an integer.') - if int(self.advertise_interval) < 1 or int(self.advertise_interval) > 255000: + if int(self.advertise_interval) < 1000 or int(self.advertise_interval) > 255000: self.module.fail_json( - msg='Error: The value of advertise_interval ranges from 1 to 255000. The default value is 1000.') - + msg='Error: The value of advertise_interval ranges from 1000 to 255000 milliseconds. The default value is 1000 milliseconds.') + if int(self.advertise_interval) % 1000 != 0: + self.module.fail_json( + msg='Error: The advertisement interval value of VRRP must be a multiple of 1000 milliseconds.') # preempt_timer_delay check if self.preempt_timer_delay: if not self.preempt_timer_delay.isdigit(): @@ -934,76 +917,57 @@ class Vrrp(object): if "" not in recv_xml: self.module.fail_json( msg='Error: set vrrp group atrribute info failed.') - if self.interface and self.vrid: + self.updates_cmd.append("interface %s" % self.interface) if self.vrrp_type == "admin": if self.admin_ignore_if_down is True: - self.updates_cmd.append( - "interface %s" % self.interface) self.updates_cmd.append( "vrrp vrid %s admin ignore-if-down" % self.vrid) else: - self.updates_cmd.append( - "interface %s" % self.interface) self.updates_cmd.append( "vrrp vrid %s admin" % self.vrid) if self.priority: - self.updates_cmd.append("interface %s" % self.interface) self.updates_cmd.append( "vrrp vrid %s priority %s" % (self.vrid, self.priority)) if self.fast_resume == "enable": - self.updates_cmd.append("interface %s" % self.interface) self.updates_cmd.append( "vrrp vrid %s fast-resume" % self.vrid) if self.fast_resume == "disable": - self.updates_cmd.append("interface %s" % self.interface) self.updates_cmd.append( "undo vrrp vrid %s fast-resume" % self.vrid) if self.advertise_interval: - self.updates_cmd.append("interface %s" % self.interface) - self.updates_cmd.append("vrrp vrid %s timer advertise %s" % ( - self.vrid, self.advertise_interval)) + advertise_interval = int(self.advertise_interval) / 1000 + self.updates_cmd.append("vrrp vrid %s timer advertise %s" % ( + self.vrid, int(advertise_interval))) if self.preempt_timer_delay: - self.updates_cmd.append("interface %s" % self.interface) self.updates_cmd.append("vrrp vrid %s preempt timer delay %s" % (self.vrid, self.preempt_timer_delay)) if self.holding_multiplier: - self.updates_cmd.append("interface %s" % self.interface) self.updates_cmd.append( "vrrp vrid %s holding-multiplier %s" % (self.vrid, self.holding_multiplier)) if self.admin_vrid and self.admin_interface: - if self.admin_flowdown is True: - self.updates_cmd.append( - "interface %s" % self.interface) + if self.admin_flowdown == "true": self.updates_cmd.append("vrrp vrid %s track admin-vrrp interface %s vrid %s unflowdown" % (self.vrid, self.admin_interface, self.admin_vrid)) else: - self.updates_cmd.append( - "interface %s" % self.interface) self.updates_cmd.append("vrrp vrid %s track admin-vrrp interface %s vrid %s" % (self.vrid, self.admin_interface, self.admin_vrid)) if self.auth_mode and self.auth_key: if self.auth_mode == "simple": - if self.is_plain is True: - self.updates_cmd.append( - "interface %s" % self.interface) + if self.is_plain == "true": self.updates_cmd.append("vrrp vrid %s authentication-mode simple plain %s" % (self.vrid, self.auth_key)) else: - self.updates_cmd.append( - "interface %s" % self.interface) self.updates_cmd.append("vrrp vrid %s authentication-mode simple cipher %s" % (self.vrid, self.auth_key)) if self.auth_mode == "md5": - self.updates_cmd.append( - "interface %s" % self.interface) self.updates_cmd.append( "vrrp vrid %s authentication-mode md5 %s" % (self.vrid, self.auth_key)) self.changed = True @@ -1063,42 +1027,36 @@ class Vrrp(object): self.module.fail_json( msg='Error: set vrrp global atrribute info failed.') if self.interface and self.vrid: + self.updates_cmd.append("interface %s" % self.interface) if self.vrrp_type == "admin": self.updates_cmd.append( "undo vrrp vrid %s admin" % self.vrid) if self.priority: - self.updates_cmd.append("interface %s" % self.interface) self.updates_cmd.append( "undo vrrp vrid %s priority" % self.vrid) if self.fast_resume: - self.updates_cmd.append("interface %s" % self.interface) self.updates_cmd.append( "undo vrrp vrid %s fast-resume" % self.vrid) if self.advertise_interval: - self.updates_cmd.append("interface %s" % self.interface) self.updates_cmd.append( "undo vrrp vrid %s timer advertise" % self.vrid) if self.preempt_timer_delay: - self.updates_cmd.append("interface %s" % self.interface) self.updates_cmd.append( "undo vrrp vrid %s preempt timer delay" % self.vrid) if self.holding_multiplier: - self.updates_cmd.append("interface %s" % self.interface) self.updates_cmd.append( "undo vrrp vrid %s holding-multiplier" % self.vrid) if self.admin_vrid and self.admin_interface: - self.updates_cmd.append("interface %s" % self.interface) self.updates_cmd.append( "undo vrrp vrid %s track admin-vrrp" % self.vrid) if self.auth_mode: - self.updates_cmd.append("interface %s" % self.interface) self.updates_cmd.append( "undo vrrp vrid %s authentication-mode" % self.vrid) self.changed = True @@ -1311,7 +1269,7 @@ class Vrrp(object): self.module.fail_json( msg='Error: admin_interface admin_vrid vrrp_type interface vrid must ' 'be config at the same time.') - if self.auth_mode == "md5" and self.is_plain is True: + if self.auth_mode == "md5" and self.is_plain == "true": self.module.fail_json( msg='Error: is_plain can not be True when auth_mode is md5.')