
    Vh$                     |    d dl mZmZmZ eZdZdZdZd dl	Z	d dl
Z
d dlmZ d Zd Zd	 Zd
 Zd Zedk(  r e        yy)    )absolute_importdivisionprint_functiona  
module: installp
author:
  - Kairo Araujo (@kairoaraujo)
short_description: Manage packages on AIX
description:
  - Manage packages using 'installp' on AIX.
extends_documentation_fragment:
  - community.general.attributes
attributes:
  check_mode:
    support: full
  diff_mode:
    support: none
options:
  accept_license:
    description:
      - Whether to accept the license for the package(s).
    type: bool
    default: false
  name:
    description:
      - One or more packages to install or remove.
      - Use V(all) to install all packages available on informed O(repository_path).
    type: list
    elements: str
    required: true
    aliases: [pkg]
  repository_path:
    description:
      - Path with AIX packages (required to install).
    type: path
  state:
    description:
      - Whether the package needs to be present on or absent from the system.
    type: str
    choices: [absent, present]
    default: present
notes:
  - If the package is already installed, even the package/fileset is new, the module will not install it.
a  
- name: Install package foo
  community.general.installp:
    name: foo
    repository_path: /repository/AIX71/installp/base
    accept_license: true
    state: present

- name: Install bos.sysmgt that includes bos.sysmgt.nim.master, bos.sysmgt.nim.spot
  community.general.installp:
    name: bos.sysmgt
    repository_path: /repository/AIX71/installp/base
    accept_license: true
    state: present

- name: Install bos.sysmgt.nim.master only
  community.general.installp:
    name: bos.sysmgt.nim.master
    repository_path: /repository/AIX71/installp/base
    accept_license: true
    state: present

- name: Install bos.sysmgt.nim.master and bos.sysmgt.nim.spot
  community.general.installp:
    name: bos.sysmgt.nim.master, bos.sysmgt.nim.spot
    repository_path: /repository/AIX71/installp/base
    accept_license: true
    state: present

- name: Remove packages bos.sysmgt.nim.master
  community.general.installp:
    name: bos.sysmgt.nim.master
    state: absent
z # N)AnsibleModulec                    t         j                  j                  |      r| j                  dd      }| j	                  |ddd|g      \  }}}|dk7  r| j                  d||       |d	k(  rd
}d|fS i }|j                         D ]e  }t        j                  ||      s|j                         d   j                         }	|j                         d   j                         }
|
||	<   d|fc S  y| j                  d|z         y)a  
    Check if the package of fileset is correct name and repository path.

    :param module: Ansible module arguments spec.
    :param package: Package/fileset name.
    :param repository_path: Repository package path.
    :return: Bool, package information.
    installpTz-lz-MR-dr   Failed to run installp.msgrcerrallzAll packages on dir   FNz Repository path %s is not valid.r   N)ospathisdirget_bin_pathrun_command	fail_json
