
    B*                     f    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  G d d	e      Zy
)zBackend service.    )absolute_import)division)unicode_literals)utils)
exceptions)iam_utilc                       e Zd ZdZddZed        Zed        Zd Zd Z	d Z
d	 Zd
 Zd ZddZddZd Zd ZddZd Zd Zd Zd Zy)BackendServicez"Abstracts BackendService resource.Nc                      || _         || _        y N)ref_compute_client)selfr   compute_clients      =lib/googlecloudsdk/api_lib/compute/backend_services/client.py__init__zBackendService.__init__   s    DH)D    c                 .    | j                   j                  S r   )r   apitools_clientr   s    r   _clientzBackendService._client!   s    ///r   c                 .    | j                   j                  S r   )r   messagesr   s    r   	_messageszBackendService._messages%   s    (((r   c                    t        | j                  dd       }|a| j                  j                  d| j                  j                  | j                  j                  || j                  j                               fS | j                  j                  d| j                  j                  | j                  j                  | j                  j                               fS )NregionGetprojectr   backendServicer   r    )
getattrr   r   regionBackendServicesr   &ComputeRegionBackendServicesGetRequestr   NamebackendServices ComputeBackendServicesGetRequestr   r   s     r   _MakeGetRequestTuplez#BackendService._MakeGetRequestTuple)   s    TXXx.Fll00%nnCC((**!% D 23 3 ll**Enn==((**488==? > LM Mr   c                    t        | j                  dd      }|b| j                  j                  d| j                  j                  | j                  j                  || j                  j                         |      fS | j                  j                  d| j                  j                  | j                  j                  | j                  j                         |      fS )z2Makes a location aware backend service patch call.r   NPatch)r   r   r    backendServiceResource)r   r    r,   )
r"   r   r   r#   r   (ComputeRegionBackendServicesPatchRequestr   r%   r&   "ComputeBackendServicesPatchRequest)r   replacementr   s      r   _MakeSetRequestTuplez#BackendService._MakeSetRequestTuple6   s    TXXx.Fll00'nnEE((**!%)4	 F 67 7 ll**Gnn??((**!%)4 @ 67 7r   c                    t        | j                  dd       }|a| j                  j                  d| j                  j                  | j                  j                  || j                  j                               fS | j                  j                  d| j                  j                  | j                  j                  | j                  j                               fS )Nr   Deleter   r!   )
r"   r   r   r#   r   )ComputeRegionBackendServicesDeleteRequestr   r%   r&   #ComputeBackendServicesDeleteRequestr(   s     r   _MakeDeleteRequestTuplez&BackendService._MakeDeleteRequestTupleG   s    TXXx.Fll00(nnFF((**!% G 23 3 ll**Hnn@@((**488==? A LM Mr   c           	      "   t        | j                  dd       }||| j                  j                  d| j                  j                  | j                  j                  |      | j                  j                  || j                  j                               fS | j                  j                  d| j                  j                  | j                  j                  |      | j                  j                  | j                  j                               fS )Nr   	GetHealth)group)resourceGroupReferencer   r   r    )r9   r   r    )r"   r   r   r#   r   ,ComputeRegionBackendServicesGetHealthRequestResourceGroupReferencer   r%   r&   &ComputeBackendServicesGetHealthRequest)r   r8   r   s      r   _MakeGetHealthRequestTuplez)BackendService._MakeGetHealthRequestTupleT   s    TXXx.Fll00+nnII)-)N)N! *O *#((**!% J 23 3 ll**KnnCC)-)N)N! *O *#((**!%	 D 23 3r   c           	      "   t        | j                  dd      }|r|| j                  j                  d| j                  j                  | j                  j                  |      || j                  j                  | j                  j                               fS | j                  j                  d| j                  j                  | j                  j                  |      | j                  j                  | j                  j                               fS )z=Makes a call to set the security policy on a backend service.r   NSetSecurityPolicysecurityPolicy)securityPolicyReferencer   r   r    rB   r   r    )r"   r   r   r#   r   4ComputeRegionBackendServicesSetSecurityPolicyRequestSecurityPolicyReferencer   r%   r&   .ComputeBackendServicesSetSecurityPolicyRequestr   security_policyr   s      r   !MakeSetSecurityPolicyRequestTuplez0BackendService.MakeSetSecurityPolicyRequestTuplef   s     TXXx.F
,,
,
,

..
M
M&*nn&L&L!0 'M '2hh&&!XX]]_ N .	 	 	$$EE$(NN$J$J. %K %0HH$$88==?	 	F 	, r   c                 V   t        | j                  dd       }|rt        j                  dd      | j                  j
                  d| j                  j                  | j                  j                  |      | j                  j                  | j                  j                               fS )Nr   z>Can only set edge security policy for global backend services.SetEdgeSecurityPolicyr@   rC   )r"   r   calliope_exceptionsInvalidArgumentExceptionr   r&   r   2ComputeBackendServicesSetEdgeSecurityPolicyRequestrE   r   r%   rG   s      r   %MakeSetEdgeSecurityPolicyRequestTuplez4BackendService.MakeSetEdgeSecurityPolicyRequestTuple   s    TXXx.F88

