
    `                        d Z ddlmZ ddlmZ ddlm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 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 ddlZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)d Z*d Z+d  Z, G d! d" ejZ                  ej\                  e/            Z0 G d# d$e0      Z1d% Z2d& Z3 G d' d(e0      Z4 G d) d*e0      Z5 G d+ d,e0      Z6d-Z7 G d. d/e0      Z8 G d0 d1e0      Z9d2Z: G d3 d4e0      Z; G d5 d6e0      Z<d7Z= G d8 d9e0      Z> G d: d;e0      Z?d< Z@ G d= d>e/      ZA G d? d@e0      ZBy)AzUtil for iap.    )absolute_import)division)unicode_literalsN)encoding)
list_pager)appengine_api_client)operations_util)projects_api)base_classes)apis)base)
exceptions)iam_util)util)log)	resources)yamliapzappengine.appszcompute.backendServiceszcompute.regionBackendServicesziap.projectsziap.projects.iap_webziap.projects.iap_web.servicesz&iap.projects.iap_web.services.versionsz,iap.projects.iap_tunnel.locations.destGroupsz!iap.projects.iap_tunnel.locationsc                      ~ y)Nv1 )release_tracks    &lib/googlecloudsdk/api_lib/iap/util.py_ApiVersionr   6   s    	    c                 n    t         j                  j                         }|j                  t        |        |S N)r   REGISTRYCloneRegisterApiByNameIAP_API)api_versionregistrys     r   _GetRegistryr$   ;   s-     %%'(
Wk2	/r   c                 R    t        j                  t        j                  |             S r   )r
   Getprojects_utilParseProject)
project_ids    r   _GetProjectr*   C   s    			-44Z@	AAr   c                       e Zd ZdZd Zed        Zed        Zej                  d        Z
ej                  d        Zd Zd Zd	 Zd
 Zd Zd Zy)IapIamResourcez!Base class for IAP IAM resources.c                     || _         t        |      | _        t        j                  t
        | j                        | _        t        | j                        | _        || _	        y)zBase Constructor for an IAP IAM resource.

    Args:
      release_track: base.ReleaseTrack, release track of command.
      project: Project of the IAP IAM resource
    N)
r   r   r"   r   GetClientInstancer!   clientr$   r#   project)selfr   r0   s      r   __init__zIapIamResource.__init__J   sL     'D"=1D(($2B2BCDK !1!12DMDLr   c                 .    | j                   j                  S r   r/   MESSAGES_MODULEr1   s    r   messageszIapIamResource.messagesX       ;;&&&r   c                 B    t        | j                  | j                        S r   getattrr/   r"   r6   s    r   servicezIapIamResource.service\       4;; 0 011r   c                      y)z$Human-readable name of the resource.Nr   r6   s    r   _NamezIapIamResource._Name`        	r   c                      y)z/Parses the IAP IAM resource from the arguments.Nr   r6   s    r   _ParsezIapIamResource._Parsee   r@   r   c                    | j                   j                  |j                         | j                   j                  | j                   j	                  t
        j                                    }| j                  j                  |      S )N)requestedPolicyVersion)options)resourcegetIamPolicyRequest)	r7   IapGetIamPolicyRequestRelativeNameGetIamPolicyRequestGetPolicyOptionsr   !MAX_LIBRARY_IAM_SUPPORTED_VERSIONr<   GetIamPolicy)r1   resource_refrequests      r   _GetIamPolicyzIapIamResource._GetIamPolicyj   su    mm22**, MM==MM22:: 3 < > = 3 >G <<$$W--r   c                 D    | j                         }| j                  |      S )z'Get IAM policy for an IAP IAM resource.)rB   rP   )r1   rN   s     r   rM   zIapIamResource.GetIamPolicys   s    ;;=Ll++r   c                 T   t         j                  |_        | j                  j	                  |j                         | j                  j                  |            }| j                  j                  |      }t        j                  |j                         | j                                |S )N)policy)rF   setIamPolicyRequest)r   rL   versionr7   IapSetIamPolicyRequestrI   SetIamPolicyRequestr<   SetIamPolicyLogSetIamPolicyr?   )r1   rN   rS   rO   responses        r   _SetIamPolicyzIapIamResource._SetIamPolicyx   s    ??FNmm22**, MM==V=L 3 G ||((1H\668$**,GOr   c                     t        j                  || j                  j                        }| j	                         }| j                  ||      S )z+Set the IAM policy for an IAP IAM resource.)r   ParsePolicyFiler7   PolicyrB   r[   )r1   policy_filerS   rN   s       r   rX   zIapIamResource.SetIamPolicy   s<    %%k4==3G3GHF;;=LlF33r   c                     | j                         }| j                  |      }t        j                  | j                  j
                  | j                  j                  ||||       | j                  ||       y)z.Add IAM policy binding to an IAP IAM resource.N)rB   rP   r   "AddBindingToIamPolicyWithConditionr7   BindingExprr[   )r1   memberrole	conditionrN   rS   s         r   AddIamPolicyBindingz"IapIamResource.AddIamPolicyBinding   s_    ;;=L-F//t}}1166i 	|V,r   c                     | j                         }| j                  |      }t        j                  |||||       | j	                  ||       y)z3Remove IAM policy binding from an IAP IAM resource.)all_conditionsN)rB   rP   r   'RemoveBindingFromIamPolicyWithConditionr[   )r1   rd   re   rf   ri   rN   rS   s          r   RemoveIamPolicyBindingz%IapIamResource.RemoveIamPolicyBinding   sG    ;;=L-F44iH|V,r   N)__name__
