
                            d Z ddlmZ ddlmZ ddlmZ ddlZddlZddlm	Z	 ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ  ej,                  ej.                  j0                         G d dej2                               Zy)zCommand provides active assist recommendations for input Terraform plan.

Step 1: Convert Terraform plan into CAI using terraform tools.
Step 2: Fetches the recommendations using the recommender API for resources in
the CAI output.

    )absolute_import)division)unicode_literalsN)insight)base)flags)EnvironmentVariables)
exceptions)files)"TerraformToolsTfplanToCaiOperationc                   .    e Zd ZdZddiZed        Zd Zy)Listz;Lists recommendations relevant to the input terraform plan.EXAMPLESzn
        Lists recommendations relevant to the input terraform plan.

        $ {command} tfplan.json
        c                 J    t        j                         j                  |        y)a  Args is called by calliope to gather arguments for this command.

    It takes arguments in alphabetical order except for no- or a clear-
    pair for that argument which can follow the argument itself.
    Args:
      parser: An argparse parser that you can use to add arguments that go
          on the command line after this command. Positional arguments are
          allowed.
    N)r   TerraformplanjsonAddToParser)parsers    -lib/surface/terraform/recommendations/list.pyArgsz	List.Args5   s     
))&1    c                    t               }t               }t        j                         5 }t        j
                  j                  |d      } |d|j                  dd|j                  d||j                        }|j                  | _
        | j                  dkD  r
	 d d d        y t        j                  | j                               }ddd	d
i}t        j                  |      5 }		 t        j                   |	      }
|
D ]  }|D ]  }||v s||   d   d	k(  rd	}nd}|d   dk(  r'dj)                  |d   j+                  d      d         }nH|sKdj)                  ||||   d         }|j-                  ||j.                  |j0                        c c cd d d        cd d d        S   	 d d d        d d d        y # t        j"                  $ r t%        j&                  d      w xY w# 1 sw Y   >xY w# 1 sw Y   y xY w)Nzcai_assets.jsonztfplan-to-cai debug)commandprojectregionzoneterraform_plan_json	verbosityoutput_pathenvr   
iam_policyzgoogle.iam.policy.Insightglobal)insight_typelocationzPlease check the following:
                                 - Input plan file is correct.
                                 - You have appropriate permissions to read
                                 inventory of resources inside the plan file.r%   regional
asset_typez+cloudresourcemanager.googleapis.com/Projectzprojects/{}name/z{}/locations/{}/insightTypes/{}r$   )r	   r   r   TemporaryDirectoryospathjoinr   r   env_vars	exit_coder   CreateClientReleaseTrack
FileReaderjsonloadJSONDecodeErrorr
   Errorformatsplitr   	page_sizelimit)selfargsenvironment_variablestfplan_to_cai_operationtempdir
cai_assetsresponseclientcai_insight_typesfcai_jsonresourcecai_typer%   resource_parentinsight_parents                   r   RunzList.RunB   s   02@B		!	!	#w77<<):;j(!'//"66 #,,.h  ))dn	!	  
$	#  ##D$5$5$78f
 9" J'1	"YYq\( !H+h8#"8,Z8HD# & <(BC #0"6"6V$**3/3#  !B!I!I#%h/?" {{>4>>4::NNK ('; 
$	#N , ! (; 
$	#@ ## 	"   "Q " "	" ('; 
$	#s\   A0G-"?G-!G!#F58G!AG!
AG!	G- G!$G-5)GG!!G*	&G--G6N)__name__
__module____qualname____doc__detailed_helpstaticmethodr   rK    r   r   r   r   (   s1    C - 
2 
2FOr   r   )rO   
__future__r   r   r   r4   os.pathr,   "googlecloudsdk.api_lib.recommenderr   googlecloudsdk.callioper   $googlecloudsdk.command_lib.terraformr   -googlecloudsdk.command_lib.terraform.env_varsr	   googlecloudsdk.corer
   googlecloudsdk.core.utilr   surface.terraform.vetr   ReleaseTracksr2   ALPHAListCommandr   rR   r   r   <module>r_      sp     '  '   6 ( 6 N * * D D%%++,_O4 _O -_Or   