HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.109.1.lve.el8.x86_64 #1 SMP Thu Mar 5 20:23:46 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.30
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/runners/__pycache__/f5.cpython-310.pyc
o

�N�g�%�@s�dZddlmZz
ddlmZdZWneydZYnwdd�ZGdd	�d	�Z	d
d�Z
dd
d�Zdd�Zdd�Z
dd�Zdd�ZdS)a�
Runner to provide F5 Load Balancer functionality

:depends:   - pycontrol Python module

:configuration: In order to connect to a F5 Load Balancer, you must specify
    in the Salt master configuration the currently available load balancers

    .. code-block:: yaml

        load_balancers:
          bigip1.example.com:
            username: admin
            password: secret
          bigip2.example.com:
            username: admin
            password: secret
�)�CommandExecutionErrorNTFcCstsdSdS)NFT)�
HAS_PYCONTROL�rr�C/opt/saltstack/salt/lib/python3.10/site-packages/salt/runners/f5.py�__virtual__src@sVeZdZdd�Zdd�Zdd�Zddd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�ZdS)�F5MgmtcCs||_||_||_|��dS)N)�lb�username�password�_connect)�selfrr	r
rrr�__init__%szF5Mgmt.__init__cCsFztj|j|j|jdddgd�|_WdSty"td|j����w)z
        Connect to F5
        TzLocalLB.VirtualServerzLocalLB.Pool)�hostnamer	r
ZfromurlZwsdlszUnable to connect to )�f5ZBIGIPrr	r
�bigIP�	Exception)rrrrr+s
�
��zF5Mgmt._connectc
sT|jjj}|j�d�}||_||_||_|j�d�}	�fdd�|	D�}
|
r)|
|_nt	d��|j�d�}|g|_
|j�d�}|j�d�}
|j|
_||
_
|j�d	�}|
g|_
|j�d
�}|j�d�}|j|_�|_|j�d�}||_|j�d�}d|_|j�d
�}|||g|_
z|j|dg||gd�WdSty�}z
td|�d|����d}~ww)z)
        Create a virtual server
        zCommon.VirtualServerDefinitionzCommon.ProtocolTypecs.g|]}|d�d�d���kr|d�qS)r�_���split�upper��.0�i��protocolrr�
<listcomp>Is.z$F5Mgmt.create_vs.<locals>.<listcomp>zUnknown protocolzCommon.VirtualServerSequencez'LocalLB.VirtualServer.VirtualServerTypez+LocalLB.VirtualServer.VirtualServerResourcez3LocalLB.VirtualServer.VirtualServerResourceSequencezLocalLB.ProfileContextTypez*LocalLB.VirtualServer.VirtualServerProfileZ
oneconnectz2LocalLB.VirtualServer.VirtualServerProfileSequencez255.255.255.255)ZdefinitionsZ	wildmasksZ	resourcesZprofiles�Unable to create `z` virtual server

NT)r�LocalLB�
VirtualServer�typefactory�create�name�address�portrr�itemZRESOURCE_TYPE_POOL�typeZdefault_pool_nameZPROFILE_CONTEXT_TYPE_ALLZprofile_contextZprofile_namer)rr"�ipr$r�profile�	pool_name�vsZvs_defZcommon_protocols�pZ
vs_def_seqZvs_typeZvs_resourceZresource_seqZ
vs_contextZ
vs_profileZvs_profile_httpZvs_profile_connZvs_profile_seq�errr�	create_vs<sd
���������zF5Mgmt.create_vs�ROUND_ROBINc
s�|jjjj�d�}�fdd�|D�}|rA|�|�sAz|jjjj|g|gggd�Wd	Sty@}z
td|�d|����d}~wwtd��)
z7
        Create a pool on the F5 load balancer
        �LocalLB.LBMethodcs0g|]}|d�dd�d���kr|d�qS�rr����rr��methodrrr�s*z&F5Mgmt.create_pool.<locals>.<listcomp>)�
