def schedule_workflow(self, name, timestamp, parameters=None):
     if not parameters: parameters = {}
     log.info("Scheduling workflow %s on instance %s (%s), timestamp: %s" % (name, self.name, self.id, timestamp))
     log.debug("Parameters: %s" % parameters)
     payload = {'parameters': parameters, 'timestamp':timestamp}
     router.post_instance_workflow_schedule(org_id=self.organizationId, instance_id=self.instanceId, wf_name=name, data=json.dumps(payload))
     return True
 def run_workflow(self, name, parameters=None):
     if not parameters: parameters = {}
     log.info("Running workflow %s on instance %s (%s)" % (name, self.name, self.id))
     log.debug("Parameters: %s" % parameters)
     self._last_workflow_started_time = time.gmtime(time.time())
     router.post_instance_workflow(org_id=self.organizationId, instance_id=self.instanceId, wf_name=name, data=json.dumps(parameters))
     return True
 def add_as_service(self, environments=None, environment_ids=None):
     if not environments or environment_ids:
         # Use default if not set
         environments = [self.environment,]
     if environments:
         data = [env.environmentId for env in environments]
     else:
         assert isinstance(environment_ids, list)
         data = environment_ids
     router.post_instance_services(org_id=self.organizationId, instance_id=self.instanceId, data=json.dumps(data))
    def connect(tenant, user, password):

        router.base_url = tenant
        router.connect(user, password)

        #todo: remove auth mimics when routes are used everywhere
        router.tenant = tenant
        router.user = user
        router.password = password
        return QubellPlatform(auth=router)
    def get_activitylog(self, after=None, severity=None, start=None, end=None):
        """
        Returns activitylog object
        severity - filter severity ('INFO', DEBUG')
        start/end - time or log text

        """
        if after:
            log = router.get_instance_activitylog(org_id=self.organizationId, instance_id=self.instanceId, timestamp=after).json()
        log = router.get_instance_activitylog(org_id=self.organizationId, instance_id=self.instanceId).json()

        return activityLog(log, severity=severity, start=start, end=end)
    def new(application, revision=None, environment=None, name=None, parameters=None, submodules=None, destroyInterval=None):

        if not environment:
            environment = application.organization.defaultEnvironment
        if not parameters: parameters = {}
        conf = {}
        conf['parameters'] = parameters
        conf['environmentId'] = environment.environmentId

        if name:
            conf['instanceName'] = name
        if destroyInterval:
            conf['destroyInterval'] = destroyInterval
        if revision:
            conf['revisionId'] = revision.id
        conf['submodules'] = submodules or {}
        log.info("Starting instance: %s\n    Application: %s (%s)\n    Environment: %s (%s)\n    Submodules: %s\n    destroyInterval: %s" %
                 (name,
                  application.name, application.applicationId,
                  environment.name, environment.environmentId,
                  submodules, destroyInterval))
        log.debug("Instance configuration: %s" % conf)
        data = json.dumps(conf)
        before_creation = time.gmtime(time.time())
        resp = router.post_organization_instance(org_id=application.organizationId, app_id=application.applicationId, data=data)
        instance = Instance(organization=application.organization, id=resp.json()['id'])
        instance._last_workflow_started_time = before_creation
        log.debug("Instance %s (%s) started." % (instance.name, instance.id))
        return instance
    def update(self, **kwargs):
        if kwargs.get('manifest'):
            self.upload(kwargs.pop('manifest'))
        log.info("Updating application: %s" % self.name)

        data = json.dumps(kwargs)
        resp = router.put_application(org_id=self.organizationId, app_id=self.applicationId, data=data)
        return resp.json()
 def list_instances_json(self, application=None):
     """ Get list of instances in json format converted to list"""
     if application:  # todo: application should not be parameter here. Application should do its own list
         warnings.warn("organization.list_instances_json(app) is deprecated, use app.list_instances_json", DeprecationWarning, stacklevel=2)
         instances = application.list_instances_json()
     else:  # Return all instances in organization
         instances = router.get_instances(org_id=self.organizationId).json()
     return [ins for ins in instances if ins['status'] not in DEAD_STATUS]
    def new(organization, name, manifest):
        log.info("Creating application: %s" % name)

        resp = router.post_organization_application(org_id=organization.organizationId,
                                                    files={'path': manifest.content},
                                                    data={'manifestSource': 'upload', 'name': name})
        app = Application(organization, resp.json()['id'])
        app.manifest = manifest
        return app
 def new(organization, name, zone=None, default=False):
     log.info("Creating environment: %s" % name)
     if not zone:
         zone = organization.zone.zoneId
     data = {'isDefault': default,
             'name': name,
             'backend': zone,
             'organizationId': organization.organizationId}
     resp = router.post_organization_environment(org_id=organization.organizationId, data=json.dumps(data)).json()
     return Environment(organization, id=resp['id'])
    def json(self):
        '''
        return __cached_json, if accessed withing 300 ms.
        This allows to optimize calls when many parameters of entity requires withing short time.
        '''

        if self.fresh():
            return self.__cached_json
        self.__last_read_time = time.time()
        self.__cached_json = router.get_instance(org_id=self.organizationId, instance_id=self.instanceId).json()
        return self.__cached_json
 def create_revision(self, name, instance, parameters=[], version=None):
     if not version:
         version=self.get_manifest()['manifestVersion']
     payload = json.dumps({ 'name': name,
                 'parameters': parameters,
                 'submoduleRevisions': {},
                 'returnValues': [],
                 'applicationId': self.applicationId,
                 'applicationName': self.name,
                 'version': version,
                 'instanceId': instance.instanceId})
     resp = router.post_revision(org_id=self.organizationId, app_id=self.applicationId, data=payload)
     return self.get_revision(id=resp.json()['id'])
 def new(organization, name, zone_id=None, default=False):
     log.info("Creating environment: %s" % name)
     if not zone_id:
         zone_id = organization.zone.zoneId
     data = {'isDefault': default,
             'name': name,
             'backend': zone_id,
             'organizationId': organization.organizationId}
     log.debug(data)
     resp = router.post_organization_environment(org_id=organization.organizationId, data=json.dumps(data)).json()
     env = Environment(organization, id=resp['id'])
     log.info("Environment created: %s (%s)" % (name,env.environmentId))
     return env
    def reconfigure(self, revision=None, parameters=None, submodules=None):
        #note: be carefull refactoring this, or you might have unpredictable results
        #todo: private api seems requires at least presence of submodule names if exist
        payload = {}
        payload['parameters'] = self.parameters

        if revision:
            payload['revisionId'] = revision.id

        if submodules:
            payload['submodules'] = submodules
        if parameters is not None:
            payload['parameters'] = parameters

        resp = router.put_instance_configuration(org_id=self.organizationId, instance_id=self.instanceId, data=json.dumps(payload))
        return resp.json()
    def new(application, revision=None, environment=None, name=None, parameters=None, destroyInterval=None):
        if not parameters: parameters = {}
        if environment:  # if environment set, it overrides parameter
            parameters['environmentId'] = environment.environmentId
        elif not 'environmentId' in parameters.keys():  # if not set and not in params, use default
            parameters['environmentId'] = application.organization.defaultEnvironment.environmentId
        if name:
            parameters['instanceName'] = name
        if destroyInterval:
            parameters['destroyInterval'] = str(destroyInterval)
        if revision:
            parameters['revisionId'] = revision.revisionId

        data = json.dumps(parameters)
        before_creation = time.gmtime(time.time())
        resp = router.post_organization_instance(org_id=application.organizationId, app_id=application.applicationId, data=data)
        instance = Instance(organization=application.organization, id=resp.json()['id'])
        instance._last_workflow_started_time = before_creation
        return instance
 def json(self):
     return router.get_revision(org_id=self.organizationId, app_id=self.applicationId, rev_id=self.revisionId).json()
 def delete(self):
     router.delete_revision(org_id=self.organizationId, app_id=self.applicationId, rev_id=self.revisionId)
     return True
 def authenticate(self):
     router.base_url = self.auth.tenant
     router.connect(self.auth.user, self.auth.password)
     #todo: remove following, left for compatibility
     self.auth.cookies = router._cookies
     return True
 def list_organizations_json(self):
     resp = router.get_organizations()
     return resp.json()
 def reschedule_workflow(self, workflow_id, timestamp):
     log.info("ReScheduling workflow %s on instance %s (%s), timestamp: %s" % (workflow_id, self.name, self.id, timestamp))
     payload = {'timestamp':timestamp}
     router.post_instance_reschedule(org_id=self.organizationId, instance_id=self.instanceId, workflow_id=workflow_id, data=json.dumps(payload))
     return True
 def regenerate(self):
     return router.post_service_generate(org_id=self.organizationId, instance_id=self.instanceId).json()
 def force_remove(self):
     return router.delete_instance_force(org_id=self.organizationId, instance_id=self.instanceId)
 def delete(self):
     log.info("Removing application: %s" % self.name)
     router.delete_application(org_id=self.organizationId, app_id=self.applicationId)
     return True
 def upload(self, manifest):
     log.info("Uploading manifest")
     self.manifest = manifest
     return router.post_application_manifest(org_id=self.organizationId, app_id=self.applicationId,
                                 files={'path': manifest.content},
                                 data={'manifestSource': 'upload', 'name': self.name}).json()
 def get_manifest(self):
     return router.post_application_refresh(org_id=self.organizationId, app_id=self.applicationId).json()
 def cancel_command(self):
     return router.post_instance_action(org_id=self.organizationId, instance_id=self.instanceId, action="cancel")
 def unstar(self):
     return router.post_instance_action(org_id=self.organizationId, instance_id=self.instanceId, action="unstar")
 def json(self):
     resp = router.get_providers(org_id=self.organizationId)
     provider = [x for x in resp.json() if x['id'] == self.providerId]
     if len(provider)>0:
         return provider[0]
 def delete(self):
     router.delete_provider(org_id=self.organizationId,prov_id=self.providerId)
     return True
 def rename(self, name):
     payload = json.dumps({'instanceName': name})
     return router.put_instance_configuration(org_id=self.organizationId, instance_id=self.instanceId, data=payload)