splitlinesrefindallsplitstrip)modulepackagerepository_pathinstallp_cmdr   package_resultr   pkg_infolinepkg_namepkg_versions              n/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/general/plugins/modules/installp.py_check_new_pkgr(   `   s    
ww}}_%**:t<"("4"4lD%QUWf5g"hNC7!:rsKe,H>! H&113 *::gt,#zz|A446H"&**,q/"7"7"9K)4HX&>)*  	?/QR    c                    | j                  dd      }| j                  |d|dg      \  }}}|dk(  r<dj                  |j                         dd       }|d	k(  ry
| j	                  d||       |dk7  r| j	                  d||       i }|j                         }	|	D ]!  }
|
j                  d      dd \  }}}||f||<   # d|fS )a  
    Check the package on AIX.
    It verifies if the package is installed and information

    :param module: Ansible module parameters spec.
    :param package: Package/fileset name.
    :param repository_path: Repository package path.
    :return: Bool, package data.
    lslppTz-lcq*r    Nznot installed.r   zFailed to run lslpp.r   r   :   )r   r   joinr   r   r   )r   r   r    	lslpp_cmdr   lslpp_resultr   package_statepkg_datafull_pkg_datar$   r%   filesetlevels                 r'   _check_installed_pkgr9      s     ##GT2I"..	6GCV/WXBc	QwRS!12,,!7BCH	Qw3DH ++-M ,#'::c?1Q#7 '5$e^, >r)   c                    d }d}g }g }|D ]y  }t        | ||      \  }}	|rT| j                  s1| j                  |d|g      \  }
}}|
dk7  r| j                  d|
|       |dz  }|j	                  |       i|j	                  |       { |dkD  rMt        |      dkD  r|j                  dd       d}dd	j                  |      d
d	j                  |      d	}||fS d}dd	j                  |      z  }||fS )Nr   z-ur
   r   r   zPackage(s) not found: TzPackages removed: r-   z. Fz/No packages removed, all packages not found: %s)r9   
check_moder   r   appendleninsertr1   )r   r!   packagesr    remove_countremoved_pkgsnot_found_pkgr   	pkg_checkdummyr   
remove_outr   changedr   s                  r'   removerG      s    OLLM */Q	5$$&,&8&8,g9V&W#J7$$)Brs$SAL(   )* a}!  $<=-0XXl-CSXXmE\] C< @388MCZZC<r)   c                    g }g }i }dgg d}|D ]  }	t        | |	|      \  }
}|
rt        | |	|      \  }}|rG|	|j                         v r||	   d   ||	<   E|j                         D ]  }|	||   v s||   d   ||	<    n| j                  s=| j	                  |dg||   z   dd||	gz         \  }}}|dk7  r| j                  d||	       |j                  |	       |j                  |	        t        |      dkD  rd
dj                  |      z  }nd}t        |      dkD  rddj                  |      z  }nd}t        |      dkD  rd|z  }nd}t        |      dkD  rd}|||}||fS d}d|||}||fS )Nz-Y)TFr   z-az-Xr	   r   zFailed to run installpr   z Installed: %s.r-    z Not found: %s.z Already installed: %s.TFzNo packages installed.)	r(   r9   keysr;   r   r   r<   r=   r1   )r   r!   r?   r    accept_licenseinstalled_pkgsnot_found_pkgsalready_installed_pkgsaccept_license_paramr   rC   r5   pkg_check_currentr#   keyr   outr   installed_msgnot_found_msgalready_installed_msgrF   r   s                          r'   installrV      s   NN f  +,VWoN	8 *>vwP_*`'x ! hmmo-6>w6G6J*73
  (}} O"hsm3>FsmA>N27;O
 ((#)#5#5%t,/CN/SSW[]acrt{V||$~LBSQw((-E"RU(V%%g. !!'*=+@ >Q*SXXn-EE
>Q*SXXn-EE
!"Q&!:=S!S "
>Q(-9NO
 C< 1>OdeC<r)   c                     t        t        t        ddddg      t        d      t        dd	
      t        ddddg            d      } | j                  d   }| j                  d   }| j                  d   }| j                  d   }| j                  dd      }|dk(  r'|| j	                  d       t        | ||||      \  }}n)|dk(  rt        | ||      \  }}n| j	                  d	d       | j                         y )NliststrTpkg)typeelementsrequiredaliasesr   )r[   boolF)r[   defaultpresentabsent)r[   r`   choices)namer    rK   state)argument_specsupports_check_moderd   r    rK   re   r   z.repository_path is required to install packager   zUnexpected state.)rF   r   )r   dictparamsr   r   rV   rG   	exit_json)r   rd   r    rK   re   r!   rF   r   s           r'   mainrk   
  s   6ED5'R f-VU;E9x>ST	
 !F == Dmm$56O]]#34NMM'"E&&z48L	"!QRv|T?N[	(	flD9 	,?@
W#.r)   __main__)
__future__r   r   r   r[   __metaclass__DOCUMENTATIONEXAMPLESRETURNr   r   ansible.module_utils.basicr   r(   r9   rG   rV   rk   __name__ r)   r'   <module>ru      sg    A @(T!F 
 	 	 4!SHBBAH/B zF r)   