Beispiel #1
0
Datei: ci.py Projekt: chaws/squad
def submit_job(request, group_slug, project_slug, version, environment_slug):
    backend_name = request.POST.get('backend')
    if backend_name is None:
        return HttpResponseBadRequest("backend field is required")

    try:
        backend = Backend.objects.get(name=backend_name)
    except Backend.DoesNotExist:
        return HttpResponseBadRequest("requested backend does not exist")

    # project has to exist or request will result with 404
    project = request.project
    if project is None:
        return HttpResponseBadRequest("malformed request")

    # `Environment.expected_test_runs == -1` means that environment will stop receiving submissions
    environment, created = project.environments.get_or_create(
        slug=environment_slug)
    if environment.expected_test_runs == -1:
        return HttpResponseBadRequest(
            "environment '%s' is disabled and squad will not accept new submissions to it"
            % environment_slug)

    # create Build object
    build, _ = project.builds.get_or_create(version=version)

    # definition can be received as a file upload or as a POST parameter
    definition = None
    if 'definition' in request.FILES:
        definition = read_file_upload(
            request.FILES['definition']).decode('utf-8')
    else:
        definition = request.POST.get('definition')

    if definition is None:
        return HttpResponseBadRequest("test job definition is required")

    # create TestJob object
    test_job = TestJob.objects.create(
        backend=backend,
        definition=definition,
        target=project,
        target_build=build,
        environment=environment_slug,
    )
    log_addition(request, test_job, "Test Job submission")
    # schedule submission
    submit.delay(test_job.id)

    # return ID of test job
    return HttpResponse(test_job.id, status=201)
Beispiel #2
0
def submit_job(request, group_slug, project_slug, version, environment_slug):
    backend_name = request.POST.get('backend')
    if backend_name is None:
        return HttpResponseBadRequest("backend field is required")

    try:
        backend = Backend.objects.get(name=backend_name)
    except Backend.DoesNotExist:
        return HttpResponseBadRequest("requested backend does not exist")

    # project has to exist or request will result with 404
    project = request.project
    if project is None:
        return HttpResponseBadRequest("malformed request")

    # create Build object
    build, _ = project.builds.get_or_create(version=version)

    # definition can be received as a file upload or as a POST parameter
    definition = None
    if 'definition' in request.FILES:
        definition = read_file_upload(request.FILES['definition'])
    else:
        definition = request.POST.get('definition')

    if definition is None:
        return HttpResponseBadRequest("test job definition is required")

    # create TestJob object
    test_job = TestJob.objects.create(
        backend=backend,
        definition=definition,
        target=project,
        target_build=build,
        environment=environment_slug,
    )
    # schedule submission
    submit.delay(test_job.id)

    # return ID of test job
    return HttpResponse(test_job.id, status=201)
Beispiel #3
0
def submit_job(request, group_slug, project_slug, version, environment_slug):
    backend_name = request.POST.get('backend')
    if backend_name is None:
        return HttpResponseBadRequest("backend field is required")

    try:
        backend = Backend.objects.get(name=backend_name)
    except Backend.DoesNotExist:
        return HttpResponseBadRequest("requested backend does not exist")

    # project has to exist or request will result with 404
    project = request.project
    if project is None:
        return HttpResponseBadRequest("malformed request")

    # create Build object
    build, _ = project.builds.get_or_create(version=version)

    # definition can be received as a file upload or as a POST parameter
    definition = None
    if 'definition' in request.FILES:
        definition = read_file_upload(request.FILES['definition'])
    else:
        definition = request.POST.get('definition')

    if definition is None:
        return HttpResponseBadRequest("test job definition is required")

    # create TestJob object
    test_job = TestJob.objects.create(
        backend=backend,
        definition=definition,
        target=project,
        target_build=build,
        environment=environment_slug,
    )
    # schedule submission
    submit.delay(test_job.id)

    # return ID of test job
    return HttpResponse(test_job.id, status=201)
Beispiel #4
0
def submit_job(modeladmin, request, queryset):
    for test_job in queryset:
        submit.delay(test_job.id)
Beispiel #5
0
def submit_job(modeladmin, request, queryset):
    for test_job in queryset:
        submit.delay(test_job.id)
