HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.29
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/__pycache__/aixpkg.cpython-310.pyc
o

�N�g�_�@s�dZddlZddlZddlZddlZddlZddlZddlZddl	Zddl
mZe�e
�ZdZdd�Zdd�Zd	d
�Zdd�Zddd�Zdd�Zdd�Zddd�Zddd�Zdd�Zejj�ed�Zdd�ZdS) a+
Package support for AIX

.. important::
    If you feel that Salt should be using this module to manage filesets or
    rpm packages on a minion, and it is using a different module (or gives an
    error similar to *'pkg.install' is not available*), see :ref:`here
    <module-provider-override>`.
�N)�CommandExecutionErrorZpkgcCstddkrtSdS)z5
    Set the virtual pkg module if the os is AIX
    Z	os_familyZAIX)Fz&Did not load AIX module on non-AIX OS.)Z
__grains__�__virtualname__�rr�G/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/aixpkg.py�__virtual__src
Cs�i}dd|g}td|dd�}d|dkr]d}d}d}|d	��}|D]4}|�d
�r+q#|�d�}	t|	�dkrBtd
d|	d��id��d|	dvrO|	d}d}n|	d}|	d}|||fStd
d|d��id��)zF
    Return name, version and if rpm package for specified target
    �/usr/bin/lslpp�-Lc�cmd.run_allF��python_shellr�retcode��stdout�#�:�z&Error occurred finding fileset/package�errors���info�R�T��stderr)�__salt__�
splitlines�
startswith�split�lenr�strip)
�target�ret�cmd�result�name�version_num�rpmpkg�lines�line�compsrrr�
_check_pkg%s8


�
�r*cCsdd|g}td|�dkS)zP
    Returns True if the rpm package is installed. Otherwise returns False.
    �/usr/bin/rpmz-q�cmd.retcoder�r)r$r"rrr�_is_installed_rpmOs
r.cCs*|rtdSt�td�}td|�|S)z'
    Use pkg list from __context__
    �
pkg.list_pkgs�pkg_resource.stringify)�__context__�copy�deepcopyr)�versions_as_listr!rrr�_list_pkgs_from_contextWs
r5Fc	s�i}tjj�|�}t�fdd�dD��r|Sdtvr$��dd�r$t|�Sd}td|d	d
��	�}|D]/}|�
d�r:q2|�d�}t|�d
krFq2d|dvrQ|d}n|d}|d}td|||�q2td|�t
�|�td<|swtd|�|S)z�
    List the filesets/rpm packages currently installed as a dict:

    .. code-block:: python

        {'<package_name>': '<version>'}

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.list_pkgs
    cs g|]}tjj���|���qSr)�salt�utils�data�is_true�get)�.0�x��kwargsrr�
<listcomp>us zlist_pkgs.<locals>.<listcomp>)ZremovedZ
purge_desiredr/Zuse_contextTz/usr/bin/lslpp -Lczcmd.runFr
rrrrrrrrzpkg_resource.add_pkgzpkg_resource.sort_pkglistr0)r6r7r8r9�anyr1r:r5rrrrrr2r3)	r4r>r!r"r'r(r)r$r%rr=r�	list_pkgscs4�



rAc
Os�|�dd�i}|sdS|D]S}d}d|��}td|dd�}d|d	krW|d
�d�}t�d||�|D] }||vrU|��}	t�d
||	�|	d}|rUt�d||�nq5nt�d|�|||<qt|�dkrn||dS|S)a�
    Return the current installed version of the named fileset/rpm package
    If more than one fileset/rpm package name is specified a dict of
    name/version pairs is returned.

    .. versionchanged:: 3005

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.latest_version <package name>
        salt '*' pkg.latest_version <package1> <package2> <package3> ...

    �refreshTr
z
lslpp -Lq r	Fr
rrr�
z?Returned AIX packaging information aix_info_list %s for name %sz<Processing name %s with AIX packaging version information %srz6Found name %s in AIX packaging information, version %sz3Could not find name %s in AIX packaging information)�poprr�log�debugr)
�namesr>r!r$�
version_foundr"Zaix_infoZ
aix_info_listZaix_lineZaix_ver_listrrr�version�sJ
����
rIcKsdd|g}td|�dkS)z�
    Returns True if the fileset/rpm package is installed. Otherwise returns False.

    CLI Example:

    .. code-block:: bash

        salt '*' pkg._is_installed bash
    rrr,rr-)r$r>r"rrr�
_is_installed�s

