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__/lvs.cpython-310.pyc
o

�N�g.�@s�dZddlmmZddlZddlmZddiZej	dd��Z
dd	�Zd
d�Zd&d
d�Z
d'dd�Zd(dd�Z					d)dd�Z					d*dd�Zd'dd�Zdd�Zdd�Zd(dd�Zd(d d!�Zd(d"d#�Zd'd$d%�ZdS)+z(
Support for LVS (Linux Virtual Server)
�N)�
SaltException�list_�listcCstjj�d�S)NZipvsadm)�salt�utils�path�which�r	r	�D/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/lvs.py�__detect_os
srcCst�sdSdS)z<
    Only load if ipvsadm command exists on the system.
    )FzQThe lvs execution module cannot be loaded: the ipvsadm binary is not in the path.Zlvs)rr	r	r	r
�__virtual__srcKs�d}d|vrf|dr_d|vrF|ddkr|d�|d�7}n$|ddkr.|d�|d�7}n|ddkr>|d	�|d�7}ntd
��|d=ntd��d|vr^|dr^|d
�|d�7}|d=ntd��|d=d|vr�|dr�|d�|d�7}d|vr�|dr�|ddkr�|d7}n|ddkr�|d7}n|ddkr�|d7}ntd��|d=d|vr�|dr�|d�|d�7}|d=ntd��|d=|S)zB

    Build a well-formatted ipvsadm command based on kwargs.
    ��service_address�protocolZtcpz -t {}Zudpz -u {}Zfwmarkz -f {}z8Error: Only support tcp, udp and fwmark service protocolz Error: protocol should specified�	schedulerz -s {}z'Error: service_address should specified�server_addressz -r {}�packet_forward_method�drz -gZtunnelz -iZnatz -mz&Error: only support dr, tunnel and nat�weightz -w {}z&Error: server_address should specified)�formatr)�kwargs�cmdr	r	r
�
_build_cmd sR��


�r�wlccC�Hd�t�t|||d��}td|dd�}|dr |d��}|Sd}|S)	ao
    Add a virtual service.

    protocol
        The service protocol(only support tcp, udp and fwmark service).

    service_address
        The LVS service address.

    scheduler
        Algorithm for allocating TCP connections and UDP datagrams to real servers.

    CLI Example:

    .. code-block:: bash

        salt '*' lvs.add_service tcp 1.1.1.1:80 rr
    z{} -A {}�rrr�cmd.run_allF�Zpython_shell�retcode�stderrT�rrr�__salt__�strip�rrrr�out�retr	r	r
�add_serviceV����r&cCr)	as
    Edit the virtual service.

    protocol
        The service protocol(only support tcp, udp and fwmark service).

    service_address
        The LVS service address.

    scheduler
        Algorithm for allocating TCP connections and UDP datagrams to real servers.

    CLI Example:

    .. code-block:: bash

        salt '*' lvs.edit_service tcp 1.1.1.1:80 rr
    z{} -E {}rrFrrrTr r#r	r	r
�edit_servicezr'r(cCsFd�t�t||d��}td|dd�}|dr|d��}|Sd}|S)	a

    Delete the virtual service.

    protocol
        The service protocol(only support tcp, udp and fwmark service).

    service_address
        The LVS service address.

    CLI Example:

    .. code-block:: bash

        salt '*' lvs.delete_service tcp 1.1.1.1:80
    z{} -D {}�rrrFrrrTr �rrrr$r%r	r	r
�delete_service�s��r+r�c	K�Td�t�td
|||||d�|���}td|dd�}|dr&|d��}|Sd}|S)ag

    Add a real server to a virtual service.

    protocol
        The service protocol(only support ``tcp``, ``udp`` and ``fwmark`` service).

    service_address
        The LVS service address.

    server_address
        The real server address.

    packet_forward_method
        The LVS packet forwarding method(``dr`` for direct routing, ``tunnel`` for tunneling, ``nat`` for network access translation).

    weight
        The capacity  of a server relative to the others in the pool.

    CLI Example:

    .. code-block:: bash

        salt '*' lvs.add_server tcp 1.1.1.1:80 192.168.0.11:8080 nat 1
    z{} -a {}�rrrrrrFrrrTNr	r �	rrrrrrrr$r%r	r	r
