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]))
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.')
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))
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')