
                         p   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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Z ej*                  ej,                  j.                  ej,                  j0                  ej,                  j2                         G d dej4                               Zy)z4Command for describing instance's OS inventory data.    )absolute_import)division)unicode_literalsN)base_classes)utils)base)
exceptions)flags)resource_projectorc                   <    e Zd ZdZdZed        Zd Zd Zd Z	d Z
y)	Describea  Describe a Compute Engine virtual instance's OS inventory data.

  *{command}* displays all OS inventory data associated with a Compute
  Engine virtual machine instance.

  ## EXAMPLES

  To see OS inventory of an instance named my-instance, run:

        $ {command} my-instance
  )InstalledPackagesPackageUpdatesc                 |    t         j                  j                  | d       | j                  j	                  d       y )Ndescribe)operation_typea  
          multi(
            InstalledPackages.cos:format=
              "table[box,title='Installed Packages (COS)']
                (Name:sort=1,Version)",
            InstalledPackages.deb:format=
              "table[box,title='Installed Packages (DEB)']
                (Name:sort=1,Arch,Version)",
            InstalledPackages.gem:format=
              "table[box,title='Installed Packages (Gem)']
                (Name:sort=1,Arch,Version)",
            InstalledPackages.googet:format=
              "table[box,title='Installed Packages (GooGet)']
                (Name:sort=1,Arch,Version)",
            InstalledPackages.pip:format=
              "table[box,title='Installed Packages (Pip)']
                (Name:sort=1,Arch,Version)",
            InstalledPackages.rpm:format=
              "table[box,title='Installed Packages (RPM)']
                (Name:sort=1,Arch,Version)",
            InstalledPackages.zypperPatches:format=
              "table[box,title='Installed Patches (Zypper Patch)'](
                Name:sort=1,
                Category,
                Severity,
                Summary:wrap=14)",
            InstalledPackages.wua:format=
              "table[all-box,title='Installed Packages (Windows Update Agent)'](
                Title:sort=1:wrap,
                Categories.list():wrap,
                KBArticleIDs.list():wrap=14,
                SupportURL:wrap=11,
                LastDeploymentChangeTime:wrap=15:label='LAST_DEPLOYMENT')",
            InstalledPackages.qfe:format=
              "table[box,title='Installed Packages (Quick Fix Engineering)']
                (Caption,Description:wrap=15,HotFixID:sort=1,InstalledOn)",
            PackageUpdates.apt:format=
              "table[box,title='Package Updates Available (Apt)']
                (Name:sort=1,Arch,Version)",
            PackageUpdates.gem:format=
              "table[box,title='Package Updates Available (Gem)']
                (Name:sort=1,Arch,Version)",
            PackageUpdates.googet:format=
              "table[box,title='Package Updates Available (GooGet)']
                (Name:sort=1,Arch,Version)",
            PackageUpdates.pip:format=
              "table[box,title='Package Updates Available (Pip)']
                (Name:sort=1,Arch,Version)",
            PackageUpdates.yum:format=
              "table[box,title='Package Updates Available (Yum)']
                (Name:sort=1,Arch,Version)",
            PackageUpdates.zypperPatches:format=
              "table[box,title='Patches Available (Zypper Patch)'](
                Name:sort=1,
                Category,
                Severity,
                Summary:wrap=14)",
            PackageUpdates.wua:format=
              "table[all-box,title='Package Updates Available (Windows Update Agent)'](
                Title:sort=1:wrap,
                Categories.list():wrap,
                KBArticleIDs.list():wrap=14,
                SupportURL:wrap=11,
                LastDeploymentChangeTime:wrap=15:label='LAST_DEPLOYMENT')",
            SystemInformation:format="default"
          )
        )r
   INSTANCE_ARGAddArgumentdisplay_info	AddFormat)parsers    6lib/surface/compute/instances/os_inventory/describe.pyArgszDescribe.Args4   s6    	""6*"E
!! B# B    c                     t         j                  j                  ||j                  t        j                  |j
                              S )N)scope_lister)r
   r   ResolveAsResource	resourcesGetInstanceZoneScopeListerclient)selfholderargss      r   _GetInstanceRefzDescribe._GetInstanceRef|   s@    //55fmmD 0 F Fr   c                    	 |j                   }|j                  }|j                  |j                         |j                  d|j
                        }|j                   j                  |j                   j                  j                  d|fg      d   }|j                  j                  D ]d  }|j                  | j                  v st        j                  t        j                   |j"                        t        j$                  dz        |_        f |j                  j                  S # t&        j(                  $ rG}dt+        j,                  |      v r)dg}	t/        j0                  |	t2        j4                  d	       |d }~ww xY w)
NzguestInventory/)instanceproject	queryPathzoneGetGuestAttributesr       zGThe resource 'guestInventory/' of type 'Guest Attribute' was not found.)i  z[OS inventory data was not found. Make sure the OS Config agent is running on this instance.zCould not fetch resource:)error_message)r    messages)ComputeInstancesGetGuestAttributesRequestNamer'   r)   MakeRequestsapitools_client	instances
queryValueitemskey$_GUEST_ATTRIBUTES_PACKAGE_FIELD_KEYSzlib
decompressbase64	b64decodevalue	MAX_WBITScalliope_exceptionsToolExceptionsix	text_typer   RaiseExceptionr	   OsInventoryNotFoundException)
r!   r"   instance_refr    r-   requestresponseitemeproblemss
             r   !_GetGuestInventoryGuestAttributesz*Describe._GetGuestInventoryGuestAttributes   s[   }}fhBB$$&&&%  	 C "g
 ++MM))335I h %%++$88t@@@tzz*DNNR,?A$* ,
   &&&,, a(
)-

 	335	7 gs    C D$ A D$ $E>7AE99E>c                    t        j                  |      }di i}|D ]<  }|d   }|| j                  v rt        j                  |d         ||<   2|d   |d   |<   > t        j                  t        j
                  |            S )NSystemInformationr5   r;   )r   MakeSerializabler6   jsonloadsdumps)r!   guest_attributesguest_attributes_jsonformatted_guest_attributesguest_attributeguest_attribute_keys         r   _GetFormattedGuestAttributesz%Describe._GetFormattedGuestAttributes   s    .?? #6r!:0+E2 
 I I	I:>**G$;&"#67 $37#; 	##67	! 1 ::djj!;<==r   c                     t        j                  | j                               }| j                  ||      }| j	                  ||      }| j                  |      S )N)r   ComputeApiHolderReleaseTrackr$   rI   rU   )r!   r#   r"   rC   rQ   s        r   RunzDescribe.Run   sU    **4+<+<+>?F''5L BB,,-BCCr   N)__name__
__module____qualname____doc__r6   staticmethodr   r$   rI   rU   rY    r   r   r   r   #   s<    
 *Q&E ENFB>&Dr   r   )r]   
__future__r   r   r   r9   rM   r7   googlecloudsdk.api_lib.computer   r   googlecloudsdk.callioper   r	   r=   ,googlecloudsdk.command_lib.compute.instancesr
   9googlecloudsdk.command_lib.compute.instances.os_inventorygooglecloudsdk.core.resourcer   r?   ReleaseTracksrX   GABETAALPHADescribeCommandr   r_   r   r   <module>rk      s    ; &  '    7 0 ( E > P ; 
 D%%(($*;*;*@*@%%++-VDt## VD-VDr   