pool_namesZ
lb_methods�membersrz` pool

NzUnsupported methodT)rr�Poolr r!�
check_poolr)rr"r4�	lbmethodsZsupported_methodr,rr3r�create_pool�s
�
����zF5Mgmt.create_poolc
Cs�|�|�st|�d���|jjjj�d�}g|_|jjjj�d�}||_||_	|j�
|�z|jjjj|g|gd�Wd	StyU}z
td|�d|�d|����d}~ww)
z&
        Add a node to a pool
        z pool does not existszCommon.IPPortDefinitionSequencezCommon.IPPortDefinition)r5r6zUnable to add `z` to `z`

NT)
r8rrrr7r r!�itemsr#r$�appendZ
add_memberr)rr"r$r)Zmembers_seq�memberr,rrr�add_pool_member�s&
�
����zF5Mgmt.add_pool_membercC�4|jjj}|��D]}|�d�d|krdSq	dS)z/
        Check to see if a pool exists
        �/r2TF)rrr7�get_listr)rr"Zpools�poolrrrr8��
�zF5Mgmt.check_poolcCr?)z9
        Check to see if a virtual server exists
        r@r2TF)rrrrAr)rr"r*�vrrr�check_virtualserver�rCzF5Mgmt.check_virtualservercCs6|jjjj|gd�d}|D]
}||jkrdSqdS)z?
        Check a pool member exists in a specific pool
        )r5rTF)rrr7Z
get_memberr#)rr=r)r6Zmemrrr�check_member_pool�s
�zF5Mgmt.check_member_poolcCs |jjjj�d�}dd�|D�S)z4
        List all the load balancer methods
        r/cSs g|]}|d�dd�d�qSr0)r)rr4rrrr�s z$F5Mgmt.lbmethods.<locals>.<listcomp>)rrr7r r!)r�methodsrrrr9�szF5Mgmt.lbmethodsN�r.)�__name__�
__module__�__qualname__r
rr-r:r>r8rErFr9rrrrr$s
E


rc
Cs^td�|d�rttd|���\}}ntd|�d���t|||�}	|	�||||||�dS)z�
    Create a virtual server

    CLI Examples:

    .. code-block:: bash

        salt-run f5.create_vs lbalancer vs_name 10.0.0.1 80 tcp http poolname
    �load_balancersN�Unable to find `�` load balancerT)�__opts__�get�list�valuesrrr-)
rr"r'r$rr(r)r	r
�F5rrrr-�s
r-r.cCsVtd�|d�rttd|���\}}ntd|�d���t|||�}|�||�dS)z�
    Create a pool on the F5 load balancer

    CLI Examples:

    .. code-block:: bash

        salt-run f5.create_pool load_balancer pool_name loadbalance_method
        salt-run f5.create_pool load_balancer my_pool ROUND_ROBIN
    rLNrMrNT)rOrPrQrRrrr:)rr"r4r	r
rSrrrr:�sr:cCsXtd�|d�rttd|���\}}ntd|�d���t|||�}|�|||�dS)z�
    Add a node to a pool

    CLI Examples:

    .. code-block:: bash

        salt-run f5.add_pool_member load_balancer 10.0.0.1 80 my_pool
    rLNrMrNT)rOrPrQrRrrr>)rr"r$r)r	r
rSrrrr>�s
r>cC�Ptd�|d�rttd|���\}}ntd|�d���t|||�}|�|�S)z�
    Check to see if a pool exists

    CLI Examples:

    .. code-block:: bash

        salt-run f5.check_pool load_balancer pool_name
    rLNrMrN)rOrPrQrRrrr8�rr"r	r
rSrrrr8�


r8cCrT)z�
    Check to see if a virtual server exists

    CLI Examples:

    .. code-block:: bash

        salt-run f5.check_virtualserver load_balancer virtual_server
    rLNrMrN)rOrPrQrRrrrErUrrrrE$rVrEcCsRtd�|d�rttd|���\}}ntd|�d���t|||�}|�||�S)z�
    Check a pool member exists in a specific pool

    CLI Examples:

    .. code-block:: bash

        salt-run f5.check_member_pool load_balancer 10.0.0.1 my_pool
    rLNrMrN)rOrPrQrRrrrF)rr=r)r	r
rSrrrrF6s

rFrH)�__doc__Zsalt.exceptionsrZpycontrol.pycontrolZ	pycontrolrr�ImportErrorrrr-r:r>r8rErFrrrr�<module>s"�4