rJcKsB|r	tjj�|�n|g}|siS|rt�d||�t�}g}|D�][}	tj�	|	�}
d}d}d}
d}i}|
�
d�s=|
�
d�rFd}t�d|
�n�|
�
d�rTd}t�d	|
�nt�d
|
�d}dd
i}t�d��
�r�|d7}d}|rt|d7}n|d7}|r~|d7}|�d|�d|	��}td|d|dd�}nxt�d��
�r�d}|r�|d7}n|d7}|�d|�d|	��}td|d|dd�}nOt�d��
�r�|d7}d}|r�|d7}n|d7}|r�|d7}|�d|�d|	��}td|d|dd�}nd}d}|r�|d7}|�d|�d|	��}td|dd�}d|v�r8d|dk�s8d|dk�s8|�s*d}
t�d|
�n|�|d �t�d!||�|�s>|
�r|d"}|�rG|d#7}|d$7}tj�|	�}||d|
7}t�d%|�td|dd�}d|dk�r||�|d �t�d&||�q t�d'd(�t�}tjj�||�}|�r�td)||d*�d+��|�r�d,S|S)-a

    Install the named fileset(s)/rpm package(s).

    .. versionchanged:: 3005

        preference to install rpm packages are to use in the following order:
            /opt/freeware/bin/dnf
            /opt/freeware/bin/yum
            /usr/bin/yum
            /usr/bin/rpm

    .. note:
        use of rpm to install implies that rpm's dependencies must have been previously installed.
        dnf and yum automatically install rpm's dependencies as part of the install process

        Alogrithm to install filesets or rpms is as follows:
            if ends with '.rte' or '.bff'
                process as fileset
            if ends with '.rpm'
                process as rpm
            if unrecognised or no file extension
                attempt process with dnf | yum
                failure implies attempt process as fileset

        Fileset needs to be available as a single path and filename
        compound filesets are not handled and are not supported.
        An example is bos.adt.insttools which is part of bos.adt.other and is installed as follows
        /usr/bin/installp -acXYg /cecc/repos/aix72/TL4/BASE/installp/ppc/bos.adt.other bos.adt.insttools

    name
        The name of the fileset or rpm package to be installed.

    refresh
        Whether or not to update the yum database before executing.


    pkgs
        A list of filesets and/or rpm packages to install.
        Must be passed as a python list. The ``name`` parameter will be
        ignored if this option is passed.

    version
        Install a specific version of a fileset/rpm package.
        (Unused at present).

    test
        Verify that command functions correctly.

    Returns a dict containing the new fileset(s)/rpm package(s) names and versions:

        {'<package>': {'old': '<old-version>',
                       'new': '<new-version>'}}

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.install /stage/middleware/AIX/bash-4.2-3.aix6.1.ppc.rpm
        salt '*' pkg.install /stage/middleware/AIX/bash-4.2-3.aix6.1.ppc.rpm refresh=True
        salt '*' pkg.install /stage/middleware/AIX/VIOS2211_update/tpc_4.1.1.85.bff
        salt '*' pkg.install /cecc/repos/aix72/TL3/BASE/installp/ppc/bos.rte.printers_7.2.2.0.bff
        salt '*' pkg.install /stage/middleware/AIX/Xlc/usr/sys/inst.images/xlC.rte
        salt '*' pkg.install /stage/middleware/AIX/Firefox/ppc-AIX53/Firefox.base
        salt '*' pkg.install /cecc/repos/aix72/TL3/BASE/installp/ppc/bos.net
        salt '*' pkg.install pkgs='["foo", "bar"]'
        salt '*' pkg.install libxml2
    z1Installing these fileset(s)/rpm package(s) %s: %sFr
z.bffz.rteTz install identified %s as filesetz.rpmzinstall identified %s as rpmz)install filename %s trying install as rpmzinstall �LIBPATH�/opt/freeware/lib:/usr/lib�/opt/freeware/bin/dnfz--allowerasing z--assumeno z--assumeyes z
--refresh � r	�r�envZignore_retcode�/usr/bin/yum�/opt/freeware/bin/yumr+z-Uivh z--testr
rr�dz>install tried filename %s as rpm and failed, trying as filesetrz?install error rpm path, returned result %s, resultant errors %sz/usr/sbin/installp -acYXg�pz -d z&install fileset commanda to attempt %szCinstall error fileset path, returned result %s, resultant errors %sr/Nz6Problems encountered installing filesets(s)/package(s)�ZchangesrrzTest succeeded.)r6r7�args�split_inputrErFrA�os�path�basename�endswith�pathlib�Path�is_filer�append�dirnamer1rDr8�
compare_dictsr)r$rB�pkgsrI�testr>�targets�oldrr �filenameZflag_filesetZflag_actual_rpmZflag_try_rpm_failedr"�out�cmdflags�
libpathenv�cmdexe�dirpath�newr!rrr�install�s�D


