
    Vh-                     &   d Z ddlmZmZmZ eZdZdZddl	Z	ddl
Z
ddlmZ 	 ddlZdZdZdd	lmZ dd
lmZmZmZ d Zed        Zed        Zed        Zd Zd Zd Zd Zd Zd Z e!dk(  r e         yy# e$ r dZ e
j"                         ZY ew xY w)zIThis module creates or modifies Infinibox registrations on Infinimetrics.    )absolute_importdivisionprint_functiona.  
---
module: infini_infinimetrics
version_added: 2.16.0
short_description: Create (present state) or remove (absent state) an Infinibox registration on an Infinimetrics.
description:
    - Create (present state) or remove (absent state) an Infinibox registration on an Infinimetrics.
author: David Ohlemacher (@ohlemacher)
options:
  ibox_serial:
    description:
      - Infinibox serial number.
    type: str
    required: true
  ibox_url:
    description: Infinibox DNS resolvable hostname or IPv4 address.
    type: str
    required: false
  ibox_readonly_user:
    description:
      - Read only Infinibox user name.
    type: str
    required: false
  ibox_readonly_password:
    description:
      - Read only Infinibox user password.
    type: str
    required: false
  imx_system:
    description:
      - Infinimetrics hostname or IPv4 Address.
    type: str
    required: true
  imx_user:
    description:
      - Infinimetrics user name.
    type: str
    required: true
  imx_password:
    description:
      - Infinimetrics user password.
    type: str
    required: true
  state:
    description:
      - Registers the Infinibox with Infinimetrics, when using state present.
      - For state absent, the Infinibox is disabled on Infinimetrics and will no longer appear on the Infinimetrics UI.
      - Existing Infinibox data is not purged from Infinimetrics.
      - Purging may be executed using the Infinimetrics CLI tool.
    type: str
    required: false
    default: present
    choices: [ "present", "absent" ]
extends_documentation_fragment:
    - infinibox
am  
- name: Register IBOX with Infinimetrics
  infini_infinimetrics:
    infinimetrics_system: infinimetrics
    state: present
    user: admin
    password: secret
    system: ibox001

- name: Deregister IBOX from Infinimetrics
  infini_infinimetrics:
    infinimetrics_system: infinimetrics
    state: absent
    user: admin
    password: secret
    system: ibox001
N)missing_required_libTF)AnsibleModule)api_wrapper
get_systeminfinibox_argument_specc                     d}| j                         D ]9  }t        |      }t        j                  d|      }|s'|j	                  d      } |S  |S )zKSearch for csrfmiddlewaretoken in the response lines. Return token or None.Nz#"csrfmiddlewaretoken" value="(\w+)"   )
iter_linesstrresearchgroup)responsetoken
line_byteslineresults        |/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/infinidat/infinibox/plugins/modules/infini_infinimetrics.pyfind_csrfmiddleware_tokenr   s   sZ    E))+ 
: A4HLLOEL L    c                    | j                   j                  d      }| j                   j                  d      }d| d}| j                   j                  dd      | j                   j                  dd      d}|j                  ||d	
      }|j                  }|dvr,|j                  }d| d| d| d| }	| j	                  |	       t        |      }
|
| j                   j                  dd      | j                   j                  dd      d}dd| j                   j                  d       i}|j                  |||d	      }|j                  dvr2d| d|j                   d|j                   }	| j	                  |	       yy)z3 Log into an IMX (GET and POST) using credentials. ibox_url
imx_systemhttps://z/auth/login/imx_userNimx_password)usernamepasswordF)dataverify   Cannot add Infinibox  to Infinimetrics . Status code: . Text returned: msg)csrfmiddlewaretokenr!   r    refererheadersr"   r#   r%      zCannot log into Infinimetrics paramsgetstatus_codetext	fail_jsonr   post)moduleimx_sessionr   r   pathpayloadget_responser5   r6   r+   r   r"   r/   r   s                 r   	imx_loginr>      s    }}  ,H""<0Jj\.D MM%%j$7MM%%nd;G ??4ge?DL**K%  %hZ/A*_]h\iiz{  {A  BS!%l3E  %MM%%nd;MM%%j$7D 	Xfmm//=>?G gDOH:-.zl/(J^J^I__pqyq~q~p  AS! .r   c                 N   | j                   j                  d      }| j                   j                  d      }| j                   j                  d      }| j                   j                  d      }| j                   j                  d      }d| d}dd| d	i}|j                  ||d
      }	|	j                  }
|
dvr,|	j                  }d| d| d|
 d| }| j	                  |       t        |	      }||||d}|j                  |||d
      }|j                  }
