Esempio n. 1
0
 def process(self, parameters):
     try:
         self.vrrp_group_id = int(parameters.pop('vrrp_group_id'))
         if not 1 <= self.vrrp_group_id <= 255:
             raise BadVrrpGroupNumber()
     except (ValueError, KeyError):
         raise BadVrrpGroupNumber()
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))