
    Vh&                         d dl mZmZmZ eZdZdZd dlZd dl	Z	dZ
	 d dlZdZd dlmZ d dlmZmZ d d	lmZ  G d
 de      Zd Zedk(  r e        yy# e$ r  e	j                         Z
dZY Jw xY w)    )absolute_importdivisionprint_functiona  
---
module: rabbitmq_binding
author: Manuel Sousa (@manuel-sousa)

short_description: Manage rabbitMQ bindings
description:
  - This module uses rabbitMQ REST APIs to create / delete bindings.
requirements: [ "requests >= 1.0.0" ]
options:
    state:
      description:
        - Whether the bindings should be present or absent.
      type: str
      choices: [ "present", "absent" ]
      default: present
    name:
      description:
        - source exchange to create binding on.
      type: str
      required: true
      aliases: [ "src", "source" ]
    destination:
      description:
        - destination exchange or queue for the binding.
      type: str
      required: true
      aliases: [ "dst", "dest" ]
    destination_type:
      description:
        - Either queue or exchange.
      type: str
      required: true
      choices: [ "queue", "exchange" ]
      aliases: [ "type", "dest_type" ]
    routing_key:
      description:
        - routing key for the binding.
      type: str
      default: "#"
    arguments:
      description:
        - extra arguments for exchange. If defined this argument is a key/value dictionary
      type: dict
      required: false
      default: {}
extends_documentation_fragment:
  - community.rabbitmq.rabbitmq

a  
- name: Bind myQueue to directExchange with routing key info
  community.rabbitmq.rabbitmq_binding:
    name: directExchange
    destination: myQueue
    type: queue
    routing_key: info

- name: Bind directExchange to topicExchange with routing key *.info
  community.rabbitmq.rabbitmq_binding:
    name: topicExchange
    destination: topicExchange
    type: exchange
    routing_key: '*.info'
NTF)parse)AnsibleModulemissing_required_lib)rabbitmq_argument_specc                   f    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zy)RabbitMqBindingc           
      T   || _         | j                   j                  d   | _        | j                   j                  d   | _        | j                   j                  d   | _        | j                   j                  d   | _        | j                   j                  d   | _        | j                   j                  d   | _        | j                   j                  d   | _        | j                   j                  d   | _	        | j                   j                  d	   d
k(  rdnd| _
        | j                   j                  d   | _        | j                   j                  d   | _        | j                   j                  d   | _        | j                   j                  d   | _        | j                   j                  d   | _        dj!                  | j                  | j
                  | j                        | _        dj!                  | j"                  t%        j&                  | j                  d      t%        j&                  | j                  d      | j                  t%        j&                  | j                  d            | _        d| j                   j                  d   d| _        | j                  | j                  f| _        t.        | _        ddd| _        ddd| _        | j0                  j7                  | j(                  | j,                  | j                  | j                  | j                  f      | _        y)z 
        :param module:
        name
login_userlogin_password
login_host
login_portlogin_protocolvhostdestinationdestination_typequeueqerouting_key	argumentsca_certclient_cert
client_keyz{0}://{1}:{2}/api/bindingsz{0}/{1}/e/{2}/{3}/{4} )safeF)changedr   T)   i  )      authverifycertN)moduleparamsr   r   r   r   r   r   r   r   r   r   r   r&   r'   keyformatbase_urlurllib_parsequoteurlresultauthenticationrequestsrequesthttp_check_stateshttp_actionable_statesget
api_result)selfr(   s     w/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/rabbitmq/plugins/modules/rabbitmq_binding.py__init__zRabbitMqBinding.__init___   s    KK&&v.	++,,\:"kk001AB++,,\:++,,\:"kk001AB[[''0
;;--m<'+{{'9'9:L'MQX'X^a;;--m<++K8kk((3KK&&}5	;;%%l34;;D<O<O<@OO<@OOM +11$--2>2D2DTZZVX2Y2>2D2DTYYUW2X262G2G2>2D2DTEUEU\^2_	a KK&&v.

 OO
  "

 '
# ,,**488$:M:MVZVaVaimirirtxt|t|h}*~    c                 d    | j                          | j                          | j                          y
        :return:
        N)check_presence
check_modeaction_moder8   s    r9   runzRabbitMqBinding.run   s&     	r;   c                 F    | j                         r| j                          yyr=   )check_should_throw_failfailrB   s    r9   r?   zRabbitMqBinding.check_presence   s     '')IIK *r;   c                     | j                   j                  d   dk(  r| j                         syy| j                   j                  d   dk(  r| j                         ryy)r>   statepresentTabsentF)r(   r)   
is_presentrB   s    r9   change_requiredzRabbitMqBinding.change_required   sV     ;;g&)3??$  [[(H4 r;   c                     | j                   j                         D ])  }|d   | j                  k(  s|d   | j                  k(  s) y y)r>   r   r   TFr7   jsonr   r   r8   bindings     r9   rK   zRabbitMqBinding.is_present   sL     ++- 	G{#t~~5'-:PTXTdTd:d	 r;   c                 f   | j                   j                  r| j                  }| j                         |d<   | j	                         r| j
                  j                         n| j
                  j                  |d<   | j                   j                  d   |d<    | j                   j                  di | yy)r>   r    detailsr   N )