__module____qualname____doc__r2   propertyr7   r<   abcabstractmethodr?   rB   rP   rM   r[   rX   rg   rk   r   r   r   r,   r,   G   s    ) ' ' 2 2 	 	 	 	.,
4--r   r,   c                       e Zd ZdZd Zd Zy)IAPWebzIAP IAM project resource.
  c                      y)Nr0   r   r6   s    r   r?   zIAPWeb._Name   s    r   c                     t        | j                        }| j                  j                  d ddj	                  |j
                        it              S )N
projectsIdz
{}/iap_webparams
collection)r*   r0   r#   ParseformatprojectNumberPROJECTS_COLLECTIONr1   r0   s     r   rB   zIAPWeb._Parse   sM    $,,'G==,--g.C.CD
)  + +r   N)rl   rm   rn   ro   r?   rB   r   r   r   rt   rt      s    +r   rt   c                 $    dj                  |       S )Nzappengine-{})r|   )app_ids    r   _AppEngineAppIdr      s    			v	&&r   c                 ,   t         j                  j                         }t        j                  j                  dd| it              }|j                  j                  |j                               }|j                  j                  j                  |      S )z)Returns the application, given a project.NappsIdrx   name)r   AppengineApiClientGetApiClientr   r   r{   APPENGINE_APPS_COLLECTIONr7   AppengineAppsGetRequestrI   r/   appsr&   )r0   
api_clientapplicationrO   s       r   _GetApplicationr      s    #66CCE*""((

G + ) ,+ 77##% 8 ''						#	#G	,,r   c                   4    e Zd ZdZd Zd Z	 	 ddZd Zd Zy)	AppEngineApplicationz+IAP IAM App Engine application resource.
  c                      y)NzApp Engine applicationr   r6   s    r   r?   zAppEngineApplication._Name   s    #r   c                     t        | j                        }| j                  j                  d |j                  t        |j                        dt              S N)r0   iapWebIdrx   )r*   r0   r#   r{   r}   r   	projectIdIAP_WEB_COLLECTIONr   s     r   rB   zAppEngineApplication._Parse   sP    $,,'G==,,'(9(9:
 &  ' 'r   Nc                 Z   t        | j                        }t        j                  j	                         }t        d|j                  |||      }|j                  j                   |j                  j                  di |      }t        j                  j                  | j                  t              }|j                  j                  |j                         |d      }|j                   j"                  j%                  |      }	t'        j(                  |j                   j*                  |	      S )NF)r   )rz   ziap,)r   r   
