def enable_api(self, port=443):
        """
        Enable ASA API. Must have rest API extensions installed on flash
        :param port: API port number
        :return: True if successful
        """
        self.configuration_mode()

        http_enable_cmd = 'http server enable {0}'.format(port)
        self.child.sendline(http_enable_cmd)
        i = self.child.expect(PEXPECT_ERRORS + [CISCO_CONFIG_PROMPT])

        if i == 0 or i == 1:
            logging.debug(send_command_error_msg(self.device, http_enable_cmd))
            clean_up_error(self.child, i)

        elif i == 2:
            rest_api_enable_cmd = 'rest-api agent'
            self.child.sendline(rest_api_enable_cmd)
            j = self.child.expect(PEXPECT_ERRORS + [CISCO_CONFIG_PROMPT])

            if j == 0 or j == 1:
                logging.debug(
                    send_command_error_msg(self.device, rest_api_enable_cmd))
                clean_up_error(self.child, j)

            elif j == 2:
                if 'error' not in j.child.before:
                    logging.debug(rest_api_enabled_success_msg(self.device))
                    return True
                else:
                    return False
예제 #2
0
    def config_db_backup(self,
                         filename='',
                         path='/home/basic',
                         prompt=VIPTELA_PRIV_PROMPT,
                         timeout=60):
        """
        Backup vManage configuration database. Only valid for vManage devices.
        :param filename: Name of backup file (excluding .tar.gz)
        :param path: Path to save to file
        :param prompt: Expected Prompt
        :param timeout: Timeout in seconds to wait for command to complete
        :return: True if successful
        """
        if not filename:
            time_now = strftime('%Y-%m-%d-%H%M%S')
            filename = '{0}-backup-{1}'.format(self.device, time_now)

        backup_command = 'request nms configuration-db backup path {0}/{1}'.format(
            path, filename)

        self.child.sendline(backup_command)
        i = self.child.expect(PEXPECT_ERRORS + [prompt], timeout=timeout)

        if i == 0 or i == 1:
            logging.debug(send_command_error_msg(self.device, backup_command))
            clean_up_error(self.child, i)

        elif i == 2:
            logging.debug('{0} backup command completed'.format(self.device))
            return True
예제 #3
0
    def enable_mode(child, device, enable_password='', command='enable'):
        """
        Enter enable mode on device
        :param child: Pexpect spawn child process
        :param device: Device name
        :param enable_password: Enable password if required
        :param command: Command to enter enable mode
        """
        child.sendline(command)
        i = child.expect(PEXPECT_ERRORS + [PASSWORD_PROMPT, CISCO_PRIV_PROMPT])

        if i == 0 or i == 1:
            logging.debug(send_command_error_msg(device, command))
            clean_up_error(child, i)

        elif i == 2:
            if not enable_password:
                child.close()
                raise EnablePasswordError(enable_password_required_msg(device))

            child.sendline(enable_password)
            j = child.expect(PEXPECT_ERRORS + [CISCO_PRIV_PROMPT])

            if j == 0 or j == 1:
                logging.debug(enable_password_error_msg(device))
                clean_up_error(child, j, get_error=False)
                raise EnablePasswordError(enable_password_error_msg(device))

            elif j == 2:
                logging.debug(privilege_exec_success_msg(device))

        elif i == 3:
            logging.debug(privilege_exec_success_msg(device))
예제 #4
0
 def configuration_mode(self, command='configure terminal'):
     """
     Enter configuration mode
     :param command: Command to enter configuration mode
     :return: True if successful
     """
     self.child.sendline(command)
     i = self.child.expect(PEXPECT_ERRORS + [VIPTELA_CONFIG_PROMPT])
     if i == 0 or i == 1:
         logging.debug(send_command_error_msg(self.device, command))
         clean_up_error(self.child, i)
     elif i == 2:
         logging.debug(configuration_mode_success_msg(self.device))
         return True
예제 #5
0
    def save_config(self, command='commit'):
        """
        Save device config
        :return: True if successful
        """
        self.child.sendline(command)
        i = self.child.expect(PEXPECT_ERRORS + [JUNIPER_CONFIG_PROMPT])

        if i == 0 or i == 1:
            logging.debug(send_command_error_msg(self.device, command))
            clean_up_error(self.child, i)

        elif i == 2:
            logging.debug(save_config_success_msg(self.device))
            return True
    def enable_scp(self, command='ssh scopy enable'):
        """
        Enable SCP to facilitate secure file transfer to device
        :return: True if successful
        """
        self.configuration_mode()

        self.child.sendline(command)
        i = self.child.expect(PEXPECT_ERRORS + [CISCO_CONFIG_PROMPT])

        if i == 0 or i == 1:
            logging.debug(send_command_error_msg(self.device, command))
            clean_up_error(self.child, i)

        elif i == 2:
            logging.debug(scp_enabled_success_msg(self.device))
            return True