r(   r@   r0   rL   rK   r7   rO   textr)   	exit_jsonr8   r0   s     r9   r@   zRabbitMqBinding.check_mode   s     ;;!![[F $ 4 4 6F9:>//:K 4 4 6QUQ`Q`QeQeF9"&++"4"4["AF;!DKK!!+F+ "r;   c                 J    | j                   j                  | j                  v ryyr>   TF)r7   status_coder4   rB   s    r9   check_reply_is_correctz&RabbitMqBinding.check_reply_is_correct   s"     ??&&$*@*@@r;   c                 F    | j                         s| j                         syyrY   )rK   r[   rB   s    r9   rE   z'RabbitMqBinding.check_should_throw_fail   s       ..0r;   c                    | j                   }| j                         r| j                  j                  d   dk(  r| j	                          | j                  j                  d   dk(  r| j                          | j                         r| j                          d|d<   | j                  j                  d   |d<    | j                  j                  d	i | yd|d<    | j                  j                  d	i | y)
r>   rH   rI   rJ   Tr    r   FNrT   )	r0   rL   r(   r)   createremoveaction_should_throw_failrF   rV   rW   s     r9   rA   zRabbitMqBinding.action_mode   s     !{{!!'*i7{{!!'*h6,,.		 $F9$(KK$6$6}$EF=!!DKK!!+F+ %F9!DKK!!+F+r;   c                 J    | j                   j                  | j                  v ryyrY   )r7   rZ   r5   rB   s    r9   action_reply_is_correctz'RabbitMqBinding.action_reply_is_correct   s"     ??&&$*E*EEr;   c                 &    | j                         syyrY   )rb   rB   s    r9   r`   z(RabbitMqBinding.action_should_throw_fail   s     ++-r;   c                    | j                   j                  | j                  | j                  | j                  | j
                  | j                  fddit        j                  | j                  | j                  d            | _        y)r>   zcontent-typezapplication/json)r   r   )r%   r&   r'   headersdataN)r3   postr/   r1   r&   r'   r*   rO   dumpsr   r   r7   rB   s    r9   r^   zRabbitMqBinding.create   so     ,,++DHH151D1D37;;26))TXX1F5CEW4X15?C?O?O=A^^=. 2/ , 0r;   c                     | j                   j                         D ].  }|d   | j                  k(  s|d   | j                  k(  s)|d   c S  y)r>   r   r   properties_keyNrN   rP   s     r9   get_properties_keyz"RabbitMqBinding.get_properties_key   sU     ++- 	1G{#t~~5'-:PTXTdTd:d/00	1 r;   c                     | j                         }dj                  | j                  |      }| j                  j	                  || j
                  | j                  | j                  | j                  f      | _	        y)r>   z{0}/{1}r$   N)
rk   r+   r/   r3   deleter1   r&   r'   r*   r7   )r8   rj   r/   s      r9   r_   zRabbitMqBinding.remove  sg     002txx8,,--c8K8KTXT_T_gkgpgprvrzrzf{-|r;   c                     | j                   j                  d| j                  j                  | j                  j                         y)r>   zUnexpected reply from API)msgstatusrS   N)r(   	fail_jsonr7   rZ   rU   rB   s    r9   rF   zRabbitMqBinding.fail  s8     	+??..OO(( 	 	
r;   N)__name__
__module____qualname__r:   rC   r?   rL   rK   r@   r[   rE   rA   rb   r`   r^   rk   r_   rF   rT   r;   r9   r   r   ^   sP    ,\
	,,&0}
r;   r   c                     t               } | j                  t        t        dddgd      t        dddgd      t        dd	d
gd      t        dddgddgd      t        ddd      t        t               d                   t        | d      }t        s |j                  t        d      t               t        |      j                          y )NrI   rJ   str)defaultchoicestypeTsrcsource)requiredaliasesry   dstdestry   	dest_typer   exchange)r|   r}   rx   ry   #F)rw   ry   no_logdict)rw   ry   )rH   r   r   r   r   r   )argument_specsupports_check_moder2   )ro   	exception)
r	   updater   r   HAS_REQUESTSrq   r   REQUESTS_IMP_ERRr   rC   )r   r(   s     r9   mainr     s    *,My9h2GeTteX->UKdUFO%P!4&+9NY`blXm',.SuUC467	

 DQF1*=IYZF!r;   __main__)
__future__r   r   r   ry   __metaclass__DOCUMENTATIONEXAMPLESrO   	tracebackr   r2   r   ImportError
format_exc%ansible.module_utils.six.moves.urllibr   r-   ansible.module_utils.basicr   r   Dansible_collections.community.rabbitmq.plugins.module_utils.rabbitmqr	   objectr   r   rr   rT   r;   r9   <module>r      s    A @1f    L
 H J gy
f y
x", zF w  +y++-Ls   A A-,A-