B
    `a                 @   s   d dl mZmZmZ eZddgddZdZdZdZ	d d	l
mZ d
dlmZmZmZ dd Zdd Zdd Zdd Zdd Zdd Zedkre  dS )    )absolute_importdivisionprint_functionz1.1ZstableinterfaceZ	certified)metadata_versionstatusZsupported_bya  
module: asset
author:
  - Cameron Hurst (@wakemaster39)
  - Aljaz Kosir (@aljazkosir)
  - Manca Bizjak (@mancabizjak)
  - Miha Plesko (@miha-plesko)
  - Tadej Borovsak (@tadeboro)
short_description: Manage Sensu assets
description:
  - Create, update or delete Sensu Go asset.
  - For more information, refer to the Sensu documentation at
    U(https://docs.sensu.io/sensu-go/latest/reference/assets/).
version_added: 1.0.0
extends_documentation_fragment:
  - sensu.sensu_go.requirements
  - sensu.sensu_go.auth
  - sensu.sensu_go.name
  - sensu.sensu_go.namespace
  - sensu.sensu_go.state
  - sensu.sensu_go.labels
  - sensu.sensu_go.annotations
seealso:
  - module: sensu.sensu_go.asset_info
  - module: sensu.sensu_go.bonsai_asset
options:
  builds:
    description:
      - A list of asset builds used to define multiple artefacts which
        provide the named asset.
      - Required if I(state) is C(present).
    type: list
    elements: dict
    suboptions:
      url:
        description:
          - The URL location of the asset.
        type: str
        required: yes
      sha512:
        description:
          - The checksum of the asset.
        type: str
        required: yes
      filters:
        description:
          - A set of Sensu query expressions used to determine if the asset
            should be installed.
        type: list
        elements: str
      headers:
        description:
          - Additional headers to send when retrieving the asset, e.g. for
            authorization.
        type: dict
a3  
- name: Create a multiple-build asset
  sensu.sensu_go.asset:
    name: sensu-plugins-cpu-checks
    builds:
      - url: https://assets.bonsai.sensu.io/68546e739d96fd695655b77b35b5aabfbabeb056/sensu-plugins-cpu-checks_4.0.0_centos_linux_amd64.tar.gz
        sha512: 518e7c17cf670393045bff4af318e1d35955bfde166e9ceec2b469109252f79043ed133241c4dc96501b6636a1ec5e008ea9ce055d1609865635d4f004d7187b
        filters:
          - entity.system.os == 'linux'
          - entity.system.arch == 'amd64'
          - entity.system.platform == 'rhel'
      - url: https://assets.bonsai.sensu.io/68546e739d96fd695655b77b35b5aabfbabeb056/sensu-plugins-cpu-checks_4.0.0_alpine_linux_amd64.tar.gz
        sha512: b2da25ecd7642e6de41fde37d674fe19dcb6ee3d680e145e32289f7cfc352e6b5f9413ee9b701d61faeaa47b399aa30b25885dbc1ca432c4061c8823774c28f3
        filters:
          - entity.system.os == 'linux'
          - entity.system.arch == 'amd64'
          - entity.system.platform == 'alpine'

- name: Delete an asset
  sensu.sensu_go.asset:
    name: sensu-plugins-cpu-check
    state: absent
a!  
object:
  description: Object representing Sensu asset.
  returned: success
  type: dict
  sample:
    metadata:
      name: check_script
      namespace: default
    builds:
      - sha512: 4f926bf4328f...2c58ad9ab40c9e2edc31b288d066b195b21b
        url: http://example.com/asset.tar.gz
)AnsibleModule   )	argumentserrorsutilsc             C   s   | d dkr| d sdS d S )Nstatepresentbuildsz(builds must include at least one element )paramsr   r   g/home/dcms/DCMS/lib/python3.7/site-packages/ansible_collections/sensu/sensu_go/plugins/modules/asset.pyvalidate_module_paramsu   s    r   c             C   s   t dd | D S )Nc          	   s   sJ   | ]B}| d | dt| di p&i  t| dg p<g fV  qdS )sha512urlheadersfiltersN)get	frozensetitems).0br   r   r   	<genexpr>}   s   z_build_set.<locals>.<genexpr>)set)r   r   r   r   
_build_set|   s    r   c             C   s0   | d krdS t | t |kr dS t| t|kS )NT)lenr   )currentdesiredr   r   r   _do_builds_differ   s
    r"   c             C   s$   t | d |d rdS t| |dS )Nr   T)r"   r   	do_differ)r    r!   r   r   r   r#      s    r#   c             C   s4   t | }| d dkr0dd | d D }||d< |S )Nr   r   c             S   s    g | ]}t j|f|  qS r   )r	   Zget_spec_payloadkeys)r   r   r   r   r   
<listcomp>   s    z%build_api_payload.<locals>.<listcomp>r   )r	   Zget_mutation_payload)r   payloadr   r   r   r   build_api_payload   s
    
r'   c        	      C   s   dddgfg} t | dttdddddd	td
dttddtddtd
ddtdddddd}t|j}|r~|j|d t|jd }t	|jd d|jd }t
|j}y2t|jd ||||jt\}}|j||d W n6 tjk
r } z|jt|d W d d }~X Y nX d S )Nr   r   r   Tauthname	namespacelabelsannotationslistdict)requiredstr)typeelements)r1   )r   r   r   r   )r1   r2   options)r   )required_ifZsupports_check_modeZargument_spec)msgZassets)changedobject)r   r.   r	   Zget_specr   r   Z	fail_jsonZget_sensu_clientr   Zbuild_core_v2_pathr'   syncZ
check_moder#   Z	exit_jsonr
   Errorr0   )	r4   moduler5   clientpathr&   r6   Zasseter   r   r   main   sB    

r>   __main__N)
__future__r   r   r   r1   __metaclass__ZANSIBLE_METADATAZDOCUMENTATIONZEXAMPLESZRETURNZansible.module_utils.basicr   Zmodule_utilsr	   r
   r   r   r   r"   r#   r'   r>   __name__r   r   r   r   <module>   s"   :	4