Esempio n. 1
0
    def add_vrrp_group(self,
                       vlan_number,
                       group_id,
                       ips=None,
                       priority=None,
                       hello_interval=None,
                       dead_interval=None,
                       track_id=None,
                       track_decrement=None):
        vlan = self._get_vlan(vlan_number, include_vif_data=True)

        if len([g for g in vlan.vrrp_groups if g.id == group_id]) > 0:
            raise VrrpAlreadyExistsForVlan(vlan=vlan_number,
                                           vrrp_group_id=group_id)

        with self.config(), self.interface_vlan(vlan):
            if len(vlan.vrrp_groups) == 0:
                self.set('ip vrrp-extended auth-type simple-text-auth VLAN{}', vlan_number)\
                    .on_result_matching("^error - please configure ip address before configuring vrrp-extended.*", NoIpOnVlanForVrrp, vlan_number)\
                    .on_any_result(BadVrrpAuthentication)

            self.set(
                "ip vrrp-extended vrid {}".format(group_id)).on_any_result(
                    BadVrrpGroupNumber, 1, 255)
            try:
                self.set_vrrp_properties(ips, priority, track_decrement,
                                         track_id, dead_interval,
                                         hello_interval)
                self.shell.do('activate')
            except:
                self.shell.do('exit')
                raise
Esempio n. 2
0
    def add_vrrp_group(self,
                       vlan_number,
                       group_id,
                       ips=None,
                       priority=None,
                       hello_interval=None,
                       dead_interval=None,
                       track_id=None,
                       track_decrement=None):
        if not (0 < group_id <= 255):
            raise BadVrrpGroupNumber(1, 255)

        vlan = self.get_vlan_interface_data(vlan_number)

        if [group for group in vlan.vrrp_groups if group.id == group_id]:
            raise VrrpAlreadyExistsForVlan(vlan=vlan_number,
                                           vrrp_group_id=group_id)

        with self.config(), self.interface_vlan(vlan_number):
            if hello_interval is not None and dead_interval is not None:
                result = self.ssh.do(
                    'standby {group_id} timers {hello_interval} {dead_interval}'
                    .format(group_id=group_id,
                            hello_interval=hello_interval,
                            dead_interval=dead_interval))
                if len(result) > 0:
                    raise BadVrrpTimers()

            if priority is not None:
                result = self.ssh.do(
                    'standby {group_id} priority {priority}'.format(
                        group_id=group_id, priority=priority))
                if len(result) > 0:
                    raise BadVrrpPriorityNumber(1, 255)

            self.ssh.do('standby {group_id} preempt delay minimum 60'.format(
                group_id=group_id))
            self.ssh.do(
                'standby {group_id} authentication {authentication}'.format(
                    group_id=group_id,
                    authentication='VLAN{}'.format(vlan_number)))

            if track_id is not None and track_decrement is not None:
                result = self.ssh.do(
                    'standby {group_id} track {track_id} decrement {track_decrement}'
                    .format(group_id=group_id,
                            track_id=track_id,
                            track_decrement=track_decrement))
                if len(result) > 0:
                    raise BadVrrpTracking()

            for i, ip in enumerate(ips):
                result = self.ssh.do(
                    'standby {group_id} ip {ip}{secondary}'.format(
                        group_id=group_id,
                        ip=ip,
                        secondary=' secondary' if i > 0 else ''))
                if len(result) > 0:
                    raise IPNotAvailable(ip, reason="; ".join(result))