Exemple #1
0
    def activate(self, resource=None, wait_for_finish=False, sleep=3):
        """
        Activate this package on the SMC
        
        :param list resource: node href's to activate on. Resource is only 
               required for software upgrades
        :param boolean wait_for_finish: True|False, whether to wait 
               for update messages
        :param int sleep: number of seconds to sleep if wait_for_finish=True
        :raises: :py:class:`smc.api.exceptions.ActionCommandFailed` with reason
        :raises: :py:class:`smc.api.exceptions.TaskRunFailed`
        :return: generator Task generator with updates
        """
        try:
            result = prepared_request(ActionCommandFailed,
                                      href=self._link('activate'),
                                      json={
                                          'resource': resource
                                      }).create()

            return task_handler(Task(**result.json),
                                wait_for_finish=wait_for_finish,
                                sleep=sleep)
        except ResourceNotFound:
            raise ActionCommandFailed(
                'Activation failed, resource is not available')
    def import_elements(self, import_file):
        """
        Import elements into SMC. Specify the fully qualified path
        to the import file.

        :param str import_file: system level path to file
        :raises: ActionCommandFailed
        :return: None
        """
        import_follower = Task(
            self.make_request(
                method="create",
                resource="import_elements",
                files={"import_file": open(import_file, "rb")},
            ))
        in_progress = import_follower.data.in_progress
        progress = import_follower.progress
        while in_progress is True:
            time.sleep(1)
            logger.info("[{}] XML Import task => {}%".format(
                "{:%H:%M:%S.%f}".format(datetime.now())[:-3], progress))
            in_progress = import_follower.update_status().data.in_progress
            progress = import_follower.update_status().progress
            succeed = import_follower.update_status().success
            last_message = import_follower.update_status().last_message

        if not succeed:
            logger.info("[{}] XML Import task failed:{}".format(
                "{:%H:%M:%S.%f}".format(datetime.now())[:-3], last_message))
            raise ActionCommandFailed(last_message)

        logger.info("[{}] XML Import task succeed".format(
            "{:%H:%M:%S.%f}".format(datetime.now())[:-3]))
Exemple #3
0
 def suspend(self):
     """
     Suspend this scheduled task.
     
     :raises ActionCommandFailed: failed to suspend, already suspended. Call
         activate on this task to reactivate.
     :return: None
     """
     if 'suspend' in self.data.links:
         self.make_request(ActionCommandFailed,
                           method='update',
                           etag=self.etag,
                           resource='suspend')
         self._del_cache()
     else:
         raise ActionCommandFailed(
             'Task is already suspended. Call activate '
             'to reactivate.')
Exemple #4
0
    def download(self, wait_for_finish=False, sleep=3):
        """
        Download Package or Engine Update
        
        :method: POST
        :param boolean wait_for_finish: wait for download to complete
        :param int sleep: number of seconds to sleep if wait_for_finish=True
        :raises: :py:class:`smc.api.exceptions.ActionCommandFailed` with reason
        :raises: :py:class:`smc.api.exceptions.TaskRunFailed`
        :return: Generator messages or final href of follower resource
        """
        try:
            result = prepared_request(ActionCommandFailed,
                                      href=self._link('download')).create()

            return task_handler(Task(**result.json),
                                wait_for_finish=wait_for_finish,
                                sleep=sleep)
        except ResourceNotFound:
            raise ActionCommandFailed(
                'Package cannot be downloaded, package state: {}'.format(
                    self.state))
Exemple #5
0
 def activate(self):
     """
     If a task is suspended, this will re-activate the task.
     Usually it's best to check for activated before running
     this::
     
         task = RefreshPolicyTask('mytask')
         for scheduler in task.task_schedule:
             if scheduler.activated:
                 scheduler.suspend()
             else:
                 scheduler.activate()
     """
     if 'activate' in self.data.links:
         self.make_request(ActionCommandFailed,
                           method='update',
                           etag=self.etag,
                           resource='activate')
         self._del_cache()
     else:
         raise ActionCommandFailed(
             'Task is already activated. To '
             'suspend, call suspend() on this task schedule')