- try:
- self.__project = keystone_utils.get_project(keystone=self.__keystone,
- project_name=self.project_settings.name)
- if self.__project:
- logger.info('Found project with name - ' + self.project_settings.name)
- elif not cleanup:
- self.__project = keystone_utils.create_project(self.__keystone, self.project_settings)
- else:
- logger.info('Did not create image due to cleanup mode')
- except Exception as e:
- logger.error('Unexpected error. Rolling back')
- self.clean()
- raise Exception(e.message)
+ super(self.__class__, self).initialize()
+
+ self.__project = keystone_utils.get_project(
+ keystone=self._keystone, project_settings=self.project_settings)
+ return self.__project
+
+ def create(self):
+ """
+ Creates a Project/Tenant in OpenStack if it does not already exist
+ :return: The Project domain object
+ """
+ self.initialize()
+
+ if not self.__project:
+ self.__project = keystone_utils.create_project(
+ self._keystone, self.project_settings)
+ for username in self.project_settings.users:
+ user = keystone_utils.get_user(self._keystone, username)
+ if user:
+ try:
+ self.assoc_user(user)
+ except Conflict as e:
+ logger.warn('Unable to associate user %s due to %s',
+ user.name, e)
+
+ if self.project_settings.quotas:
+ quota_dict = self.project_settings.quotas
+ nova = nova_utils.nova_client(self._os_creds, self._os_session)
+ quotas = nova_utils.get_compute_quotas(nova, self.__project.id)
+ if quotas:
+ if 'cores' in quota_dict:
+ quotas.cores = quota_dict['cores']
+ if 'instances' in quota_dict:
+ quotas.instances = quota_dict['instances']
+ if 'injected_files' in quota_dict:
+ quotas.injected_files = quota_dict['injected_files']
+ if 'injected_file_content_bytes' in quota_dict:
+ quotas.injected_file_content_bytes = \
+ quota_dict['injected_file_content_bytes']
+ if 'ram' in quota_dict:
+ quotas.ram = quota_dict['ram']
+ if 'fixed_ips' in quota_dict:
+ quotas.fixed_ips = quota_dict['fixed_ips']
+ if 'key_pairs' in quota_dict:
+ quotas.key_pairs = quota_dict['key_pairs']
+
+ nova_utils.update_quotas(nova, self.__project.id, quotas)