
    Vh                         d Z ddlmZmZmZ eZdZdZddl	m
Z
mZ ddlmZmZmZmZ 	 ddlmZ edd       Zd	 Zed
        Zd Zd Zd Zd Zedk(  r e        yy# e$ r Y 5w xY w)z)This module Modifies config on Infinibox.    )absolute_importdivisionprint_functiona  
---
module: infini_config
version_added: 2.13.0
short_description:  Modify config on Infinibox
description:
    - This module modifies system config on Infinibox.
author: Wei Wang (@wwang)
options:
  config_group:
    description:
      - Config group
    type: str
    required: true
    choices: [ "core", "ip_config", "iscsi", "limits", "mgmt", "ndoe_interfaces", "overriders", "security", "ssh" ]
  key:
    description:
      - Name of the config
    type: str
    required: true
  value:
    description:
      - Value of the config key
    type: str
    required: false
  state:
    description:
      - Query or modifies config when.
    type: str
    required: false
    default: present
    choices: [ "stat", "present" ]

extends_documentation_fragment:
    - infinibox
z
- name: Set compression setting to true
  infini_config:
    config_group: "mgmt"
    key: "pool.compression_enabled_default"
    value: false
    state: "present"
    user: "{{ user }}"
    password: "{{ password }}"
    system: "{{ system }}"
)AnsibleModulemissing_required_lib)HAS_INFINISDKapi_wrapperinfinibox_argument_spec
get_system)APICommandFailedc           	         t        |       }| j                  d   }| j                  d   }d}d| d| }	 |j                  j                  |      }rO|j                         }|j                  j                  dk(  }	|s|	sd| d| d}
| j                  |

       |S |r|	sy|S # t        $ r%}| j                  d| d| d	| 
       Y d}~|d}~ww xY w)
    Find and return config setting value
    Use disable_fail when we are looking for config
    and it may or may not exist and neither case is an error.
    config_groupkeyNconfig//)pathzCannot  key : msg   zConfiguration for z
 with key z failed)	r   paramsapigetr   	fail_json
get_resultresponsestatus_code)moduledisable_failsystemr   r   resultr   api_responseerrgood_statusr   s              u/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/infinidat/infinibox/plugins/modules/infini_config.py
get_configr(   R   s     F==0L
--
CF\N!C5)DHzz~~4~0 ((*"++773>K&|nJse7KC% M +M  Hw|nE#bFGGHs   B$ $	C-CCc                     | j                   d   }| j                   d   }t        |       }d|||d} | j                  di | y)zReturn config statr   r   F)changedobject_typer   valueN )r   r(   	exit_json)r    r   r   r,   r#   s        r'   handle_statr/   o   sT     ==0L
--
CvE #	F Fv    c                 ~   t        |       }| j                  d   }| j                  d   }| j                  d   }d| d| }|j                         dk(  rd}n|j                         dk(  rd	}	 |j                  j	                  |
       y# t
        $ r(}| j                  d| d| d| d|        Y d}~yd}~ww xY w)r   r   r   r,   r   r   trueTfalseF)r   datazCannot set config group r   z
 to value r   r   N)r   r   lowerr   putr   r   )r    r"   r   r   r,   r   r4   r%   s           r'   
set_configr7      s     F==0L
--
CMM'"E\N!C5)D{{}	'	!j

Dt, j7~U3%zZ_Y``bcfbghiijs   -B 	B<B77B<c                     d}d}| j                   s/t        | d      }t        |        t        |       }||k7  }|rd}nd}| j                  ||       y)	zMake config presentFzConfig unchangedT)r!   zConfig changedzCConfig unchanged since the value is the same as the existing config)r*   r   N)
check_moder(   r7   r.   )r    r*   r   
old_config
new_configs        r'   handle_presentr<      s]    G
CT:
6'

*"CWC
W#.r0   c                    | j                   d   }	 |dk(  rt        |        n&|dk(  rt        |        n| j                  d|        t	        |       }|j                          y# t	        |       }|j                          w xY w)z3Determine which state function to execute and do sostatestatpresentz'Internal handler error. Invalid state: r   N)r   r/   r<   r   r   logout)r    r>   r"   s      r'   execute_staterB      sw    MM'"E	F?i6"#J5'!RSF# F#s   7A$ $Bc           	      X   | j                   d   }| j                   d   }| j                   d   }| j                   d   }t        |      }g d}|dk(  rA|dk(  r<t        |t              s,| j	                  dt        t                      d	| d
| d       ||vr| j	                  d|        yy)zVerify module options are saner>   r   r   r,   	core	ip_configiscsilimitsmgmtndoe_interfaces
overriderssecuritysshr@   z pool.compression_enabled_defaultzValue must be of type z. Invalid value: z of .zConfig_group must be one of N)r   type
isinstancestrr   )r    r>   r   r   r,   vtypegroupss          r'   check_optionsrT      s    MM'"E==0L
--
CMM'"EKE
F 	c%GG%%(ce5FugTRWQXXYZ 6!*6(3	
 "r0   c            	          t               } | j                  dg ddddddddddd	dgd
d       t        | d      }t        s|j	                  t        d             t        |       t        |       y)zMain module functionTrD   )requiredchoicesF)rV   no_logN)rV   defaultr@   r?   )rV   rY   rW   )r   r   r,   r>   )supports_check_mode	infinisdkr   )r
   updater   r   r   r   rT   rB   )argument_specr    s     r'   mainr^      s    +-M)-  ;_  ` $6"'D9"'I6S\J]^		
 =dCF1+>?&&r0   __main__N)F)__doc__
__future__r   r   r   rO   __metaclass__DOCUMENTATIONEXAMPLESansible.module_utils.basicr   r   Fansible_collections.infinidat.infinibox.plugins.module_utils.infiniboxr   r	   r
   r   infinisdk.core.exceptionsr   ImportErrorr(   r/   r7   r<   rB   rT   r^   __name__r-   r0   r'   <module>rj      s    0
 A @#J
 K 	:
  8  j j2/ 
>, zF   		s   A A$#A$