updateMaskr   )r   r0   r   r   r   _MakeIAPKwargsr   r7   ApplicationIdentityAwareProxyr   r   r{   r   AppengineAppsPatchRequestrI   r/   r   Patchr	   WaitForOperationapps_operations)
r1   enabledoauth2_client_idoauth2_client_secretr   r   
iap_kwargsapplication_updateupdate_request	operations
             r   _SetAppEngineApplicationIapz0AppEngineApplication._SetAppEngineApplicationIap   s   !$,,/K%88EEGJ{ 02FHJ#,,882J22@Z@ 9 B $$**!: + <K  ((BB%%'& C N !!&&,,^<I++J,=,=,M,M,57 7r   c                 (    | j                  d||      S )z(Enable IAP on an App Engine Application.Tr   r1   r   r   s      r   EnablezAppEngineApplication.Enable   s    ++D,<,@B Br   c                 $    | j                  d      S )z)Disable IAP on an App Engine Application.Fr   r6   s    r   DisablezAppEngineApplication.Disable   s    ++E22r   NN)	rl   rm   rn   ro   r?   rB   r   r   r   r   r   r   r   r      s+    $' CG7;7,B3r   r   c                   .     e Zd ZdZ fdZd Zd Z xZS )AppEngineServicez'IAP IAM App Engine service resource.
  c                 <    t         t        |   ||       || _        y r   )superr   r2   
service_id)r1   r   r0   r   	__class__s       r   r2   zAppEngineService.__init__   s    	
D*='B DOr   c                      y)NzApp Engine application servicer   r6   s    r   r?   zAppEngineService._Name   s    +r   c                     t        | j                        }| j                  j                  d |j                  t        |j                        | j                  dt              S N)r0   r   	serviceIdrx   )	r*   r0   r#   r{   r}   r   r   r   IAP_WEB_SERVICES_COLLECTIONr   s     r   rB   zAppEngineService._Parse   sW    $,,'G==,,'(9(9:

 /  0 0r   rl   rm   rn   ro   r2   r?   rB   __classcell__r   s   @r   r   r      s    !,	0r   r   c                   .     e Zd ZdZ fdZd Zd Z xZS )AppEngineServiceVersionz/IAP IAM App Engine service version resource.
  c                 J    t         t        |   ||       || _        || _        y r   )r   r   r2   r   
version_id)r1   r   r0   r   r   r   s        r   r2   z AppEngineServiceVersion.__init__  s#    	
!41-I DO DOr   c                      y)Nz&App Engine application service versionr   r6   s    r   r?   zAppEngineServiceVersion._Name  s    3r   c                     t        | j                        }| j                  j                  d |j                  t        |j                        | j                  | j                  dt              S )N)r0   r   r   	versionIdrx   )
r*   r0   r#   r{   r}   r   r   r   r   $IAP_WEB_SERVICES_VERSIONS_COLLECTIONr   s     r   rB   zAppEngineServiceVersion._Parse  s^    $,,'G==,,'(9(9:	
 8  9 9r   r   r   s   @r   r   r     s    !
4
9r   r   computec                   4     e Zd ZdZ fdZd Zd Zd Z xZS )BackendServicesz%IAP IAM backend services resource.
  c                 <    t         t        |   ||       || _        y r   )r   r   r2   	region_idr1   r   r0   r   r   s       r   r2   zBackendServices.__init__'      	/4)-ADNr   c                      y)Nzbackend servicesr   r6   s    r   r?   zBackendServices._Name+      r   c                 P    | j                   rt        d| j                   S t        S N-r   BACKEND_SERVICESr6   s    r   	_IapWebIdzBackendServices._IapWebId.      ~~($..99r   c                     t        | j                        }| j                         }| j                  j	                  d |j
                  |dt              S r   r*   r0   r   r#   r{   r}   r   r1   r0   
iap_web_ids      r   rB   zBackendServices._Parse4  Q    $,,'G!J==,,"
 &  ' 'r   	rl   rm   rn   ro   r2   r?   r   rB   r   r   s   @r   r   r   #  s    	'r   r   c                   L     e Zd ZdZ fdZd Zd Zd Z	 	 d	dZd Z	d Z
 xZS )