Beispiel #6
0
def submit_job(request):
    """
    #submit_job(request, group_slug, project_slug, version, environment_slug)
    """

    vts_versions = VtsVersion.objects.all()
    vts_models = VtsModel.objects.all()
    device_types = DeviceType.objects.all()
    context = {
        'vts_versions': vts_versions,
        'vts_models': vts_models,
        'device_types': device_types,
    }
    if request.method == "GET":
        return render(request, 'squad/submit.jinja2', context)

    post_data = dict(request.POST)
    print(post_data)
    vts_version = request.POST.get('vts-version')
    version = request.POST.get('description')
    vts_version_id = request.POST.get('vts-version')
    vts_models = post_data.get('vts-models')
    vts_models_manuel = post_data.get('vts-models-manuel')
    device_type = request.POST.get('device-type')
    pac_node = request.POST.get('pac-node')
    verify_url = request.POST.get('verify-url')

    if not version:
        context['message'] = 'Please input description!'
        return render(request, 'squad/submit.jinja2', context)
    if not vts_version_id:
        context['message'] = 'Please input vts version!'
        return render(request, 'squad/submit.jinja2', context)
    if (not vts_models or '' in vts_models) and (not vts_models_manuel or '' in vts_models_manuel):
        context['message'] = 'Please input vts vts models!'
        return render(request, 'squad/submit.jinja2', context)

    if not device_type:
        context['message'] = 'Please input vts device type!'
        return render(request, 'squad/submit.jinja2', context)
    if not pac_node:
        context['message'] = 'Please input vts pac node!'
        return render(request, 'squad/submit.jinja2', context)
    if verify_url:
        res = requests.head(verify_url)
        if res.status_code > 300:
            context['message'] = 'Please input correct verify url!'
            return render(request, 'squad/submit.jinja2', context)

    vts_version = VtsVersion.objects.get(id=vts_version_id)
    device_type = DeviceType.objects.get(id=device_type)
    if vts_models:
        vts_models = VtsModel.objects.filter(id__in=vts_models)
    environment_slug = device_type.env.slug
    backend = device_type.backend
    project = device_type.project

    # env = project.environments.get(device_type.)
    # create Build object
    build, _ = project.builds.get_or_create(version=version)

    if vts_models_manuel[0]:
        try:
            definition = TestDefinition.objects.get(name='vts_common')
        except TestDefinition.DoesNotExist:
            context['message'] = 'Please create vts common in admin'
            return render(request, 'squad/submit.jinja2', context)

        definition_data = yaml.load(definition.content)

        try:
            pac_url = device_type.base_pac_url.format(pac_node)
        except KeyError:
            pac_url = device_type.base_pac_url.format(pac_node=pac_node)
        if pac_url.endswith('/'):
            pac_url = pac_url[:-1]
            # 替换definition中的img url, vts版本, vts model
        if verify_url:
            verifyid, burl, verify_files = verify_dowloader(verify_url, device_type.name)
        replace_target = '/'.join(definition_data['actions'][3]['deploy']['images']['boot']['url'].split('/')[0:-1])
        for key in definition_data['actions'][3]['deploy']['images'].keys():
            target_url = definition_data['actions'][3]['deploy']['images'][key]['url'].replace(replace_target,
                                                                                               pac_url[:-1])
            definition_data['actions'][3]['deploy']['images'][key]['url'] \
                = target_url

            if verify_url:
                img_name = target_url.split('/')[-1]
                print(img_name)
                for f in verify_files:
                    if f == img_name:
                        definition_data['actions'][3]['deploy']['images'][key]['url'] = burl + verify_files[
                            verify_files.index(img_name)]

        definition_data['actions'][6]['test']['definitions'][0]['params']['TEST_URL'] = vts_version.vts_bar_url
        definition_data['actions'][6]['test']['definitions'][0]['params']['TEST_PARAMS'] \
            = 'run vts-kernel --module {} --skip-device-info'.format(vts_models_manuel[0])
        definition_data['job_name'] = version
        definition_data['device_type'] = device_type.name
        definition_s = yaml.dump(definition_data)
        # create TestJob object
        test_job = TestJob.objects.create(
            backend=backend,
            definition=definition_s,
            target=project,
            target_build=build,
            environment=environment_slug,
        )
        # schedule submission
        submit.delay(test_job.id)

        group = Group.objects.get(user_groups=request.user.groups.all()[0])
        return redirect('testjobs', group.slug, project.slug, version)

    for vts_model in vts_models:
        # definition can be received as a file upload or as a POST parameter
        definition = vts_model.test_definition

        definition_data = yaml.load(definition.content)

        try:
            pac_url = device_type.base_pac_url.format(pac_node)
        except KeyError:
            pac_url = device_type.base_pac_url.format(pac_node=pac_node)
        if pac_url.endswith('/'):
            pac_url = pac_url[:-1]
        # 替换definition中的img url, vts版本, vts model
        if verify_url:
            verifyid, burl, verify_files = verify_dowloader(verify_url, device_type.name)
        replace_target = '/'.join(definition_data['actions'][3]['deploy']['images']['boot']['url'].split('/')[0:-1])
        for key in definition_data['actions'][3]['deploy']['images'].keys():
            target_url = definition_data['actions'][3]['deploy']['images'][key]['url'].replace(replace_target, pac_url[:-1])
            definition_data['actions'][3]['deploy']['images'][key]['url'] \
                = target_url

            if verify_url:
                img_name = target_url.split('/')[-1]
                print(img_name)
                for f in verify_files:
                    if f == img_name:
                        definition_data['actions'][3]['deploy']['images'][key]['url'] = burl + verify_files[verify_files.index(img_name)]

        definition_data['actions'][6]['test']['definitions'][0]['params']['TEST_URL'] = vts_version.vts_bar_url
        definition_data['job_name'] = version
        definition_data['device_type'] = device_type.name
        definition_s = yaml.dump(definition_data)

        # create TestJob object
        test_job = TestJob.objects.create(
            backend=backend,
            definition=definition_s,
            target=project,
            target_build=build,
            environment=environment_slug,
        )
        # schedule submission
        submit.delay(test_job.id)
    # return ID of test job
    group = Group.objects.get(user_groups=request.user.groups.all()[0])
    return redirect('testjobs', group.slug, project.slug, version)