Example #1
0
    def _link_disable(self):
        if len(self.interfaces) > 1:
            return failed('Incorrect number of interfaces entered: {}',
                          len(self.interfaces))

        a_device_neighbor = filter(
            partial(self._find_neighbor_match, self.devices[1]),
            self._get_neighbors(self.devices[0], self.interfaces))
        b_device_neighbor = filter(
            partial(self._find_neighbor_match, self.devices[0]),
            self._get_neighbors(self.devices[1], self.interfaces))

        if not a_device_neighbor or not b_device_neighbor:
            return failed('Devices {} are not neighbors on any interfaces',
                          ', '.join(self.devices))

        if len(a_device_neighbor) > 1 or len(b_device_neighbor) > 1:
            return failed(
                'Devices {} are neighbors on more than one interface',
                ', '.join(self.devices))

        a_end_interface = a_device_neighbor[0].local_interface
        b_end_interface = b_device_neighbor[0].local_interface
        a_commands = self._prepare_commands(True, a_end_interface)
        b_commands = self._prepare_commands(True, b_end_interface)

        try:
            tasks.apply_config(self.devices[0], a_commands)
            tasks.apply_config(self.devices[1], b_commands)
        except Exception, e:
            return failed(str(e))
Example #2
0
    def run(self, *args, **kwargs):
        if not self.attributes:
            return failed('No BGP parameters given')

        try:
            for device in self.devices:
                bgp_config = tasks.get_bgp_config(device)
                self.bgp_config.append(bgp_config)
        except Exception, e:
            return failed(str(e))
Example #3
0
    def run(self, *args, **kwargs):
        if not self.attributes:
            return failed('No BGP parameters given')

        try:
            for device in self.devices:
                bgp_neighbors = tasks.get_bgp_neighbors_state(
                    device, self.neighbors)
                self.bgp_data.append(bgp_neighbors)
        except Exception, e:
            return failed(str(e))
Example #4
0
    def run(self, *args, **kwargs):
        if len(self.devices) > 1:
            return failed('Sorry, I cannot drain or return traffic from/to more than one device.')

        self.intent = self._guess_intent()
        if not self.intent:
            return failed('Sorry, I could not determine whether to drain traffic or not.')

        if self.intent == 'away':
            return self.shift_away(check_traffic_level=True)
        if self.intent == 'back':
            return self.shift_back()
Example #5
0
    def _link_enable(self):
        if not len(self.interfaces) == 2:
            return failed('Incorrect number of interfaces entered: {}',
                          len(self.interfaces))

        a_end_interface, b_end_interface = self.interfaces[0], self.interfaces[
            1]

        a_commands = self._prepare_commands(False, a_end_interface)
        b_commands = self._prepare_commands(False, b_end_interface)

        try:
            tasks.apply_config(self.devices[0], a_commands)
            tasks.apply_config(self.devices[1], b_commands)
        except Exception, e:
            return failed(str(e))
Example #6
0
    def run(self, *args, **kwargs):
        if not len(self.devices) == 2:
            return failed('Incorrect number of devices entered: {}',
                          len(self.devices))

        intent = re.search(r'enable|up', self.utterance)
        return self.link_status(intent)
Example #7
0
 def run(self, *args, **kwargs):
     try:
         for device in self.devices:
             device_facts = tasks.get_facts(device)
             self.facts.append(device_facts)
     except Exception, e:
         return failed(str(e))
Example #8
0
    def run(self, *args, **kwargs):
        if len(self.devices) != 1:
            return failed('You entered {} devices, required 1.',
                          len(self.devices))

        output = ''
        output += 'Hostname: {}'.format(self.devices[0])
        output += '\n'
        for destination in self.destinations:
            response = tasks.check_connectivity(self.devices[0], destination)
            output += 'Destination: {} '.format(destination)
            output += response
            output += '\n'

        return passed(output)
