
    {%                        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r " S S\
R.                  5      r " S S\
R2                  5      r\R6                  " \R8                  R:                  \R8                  R<                  5       " S S\R>                  5      5       r g)6Validate that a terraform plan complies with policies.    )absolute_import)division)unicode_literalsN)base)binary_operations)log)metrics)
properties)progress_tracker)GetFreshAccessToken)encoding)fileszCould not locate terraform-tools executable [{binary}]. Please ensure gcloud terraform-tools component is properly installed. See https://cloud.google.com/sdk/docs/components for more details.c                   6   ^  \ rS rSrSr0 rU 4S jrS rSrU =r	$ )"TerraformToolsTfplanToCaiOperation'   z>Streaming operation for Terraform Tools tfplan-to-cai command.c           	      d   > S[         R                  SS90n[        [        U ]  " SSSSUSS.UD6  g )NMISSING_EXECterraform-toolsbinaryT)r   check_hiddeninstall_if_missingcustom_errorsstructured_output )MISSING_BINARYformatsuperr   __init__selfkwargsr   	__class__s      lib/surface/terraform/vet.pyr    +TerraformToolsTfplanToCaiOperation.__init__,   sN    --5F-GM 

,d<  #     c           	          UUSUSUS[         R                  " 5       /n	U(       a  U	SU/-  n	U(       a  U	SU/-  n	U(       a  U	SU/-  n	U	$ )Nz--output-path--verbosityz--user-agentz	--project--region--zone)r
   GetUserAgent)
r"   commandterraform_plan_jsonprojectregionzone	verbosityoutput_pathr#   argss
             r%   _ParseArgsForCommand7TerraformToolsTfplanToCaiOperation._ParseArgsForCommand8   si     		D 
{G$$d
z6""d
xdKr'   r   
__name__
__module____qualname____firstlineno____doc__r   r    r5   __static_attributes____classcell__r$   s   @r%   r   r   '   s    F-
 r'   r   c                   6   ^  \ rS rSrSr0 rU 4S jrS rSrU =r	$ )TerraformToolsValidateOperationM   z3operation for Terraform Tools validate-cai command.c                 b   > S[         R                  SS90n[        [        U ]  " SSSSUS.UD6  g )Nr   r   r   TF)r   r   r   r   r   )r   r   r   rA   r    r!   s      r%   r    (TerraformToolsValidateOperation.__init__Q   sK    --5F-GM 

)49   # r'   c                 P    UUSUS[         R                  R                  U5      /nU$ )Nr)   --policy-library)ospath
expanduser)r"   r-   
input_filepolicy_libraryr2   r#   r4   s          r%   r5   4TerraformToolsValidateOperation._ParseArgsForCommand]   s3     	
>*D Kr'   r   r7   r?   s   @r%   rA   rA   M   s    ;-

 
r'   rA   c                   6    \ rS rSrSrSS0r\S 5       rS rSr	g)	Vetj   r   EXAMPLESz
        To validate that a terraform plan complies with a policy library
        at `/my/policy/library`:

        $ {command} tfplan.json --policy-library=/my/policy/library
        c                     U R                  SSS9  U R                  SSSS9  U R                  SS	S