BackendServicez$IAP IAM backend service resource.
  c                 J    t         t        |   ||       || _        || _        y r   )r   r   r2   r   r   r1   r   r0   r   r   r   s        r   r2   zBackendService.__init__D  "    	.$(@DN DOr   c                      y)Nzbackend servicer   r6   s    r   r?   zBackendService._NameI      r   c                 P    | j                   rt        d| j                   S t        S r   r   r6   s    r   r   zBackendService._IapWebIdL  r   r   c                     t        | j                        }| j                         }| j                  j	                  d |j
                  || j                  dt              S r   r*   r0   r   r#   r{   r}   r   r   r   s      r   rB   zBackendService._ParseR  X    $,,'G!J==,,"

 /  0 0r   c                 4    t        j                  t        j                  j                        j
                  } fd} j                  rj                  j                   j                   j                   j                  dt              }|j                  j                  |j                  |j                  |j                               }nmj                  j                   j                  d j                  it               }|j                  j#                  |j                  |j                               }|j%                   |d|      g      }|rN|d   j&                  |j                  j(                  j*                  j,                  urt/        j0                  d	       t3        d
|d   j4                  |||      }	t7        j8                  |d         }
 |j                  j:                  di |	|
_         j                  rB|j                  j=                  |j                  |j                  |j                         |
      }n6|j                  j?                  |j                  |j                         |
      }|j%                   |d|      g      S )Nc                     j                   r#j                  j                  j                  | |fS j                  j                  j                  | |fS r   )r   r/   apitools_clientregionBackendServicesbackendServices)methodrO   holderr1   s     r   MakeRequestz9BackendService._SetBackendServiceIap.<locals>.MakeRequestb  sL    	MM))??
 	
 }},,<<fgMMr   )r0   regionrx   )r0   r   backendServicer0   )r0   r   r&   r   zIAP has been enabled for a backend service that does not use HTTPS. Data sent from the Load Balancer to your VM will not be encrypted.T)r0   r   r   backendServiceResource)r0   r   r   r   r   ) r   ComputeApiHolderr   ReleaseTrackGAr/   r   r   r{   r   r0   *COMPUTE_REGION_BACKEND_SERVICES_COLLECTIONr7   &ComputeRegionBackendServicesGetRequestr   Name#COMPUTE_BACKEND_SERVICES_COLLECTION ComputeBackendServicesGetRequestMakeRequestsprotocolr   ProtocolValueValuesEnumHTTPSr   warningr   r   r   CopyProtoMessageBackendServiceIAP(ComputeRegionBackendServicesPatchRequest"ComputeBackendServicesPatchRequest)r1   r   r   r   r/   r   backend_serviceget_requestobjectsr   replacementr   r   s   `           @r   _SetBackendServiceIapz$BackendService._SetBackendServiceIap^  sQ   **4+<+<+?+?@F]]FN ~~((..
// @ / o OOJJ!)) ''(--/ K k ((..
// 9 / o OODD!))/:N:N:P E k !!;uk#B"CDGGAJ''OO**BBHHI	kk & '  gajnng 02FHJ++GAJ7K7foo77E*EKO~~OO!)) ''(--/!,	 P n II!))(--/!, J .n
 G^ DEFFr   c                 (    | j                  d||      S )z Enable IAP on a backend service.Tr  r   s      r   r   zBackendService.Enable  s    %%d&6&:< <r   c                 $    | j                  d      S )z!Disable IAP on a backend service.Fr  r6   s    r   r   zBackendService.Disable  s    %%e,,r   r   )rl   rm   rn   ro   r2   r?   r   rB   r  r   r   r   r   s   @r   r   r   @  s7    !