예제 #7
0
    def operational_mode(child, device, command='cli'):
        """
        Move into operational mode if in root cli
        :param child: pexpect spawn child
        :param device: name of device
        :param command: Command to enter operational mode
        :return: pexpect.spawn child
        """
        child.sendline(command)
        i = child.expect(PEXPECT_ERRORS + [JUNIPER_OPER_PROMPT])

        if i == 0 or i == 1:
            logging.debug(send_command_error_msg(device, command))
            clean_up_error(child, i)

        elif i == 2:
            logging.debug(operational_mode_success_msg(device))
예제 #8
0
    def enable_api(self, command='set system services netconf ssh'):
        """
        Enable device API
        :return: True if successful
        """
        if self.get_prompt().endswith('>'):
            self.configuration_mode()

        self.child.sendline(command)
        i = self.child.expect(PEXPECT_ERRORS + [JUNIPER_CONFIG_PROMPT])

        if i == 0 or i == 1:
            logging.debug(send_command_error_msg(self.device, command))
            clean_up_error(self.child, i)

        elif i == 2:
            logging.debug(netconf_enabled_success_msg(self.device))
            return self.save_config()
예제 #9
0
    def disable_paging(self, prompt='', command='set cli screen-length 0'):
        """
        Disable paging of long terminal outputs. Represented as <more>
        Paging is disabled from operational mode (>).
        :param prompt: Prompt to expect
        :param command: Command to disable paging
        :return: True if successful
        """
        if not prompt:
            prompt = self.get_prompt()

        self.child.sendline(command)
        i = self.child.expect(PEXPECT_ERRORS + [prompt])

        if i == 0 or i == 1:
            logging.debug(send_command_error_msg(self.device, command))
            clean_up_error(self.child, i)

        elif i == 2:
            logging.debug(disable_paging_success_msg(self.device))
            return True
예제 #10
0
    def save_config(self,
                    source='running-config',
                    destination='startup-config'):
        """
        Save device config
        :param source: Source file name
        :param destination: Destination file name
        :return: True if successful
        """
        command = 'copy {0} {1}'.format(source, destination)

        if self.get_prompt().endswith(')#'):
            self.child.sendline('end')

        self.child.sendline(command)
        # ASA has a timing issue when saving config. Adding
        # in 1 second of sleep before expecting prompt to compensate
        time.sleep(1)
        i = self.child.expect(PEXPECT_ERRORS +
                              ['.*filename.*', CISCO_PRIV_PROMPT])

        if i == 0 or i == 1:
            logging.debug(send_command_error_msg(self.device, command))
            clean_up_error(self.child, i)

        elif i == 2:
            self.child.sendcontrol('m')
            j = self.child.expect(PEXPECT_ERRORS + [CISCO_PRIV_PROMPT])

            if j == 0 or j == 1:
                logging.debug(save_config_error_msg(self.device))
                clean_up_error(self.child, j)

            elif i == 2:
                logging.debug(save_config_success_msg(self.device))
                return True

        elif i == 3:
            logging.debug(save_config_success_msg(self.device))
            return True
예제 #11
0
    def disable_paging(self,
                       prompt=VIPTELA_PRIV_PROMPT,
                       command='paginate false'):
        """
        Disable paging of long terminal outputs. Represented as <more>
        :param command: Command to disable pagination
        :param prompt: Prompt to expect
        :return: True if successful
        """
        if not prompt:
            prompt = self.get_prompt()

        self.child.sendline(command)
        i = self.child.expect(PEXPECT_ERRORS + [prompt])

        if i == 0 or i == 1:
            logging.debug(send_command_error_msg(self.device, command))
            clean_up_error(self.child, i)

        elif i == 2:
            logging.debug(disable_paging_success_msg(self.device))
            return True
예제 #12
0
    def disable_paging(self, prompt='', command='terminal pager 0'):
        """
        Disable paging of long terminal outputs. Represented as <more>
        :param prompt: Prompt to expect
        :param command: Command to disable paging
        :return: True if successful
        """
        if not prompt:
            prompt = self.get_prompt()

        self.child.sendline(command)
        # ASA has a timing issue when saving config. Adding
        # in 1 second of sleep before expecting prompt to compensate
        time.sleep(1)
        i = self.child.expect(PEXPECT_ERRORS + [prompt])

        if i == 0 or i == 1:
            logging.debug(send_command_error_msg(self.device, command))
            clean_up_error(self.child, i)

        elif i == 2:
            logging.debug(disable_paging_success_msg(self.device))
            return True
예제 #13
0
def test_message_output():
    assert messages.send_command_error_msg(
        'stuff', 'things') == 'stuff error sending "things" command'