S9  U R                  SS	SS9  g )Nr.   ztFile which contains a JSON export of a terraform plan. This file will be validated against the given policy library.)helprF   Tz)Directory which contains a policy library)requiredrR   r+   Fz:Default zone to use for resources that do not have one setr*   z<Default region to use for resources that do not have one set)add_argument)parsers    r%   ArgsVet.Argsx   sx    
B   8  
 I  
 K  r'   c                 	   [        5       n[        5       n[        5       n[        [        R                  R
                  R                  R                  5       S9SS.n/ SQn/ SQn/ SQn/ SQn	[        R                  R                  5        H  u  pX;   d  M  XU
'   M     [        R                  " 5        n[        R                  R                  US5      n[        R                  R
                  R                  R                  5       nU(       a&  [         R"                  " S	R%                  U5      5        O\U HV  n
[&        R(                  " [        R                  U
5      nU(       d  M1  [         R"                  " S
R%                  X5      5          O   SnUR*                  (       a2  UR*                  n[         R"                  " SR%                  U5      5        O\U	 HV  n
[&        R(                  " [        R                  U
5      nU(       d  M1  [         R"                  " SR%                  X5      5          O   SnUR,                  (       a2  UR,                  n[         R"                  " SR%                  U5      5        O]U HW  n
[&        R(                  " [        R                  U
5      nU(       d  M1  [         R"                  " SR%                  UU
5      5          O   U" SUUUUR.                  UR0                  UUS9nUR2                  U l        U R2                  S:  a
   S S S 5        g [4        R6                  " SSS9   U" SUR8                  UUR0                  US9nU" SUR8                  UR.                  UR0                  US9nS S S 5        S S S 5        WR2                  S:X  d  WR2                  S:X  a  SU l        O'UR2                  S:X  d  UR2                  S:X  a  SU l        / nSU4SW44 H  u  nnUR:                  (       a/   [<        R>                  " UR:                  SS9nUUR@                  -  nURF                  (       d  MY  [<        RH                  " S 5      nURF                  RK                  S 5       H  nU" U5        M     M     U$ ! , (       d  f       GN= f! , (       d  f       GN= f! [<        RB                   a(    [         RD                  " SR%                  U5      5         Nf = f)!N)accounttrue)GOOGLE_OAUTH_ACCESS_TOKENUSE_STRUCTURED_LOGGING)
HTTP_PROXY
http_proxyHTTPS_PROXYhttps_proxyNO_PROXYno_proxy)GOOGLE_PROJECTGOOGLE_CLOUD_PROJECTGCLOUD_PROJECT)GOOGLE_ZONEGCLOUD_ZONECLOUDSDK_COMPUTE_ZONE)GOOGLE_REGIONGCLOUD_REGIONCLOUDSDK_COMPUTE_REGIONzcai_assets.jsonz%Setting project to {} from propertiesz!Setting project to {} from env {} zSetting region to {} from argsz Setting region to {} from env {}zSetting zone to {} from argszSetting zone to {} from env {}ztfplan-to-cai)r-   r/   r0   r1   r.   r2   r3   envr   zValidating resourceszAborted validation.)messageaborted_messagezvalidate-cai)r-   rK   rJ   r2   rm   zvalidate-tfplan      CAI	TerraformT)as_jsonz,Could not parse {} policy validation output.
)&r   rA   r   r   VALUEScorerY   GetrG   environitemsr   TemporaryDirectoryrH   joinr/   r	   debugr   r   GetEncodedValuer0   r1   r.   r2   	exit_coder   ProgressTrackerrK   stdoutr   ReadStructuredOutputresource_bodyStructuredOutputErrorwarningstderr!DefaultStreamStructuredErrHandlersplit)r"   r4   tfplan_to_cai_operationvalidate_cai_operationvalidate_tfplan_operationenv_varsproxy_env_namesproject_env_nameszone_env_namesregion_env_namesenv_keyenv_valtempdir
cai_assetsr/   r0   r1   responsecai_responsetfplan_response
violationspolicy_typemsghandlerlines                            r%   RunVet.Run   s   @B<> ? A  
(9(9(>(>(F(F(J(J(LM	HON JJ,,.		## / 
	!	!	#w77<<):;j !!&&..224g			9@@IJ(G,,RZZA'WII9@@" # ) f			299&AB'G++BJJ@&VII8??! " ( d	yy		077=>%G))"**g>$TII6==dGLM	 & )!"66NN h  ))dn	!	 g 
$	#j ++(/1 ."..!nn 4%..//nn1k 
$P "o&?&?1&Ddn			1	$(A(AQ(Fdn
 J#(,"7+:I:K "LX		*!66oot-# ))
)*	#EEdKOO))$/D
$- 0"L  [1 1k 
$	#p !66 	
++DKK 	sS   2B/R%BRBR'A-RR2AR9R:R%
R	R
R"%9S! S!)r   N)
r8   r9   r:   r;   r<   detailed_helpstaticmethodrV   r   r=   r   r'   r%   rN   rN   j   s0    > -  .Kr'   rN   )!r<   
__future__r   r   r   os.pathrG   googlecloudsdk.callioper   &googlecloudsdk.command_lib.util.anthosr   googlecloudsdk.corer	   r
   r   googlecloudsdk.core.consoler   %googlecloudsdk.core.credentials.storer   googlecloudsdk.core.utilr   r   r   StreamingBinaryBackedOperationr   BinaryBackedOperationrA   ReleaseTracksReleaseTrackALPHABETACommandrN   r   r'   r%   <module>r      s    = &  '  ( D # ' * 8 E - *"#44#L&7&M&M : D%%++T->->-C-CDp$,, p Epr'   