�
add_server��$"����r0c	Kr-)ai

    Edit a real server to a virtual service.

    protocol
        The service protocol(only support ``tcp``, ``udp`` and ``fwmark`` service).

    service_address
        The LVS service address.

    server_address
        The real server address.

    packet_forward_method
        The LVS packet forwarding method(``dr`` for direct routing, ``tunnel`` for tunneling, ``nat`` for network access translation).

    weight
        The capacity  of a server relative to the others in the pool.

    CLI Example:

    .. code-block:: bash

        salt '*' lvs.edit_server tcp 1.1.1.1:80 192.168.0.11:8080 nat 1
    z{} -e {}r.rFrrrTNr	r r/r	r	r
�edit_server�r1r2cCr)	ax

    Delete the realserver from the virtual service.

    protocol
        The service protocol(only support ``tcp``, ``udp`` and ``fwmark`` service).

    service_address
        The LVS service address.

    server_address
        The real server address.

    CLI Example:

    .. code-block:: bash

        salt '*' lvs.delete_server tcp 1.1.1.1:80 192.168.0.11:8080
    z{} -d {}�rrrrFrrrTr )rrrrr$r%r	r	r
�
delete_server+s���r4cCs<t��d�}td|dd�}|dr|d��}|Sd}|S)zq

    Clear the virtual server table

    CLI Example:

    .. code-block:: bash

        salt '*' lvs.clear
    z -CrFrrrT)rr!r")rr$r%r	r	r
�clearRs�r5cCs t��d�}td|dd�}|S)zs

    Get the virtual server rules

    CLI Example:

    .. code-block:: bash

        salt '*' lvs.get_rules
    z -S -nzcmd.runFr)rr!)rr%r	r	r
�	get_rulesjsr6cCs`|rd�t�t||d��}nt��d�}td|dd�}|dr(|d��}|S|d	��}|S)
z�

    List the virtual server table if service_address is not specified. If a service_address is selected, list this service only.

    CLI Example:

    .. code-block:: bash

        salt '*' lvs.list
    z{} -L {} -nr)z -L -nrFrrr�stdoutr r*r	r	r
r|s
��cCsX|rd�t�t||d��}nt��d�}td|dd�}|dr(|d��}|Sd	}|S)
z�

    Zero the packet, byte and rate counters in a service or all services.

    CLI Example:

    .. code-block:: bash

        salt '*' lvs.zero
    z{} -Z {}r)z -ZrFrrrTr r*r	r	r
�zero�s
��r8cKsNd�td||d�|���}|s|d7}t�}|�|�}|dkr#d}|Sd}|S)	z�

    Check the virtual service exists.

    CLI Example:

    .. code-block:: bash

        salt '*' lvs.check_service tcp 1.1.1.1:80
    �{}r)� ���TzError: service not existsNr	�rrr6�find)rrrr�	all_rulesr$r%r	r	r
�
check_service�s�
�r?cKsPd�td|||d�|���}|s|d7}t�}|�|�}|dkr$d}|Sd}|S)	z�

    Check the real server exists in the specified service.

    CLI Example:

    .. code-block:: bash

         salt '*' lvs.check_server tcp 1.1.1.1:80 192.168.0.11:8080
    r9r3r:r;TzError: server not existsNr	r<)rrrrrr>r$r%r	r	r
�check_server�s$���	
�r@)NNr)NNN)NN)NNNrr,)NNNNN)�__doc__Zsalt.utils.decoratorsrZ
decoratorsZsalt.utils.pathrZsalt.exceptionsrZ__func_alias__Zmemoizerrrr&r(r+r0r2r4r5r6rr8r?r@r	r	r	r
�<module>s>

6
$
$ 
�8
�
7'