
    .                        S r SSKJr  SSKJr  SSKJr  SSKrSSKJr  SSK	J
r
  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKrSrSrSr Sr!Sr"Sr#\
RH                  \
RJ                  " \
RL                  RN                  5       " S S\
RP                  5      5       5       r)\
RJ                  " \
RL                  RT                  5       " S S\)5      5       r+ " S S\RX                  5      r(g)z8Scan a container image using the On-Demand Scanning API.    )absolute_import)division)unicode_literalsN)util)base)flags)ondemandscanning_util)binary_operations)	arg_utils)log)
properties)progress_tracker)local_state)update_manager)	platformszScanning container imagez@Locally extracting packages and versions from {} container imagez5Remotely initiating analysis of packages and versionsz*Waiting for analysis operation to completezExtraction failed: image extraction was either stopped or crashed (possibly due to a lack of available memory) with exit code {exit_code}z9Extraction failed: unknown error (exit code: {exit_code})c                   J    \ rS rSrSrSSS.r\S 5       rS rS r	S	 r
S
 rSrg)ScanBeta5   C  Perform a vulnerability scan on a container image.

You can scan a container image in a Google Cloud registry (Artifact Registry
or Container Registry), or a local container image.

Reference an image by tag or digest using any of the formats:

  Artifact Registry:
    LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY-ID/IMAGE[:tag]
    LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY-ID/IMAGE@sha256:digest

  Container Registry:
    [LOCATION.]gcr.io/PROJECT-ID/REPOSITORY-ID/IMAGE[:tag]
    [LOCATION.]gcr.io/PROJECT-ID/REPOSITORY-ID/IMAGE@sha256:digest

  Local:
    IMAGE[:tag]
