
                             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	 ddl
mZ dd	lmZ dd
lmZ ddlmZ  G d dej$                        Zy)z)Command for adding project-wide metadata.    )absolute_import)division)unicode_literals)encoding)base_classes)metadata_utils)base)
exceptions)log)
propertiesc                   >    e Zd ZdZed        Zd Zd Zd Zd Z	d Z
y)	AddMetadataa  Add or update project-wide metadata.

    *{command}* can be used to add or update project-wide
  metadata. Every instance has access to a metadata server that
  can be used to query metadata that has been set through this
  tool. Project-wide metadata entries are visible to all
  instances. To set metadata for individual instances, use
  `gcloud compute instances add-metadata`. For information on
  metadata, see
  [](https://cloud.google.com/compute/docs/metadata)

  Only metadata keys that are provided are mutated. Existing
  metadata entries will remain unaffected.

  If you are using this command to manage SSH keys for your project, please note
  the
  [risks](https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys#risks)
  of manual SSH key management as well as the required format for SSH key
  metadata, available at
  [](https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys)
  c                 2    t        j                  | d       y )NT)required)r   AddMetadataArgs)parsers    0lib/surface/compute/project_info/add_metadata.pyArgszAddMetadata.Args8   s    ""6D9    c                     |j                  t        j                  j                  j                  j                         d      S )Nzcompute.projects)
collection)Parser   VALUEScoreproject	GetOrFail)self	resourcess     r   CreateReferencezAddMetadata.CreateReference<   s9    ??&&002%  ' 'r   c                     |j                   j                  d |j                  j                  di |j	                         fS )NGet )apitools_clientprojectsmessagesComputeProjectsGetRequestAsDict)r   clientproject_refs      r   GetGetRequestzAddMetadata.GetGetRequestA   s@    ""++5FOO55M8J8J8LMO Or   c                     |j                   j                  d |j                  j                  dd|j                  i|j                         fS )NSetCommonInstanceMetadatametadatar"   )r#   r$   r%   /ComputeProjectsSetCommonInstanceMetadataRequestcommonInstanceMetadatar'   )r   r(   r)   replacements       r   GetSetRequestzAddMetadata.GetSetRequestF   sQ    ""++'KFOOKK ($;;($$&() )r   c                 <   t        j                  t        |      t        j                  |            }|j                  }t        j                  |j                  |j                  |j                  |      |_        t        j                  ||j                        ry |S )N)r-   metadata_from_fileexisting_metadata)r   JsonToMessagetypeMessageToJsonr/   r   ConstructMetadataMessager%   r-   r3   MetadataEqual)r   r(   argsexisting
new_objectr4   s         r   ModifyzAddMetadata.ModifyM   s    ''X..x8:J 77(6(O(O22+	)-J% ##$5$.$E$EGr   c                 8   |j                   s!|j                  st        j                  d      t	        j
                  | j                               }|j                  }| j                  |j                        }| j                  ||      }|j                  |g      }| j                  |||d         }|r|d   |k(  r=t        j                  j                  dj!                  |d   j"                               |S |j                  | j%                  |||      g      S )NzHAt least one of [--metadata] or [--metadata-from-file] must be provided.r   z/No change requested; skipping update for [{0}].)r-   r3   compute_exceptionsArgumentErrorr   ComputeApiHolderReleaseTrackr(   r   r   r*   MakeRequestsr=   r   statusPrintformatnamer1   )r   r:   holderr(   r)   get_requestobjectsr<   s           r   RunzAddMetadata.Run]   s   ==!8!8,,  **4+<+<+>?F]]F&&v'7'78K$$V[9K!!;-0GVT71:6J
 z1	jj
;
B
Bajoo  n			FK	<=? ?r   N)__name__
__module____qualname____doc__staticmethodr   r   r*   r1   r=   rK   r"   r   r   r   r      s5    . : :'
O
) ?r   r   N)rO   
__future__r   r   r   apitools.base.pyr   googlecloudsdk.api_lib.computer   r   googlecloudsdk.callioper	   "googlecloudsdk.command_lib.computer
   r?   googlecloudsdk.corer   r   UpdateCommandr   r"   r   r   <module>rX      s<    0 &  ' % 7 9 ( O # *X?$$$ X?r   