
                  	          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Z e
j,                  e
j.                  j0                  e
j.                  j2                        e
j4                   G d dej6                  ej6                  ej8                                      Zy)z0The command to update Config Management Feature.    )absolute_import)division)unicode_literalsN)api_lib)core)base)	resources)command)utils)converta  
    To apply the [fleet-default membership configuration](https://cloud.google.com/kubernetes-engine/fleet-management/docs/manage-features)
    to `MEMBERSHIP_NAME`, run:

    $ {command} --membership=MEMBERSHIP_NAME --origin=FLEET

    To apply a membership configuration as a YAML file, prepare
    [apply-spec.yaml](https://cloud.google.com/anthos-config-management/docs/reference/gcloud-apply-fields#example_gcloud_apply_spec) then run:

      $ {command} --membership=MEMBERSHIP_NAME --config=APPLY-SPEC.YAML --version=VERSION
c                   p    e Zd ZdZdeiZej                  Zej                  Z	e
d        Zd Zd Zd Zd Zy)	ApplyzUpdate a Config Management feature spec.

  Update a membership configuration for the Config Management feature in a
  fleet. This command errors if the Config Management feature is not enabled on
  the fleet.
  EXAMPLESc                     t        j                  |       |j                  ddd      }|j                  ddgd       |j                  d	      }|j                  d
dd       |j                  dd	       y )NTa  Update the membership configuration either to the [fleet-default membership configuration](https://cloud.google.com/kubernetes-engine/fleet-management/docs/manage-features) with `--origin` or to a user-provided configuration with `--config` and `--version`.)requiredmutexhelpz--originFLEETa)  Updates the configuration of the target membership to the current [fleet-default membership configuration](https://cloud.google.com/kubernetes-engine/fleet-management/docs/manage-features). Errors if fleet-default membership configuration is not enabled; see the `enable` command for more details.)choicesr   zVProvide the entire membership configuration to update with `--config` and `--version`.)r   z--configzPath to YAML file that contains the configuration to update the target membership to. The file accepts the [following fields](https://cloud.google.com/anthos-config-management/docs/reference/gcloud-apply-fields).)r   r   z	--versiona  Version of Config Management. Equivalent to the [`spec.version`](https://cloud.google.com/anthos-config-management/docs/reference/gcloud-apply-fields#common) field in the `--config` file. Provides `--config` with a version in the absence of `spec.version`. Cannot specify this flag without `--config`; cannot set both this flag and `spec.version`. See [`spec.version`](https://cloud.google.com/anthos-config-management/docs/reference/gcloud-apply-fields#common) for more details.)r	   AddMembershipResourceArg	add_groupadd_argument)clsparser
spec_groupconfig_groups       6lib/surface/container/fleet/config_management/apply.pyArgsz
Apply.Args>   s    &&v.!!- " J 	E   ''- ( L '   #      c                 J   d | _         t        j                  |ddd      | _        | j                  j                         }|j                  rJ| j                  j                  | j                  j                  j                  j                        |_        n| j                  |j                        }|j                  rO|j                  rCt        j                  j                  dj!                  |j                  |j                              |j                  r|j                  |_        |j                  sW|j"                  | j                  j$                  j&                  j(                  k7  r | j+                  | j                        |_        ||_        | j/                  |       y )NT)prompt
autoselectsearch)typezaCannot set version in multiple flags: --version={} and the version field in --config has value {})_Apply__feature_cache
fleet_baseParseMembership
membershipmessagesMembershipFeatureSpecoriginOriginTypeValueValuesEnumr   parse_config_managementconfigversionr   
exceptionsErrorformat
managementConfigManagementMembershipSpecManagementValueValuesEnumMANAGEMENT_AUTOMATIC_get_backfill_versionconfigmanagement_update_membership)selfargsfeature_speccms       r   Runz	Apply.Runq   s5   D 00Td4DO ==668L{{ MM00}}##77== 1 l ''4b	oo##..4fT\\2::.N
 	
 
\\
jj
--
--
6
6
P
P
e
ef//@
&(l#L)r   c                 \    | j                   | j                         | _         | j                   S )zGets the Config Management feature at most once per command execution.

    Returns:
      Cached Config Management feature.
    )r%   
GetFeature)r;   s    r   _get_feature_cachezApply._get_feature_cache   s+     #!__.dr   c                 N    | j                         }t        j                  ||      S )a3  Get the value the version field in FeatureSpec should be set to.

    Args:
      membership: The full membership  name whose Spec will be backfilled.

    Returns:
      version: A string denoting the version field in MembershipConfig
    Raises: Error, if retrieving FeatureSpec of FeatureState fails
    )rB   r   !get_backfill_version_from_feature)r;   r(   fs      r   r8   zApply._get_backfill_version   s%     	!A221jAAr   c           	         	 |j                   sJt        j                  | | j                  | j                  |      }| j                  | j                  dg|      S | j                  dg| j                  j                  | j                  j                  | j                  |i                  S # t        j                  j                  j                  j                  $ r/}t         j"                  j                  j%                  |d      d}~ww xY w)zUpdate the spec of the target membership to feature_spec.

    Args:
      feature_spec: gkehub API MembershipFeatureSpec to update to.

    Returns:
      Updated feature or membership feature, for projects migrated to v2 by Hub.
    specmembership_specs)membershipSpecsz	{message}N)r+   r   ToV2MembershipFeaturer(   mf_nameUpdateV2Updater)   Feature	hubclientToMembershipSpecsapitoolsr   pyr1   	HttpErrorr   utilHttpException)r;   r=   membershipfeaturees       r   r:   zApply._update_membership   s    B  #99$//4<<
 }}T__vh8IJJ{{./1F1F NN<<>  2G 2
  	
 ==&&00 BLL##11![AABs   AB* AB* *1D
*DD
N)__name__
__module____qualname____doc__r   detailed_helpr   CONFIG_MANAGEMENT_FEATURE_NAMEfeature_namerK   classmethodr   r?   rB   r8   r:    r   r   r   r   /   sR     x(-55,00'0 0d*<	 BBr   r   )r[   
__future__r   r   r   rQ   googlecloudsdkr   r   googlecloudsdk.callioper   *googlecloudsdk.command_lib.container.fleetr	   <googlecloudsdk.command_lib.container.fleet.config_managementr
   r   3googlecloudsdk.command_lib.container.fleet.featuresr&   =googlecloudsdk.command_lib.container.fleet.membershipfeaturesmf_baser   r   ReleaseTracksReleaseTrackALPHABETADefaultUniverseOnlyUpdateCommandCommonr   r`   r   r   <module>rp      s    7 &  '  "  ( @ P N R Y Q
 D%%++T->->-C-CDLBJ$$g&;&;W^^ LB  ELBr   