0 =A15@GD<-r   r   forwarding_rulec                   4     e Zd ZdZ fdZd Zd Zd Z xZS )ForwardingRulesz%IAP IAM forwarding rules resource.
  c                 <    t         t        |   ||       || _        y r   )r   r  r2   r   r   s       r   r2   zForwardingRules.__init__  r   r   c                      y)Nzforwarding rulesr   r6   s    r   r?   zForwardingRules._Name  r   r   c                 P    | j                   rt        d| j                   S t        S r   r   FORWARDING_RULEr6   s    r   r   zForwardingRules._IapWebId      ~~'88r   c                     t        | j                        }| j                         }| j                  j	                  d |j
                  |dt              S r   r   r   s      r   rB   zForwardingRules._Parse  r   r   r   r   s   @r   r  r    s    	'r   r  c                   4     e Zd ZdZ fdZd Zd Zd Z xZS )ForwardingRulez$IAP IAM forwarding rule resource.
  c                 J    t         t        |   ||       || _        || _        y r   )r   r  r2   r   r   r   s        r   r2   zForwardingRule.__init__  r   r   c                      y)Nzforwarding ruler   r6   s    r   r?   zForwardingRule._Name  r   r   c                 P    | j                   rt        d| j                   S t        S r   r  r6   s    r   r   zForwardingRule._IapWebId  r  r   c                     t        | j                        }| j                         }| j                  j	                  d |j
                  || j                  dt              S r   r   r   s      r   rB   zForwardingRule._Parse  r   r   r   r   s   @r   r  r    s    !

0r   r  	cloud_runc                   4     e Zd ZdZ fdZd Zd Zd Z xZS )	CloudRunszIAP IAM cloud runs resource.
  c                 <    t         t        |   ||       || _        y r   )r   r  r2   r   r   s       r   r2   zCloudRuns.__init__  s    	)T#M7;DNr   c                      y)Nz
cloud runsr   r6   s    r   r?   zCloudRuns._Name  s    r   c                 ,    t         d| j                  S r   	CLOUD_RUNr   r6   s    r   r   zCloudRuns._IapWebId      00r   c                     t        | j                        }| j                         }| j                  j	                  d |j
                  |dt              S r   r   r   s      r   rB   zCloudRuns._Parse  r   r   r   r   s   @r   r  r    s    1	'r   r  c                   4     e Zd ZdZ fdZd Zd Zd Z xZS )CloudRunzIAP IAM cloud run resource.
  c                 J    t         t        |   ||       || _        || _        y r   )r   r%  r2   r   r   r   s        r   r2   zCloudRun.__init__  s"    	(D"=':DN DOr   c                      y)Nz	cloud runr   r6   s    r   r?   zCloudRun._Name  s    r   c                 ,    t         d| j                  S r   r   r6   s    r   r   zCloudRun._IapWebId  r"  r   c                     t        | j                        }| j                         }| j                  j	                  d |j
                  || j                  dt              S r   r   r   s      r   rB   zCloudRun._Parse  r   r   r   r   s   @r   r%  r%    s    !
1
0r   r%  c                 x    | r%|r#|r|j                   st        j                  d       d|i}|r||d<   |r||d<   |S )a  Make IAP kwargs for IAP settings.

  Args:
    is_backend_service: boolean, True if we are applying IAP to a backend
        service.
    existing_iap_settings: appengine IdentityAwareProxy or compute
        BackendServiceIAP, IAP settings.
    enabled: boolean, True if IAP is enabled.
    oauth2_client_id: OAuth2 client ID to use.
    oauth2_client_secret: OAuth2 client secret to use.

  Returns:
    IAP kwargs for appengine IdentityAwareProxy or compute BackendServiceIAP
  zIAP only protects requests that go through the Cloud Load Balancer. See the IAP documentation for important security best practices: https://cloud.google.com/iap/.r   oauth2ClientIdoauth2ClientSecret)r   r   r   )is_backend_serviceexisting_iap_settingsr   r   r   kwargss         r   r   r   #  sY    " W %:%B%BKK A B & /F#7F 	-r   c                   H    e Zd ZdZd Zed        Zed        Zd Zd Z	d Z
y)	IapSettingsResourcez!Class for IAP settings resources.c                     || _         || _        t        |      | _        t	        j
                  t        | j                        | _        t        | j                        | _	        y)zConstructor for IAP setting resource.

    Args:
      release_track: base.ReleaseTrack, release track of command.
      resource_name: resource name for the iap settings.
    N)