|j                  }|
dvr d| d| d|
 d| }| j	                  |       d|j                  vsd|j                  vr2d| d|j                  vr d| d| d|
 d| }| j	                  |       d|j                  v ryy
)z; Add an Infinibox to an Infinimetrics using an imx_session r   ibox_readonly_useribox_readonly_passwordibox_serialr   r   z/system/add/r-   /Fr/   r#   r$   r&   r'   r(   r)   r*   )api_urlapi_usernameapi_passwordr,   r.   r0   zThe system is already	monitored/system/z/add_progressadd_progressTr2   )r9   r:   r   r@   rA   rB   r   r;   r/   r=   r5   r6   r+   	get_tokenr"   r   s                   r   imx_system_addrL      s    ""<0J**+?@#]]../GH--##M2K}}  ,Hj\.DXj\+G
 ??4?GL**K%  %hZ/A*_]h\iiz{  {A  BS!),7I *.(	D gDOH&&K==D*$%hZ/A*_]h\iiz{  {A  BS! 	 x}}48==8XK=6hmmK%hZ/A*_]h\iiz{  {A  BS!&r   c                 D   | j                   j                  d      }| j                   j                  d      }| j                   j                  d      }d| d| d}dd| di}|j                  ||d	
      }|j                  }|dvr,|j                  }	d| d| d| d|	 }
| j	                  |
       t        |      }d| d| d}|d| dd}|j                  ||d	
      }|j                  }|dvr-|j                  }	d| d| d| d|	 }
| j	                  |
       yy)z@ Remove an Infinibox from an Infinimetrics using an imx_session r   rB   r   r   rI   z/edit/r-   rC   FrD   r$   zCannot remove Infinibox z from Infinimetrics r(   r)   r*   z/remove/)zX-CSRFTokenr-   r0   z from infinimetrics z, Text returned: N)r3   r4   r5   r6   r7   r   delete)r9   r:   r   serialr   r;   r/   r=   r5   r6   r+   rK   r   s                r   imx_system_deleterP      s    ""<0J]]}-F}}  ,Hj\&8DXj\+G
 ??4?GL**K%  (
2FzlRabmann  AE  @F  GS!),7Ij\&:D j\+G !!$!FH &&K*$}}(0DZLP_`k_ll}  C  ~D  ES! %r   c                 4   | j                   j                  d      }| j                   j                  d      }t        j                         }t	        | |       t        | |      }|rd| d| }d}n
d| d| }d}t        ||      } | j                  d
i | y	)z$ Handle the present state parameter r   r   z
Infinibox z added to Infinimetrics Tz# previously added to Infinimetrics Fchangedr+   N )r3   r4   requestssessionr>   rL   dict	exit_json)r9   r   r   r:   is_newly_addedr+   rS   r   s           r   handle_presentrZ      s    ""<0J}}  ,H""$Kfk"#FK8N8*$<ZLI8*$G
|T's+FFvr   c                    | j                   j                  d      }| j                   j                  d      }t        j                         }t	        | |       t        | |       t        dd| d|       } | j                  di | y)	z$ Handle the absent state parameter. r   rB   TzInfinibox serial z% has been removed from Infinimetrics rR   NrT   )r3   r4   rU   rV   r>   rP   rW   rX   )r9   r   rO   r:   r   s        r   handle_absentr\     s    ""<0J]]}-F""$Kfk"fk*x'LZLYF Fvr   c                    | j                   d   }	 |dk(  rt        |        n&|dk(  rt        |        n| j                  d|        t	        |       }|j                          y# t	        |       }|j                          w xY w)zHandle statesstatepresentabsent'Internal handler error. Invalid state: r*   N)r3   rZ   r\   r7   r	   logout)r9   r^   systems      r   execute_staterd      sx    MM'"E	I6"h&!#J5'!RSF# F#s   7A$ $Bc                     g }|D ]#  }| j                   |   r|j                  |       % |r*| j                   d   }d| d| }| j                  |       yy)z* Verify that required params are provided r^   zCannot handle state z due to missing parameters: r*   N)r3   appendr7   )r9   
req_paramsmissing_req_params	req_paramr^   r+   s         r   verify_paramsrj   /  so     1	}}Y'%%i01 g&$UG+GHZG[\S! r   c                     | j                   d   }|dk(  rg d}t        | |       y|dk(  ry| j                  d|        y)z Check option logic r^   r_   )r   r@   rA   r`   ra   r*   N)r3   rj   r7   )r9   r^   rg   s      r   check_optionsrl   ;  sK    MM'"E	Q
fj)	(	FugNOr   c                     t               } | j                  t        t        d      t        dd      t        dd      t        ddd      t        d      t        d      t        dd      t        ddd	g
                   t        | d      }t        s |j                  t        d      t               t        |       t        |       y)z Main T)requiredFN)rn   default)rn   no_logro   )rn   rp   r_   r`   )ro   choices)rB   r   r@   rA   r   r   r   r^   )supports_check_moderU   )r+   	exception)
r
   updaterW   r   HAS_REQUESTSr7   r   HAS_REQUESTS_IMPORT_ERRORrl   rd   )argument_specr9   s     r   mainrx   H  s    +-Md+5$7#UDA#'tT#RT*4(tD9y9h2GH		
 =dCF$Z0/ 	 	

 &&r   __main__)"__doc__
__future__r   r   r   type__metaclass__DOCUMENTATIONEXAMPLESr   	tracebackansible.module_utils.basicr   rU   ru   rv   ImportError
format_excr   Fansible_collections.infinidat.infinibox.plugins.module_utils.infiniboxr   r	   r
   r   r>   rL   rP   rZ   r\   rd   rj   rl   rx   __name__rT   r   r   <module>r      s    P @ @7r( 
  ;%
 L $ 4   "  "F / /d !" !"H(	"
P: zF E  7L 4	 4 4 67s   A5 5BB