
                         d   d Z ddlmZ ddlmZ ddlmZ ddl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Z ej,                  ej.                  j0                  ej.                  j2                  ej.                  j4                         G d dej6                               Zy)z@Command to show Cluster Ugprade Feature information for a Fleet.    )absolute_import)division)unicode_literalsN)base)flags)	arg_utils)
exceptions)log)timesclusterupgradec                       e Zd ZdZ ej                  ddd      ZeZed        Z	d Z
ed        Zed        Zed	        Zd
 Zed        Zd Zy)DescribezGDescribe the clusterupgrade feature for a fleet within a given project.z}          Describe the Fleet clusterupgrade feature used for configuring
          fleet-based rollout sequencing.
          z{          To view the cluster upgrade feature information for the current fleet, run:

              $ {command}
          )DESCRIPTIONEXAMPLESc                 N    t        j                  |       }|j                          y )N)clusterupgrade_flagsClusterUpgradeFlagsAddShowLinkedClusterUpgrade)parserr   s     6lib/surface/container/fleet/clusterupgrade/describe.pyArgszDescribe.Args9   s     44V<E	%%'    c                 |    t        j                  |dd      }| j                  |      }| j                  |||      S )Nz	--projectT)use_defaultsproject)r   GetFromNamespace
GetFeatureGetFleetClusterUpgradeInfo)selfargsr   features       r   RunzDescribe.Run>   s;    (({NGoogo.G**7GTBBr   c                     | S )z'Extracts the project ID from the fleet. )fleets    r   GetProjectIDFromFleetzDescribe.GetProjectIDFromFleetC   s	     Lr   c                 L   | j                   <| j                   j                  }|$t        j                  |      | j                   _        | j                  D ]L  }|j                   |j                   j                  }|)t        j                  |      |j                   _        N | S )z@Formats display strings for all cluster upgrade duration fields.)postConditionssoakingr   DisplayDurationgkeUpgradeOverrides)cluster_upgrade_specdefault_soakingoverrideoverride_soakings       r   FormatDurationszDescribe.FormatDurationsH   s     **6,;;CCo		$6>6N6N7
++3 )<<		 	 	,#22::',4,D,D-(
!
!
)	 =  r   c                     t        j                  |       }t        j                  |      }t        j                  dd|      j                         S )z0Returns the display string for a duration value.z[-PT] )r   ParseDurationFormatDurationresublower)proto_duration_stringdurationiso_durations      r   r+   zDescribe.DisplayDurationZ   sA     ""#89H''1L66'2|,2244r   c                     |j                  d      r|j                  r| j                  ||      S t        j	                  ||      S )@Gets Cluster Upgrade Feature information for the provided Fleet.show_linked_cluster_upgrade)IsKnownAndSpecifiedr>   GetLinkedClusterUpgradesr   GetClusterUpgradeInfo)r    r&   r"   r!   s       r   r   z#Describe.GetFleetClusterUpgradeInfoa   sB     	  !>?,,**5'::))%99r   c                 (   |j                   j                  }|s&dj                  |       }t        j                  |      | t
        j                  |      d}|j                  /|j                  j                  |j                  j                  |d<   |S )r=   z8Cluster Upgrade feature is not configured for Fleet: {}.)r&   specstate)rC   r   formatr	   Errorr   r1   rD   )r&   r"   
fleet_specmsgress        r   rA   zDescribe.GetClusterUpgradeInfoj   s     ,,JGOO
c S!! ((4C }} W]]%A%A%M]]11c'lJr   c                     	 t         j                  |      t        |g      	 	fd 	fdt         j                  |      } |      dd } |      dd }||gz   |z   S )zAGets Cluster Upgrade Feature information for the entire sequence.c                    | j                  dd      }|r|j                  nd}|s| gS |d   }|v r| gS j                  |       t        j	                  |      }|	k(  r
nj                  |      }	 t        j                  ||      } |      | gz   S # t        j                  $ r"}t        j                  |       | gcY d}~S d}~ww xY w)z5Recursively gets information for the upstream Fleets.rC   Nr   r   )getupstreamFleetsaddr   r'   r   rA   r	   rF   r
   warning)cluster_upgradeupstream_specupstream_fleetsupstream_fleetupstream_fleet_projectupstream_featureupstream_cluster_upgradee_UpTheStreamcurrent_projectr"   r    visiteds           r   rX   z7Describe.GetLinkedClusterUpgrades.<locals>._UpTheStream   s    %))&$7m8E444o   'q)n	7	"  kk.!'==nM $6 '=> 
!#+#A#A,$
  236GGG  !A  !s   5B C*CCCc                 ,   | j                  dd      }|r|j                  nd}|s| gS |d   }|v r| gS j                  |       t        j	                  |      }|k(  r	n
j                  |      }t        j                  ||      }| g |      z   S )z7Recursively gets information for the downstream Fleets.rD   Nr   r   )rL   downstreamFleetsrN   r   r'   r   rA   )rP   downstream_statedownstream_fleetsdownstream_fleetdownstream_scope_projectdownstream_featuredownstream_cluster_upgrade_DownTheStreamrY   r"   r    rZ   s          r   rc   z9Describe.GetLinkedClusterUpgrades.<locals>._DownTheStream   s    (,,Wd;/?

+
+T     +1-	W	$  kk"#!)!?!?
"
 &8 '?@ 
 $,#A#A
.$  0J!KKKr   N   )r   r'   setrA   )
r    r&   r"   current_cluster_upgradeupstream_cluster_upgradesdownstream_cluster_upgradesrc   rX   rY   rZ   s
   ` `   @@@@r   r@   z!Describe.GetLinkedClusterUpgrades|   s     44U;O5'lGH H>L L> '<<UGL ,-D Ecr J"01H"I!""M!"
#	$
%	&r   N)__name__
__module____qualname____doc__
frozendictdetailed_helpCLUSTER_UPGRADE_FEATUREfeature_namestaticmethodr   r#   r'   r1   r+   r   rA   r@   r%   r   r   r   r   %   s     P'*''
) 
- ),( (C
      " 5 5:  "Kr   r   )rm   
__future__r   r   r   r6   rn   googlecloudsdk.callioper   9googlecloudsdk.command_lib.container.fleet.clusterupgrader   r   3googlecloudsdk.command_lib.container.fleet.featuresfeature_base$googlecloudsdk.command_lib.util.apisr   googlecloudsdk.corer	   r
   googlecloudsdk.core.utilr   rp   ReleaseTracksReleaseTrackALPHABETAGADescribeCommandr   r%   r   r   <module>r      s     G &  ' 	  ( c T : * # * +  T..33T5F5F5I5I_|++ __r   