def add_image(image_metadata=None, tag=None, digest=None, created_at=None, from_archive=False, allow_dockerfile_update=False): try: if image_metadata is None: image_metadata = {} request_inputs = anchore_engine.apis.do_request_prep(connexion.request, default_params={'tag': tag, 'digest': digest, 'created_at': created_at, 'allow_dockerfile_update': allow_dockerfile_update}) if from_archive: task = archiver.RestoreArchivedImageTask(account=ApiRequestContextProxy.namespace(), image_digest=digest) task.start() request_inputs['params'] = {} request_inputs['method'] = 'GET' with db.session_scope() as session: return_object, httpcode = anchore_engine.services.catalog.catalog_impl.image_imageDigest(session, request_inputs, digest) else: with db.session_scope() as session: return_object, httpcode = anchore_engine.services.catalog.catalog_impl.image(session, request_inputs, bodycontent=image_metadata) except Exception as err: logger.exception('Error processing image add') httpcode = 500 return_object = str(err) return (return_object, httpcode)
def add_image( image_metadata=None, tag=None, digest=None, created_at=None, from_archive=False, allow_dockerfile_update=False, ): try: if image_metadata is None: image_metadata = {} request_inputs = anchore_engine.apis.do_request_prep( connexion.request, default_params={ "tag": tag, "digest": digest, "created_at": created_at, "allow_dockerfile_update": allow_dockerfile_update, }, ) if from_archive: task = archiver.RestoreArchivedImageTask( account=ApiRequestContextProxy.namespace(), image_digest=digest ) task.start() request_inputs["params"] = {} request_inputs["method"] = "GET" with db.session_scope() as session: ( return_object, httpcode, ) = anchore_engine.services.catalog.catalog_impl.image_imageDigest( session, request_inputs, digest ) else: with db.session_scope() as session: ( return_object, httpcode, ) = anchore_engine.services.catalog.catalog_impl.image( session, request_inputs, bodycontent=image_metadata ) except ImageConflict as img_err: httpcode = 409 return_object = str(img_err) except Exception as err: logger.exception("Error processing image add") httpcode = 500 return_object = str(err) return return_object, httpcode
def add_image( image_metadata=None, tag=None, digest=None, created_at=None, from_archive=False, allow_dockerfile_update=False, ): try: if image_metadata is None: image_metadata = {} request_inputs = anchore_engine.apis.do_request_prep( connexion.request, default_params={ "tag": tag, "digest": digest, "created_at": created_at, "allow_dockerfile_update": allow_dockerfile_update, }, ) if image_metadata.get("import_operation_id") and from_archive: raise BadRequest( 'Cannot specify both "from_archive=True" query parameter and include an import manifest in the payload', detail={}, ) if from_archive: # Restore an image from the analysis archive into the working set task = archiver.RestoreArchivedImageTask( account=ApiRequestContextProxy.namespace(), image_digest=digest) task.start() request_inputs["params"] = {} request_inputs["method"] = "GET" with db.session_scope() as session: ( return_object, httpcode, ) = anchore_engine.services.catalog.catalog_impl.image_imageDigest( session, request_inputs, digest) elif image_metadata.get("import_manifest"): # Import an image from the upload API try: import_manifest = ImportManifest.from_json( image_metadata["import_manifest"]) except Exception as err: logger.debug_exception("Error unmarshalling manifest") # If we hit this, it means the swagger spec doesn't match the marshmallow scheme raise BadRequest(message="invalid import manifest", detail={"error": str(err)}) annotations = image_metadata.get("annotations", {}) # Don't accept an in-line dockerfile if image_metadata.get("dockerfile"): raise BadRequest( "Cannot provide dockerfile content directly in import payload. Use the import operation APIs to load the dockerfile before calling this endpoint", detail={}, ) with db.session_scope() as session: # allow_dockerfile_update is a poor proxy for the 'force' option return_object = anchore_engine.services.catalog.importer.import_image( session, account=ApiRequestContextProxy.namespace(), operation_id=import_manifest.operation_uuid, import_manifest=import_manifest, force=allow_dockerfile_update, annotations=annotations, ) httpcode = 200 else: # Regular image-add case: analyze from a registry with db.session_scope() as session: ( return_object, httpcode, ) = anchore_engine.services.catalog.catalog_impl.image( session, request_inputs, bodycontent=image_metadata) except AnchoreApiError: raise except ImageConflict as img_err: httpcode = 409 return_object = str(img_err) except Exception as err: logger.exception("Error processing image add") httpcode = 500 return_object = str(err) return return_object, httpcode