�
�
�&�����rmcKs�|r	tjj�|�n|g}|siS|rt�d||�g}t�}|D]�}d}i}z	t|�\}	}
}WntyL}z|j	rB|�
|j	d�WYd}~q d}~ww|r�d}
ddi}t�d��
�rsd}|�d	|
�d	|��}td
|d|dd
�}n`t�d��
�r�d}|�d	|
�d	|��}td
|d|dd
�}nBt�d��
�r�d}|�d	|
�d	|��}td
|d|dd
�}n$d}d}
|�d	|
�d	|��}td
|dd�}n
dd|	g}td
|dd�}t�d||�q t�dd�t�}tjj�||�}|r�td||d�d��|S)aT
    Remove specified fileset(s)/rpm package(s).

    name
        The name of the fileset or rpm package to be deleted.

    .. versionchanged:: 3005

        preference to install rpm packages are to use in the following order:
            /opt/freeware/bin/dnf
            /opt/freeware/bin/yum
            /usr/bin/yum
            /usr/bin/rpm

    pkgs
        A list of filesets and/or rpm packages to delete.
        Must be passed as a python list. The ``name`` parameter will be
        ignored if this option is passed.


    Returns a list containing the removed packages.

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.remove <fileset/rpm package name>
        salt '*' pkg.remove tcsh
        salt '*' pkg.remove xlC.rte
        salt '*' pkg.remove Firefox.base.adt
        salt '*' pkg.remove pkgs='["foo", "bar"]'
    z/Removing these fileset(s)/rpm package(s) %s: %sr
rNz	-y removerKrLrMrNr	FTrOrRrQr+z-er
z/usr/sbin/installpz-uz0result of removal command %s, returned result %sr/z4Problems encountered removing filesets(s)/package(s)rUr)r6r7rVrWrErFrAr*rrr_r\r]r^rr1rDr8ra)r$rbr>rdrrer r"rg�namedZ
versionpkgr&�excrhrirjrlr!rrr�remove�s�!�����
�rpcOs�|�dd�i}|sdS|D]�}d}ddi}t�d���r1d}|�d|��}td|d	|dd
�}n8t�d���rLd}|�d|��}td|d	|dd
�}nt�d���rgd}|�d|��}td|d	|dd
�}nd
}t�d|�|r�d|dks}d|dkr�|d}	|	r�|	��}
d	}|
D]}|�|�r�|�d�}
||
dkr�d}q�|r�|}nq�|r�t�d||�nt�d|�|||<qt	|�dkr�||dS|S)a8
    Return the latest available version of the named fileset/rpm package available for
    upgrade or installation. If more than one fileset/rpm package name is
    specified, a dict of name/version pairs is returned.

    If the latest version of a given fileset/rpm package is already installed,
    an empty string will be returned for that package.

    .. versionchanged:: 3005

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.latest_version <package name>
        salt '*' pkg.latest_version <package1> <package2> <package3> ...

    Note: currently only functional for rpm packages due to filesets do not have a specific location to check
        Requires yum of dnf available in order to query a repository

    This function will always return an empty string for unfound fileset/rpm package.
    rBTr
rKrLrM� check-update r	FrOrRrQNzClatest_version dnf|yum check-update command returned information %srrrSr�.z2latest_version result for name %s found version %sz1Could not find AIX / RPM packaging version for %sr)
rDr\r]r^rrErFrrr)rGr>r!r$rHrirjr"�available_info�available_output�available_list�
flag_found�name_chk�	pkg_labelrrr�latest_version3sr����

���
ry�available_versioncKsdd}d}ddi}t�d���r#d}|�d|��}td|d|dd	�}n8t�d
���r>d
}|�d|��}td|d|dd	�}nt�d���rYd}|�d|��}td|d|dd	�}ndSt�d||�d
|dksnd|dkr�|d}|r�|��}	d}
|	D]}|�|�r�|�d�}||d
kr�d}
q||
r�|}nq|t|�}
t�d||
|�|r�|
|kSt�d|�dS)a�
    Check whether or not an upgrade is available for a given package

    .. versionchanged:: 3005

    CLI Example:

    .. code-block:: bash

        salt '*' pkg.upgrade_available <package name>

    Note: currently only functional for rpm packages due to filesets do not have a specific location to check
        Requires yum of dnf available in order to query a repository

    Fr
rKrLrMrqr	TrOrRrQzFupgrade_available yum check-update command %s, returned information %srrrSrrrzTupgrade_available result for name %s, found current version %s, available version %sz7upgrade_available information for name %s was not found)	r\r]r^rrErFrrrI)r$r>Z	rpm_foundrHrirjr"rsrtrurvrwrxZcurrent_versionrrr�upgrade_available�sj����

���r{)F)NFNNF)NN)�__doc__r2�loggingrXr\Zsalt.utils.datar6Zsalt.utils.functoolsZsalt.utils.pathZsalt.utils.pkgZsalt.exceptionsr�	getLogger�__name__rErrr*r.r5rArIrJrmrpryr7�	functoolsZalias_functionrzr{rrrr�<module>s6

	*
@<

Vq_