r   resource_namer   r"   r   r.   r!   r/   r$   r#   )r1   r   r3  s      r   r2   zIapSettingsResource.__init__F  sM     'D&D"=1D(($2B2BCDK !1!12DMr   c                 .    | j                   j                  S r   r4   r6   s    r   r7   zIapSettingsResource.messagesS  r8   r   c                 B    t        | j                  | j                        S r   r:   r6   s    r   r<   zIapSettingsResource.serviceW  r=   r   c           	         t        j                  |      }d|v r&d|d   v rd|d   d   v rt        j                  d       d|v rd|d   v rt        j                  d       	 t	        j
                  ||      }|S # t        $ r=}t        j                  dj                  |t        j                  |                  d}~ww xY w)	a[  Create an iap settings message from a JSON formatted file.

    Args:
       iap_settings_file_path: Path to iap_setttings JSON file
       iap_settings_message_type: iap settings message type to convert JSON to

    Returns:
       the iap_settings message filled from JSON file
    Raises:
       BadFileException if JSON file is malformed.
    access_settingsoauth_settings
login_hintzlogin_hint setting is not a replacement for access control. Always enforce an appropriate access policy if you want to restrict access to users outside your domain.gcip_settingszEnabling gcip_settings significantly changes the way IAP authenticates users. Identity Platform does not support IAM, so IAP will not enforce any IAM policies for requests to your application.zBIap settings file {0} does not contain properly formatted JSON {1}N)r   	load_pathr   r   r   PyValueToMessageAttributeErrorcalliope_exceptionsBadFileExceptionr|   six	text_type)r1   iap_settings_file_pathiap_settings_message_typeiap_settings_to_parseiap_settings_messagees         r   _ParseIapSettingsFilez)IapSettingsResource._ParseIapSettingsFile[  s     !NN+AB22 56G HH !234DEF 
kk2 	2245FGG	kk%66
#%:    00
N6(#--*:; s   !A9 9	B?8B::B?c                     | j                   j                  | j                        }| j                  j	                  |      S )z$Get the setting for an IAP resource.r   )r7   IapGetIapSettingsRequestr3  r<   GetIapSettingsr1   rO   s     r   GetIapSettingz!IapSettingsResource.GetIapSetting  s4    mm44$:L:L4MG<<&&w//r   c                     | j                  || j                  j                        }| j                  |_        | j                  j                  || j                        }| j                  j                  |      S )z$Set the setting for an IAP resource.)iapSettingsr   )rG  r7   IapSettingsr3  r   IapUpdateIapSettingsRequestr<   UpdateIapSettings)r1   setting_fileiap_settingsrO   s       r   SetIapSettingz!IapSettingsResource.SetIapSetting  sl    --dmm//L **Lmm77 t'9'9 8 G <<))'22r   N)rl   rm   rn   ro   r2   rp   r7   r<   rG  rL  rT  r   r   r   r1  r1  C  sB    )3 ' ' 2 2- ^0
	3r   r1  c                   h     e Zd ZdZd fd	Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZddZd Zd Z xZS )IapTunnelDestGroupResourcez%IAP TCP tunnelDestGroup IAM resource.c                 J    t         t        |   ||       || _        || _        y r   )r   rV  r2   r   