Example #9
0
    def shift_back(self, check_traffic_level=False):
        commands = self._get_commands()
        tasks.apply_config(self.devices[0], commands)

        if not check_traffic_level:
            return passed('Traffic returned to device {}', self.devices[0]) 

        count = 1
        while count <= 3:
            time.sleep(5)
            pps = tasks.get_device_traffic(self.devices[0])
            if pps < THRESHOLD:
                count += 1
            else:
                return passed('Traffic restored to device {} - currently {} packets/sec.', self.devices[0], pps) 
        return failed('Traffic not restored to device {} - currently {} packets/sec.', self.devices[0], pps)
Example #10
0
class InterfaceShutdown(BaseOperation):
    REGEX = [INTERFACE_RE]

    def __init__(self, utterance):
        super(InterfaceShutdown, self).__init__(utterance)
        self.interfaces = re.findall('|'.join(InterfaceShutdown.REGEX),
                                     self.utterance)

    def run(self, *args, **kwargs):
        if not len(self.devices) == 2:
            return failed('Incorrect number of devices entered: {}',
                          len(self.devices))

        intent = re.search(r'enable|up', self.utterance)
        return self.link_status(intent)

    @staticmethod
    def _get_neighbors(device, interfaces):
        return tasks.get_interface_neighbors(device, interfaces)

    @staticmethod
    def _find_neighbor_match(neighbor_device, x):
        if x.neighbor.lower() == neighbor_device:
            return x.local_interface

    def link_status(self, intent):
        if intent:
            return self._link_enable()
        else:
            return self._link_disable()

    @staticmethod
    def _prepare_commands(intent, intf):
        return [
            'interface {}'.format(intf),
            '{}shutdown'.format('' if intent else 'no ')
        ]

    def _link_disable(self):
        if len(self.interfaces) > 1:
            return failed('Incorrect number of interfaces entered: {}',
                          len(self.interfaces))

        a_device_neighbor = filter(
            partial(self._find_neighbor_match, self.devices[1]),
            self._get_neighbors(self.devices[0], self.interfaces))
        b_device_neighbor = filter(
            partial(self._find_neighbor_match, self.devices[0]),
            self._get_neighbors(self.devices[1], self.interfaces))

        if not a_device_neighbor or not b_device_neighbor:
            return failed('Devices {} are not neighbors on any interfaces',
                          ', '.join(self.devices))

        if len(a_device_neighbor) > 1 or len(b_device_neighbor) > 1:
            return failed(
                'Devices {} are neighbors on more than one interface',
                ', '.join(self.devices))

        a_end_interface = a_device_neighbor[0].local_interface
        b_end_interface = b_device_neighbor[0].local_interface
        a_commands = self._prepare_commands(True, a_end_interface)
        b_commands = self._prepare_commands(True, b_end_interface)

        try:
            tasks.apply_config(self.devices[0], a_commands)
            tasks.apply_config(self.devices[1], b_commands)
        except Exception, e:
            return failed(str(e))

        if any([
                self._get_neighbors(self.devices[0], [a_end_interface]),
                self._get_neighbors(self.devices[1], [b_end_interface])
        ]):
            return failed('Failed to disable interfaces {}, {} on {}',
                          a_end_interface, b_end_interface,
                          ', '.join(self.devices))

        return passed(
            'Interface {} on {} and interface {} on {} were successfully disabled',
            a_end_interface, self.devices[0], b_end_interface, self.devices[1])
Example #11
0
    def _link_enable(self):
        if not len(self.interfaces) == 2:
            return failed('Incorrect number of interfaces entered: {}',
                          len(self.interfaces))

        a_end_interface, b_end_interface = self.interfaces[0], self.interfaces[
            1]

        a_commands = self._prepare_commands(False, a_end_interface)
        b_commands = self._prepare_commands(False, b_end_interface)

        try:
            tasks.apply_config(self.devices[0], a_commands)
            tasks.apply_config(self.devices[1], b_commands)
        except Exception, e:
            return failed(str(e))

        if all([
                self._get_neighbors(self.devices[0], [a_end_interface]),
                self._get_neighbors(self.devices[1], [b_end_interface])
        ]):
            return passed(
                'Interface {} on {} and interface {} on {} were successfully enabled',
                a_end_interface, self.devices[0], b_end_interface,
                self.devices[1])

        return failed('Failed to enable interfaces {}, {} on {}',
                      a_end_interface, b_end_interface,
                      ', '.join(self.devices))