Esempio n. 1
0
 def images_for_user(cls, user=None):
     from core.models.user import AtmosphereUser
     is_public = Q(private=False)
     if not user or isinstance(user, AnonymousUser):
         # Images that are not endated and are public
         return Application.objects.filter(
             query.only_current_apps() & is_public,
             versions__machines__instance_source__provider__public=True
         ).distinct()
     if not isinstance(user, AtmosphereUser):
         raise Exception("Expected user to be of type AtmosphereUser"
                         " - Received %s" % type(user))
     queryset = None
     if user.is_staff:
         # Any image on a provider in the staff's provider list
         queryset = Application.objects.filter(
             query.in_users_providers(user))
     else:
         # This query is not the most clear. Here's an explanation:
         # Include all images created by the user or active images in the
         # users providers that are either shared with the user or public
         queryset = Application.objects.filter(
             query.created_by_user(user)
             | (query.only_current_apps() & query.in_users_providers(user)
                & (query.images_shared_with_user(user) | is_public)))
     return queryset.distinct()
Esempio n. 2
0
 def shared_with(cls, user):
     group_ids = user.group_ids()
     shared_images = Application.objects.filter(
         only_current_apps(),
         (Q(versions__machines__members__id__in=group_ids)
          | Q(versions__membership__id__in=group_ids)))
     return shared_images
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--dry-run", action="store_true",
                        help="List of provider names and IDs")
    args = parser.parse_args()
    admin_owned_apps = Application.objects.filter(
        created_by__username__contains='admin').filter(only_current_apps()).distinct()
    account_drivers = {}
    # FIXME: Change the provider_id if necessary.
    for app in admin_owned_apps:
        # Step 1 - See if MachineRequest can answer the question
        machine = app._current_machines().filter(instance_source__provider__id=4).first()
        if not machine:
            continue
        mr = MachineRequest.objects.filter(new_machine=machine).first()
        if mr:
            fix_application_owner(app, mr.created_by, args.dry_run)
            continue
        # Step 2 - See if glance can answer the question
        provider = machine.provider
        if account_drivers.get(provider):
            accounts = account_drivers[provider]
        else:
            accounts = get_account_driver(provider)
            account_drivers[provider] = accounts
        img = accounts.get_image(machine.identifier)
        if not img:
            continue
        project = accounts.get_project_by_id(img.owner)
        if not project:
            continue
        user = AtmosphereUser.objects.filter(username=project.name).first()
        if user:
            fix_application_owner(app, user, args.dry_run)
Esempio n. 4
0
 def shared_with(cls, user):
     group_ids = user.group_ids()
     shared_images = Application.objects.filter(
         only_current_apps(),
         (Q(versions__machines__members__id__in=group_ids) | Q(versions__membership__id__in=group_ids)),
     )
     return shared_images
 def images_for_user(cls, user=None):
     from core.models.user import AtmosphereUser
     is_public = Q(private=False)
     if not user or isinstance(user, AnonymousUser):
         # Images that are not endated and are public
         return Application.objects.filter(
             query.only_current_apps() & is_public,
             versions__machines__instance_source__provider__public=True
         ).distinct()
     if not isinstance(user, AtmosphereUser):
         raise Exception(
             "Expected user to be of type AtmosphereUser"
             " - Received %s" % type(user)
         )
     queryset = None
     if user.is_staff:
         # Any image on a provider in the staff's provider list
         queryset = Application.objects.filter(
             query.in_users_providers(user)
         )
     else:
         # This query is not the most clear. Here's an explanation:
         # Include all images created by the user or active images in the
         # users providers that are either shared with the user or public
         queryset = Application.objects.select_related(
             'created_by'
         ).prefetch_related(
             'versions__machines__instance_source__provider',
             'versions__machines__members', 'versions__membership'
         ).filter(
             query.created_by_user(user) | (
                 query.only_current_apps() & query.in_users_providers(user) &
                 (query.images_shared_with_user_by_ids(user) | is_public)
             )
         )
     return queryset.distinct()
Esempio n. 6
0
def get_admin_images(request_user):
    # Final query for admins/staff images
    provider_id_list = request_user.provider_ids()
    # TODO: This 'just works' and is probably very slow... Better way?
    account_providers_list = AccountProvider.objects.filter(
        provider__id__in=provider_id_list)
    admin_users = [ap.identity.created_by for ap in account_providers_list]
    image_ids = []
    for user in admin_users:
        image_ids.extend(
            user.application_set.values_list('id', flat=True))
    admin_list = Image.objects.filter(
        only_current_apps(),
        id__in=image_ids)
    return admin_list
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--dry-run",
                        action="store_true",
                        help="List of provider names and IDs")
    args = parser.parse_args()
    admin_owned_apps = Application.objects.filter(
        created_by__username__contains='admin').filter(
            only_current_apps()).distinct()
    account_drivers = {}
    # FIXME: Change the provider_id if necessary.
    for app in admin_owned_apps:
        # Step 1 - See if MachineRequest can answer the question
        machine = app._current_machines().filter(
            instance_source__provider__id=4).first()
        if not machine:
            continue
        mr = MachineRequest.objects.filter(new_machine=machine).first()
        if mr:
            fix_application_owner(app, mr.created_by, args.dry_run)
            continue
        # Step 2 - See if glance can answer the question
        provider = machine.provider
        if account_drivers.get(provider):
            accounts = account_drivers[provider]
        else:
            accounts = get_account_driver(provider)
            account_drivers[provider] = accounts
        img = accounts.get_image(machine.identifier)
        if not img:
            continue
        project = accounts.get_project_by_id(img.owner)
        if not project:
            continue
        user = AtmosphereUser.objects.filter(username=project.name).first()
        if user:
            fix_application_owner(app, user, args.dry_run)
Esempio n. 8
0
 def public_apps(cls):
     public_images = Application.objects.filter(
         only_current_apps(), private=False)
     return public_images
Esempio n. 9
0
 def public_apps(cls):
     public_images = Application.objects.filter(only_current_apps(),
                                                private=False)
     return public_images
Esempio n. 10
0
def generate_metrics():
    nowtime = timezone.now()
    all_apps = Application.objects.filter(only_current_apps()).distinct().order_by('id')
    for app in all_apps:
        generate_metrics_for.apply_async(args=[app.id, app.name, nowtime])
    return True