
    VhD                         d dl mZmZmZ eZdZdZdZd dl	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)    )absolute_importdivisionprint_functiona  
module: opkg
author: "Patrick Pelletier (@skinp)"
short_description: Package manager for OpenWrt and Openembedded/Yocto based Linux distributions
description:
  - Manages ipk packages for OpenWrt and Openembedded/Yocto based Linux distributions.
extends_documentation_fragment:
  - community.general.attributes
attributes:
  check_mode:
    support: none
  diff_mode:
    support: none
options:
  name:
    description:
      - Name of package(s) to install/remove.
      - V(NAME=VERSION) syntax is also supported to install a package in a certain version. See the examples. This only works
        on Yocto based Linux distributions (opkg>=0.3.2) and not for OpenWrt. This is supported since community.general 6.2.0.
    aliases: [pkg]
    required: true
    type: list
    elements: str
  state:
    description:
      - State of the package.
    choices: ['present', 'absent', 'installed', 'removed']
    default: present
    type: str
  force:
    description:
      - The C(opkg --force) parameter used.
      - State V("") is deprecated and will be removed in community.general 12.0.0. Please omit the parameter O(force) to obtain
        the same behavior.
    choices:
      - ""
      - "depends"
      - "maintainer"
      - "reinstall"
      - "overwrite"
      - "downgrade"
      - "space"
      - "postinstall"
      - "remove"
      - "checksum"
      - "removal-of-dependent-packages"
    type: str
  update_cache:
    description:
      - Update the package DB first.
    default: false
    type: bool
  executable:
    description:
      - The executable location for C(opkg).
    type: path
    version_added: 7.2.0
requirements:
  - opkg
  - python
a  
- name: Install foo
  community.general.opkg:
    name: foo
    state: present

- name: Install foo in version 1.2 (opkg>=0.3.2 on Yocto based Linux distributions)
  community.general.opkg:
    name: foo=1.2
    state: present

- name: Update cache and install foo
  community.general.opkg:
    name: foo
    state: present
    update_cache: true

- name: Remove foo
  community.general.opkg:
    name: foo
    state: absent

- name: Remove foo and bar
  community.general.opkg:
    name:
      - foo
      - bar
    state: absent

- name: Install foo using overwrite option forcibly
  community.general.opkg:
    name: foo
    state: present
    force: overwrite
zt
version:
  description: Version of opkg.
  type: str
  returned: always
  sample: "2.80.0"
  version_added: 10.0.0
N)	CmdRunnercmd_runner_fmt)StateModuleHelperc                       e Zd Z e e edgddd       edg d       eg d	
       edd       ed                  ZdZd Zed        ZddZ	d Z
d Ze
ZeZy)OpkgpkgTliststr)aliasesrequiredtypeelementspresent)r   	installedabsentremoved)defaultchoices) depends
maintainer	reinstall	overwrite	downgradespacepostinstallremovechecksumzremoval-of-dependent-packages)r   Fbool)r   r   path)r   )namestateforceupdate_cache
executable)argument_specc                      j                   j                  dddd        j                   j                  dddd       t        dddd	d	
      } fd} j                   j                  r3t        j
                  j                   j                   j                        nd\  }}t         j                  |t        t        j                         t        j                  |      t        j                  |      t        j                  d      t        j                  d            |       _         j                  d      5 }|j!                         \  }}}|j#                         j%                  dd       j                   _        d d d         j                   j(                  r; j                  d      j!                         \  }}	}	|dk7  r j+                  d       y y y # 1 sw Y   [xY w)N	install_cr   FT)outputchangeremove_czlist-installedinstallr    )queryr   r   r   r   c                 t    | dk(  rj                  ddd       d }  t        j                  d      | d      S )	Nr   zmValue "" is deprecated. Simply omit the parameter "force" to prevent any --force-X argument when running opkgz12.0.0zcommunity.general)versioncollection_namez--force-T)ctx_ignore_none)	deprecater   	as_optval)valueselfs    j/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/general/plugins/modules/opkg.py_forcez$Opkg.__init_module__.<locals>._force   sI    {   O'//B  D 7>++J7tTT    )Nopkgupdatez	--version)packager%   r&   r'   r2   )commandarg_formatspath_prefixr2   zopkg version r   r'   zcould not update package db)varssetdictr(   osr#   splitr   moduler   as_listas_mapas_funcas_boolas_fixedrunnerrunstripreplacer2   r'   do_raise)