JL L
 	$$II$(NN$J$J. %K %0HH$$88==?	 	J 	, r   c                 b    | j                         g}|s| j                  j                  |      S |S r   )r5   r   MakeRequests)r   only_generate_requestrequestss      r   r2   zBackendService.Delete   s2    ,,./H !!..x88Or   c                 l    | j                         g}|s | j                  j                  |      }|d   S |S )z%Fetches the backend service resource.r   )r)   r   rQ   )r   rR   rS   	responsess       r   r   zBackendService.Get   s;    ))+,H &&33H=iq\Or   c                 ^    | j                  |      g}| j                  j                  |       y)z%Patches the backend service resource.N)r0   r   rQ   )r   r/   rS   s      r   SetzBackendService.Set   s)    ))+67H%%h/r   c              #      K   | j                         }g }|j                  D ]O  }| j                  j                  | j	                  |j
                        g|      }|s<|j
                  |d   d Q |rt        j                  |d       yyw)zIssues series of gethealth requests for each backend group.

    Yields:
      {'backend': backend.group, 'status': backend_service.GetHealthResponse}
    r   )backendstatusz%Could not get health for some groups:)error_messageN)r   backendsr   rQ   r=   r8   r   RaiseToolException)r   backend_serviceerrorsrY   	resourcess        r   r7   zBackendService.GetHealth   s      hhjO F"++ &&33**7==9
:FDi 
!--9Q<@@ , 
 GI s   AB1Bc                 d    | j                  |      g}|s| j                  j                  |      S |S )z1Sets the security policy for the backend service.)rI   r   rQ   )r   rH   rR   rS   s       r   r?   z BackendService.SetSecurityPolicy   s4    66GHH !!..x88Or   c                    | j                   j                         dk(  rt| j                  j                  j                  }| j                  j
                  j                  | j                   j                         | j                   j                        }n| j                   j                         dk(  r| j                  j                  j                  }| j                  j
                  j                  | j                   j                         | j                   j                  | j                   j                        }| j                  j                  dfg      d   S )z8Get the IAM policy for a Compute Engine backend service.compute.backendServices)resourcer   compute.regionBackendServices)rd   r   r   GetIamPolicyr   )r   
Collectionr   r   r&   r   )ComputeBackendServicesGetIamPolicyRequestr%   r   r#   /ComputeRegionBackendServicesGetIamPolicyRequestr   rQ   )r   servicerequests      r   rf   zBackendService.GetIamPolicy   s   xx 99$$44DDg$$--WW88==?DHH,<,< X >g				"A	A$$44JJg$$--]]88==?(("" ^ $g ,,w.P ./ 0013 3r   c                    | j                   j                         dk(  r| j                  j                  j                  }| j                  j
                  j                  | j                   j                         | j                   j                  | j                  j
                  j                  |            }n| j                   j                         dk(  r| j                  j                  j                  }| j                  j
                  j                  | j                   j                         | j                   j                  | j                   j                  | j                  j
                  j                  |            }| j                  j                  dfg      d   }t        j                   | j                   j                         d       |S )	z@Set the IAM policy binding for a Compute Engine backend service.rc   )policy)rd   r   globalSetPolicyRequestre   )rd   r   r   regionSetPolicyRequestSetIamPolicyr   zbackend service)r   rg   r   r   r&   r   )ComputeBackendServicesSetIamPolicyRequestr%   r   GlobalSetPolicyRequestr#   /ComputeRegionBackendServicesSetIamPolicyRequestr   RegionSetPolicyRequestrQ   r   LogSetIamPolicy)r   rm   rj   rk   results        r   rp   zBackendService.SetIamPolicy   sl   xx 99$$44DDg$$--WW88==?((""!%!5!5!>!>!!!0	 X 2g
 
			"A	A$$44JJg$$--]]88==?((""!%!5!5!>!>!!!0 ^ 2g !!...181: 0; <<=?FTXX]]_.?@Mr   c                     | j                         }t        j                  | j                  j                  |||       | j                  |      S )z>Compute Engine backend service add iam policy binding request.)rf   r   AddBindingToIamPolicyr   Bindingrp   r   memberrolerm   s       r   AddIamPolicyBindingz"BackendService.AddIamPolicyBinding   s?     F""4>>#9#9664PV$$r   c                 r    | j                         }t        j                  |||       | j                  |      S )zACompute Engine backend service remove iam policy binding request.)rf   r   RemoveBindingFromIamPolicyrp   rz   s       r   RemoveIamPolicyBindingz%BackendService.RemoveIamPolicyBinding   s3     F''=V$$r   r   )F) F)__name__
__module____qualname____doc__r   propertyr   r   r)   r0   r5   r=   rI   rO   r2   r   rW   r7   r?   rf   rp   r}   r    r   r   r
   r
      s    ** 0 0 ) )M7"M3$4"0
 ID3,%%r   r
   N)r   
__future__r   r   r   googlecloudsdk.api_lib.computer   googlecloudsdk.callioper   rL   googlecloudsdk.command_lib.iamr   objectr
   r   r   r   <module>r      s*     &  ' 0 E 3b%V b%r   