
                             S 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
rS rS rS r " S S\5      rg)zUtils for GKE Hub commands.    )absolute_import)division)print_function)unicode_literals)waiter)	kube_util)
exceptionsa  apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: memberships.hub.gke.io
spec:
  group: hub.gke.io
  scope: Cluster
  names:
    plural: memberships
    singular: membership
    kind: Membership
  versions:
  - name: v1beta1
    served: true
    storage: true
  validation:
    openAPIV3Schema:
      required:
      - spec
      properties:
        metadata:
          type: object
          properties:
            name:
              type: string
              pattern: '^(membership|test-.*)$'
        spec:
          type: object
          properties:
            owner:
              type: object
              properties:
                id:
                  type: string
                  description: Membership owner ID. Should be immutable.zykind: Membership
apiVersion: hub.gke.io/v1beta1
metadata:
  name: membership
spec:
  owner:
    id: projects/{project_id}c                     U R                  5       nUc  gSnUR                  U5      (       d%  [        R                  " SR	                  U5      5      eU[        U5      S $ )a  Returns the project id of the fleet the cluster is a member of.

The Membership Custom Resource stores the project id of the fleet the cluster
is registered to in the `.spec.owner.id` field.

Args:
  kube_client: A KubernetesClient.

Returns:
  a string, the project id
  None, if the Membership CRD or CR do not exist on the cluster.

Raises:
  exceptions.Error: if the Membership resource does not have a valid owner id
Nz	projects/z(Membership .spec.owner.id is invalid: {})GetMembershipOwnerID
startswithr	   Errorformatlen)kube_clientowner_id	id_prefixs      Blib/googlecloudsdk/command_lib/container/fleet/exclusivity_util.pyGetMembershipCROwnerIDr   N   se    " --/()			Y	'	'


299(CE E	#i./	""    c                 V    [         R                  US9nU R                  [        U5        g)zCreates or updates the Membership CRD and CR with the hub project id.

Args:
  kube_client: A KubernetesClient.
  project: The project id of the hub the cluster is a member of.

Raises:
  exceptions.Error: if the Membership CR or CRD couldn't be applied.
)
project_idN)MEMBERSHIP_CR_TEMPLATEr   ApplyMembershipMEMBERSHIP_CRD_MANIFEST)r   projectmembership_cr_manifests      r   ApplyMembershipResourcesr   i   s*     288G8L57MNr   c           
          [         R                  " [        R                  " 5       [	        U 5      S[        R
                  [        R                  [        R                  [        R                  S9u  pU(       d%  [        R                  " SR                  U5      5      eg! [         R                   a    [        R                  " S5      ef = f)zDeletes the Membership CRD.

Due to garbage collection all Membership resources will also be deleted.

Args:
  kube_client: A KubernetesClient.
z%Deleting membership CR in the cluster)pre_start_sleep_msmax_wait_mswait_ceiling_mssleep_msz,Timeout deleting membership CR from cluster.z6Could not delete membership CR from cluster. Error: {}N)r   WaitForr   KubernetesPollerMembershipCRDeleteOperation"NAMESPACE_DELETION_INITIAL_WAIT_MSNAMESPACE_DELETION_TIMEOUT_MS'NAMESPACE_DELETION_MAX_POLL_INTERVAL_MS+NAMESPACE_DELETION_INITIAL_POLL_INTERVAL_MSTimeoutErrorr	   r   r   )r   	succeedederrors      r   DeleteMembershipResourcesr-   x   s    K~~""$#K0/$GG;;!IIFFHI 



@GGNP P 
 
		 K 

I
JJKs   A0B +C
c                   *    \ rS rSrSrS rS rS rSrg)r%      z:An operation that waits for a membership CR to be deleted.c                 :    Xl         SU l        SU l        S U l        g )NF)r   doner+   r,   )selfr   s     r   __init__$MembershipCRDeleteOperation.__init__   s    "DIDNDJr   c                     g)Nz<deleting membership CR> )r2   s    r   __str__#MembershipCRDeleteOperation.__str__   s    %r   c                 ~    U R                   R                  5       nU(       d  gSU;   a  SU l        SU l        gXl        g)zEUpdates this operation with the latest membership CR deletion status.NNotFoundT)r   DeleteMembershipr1   r+   r,   )r2   errs     r   Update"MembershipCRDeleteOperation.Update   s;    



+
+
-C  Sdidnjr   )r1   r,   r   r+   N)	__name__
__module____qualname____firstlineno____doc__r3   r7   r=   __static_attributes__r6   r   r   r%   r%      s    B&r   r%   N)rC   
__future__r   r   r   r   googlecloudsdk.api_lib.utilr   *googlecloudsdk.command_lib.container.fleetr   googlecloudsdk.corer	   r   r   r   r   r-   objectr%   r6   r   r   <module>rJ      sN    " &  % ' . @ *#L P! #6OP8& r   