group_name)r1   r   r0   r   rX  r   s        r   r2   z#IapTunnelDestGroupResource.__init__  s#    	
$d4]GLDK DOr   c                 .    t        | j                  d      S )N(projects_iap_tunnel_locations_destGroups)r;   r/   r6   s    r   ResourceServicez*IapTunnelDestGroupResource.ResourceService  s    4;; JKKr   c                      y)Niap_tunneldestgroupsr   r6   s    r   r?   z IapTunnelDestGroupResource._Name  s    !r   c                 Z    | j                   | j                         S | j                         S r   )rX  _ParseWithoutGroupId_ParseWithGroupIdr6   s    r   rB   z!IapTunnelDestGroupResource._Parse  s*    &&((!!##r   c                     t        | j                        j                  }| j                  j	                  d || j
                  | j                  dt              S )N)rw   locationsIddestGroupsIdrx   )r*   r0   r}   r#   r{   r   rX  IAP_TCP_DESTGROUP_COLLECTION)r1   project_numbers     r   r`  z,IapTunnelDestGroupResource._ParseWithGroupId  sP     .<<N==(;; OO

 0  1 1r   c                     t        | j                        j                  | _        | j                  j                  d | j                  | j                  dt              S )N)rw   rb  rx   )r*   r0   r}   re  r#   r{   r   IAP_TCP_LOCATIONS_COLLECTIONr6   s    r   r_  z/IapTunnelDestGroupResource._ParseWithoutGroupId  sR    %dll3AAD==--;;
 0  1 1r   c                 r    | j                   |r|j                  d      ng |r|j                  d      dS g dS )N,)r   cidrsfqdns)rX  split)r1   	cidr_list	fqdn_lists      r   _CreateTunnelDestGroupObjectz7IapTunnelDestGroupResource._CreateTunnelDestGroupObject  s@    )2%)2%  9; r   c                     | j                  ||      }| j                  j                  | j                         j	                         || j
                        }| j                         j                  |      S )zCreates a TunnelDestGroup.)parenttunnelDestGrouptunnelDestGroupId)ro  r7   4IapProjectsIapTunnelLocationsDestGroupsCreateRequestr_  rI   rX  r[  Create)r1   rm  rn  tunnel_dest_grouprO   s        r   ru  z!IapTunnelDestGroupResource.Create  so     99)YOJJ,,.;;=-"oo 	K 	
  !((11r   c                     | j                   j                  | j                         j                               }| j	                         j                  |      S )zDeletes the TunnelDestGroup.r   )r7   4IapProjectsIapTunnelLocationsDestGroupsDeleteRequestrB   rI   r[  DeleterK  s     r   ry  z!IapTunnelDestGroupResource.Delete  sO     	JJ++- 	K 	
 
 !((11r   c                     | j                   j                  | j                         j                               }t	        j
                  | j                         |||dd      S )zYields TunnelDestGroups.)rq  tunnelDestGroupspageSize)
batch_sizelimitfieldbatch_size_attribute)r7   2IapProjectsIapTunnelLocationsDestGroupsListRequestr_  rI   r   YieldFromListr[  )r1   	page_sizer~  list_filterlist_reqs        r   ListzIapTunnelDestGroupResource.List  sa    }}OO((*779 P H ## ' r   c                     | j                   j                  | j                         j                               }| j	                         j                  |      S )zGet TunnelDestGroup.r   )r7   1IapProjectsIapTunnelLocationsDestGroupsGetRequestrB   rI   r[  r&   rK  s     r   r&   zIapTunnelDestGroupResource.Get  sJ    mmMM[[]'') N G !%%g..r   c                     | j                  ||      }| j                  j                  | j                         j	                         ||      }| j                         j                  |      S )zUpdate TunnelDestGroup.)r   rr  r   )ro  r7   3IapProjectsIapTunnelLocationsDestGroupsPatchRequestrB   rI   r[  r   )r1   rm  rn  update_maskrv  rO   s         r   Updatez!IapTunnelDestGroupResource.Update  se     99)YOmmOO[[]'')) P  G !''00r   )r   N)NNN)rl   rm   rn   ro   r2   r[  r?   rB   r`  r_  ro  ru  ry  r  r&   r  r   r   s   @r   rV  rV    sC    -!
L"$
	1122/	1r   rV  )Cro   
__future__r   r   r   rq   apitools.base.pyr   r   googlecloudsdk.api_lib.appr   r	   +googlecloudsdk.api_lib.cloudresourcemanagerr
   googlecloudsdk.api_lib.computer   googlecloudsdk.api_lib.utilr   googlecloudsdk.callioper   r   r>  googlecloudsdk.command_lib.iamr   #googlecloudsdk.command_lib.projectsr   r'   googlecloudsdk.corer   r   r   r@  r!   r   r   r   r~   r   r   r   rd  rg  r   r$   r*   with_metaclassABCMetaobjectr,   rt   r   r   r   r   r   r   r   r   r  r  r  r!  r  r%  r   r1  rV  r   r   r   <module>r     sp     &  ' 
 % ' ; 6 D 7 , ( E 3 E # ) $ 

, &? #-L *$ + = 'O $M B 
BR-'S''V< R-j+^ +'-/3> /3d0~ 0.9n 92  'n ':h-^ h-V $'n ':0^ 0> 	' '40~ 08@U3& U3pc1 c1r   