z{description}a	      Start a scan of a container image stored in Artifact Registry:

        $ {command} us-west1-docker.pkg.dev/my-project/my-repository/busy-box@sha256:abcxyz --remote

    Start a scan of a container image stored in the Container Registry, and perform the analysis in Europe:

        $ {command} eu.gcr.io/my-project/my-repository/my-image:latest --remote --location=europe

    Start a scan of a container image stored locally, and perform the analysis in Asia:

        $ {command} ubuntu:latest --location=asia
    )DESCRIPTIONEXAMPLESc                    [         R                  " 5       R                  U 5        [         R                  " 5       R                  U 5        [         R                  " 5       R                  U 5        [         R
                  " 5       R                  U 5        [         R                  " 5       R                  U 5        [         R                  " 5       R                  U 5        [         R                  " 5       R                  U 5        [         R                  " 5       R                  U 5        [        R                  R                  U 5        g )N)r   GetResourceURIArgAddToParserGetRemoteFlag%GetOnDemandScanningFakeExtractionFlagGetOnDemandScanningLocationFlagGetAdditionalPackageTypesFlagGetExperimentalPackageTypesFlagGetSkipPackageTypesFlagGetVerboseErrorsFlagr   
ASYNC_FLAG)parsers    +lib/surface/artifacts/docker/images/scan.pyArgsScanBeta.Args^   s    	))&1	%%f-	//1==fE	))+77?	'')55f=	))+77?	!!#//7	 ,,V4OO'    c                    [         R                  R                  5       (       a  [        R                  " S5      e [
        R                  R                  S/5        [        5       n[        R                  " [        R                  UR                   (       a  SOS5      SS9[        R                  " ["        SS9/nUR$                  (       d  U[        R                  " [&        SS9/-  nU R)                  5       n[        R*                  " [,        US	9 nUR/                  S5        U" UR0                  UR                   UR2                  UR4                  UR6                  UR8                  UR:                  S
9nUR<                  (       a  SnUR>                  (       aR  SRA                  UR>                  RC                  5        Vs/ s H  nURE                  S5      (       d  M  UPM     sn5      nU(       dK  UR<                  S:  a  [F        R                  UR<                  S9nO[H        R                  UR<                  S9nURK                  S[        RL                  " U5      5         SSS5        g/ n	[N        RP                  " URR                  5       Hk  n
URU                  U
S   U
S   U
S   S9nSU
;   a3  [V        RX                  " U
S   URT                  RZ                  5      Ul.        SU
;   a
  U
S   Ul/        X/-  n	Mm     URa                  S5        UR/                  S5        U Rc                  X5      nURa                  S5        SnUR$                  (       d^  UR/                  S5        URe                  SSR                  URf                  5      5        U Ri                  U5      nURa                  S5        SSS5        UR$                  (       a:  [j        Rl                  Ro                  SR                  WRf                  5      5        U$ W$ ! [
        R                   a    e [        R                   a     GNf = fs  snf ! , (       d  f       N= f)a  Runs local extraction then calls ODS with the results.

Args:
  args: an argparse namespace. All the arguments that were provided to this
    command invocation.

Returns:
  AnalyzePackages operation.

Raises:
  UnsupportedOS: when the command is run on a Windows machine.
z.On-Demand Scanning is not supported on Windowslocal-extractremotelocalextract)keyrpcpoll)stages)resource_urir*   fake_extractionadditional_package_typesexperimental_package_typesskip_package_typesverbose_errorsN
zExtraction failedr   )	exit_codepackageversioncpe_uri)r9   r:   cpeUripackage_typehash_digestz[{}]z Check operation [{}] for status.)8r   OperatingSystem	IsWindowsods_utilUnsupportedOSr   UpdateManagerEnsureInstalledAndRestartMissingRequiredComponentsErrorr   InvalidSDKRootErrorCommandr   StageEXTRACT_MESSAGEformatr*   RPC_MESSAGEasync_POLL_MESSAGEGetMessagesStagedProgressTrackerSCAN_MESSAGE
StartStageRESOURCE_URIr2   r3   r4   r5   r6   r8   stderrjoin
splitlines
startswith EXTRACTION_KILLED_ERROR_TEMPLATE!UNKNOWN_EXTRACTION_ERROR_TEMPLATE	FailStageExtractionFailedErrorjsonloadsstdoutPackageDatar   ChoiceToEnumPackageTypeValueValuesEnumpackageType
hashDigestCompleteStageAnalyzePackagesUpdateStagenameWaitForOperationr   statusPrint)selfargscmdr0   messagestrackeroperation_resultextraction_errorlinepkgspkgpkg_dataopresponses                 r$   RunScanBeta.Runj   s      **,,""
:< <
 ""<<o=NO )C 	""t{{8H	 	{6	F ;;!''&ABBf!H		/	/V
%(/#((..#'#@#@%)%D%D!44,, 
	#	#  ""!YY/66AAC(Ct!45 C( 
  ''!+?FF*44  G  7  AGG*44  H  7)"889IJ	L?
% 
%D d,334#''	N	Ny> ( 

 S !*!7!7.!""=="?(
 C #M 2(

 5 I& +bE" h[[6"FFMM"''$:;((,f%{
%~ {{	jj9@@IJiOA 88  ** 
P(%
% 
%s>    P B/P;?P6
P6
#B P;,EP;(P32P36P;;
Q	c                     [         R                  " [        R                  R                  R
                  R                  SS9UR                  UR                  U5      $ NT)required)	api_utilAnalyzePackagesBetar   VALUEScoreprojectGetlocationrR   rj   rk   rr   s      r$   rd   ScanBeta.AnalyzePackages   sK    ''&&**D*9	 r'   c                 .    [         R                  " S5      $ Nv1beta1r|   rN   rj   s    r$   rN   ScanBeta.GetMessages   s    	**r'   c                 0    [         R                  " US5      $ r   rA   rg   rj   ru   s     r$   rg   ScanBeta.WaitForOperation   s    $$R33r'    N)__name__
__module____qualname____firstlineno____doc__detailed_helpstaticmethodr%   rw   rd   rN   rg   __static_attributes__r   r'   r$   r   r   5   sB    * 	-& 	( 	(xt+4r'   r   c                   *    \ rS rSrSrS rS rS rSrg)ScanGA   r   c                     [         R                  " [        R                  R                  R
                  R                  SS9UR                  UR                  U5      $ rz   )	r|   AnalyzePackagesGAr   r~   r   r   r   r   rR   r   s      r$   rd   ScanGA.AnalyzePackages  sK    %%&&**D*9	 r'   c                 .    [         R                  " S5      $ Nv1r   r   s    r$   rN   ScanGA.GetMessages  s    %%r'   c                 0    [         R                  " US5      $ r   r   r   s     r$   rg   ScanGA.WaitForOperation  s    $$R..r'   r   N)	r   r   r   r   r   rd   rN   rg   r   r   r'   r$   r   r      s    &&/r'   r   c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )rG   i  z"Wrapper for call to the Go binary.c                 2   > [         [        U ]
  " SSS0UD6  g )Nbinaryr)   r   )superrG   __init__)rj   kwargs	__class__s     r$   r   Command.__init__  s    	'4!CCFCr'   c                 D   SU-   S[         R                  " U5      -   S[         R                  " U5      -   SSR                  / SQ5      -   /n	/ n
U(       a  X-  n
U(       a  X-  n
U
(       a7  U	R                  S[         R                  " SR                  U
5      5      -   5        U(       a7  U	R                  S[         R                  " SR                  U5      5      -   5        U(       a(  U	R                  S	[         R                  " U5      -   5        U	R                  S
5        U	$ )Nz--resource_uri=z	--remote=z--provide_fake_results=z
--undefok=,)r3   r5   r6   use_scalibrz--additional_package_types=z--skip_package_types=z--verbose_errors=z--use_scalibr)six	text_typerT   append)rj   r1   r*   r2   r3   r4   r5   r6   r   rk   package_typess              r$   _ParseArgsForCommandCommand._ParseArgsForCommand  s     	L(cmmF++!CMM/$BB
 	
(( 
 	D" M/m!1m
kk/-- 789 : 
kk
!CMM#((;M2N$O
O 
kk%n(EEFKK Kr'   r   )	r   r   r   r   r   r   r   r   __classcell__)r   s   @r$   rG   rG     s    *D0 0r'   rG   )-r   
__future__r   r   r   r[   'googlecloudsdk.api_lib.ondemandscanningr   r|   googlecloudsdk.callioper   $googlecloudsdk.command_lib.artifactsr   r	   rA   &googlecloudsdk.command_lib.util.anthosr
   $googlecloudsdk.command_lib.util.apisr   googlecloudsdk.corer   r   googlecloudsdk.core.consoler   googlecloudsdk.core.updaterr   r   googlecloudsdk.core.utilr   r   rP   rI   rK   rM   rW   rX   DefaultUniverseOnlyReleaseTracksReleaseTrackBETArG   r   GAr   BinaryBackedOperationr   r'   r$   <module>r      s    ? &  '  D ( 6 R D : # * 8 3 6 . 
 *%E; !
 @ " D%%**+x4t|| x4 , x4v D%%(()/X / */D655 6r'   