
    *                        d 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dZd Z ej                   ej"                  j$                         G d dej&                               Z ej                   ej"                  j*                         G d de             Z ej                   ej"                  j.                         G d de             Zee_        y)zBCommand for updating access configs for virtual machine instances.    )absolute_import)division)unicode_literals)base_classes)base)
exceptions)flags)logz
        *{command}* is used to update access configurations for network
        interfaces of Compute Engine virtual machines. IPv4 and IPv6 access
        configurations cannot be updated together.
        a  
    To update public PTR record in IPv4 access config in network interface 'nic0' of an instance, run:

      $ {command} example-instance --network-interface=nic0 --zone=us-central1-b           --public-ptr --public-ptr-domain=exampledomain.com.

    To update public PTR record in IPv6 access config in default network interface 'nic0' of an instance, run:

      $ {command} example-instance --zone=us-central1-b           --ipv6-public-ptr-domain=exampledomain.com.
  )DESCRIPTIONEXAMPLESc                 ,   t         j                  j                  |        t        j                  |        t        j                  | d       t        j
                  |        |rt        j                  | d       |rt        j                  | dd       yy)z*Register parser args common to all tracks.F)instanceT)r   
for_updateN)r	   INSTANCE_ARGAddArgumentAddNetworkInterfaceArgsAddPublicPtrArgsAddIpv6PublicPtrArgsAddPublicDnsArgsAddNetworkTierArgs)parsersupport_public_dnssupport_network_tiers      5lib/surface/compute/instances/update_access_config.py_Argsr   1   sq       ('%0V$	6E2	VeE     c                   R    e Zd ZdZdZdZed        Zd Zd Z	d Z
d Zd Zd	 Zd
 Zy)UpdateAccessConfigInstances=Update a Compute Engine virtual machine access configuration.Fc                 H    t        || j                  | j                         y )N)r   r   )r   _support_public_dns_support_network_tier)clsr   s     r   Argsz UpdateAccessConfigInstances.ArgsE   s    	22 668r   c                 l    t         j                  j                  ||t        j                  |            S )N)scope_lister)r	   r   ResolveAsResourceGetInstanceZoneScopeLister)selfclient	resourcesargss       r   CreateReferencez+UpdateAccessConfigInstances.CreateReferenceL   s4    //ie&F&Fv&N 0 P Pr   c                     |j                   j                  |j                   j                  j                  j                        S N)type)messagesAccessConfigTypeValueValuesEnumONE_TO_ONE_NATr)   r*   s     r   CreateV4AddressConfigz1UpdateAccessConfigInstances.CreateV4AddressConfigP   s9    ??''__))==LL ( N Nr   c                     |j                   j                  |j                   j                  j                  j                        S r/   )r1   r2   r3   DIRECT_IPV6r5   s     r   CreateV6AddressConfigz1UpdateAccessConfigInstances.CreateV6AddressConfigT   s9    ??''__))==II ( K Kr   c                     |j                   j                  d |j                  j                  di |j	                         fS )NGet )apitools_client	instancesr1   ComputeInstancesGetRequestAsDict)r)   r*   instance_refs      r   GetGetRequestz)UpdateAccessConfigInstances.GetGetRequestX   s?    "",,e6FOO66O9L9L9NOQ Qr   c           	          |j                   j                  d|j                  j                  |j                  |j
                  ||j                  |j                        fS )NUpdateAccessConfig)r   networkInterfaceaccessConfigprojectzone)r=   r>   r1   )ComputeInstancesUpdateAccessConfigRequestr   network_interfacerG   rH   )r)   r*   r,   rA   access_configs        r   GetUpdateRequestz,UpdateAccessConfigInstances.GetUpdateRequest\   s]    "",,.BOOEE%..!%!7!7*$,,!&& F () )r   c                    d }| j                   r|j                  rd}n|j                  rd}d }|j                  rd}n|j                  rd}d }|j
                  rd}n|j                  rd}||t        j                  dd      | j                   r|| j                  |      }||_
        |S |;| j                  |      }||_        |j                  dn|j                  }||_        |S |4| j                  |      }|j
                  dn|j
                  }||_        |S | j                  rS|j                   G| j                  |      }|j"                  j$                  j'                  |j                         |_        |S y )NTFz--ipv6-public-ptr-domainzLCannot update --public-ptr-domain and --ipv6-public-ptr-domain at same time. )r!   
public_dnsno_public_dns
public_ptrno_public_ptripv6_public_ptr_domainno_ipv6_public_ptrr   InvalidArgumentExceptionr6   setPublicDnssetPublicPtrpublic_ptr_domainpublicPtrDomainNamer9   r"   network_tierr1   r2   NetworkTierValueValuesEnumnetworkTier)	r)   r*   r,   originalset_public_dnsset_ptrset_ipv6_ptrrK   new_ptrs	            r   Modifyz"UpdateAccessConfigInstances.Modifyf   s   N	Gg			gL""l		 	 l 8//
$
X 
 N$>008m#1m 008m#*m ,,4$:P:Pg*1m'008m119t?Z?Zg*1m'!!d&7&7&C008m
//
&
&
A
A!  r   c                    t        j                  |       t        j                  |       | j                  rt        j                  |       | j
                  rt        j                  |       t        j                  | j                               }|j                  }| j                  ||j                  |      }| j                  ||      }|j                  |g      }| j                  |||d         }|=t         j"                  j%                  dj'                  |d   j(                               |S |j                  | j+                  ||||      g      S )Nr   z/No change requested; skipping update for [{0}].)requests)r	   ValidatePublicPtrFlagsValidateIpv6PublicPtrFlagsr!   ValidatePublicDnsFlagsr"   ValidateNetworkTierArgsr   ComputeApiHolderReleaseTrackr*   r-   r+   rB   MakeRequestsrb   r
   statusPrintformatnamerL   )r)   r,   holderr*   rA   get_requestobjectsnew_access_configs           r   RunzUpdateAccessConfigInstances.Run   s+   	  &	$$T*""4(!!##D)**4+<+<+>?F]]F''0@0@$GL$$V\:K!!;-0GFD'!*=  	jjHOO
!*// nfdL:KL)  r   N)__name__
__module____qualname____doc__r!   r"   classmethodr$   r-   r6   r9   rB   rL   rb   rt   r<   r   r   r   r   >   sK    E8 8PNKQ)3jr   r   c                       e Zd ZdZdZdZy)UpdateAccessConfigInstancesBetar   FNru   rv   rw   rx   r!   r"   r<   r   r   r{   r{      s    Er   r{   c                       e Zd ZdZdZdZy) UpdateAccessConfigInstancesAlphar   TNr|   r<   r   r   r~   r~      s    Er   r~   N)rx   
__future__r   r   r   googlecloudsdk.api_lib.computer   googlecloudsdk.callioper   r   ,googlecloudsdk.command_lib.compute.instancesr	   googlecloudsdk.corer
   DETAILED_HELPr   ReleaseTracksrj   GAUpdateCommandr   BETAr{   ALPHAr~   detailed_helpr<   r   r   <module>r      s    I &  ' 7 ( . > #	
	,
F D%%(()v$"4"4 v *vr D%%**+ &A   ,  D%%++,'B  - -:  )r   