
    Vh                     |    d dl mZmZmZ eZdZdZd dlZd dl	m
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: portinstall
short_description: Installing packages from FreeBSD's ports system
description:
  - Manage packages for FreeBSD using C(portinstall).
extends_documentation_fragment:
  - community.general.attributes
attributes:
  check_mode:
    support: none
  diff_mode:
    support: none
options:
  name:
    description:
      - Name of package to install/remove.
    aliases: [pkg]
    required: true
    type: str
  state:
    description:
      - State of the package.
    choices: ['present', 'absent']
    required: false
    default: present
    type: str
  use_packages:
    description:
      - Use packages instead of ports whenever available.
    type: bool
    required: false
    default: true
author: "berenddeboer (@berenddeboer)"
a^  
- name: Install package foo
  community.general.portinstall:
    name: foo
    state: present

- name: Install package security/cyrus-sasl2-saslauthd
  community.general.portinstall:
    name: security/cyrus-sasl2-saslauthd
    state: present

- name: Remove packages foo and bar
  community.general.portinstall:
    name: foo,bar
    state: absent
N)AnsibleModule)shlex_quotec                    | j                  dd      }|r>d}| j                  dd      }| j                  |dt        |      dd      \  }}}|g}n/d}| j                  dd      d	g}| j                  ||gz         \  }}}|d
k(  }|s:t        j                  dd|      }	||	k7  r| j                  ||	gz         \  }}}|d
k(  }|S )Npkg_infoFpkg_globTz -e `pkg_glob `use_unsafe_shellpkginfor   [0-9] )get_bin_pathrun_commandr   resub)
modulenamepkg_info_pathpkgngpkg_glob_pathrcouterrfoundname_without_digitss
             q/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/general/plugins/modules/portinstall.pyquery_packager!   I   s    ''
E:M ++J=))=R]^bRc*dw{)|C&,,UD96B))-4&*@AC!GE !ffWb$7&&!--m?R>S.STLBSaL    c                    | j                  dd      }| j                  ||g      \  }}}|j                  d      }|dk(  rDt        j                  dd|      }||k7  r(| j                  ||g      \  }}}|j                  d      }|S )N
ports_globT
r   r   r   )r   r   countr   r   )r   r   ports_glob_pathr   r   r   occurrencesr   s           r    matching_packagesr)   h   s    )),=O%%&=>LBS))D/Ka ffWb$7&&!--@S.TULBS))D/Kr"   c           
      B   d}| j                  dd      }| j                  dd      }|s| j                  dd      }|dz   }|D ]  }t        | |      s| j                  |d|d	t        |      d
d      \  }}}t        | |      rdt	        j
                  dd|      }	| j                  |d|d	t        |	      d
d      \  }}}t        | |      r| j                  d|d|       |dz  } |dkD  r| j                  dd|z         | j                  dd       y )Nr   r
   T
pkg_deleteFr   z
 delete -yz ` r   r   r   r   zfailed to remove : msg   zremoved %s package(s)changedr/   zpackage(s) already absent)r   r!   r   r   r   r   	fail_json	exit_json)
r   packagesremove_cr   pkg_delete_pathpackager   r   r   r   s
             r    remove_packagesr9   v   sM   H''
D9M )),>O --eT:)L8  VW- ))/=ZefmZn*o  CG)  HC)"$&&"g">!--o}>IJ]>^/`?C . ELBS VW-  '3%O PA#& !|+BX+MN
U(CDr"   c                 P   d}| j                  dd      }|s;| j                  dd      }|r| j                  |dddg       | j                  dd      }|rd	g}ng }|D ]  }t        | |      rt        | |      }|d
k(  rC| j                  |dg|z   |gz         \  }	}
}t        | |      sK| j	                  d|d|
       n2|dk(  r| j	                  d|z         n| j	                  |d|       |d
z  } |dkD  r| j                  dd|z         | j                  dd       y )Nr   portinstallFr   installz-yportupgradeTz--use-packagesr0   z--batchzfailed to install r-   r.   zno matches for package %sz  matches found for package name zpresent %s package(s)r1   zpackage(s) already present)r   r   r!   r)   r3   r4   )r   r5   use_packages	install_cportinstall_pathpkg_pathportinstall_paramsr8   matchesr   r   r   s               r    install_packagesrD      s`   I **=%@&&ue4)T=IJ!..}dC./ ) $FG4a<!--/?.KN`.`dkcl.lmLBS 1  7C%P Q\!<!HI7T[!\]Q	" 1}+Bi+PQ
U(DEr"   c            
         t        t        t        dddg      t        dgd      t        dd      	      
      } | j                  }|d   j                  d      }|d   dk(  rt	        | ||d          y |d   dk(  rt        | |       y y )Npresentabsent)defaultchoicesr   T)aliasesrequiredbool)typerH   )stater   r>   )argument_specr   ,rN   r>   )r   dictparamssplitrD   r9   )r   ppkgss      r    mainrV      s    y9h2GHug5648:;F 	AV9??3DzYq'89	
7x	% 
 r"   __main__)
__future__r   r   r   rM   __metaclass__DOCUMENTATIONEXAMPLESr   ansible.module_utils.basicr   ansible.module_utils.six.movesr   r!   r)   r9   rD   rV   __name__ r"   r    <module>r`      s^    A @!F" 
 4 6>#EL%FP&$ zF r"   