r8   	state_mapr:   dircmdctxrcouterrdummys
   `         r9   __init_module__zOpkg.__init_module__   s   		k1U4@		j!E$?"
		U ;?)):N:N277==!5!56TbSKK&..0$++I6$,,V4+33H=&//< 
 [[# 	Is779LBS #		 3 3OR HDII	I 99!!#{{>:>>@BuQw;<  "		I 	Is   >AGG%c                 d    | j                  dd      }t        |      dk(  r|d   dfS |d   |d   fS )zC Split the name and the version when using the NAME=VERSION syntax =   r   N)rF   len)r>   splitteds     r9   split_name_and_versionzOpkg.split_name_and_version   sB     ==a(x=AA;$$A;++r;   Nc                     | j                  d      j                  d|      \  }}}|j                  |d|sdn|dz   z  z         }||k(  S )Nzstate packager0   )r%   r>   z - %sr    )rM   rN   
startswith)r8   r$   want_installedr2   rY   rW   has_packages          r9   _package_in_desired_statezOpkg._package_in_desired_state   sT     KK8<<7TX<YsEnnTGrwY\},^%^_,,r;   c                    | j                  d      5 }| j                  j                  D ]  }| j                  |      \  }}| j	                  |d|      r| j                  j
                  dk(  sE|j                  |       | j                  j                  d|j                  d       | j	                  |d|      s| j                  d	|z         | j                  xj                  d
z  c_
         	 d d d        | j                  j                  dkD  r)d| j                  j                  z  | j                  _        y d| j                  _        y # 1 sw Y   ]xY w)Nstate force packageT)rd   r2   r   r>   run_info   	verbosityzfailed to install %sr]   r   zinstalled %s package(s)zpackage(s) already present)rM   rB   r$   r`   rf   r&   rN   rC   rj   rQ   r+   msg)r8   rU   r>   pkg_namepkg_versions        r9   state_presentzOpkg.state_present   s$   [[./ 	-399>> -(,(C(CG(L%+55ht]h5imqmvmvm|m|  AL  nLGGGG,IIMM*cllaMH99(SWal9m&<w&FGII''1,'-	- 99"5		8K8KKDIIM8DIIM	- 	-s   AE.BEEc                 ~   | j                  d      5 }| j                  j                  D ]  }| j                  |      \  }}| j	                  |d      r+|j                  |       | j                  j                  d|j                  d       | j	                  |d      s| j                  d|z         | j                  xj                  d	z  c_	         	 d d d        | j                  j                  d
kD  r)d| j                  j                  z  | j                  _
        y d| j                  _
        y # 1 sw Y   ]xY w)Nrh   F)rd   ri   rj   rk   rl   zfailed to remove %sr]   r   zremoved %s package(s)zpackage(s) already absent)rM   rB   r$   r`   rf   rN   rC   rj   rQ   r.   rn   )r8   rU   r>   rY   s       r9   state_absentzOpkg.state_absent   s    [[./ 	,399>> ,!%!<!<W!E55ge5TGGGG,IIMM*cllaMH99'RW9X&;g&EFII&&!+&,	, 99!3dii6H6HHDIIM7DIIM	, 	,s   AD3BD33D<N)__name__
__module____qualname__rD   rG   use_old_vardictrZ   staticmethodr`   rf   rq   rs   state_installedstate_removed r;   r9   r
   r
   ~   s    ug6ERy2_`  f ge&9(
	F O+=Z , ,-98 $O Mr;   r
   c                  ,    t         j                          y rt   )r
   executer|   r;   r9   mainr      s    LLNr;   __main__)
__future__r   r   r   r   __metaclass__DOCUMENTATIONEXAMPLESRETURNrE   Eansible_collections.community.general.plugins.module_utils.cmd_runnerr   r   Hansible_collections.community.general.plugins.module_utils.module_helperr   r
   r   ru   r|   r;   r9   <module>r      s^    A @<|"H
 
 k fh! h!V zF r;   