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/states/__pycache__/smartos.cpython-310.pyc
o

�N�g+��@s�dZddlZddlZddlZddlZddlZddlZe�e	�Z
dZdd�Zdd�Z
dd	�Zd
d�Zdd
�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd.dd�Zdd�Zdd �Zd!d"�Zd#d$�Zd/d%d&�Zd0d(d)�Zd*d+�Zd,d-�ZdS)1am
Management of SmartOS Standalone Compute Nodes

:maintainer:    Jorge Schrauwen <sjorge@blackdot.be>
:maturity:      new
:depends:       vmadm, imgadm
:platform:      smartos

.. versionadded:: 2016.3.0

.. code-block:: yaml

    vmtest.example.org:
      smartos.vm_present:
        - config:
            reprovision: true
        - vmconfig:
            image_uuid: c02a2044-c1bd-11e4-bd8c-dfc1db8b0182
            brand: joyent
            alias: vmtest
            quota: 5
            max_physical_memory: 512
            tags:
              label: 'test vm'
              owner: 'sjorge'
            nics:
              "82:1b:8e:49:e9:12":
                nic_tag: trunk
                mtu: 1500
                ips:
                  - 172.16.1.123/16
                  - 192.168.2.123/24
                vlan_id: 10
              "82:1b:8e:49:e9:13":
                nic_tag: trunk
                mtu: 1500
                ips:
                  - dhcp
                vlan_id: 30
            filesystems:
              "/bigdata":
                source: "/bulk/data"
                type: lofs
                options:
                  - ro
                  - nodevices

    kvmtest.example.org:
      smartos.vm_present:
        - vmconfig:
            brand: kvm
            alias: kvmtest
            cpu_type: host
            ram: 512
            vnc_port: 9
            tags:
              label: 'test kvm'
              owner: 'sjorge'
            disks:
              disk0:
                size: 2048
                model: virtio
                compression: lz4
                boot: true
            nics:
              "82:1b:8e:49:e9:15":
                nic_tag: trunk
                mtu: 1500
                ips:
                  - dhcp
                vlan_id: 30

    docker.example.org:
      smartos.vm_present:
        - config:
            auto_import: true
            reprovision: true
        - vmconfig:
            image_uuid: emby/embyserver:latest
            brand: lx
            alias: mydockervm
            quota: 5
            max_physical_memory: 1024
            tags:
              label: 'my emby docker'
              owner: 'sjorge'
            resolvers:
              - 172.16.1.1
            nics:
              "82:1b:8e:49:e9:18":
                nic_tag: trunk
                mtu: 1500
                ips:
                  - 172.16.1.118/24
                vlan_id: 10
            filesystems:
              "/config:
                source: "/vmdata/emby_config"
                type: lofs
                options:
                  - nodevices

    cleanup_images:
      smartos.image_vacuum

.. note::

    Keep in mind that when removing properties from vmconfig they will not get
    removed from the vm's current configuration, except for nics, disk, tags, ...
    they get removed via add_*, set_*, update_*, and remove_*. Properties must
    be manually reset to their default value.
    The same behavior as when using 'vmadm update'.

.. warning::

    For HVM (bhyve and KVM) brands the `image_uuid` field should go on the boot disks,
    this disk should NOT have a size specified. (See man vmadm)

�NZsmartoscCs"dtvr
dtvr
dSdd�t�fS)z5
    Provides smartos state provided for SmartOS
    �vmadm.create�imgadm.listTFz;{} state module can only be loaded on SmartOS compute nodes)�__salt__�format�__virtualname__�rr�G/opt/saltstack/salt/lib/python3.10/site-packages/salt/states/smartos.py�__virtual__�s��r	cCs6|r|�d�}t|�dkr|d}|d}||fSdS)z7
    Split a smartos docker uuid into repo and tag
    �:��r)NN)�split�len)�uuid�tag�reporrr�_split_docker_uuid�s
rcCs,|rtdd�|�d�D��gd�krdSdS)zb
    Check if uuid is a valid smartos uuid

    Example: e69a0918-055d-11e5-8912-e3ceb6df4cf8
    css�|]}t|�VqdS�N)r)�.0�xrrr�	<genexpr>�s�z_is_uuid.<locals>.<genexpr>�-)��rr�TF)�listr
)rrrr�_is_uuid�s$rcCst|�\}}|o|S)z_
    Check if uuid is a valid smartos docker uuid

    Example plexinc/pms-docker:plexpass
    )r)rrrrrr�_is_docker_uuid�srcCs�i}tj�d�rLtjj�dd��4}|D])}tjj�|�}|ddkr#qd|vr(q|�	d�}|d�
��
d�||d��<qWd�n1sGwYt�
d	|�|S)
z)
    Loads and parses /usbkey/config
    �/usbkey/config�rr�#�=r�"Nz(smartos.config - read /usbkey/config: %s)�os�path�isfile�salt�utils�filesZfopen�stringutilsZ
to_unicoder
�strip�lower�log�debug)�config�config_fileZoptvalrrr�_load_config�s
 ��	r0c
Cs�zftjj�dd��M}|�d�tjj�t|����D]4}dt	||�vr<||�
d�r2||�d�s<d||�d�||<|�tjj�
|�d||�d���qWd�n1sYwYt�d	|�WdStypYd
Sw)z
    writes /usbkey/config
    r�wz&#
# This file was generated by salt
#
� r"r!�
Nz)smartos.config - wrote /usbkey/config: %sFT)r&r'Z
atomicfileZatomic_open�write�odict�OrderedDict�sorted�items�str�
startswith�endswithr)Zto_strr,r-�OSError)r.r/�proprrr�
_write_config�s&
������r>cCs�d}t|tjjj�rptjj��}|D][}||vr||||<qt||tjjj�s*qg||<||D]:}|||}||||<d|vrL|d��|d<d|vred�tt|d���	d�d�
d��|d<||�|�q2q|St�
d�|S)	z$
    Parse vm_present vm config
    N�macZ	vrrp_vridz00:00:5e:00:01:{}r���rz4smartos.vm_present::parse_vmconfig - failed to parse)�
isinstancer&r'r5r6r+r�hex�intr
�zfill�appendr,�error)r.Z	instances�vmconfigr=�instanceZinstance_configrrr�_parse_vmconfig�s4���
�rIcCs~t|���}t|���}tjj�||�}tjj�||�D] }||vr-||ddkr-||=||vr<||ddkr<||=q|S)z!
    get modified properties
    �old��new)�set�keysr&r'�dataZ
compare_dicts)�current�stateZcurrent_keysZ
state_keys�changedZchangerrr�_get_instance_changess�rSc
Cs�d|vr�td|d��di�}|�dd�}|�di�}d|vr*d|vr*|d|d<|dkr�d	|d<|�dd
�|d<d|vrBi|d<|�di�D]�}|d|}d
|����}|sZqH|dkr�z
t�|d�|d��}Wnty}zg}WYd}~nd}~wwt|t�r�|nt�|�D]#}|�d�}|D]}	|	�	|d�d��r�|�
|	�q�|�d�|��q�n||dvr�qHt|t�r�t�
|�|d|<qH||d|<qH|S)N�
image_uuid�
imgadm.get�manifest�typezzone-dataset�tagsZkernel_version�dockerTz4.3.0�internal_metadataz
docker:configzdocker:�
docker:envrKr!r)r�getr+�json�loads�
ValueErrorrArr
r:�removerE�join�dumps)
rGZ	imgconfigZimgtypeZimgtags�var�valZ
val_config�eZconfig_env_varZimg_env_varrrr�
_copy_lx_varssT�����

��

rfcCs|��}|iddd�}t�}t|t�r|rdnd}|sd}||vrUt||�t|�kr;d|d<d|�d	|�d
�|d<n3d|d<d|�d
|�d
�|d<||d|<|||<nd|d<d|�d
|�d
�|d<||d|<|||<tds�|dr�t|�|d<|ds�d�||�|d<|S)z�
    Ensure configuration property is set to value in /usbkey/config

    name : string
        name of property
    value : string
        value of property

    NrK��name�changes�result�comment�true�falseTrj�	property z already has value "r"rkzupdated property z
 with value "rizadded property �testz3Could not add property {} with value "{}" to config)r+r0rA�boolr9�__opts__r>r)rh�value�retr.rrr�config_presentSs6


��rtcCs�|��}|iddd�}t�}||vr(d|d<d|�d�|d<d|d	|<||=nd|d<d|�d
�|d<tdsB|d	rBt|�|d<|S)zp
    Ensure configuration property is absent in /usbkey/config

    name : string
        name of property

    NrKrgTrjrn� deletedrkri�
 is absentro)r+r0rqr>)rhrsr.rrr�
config_absent�srw�imgapicCs�|iddd�}|td�vrd|d<d|�d�|d	<|Std
r'i}d|d<n
td||�}||v|d<|drHd|�d�|d	<d
|d|<|Sd|�d�|d	<d|vr`d�|d	|d�|d	<|S)z�
    Ensure an image source is present on the computenode

    name : string
        source url
    source_type : string
        source type (imgapi or docker)
    NrKrg�imgadm.sourcesTrj�
image source � is presentrkrozimgadm.source_addz addedZaddedriz
 not added�Error�{}: {}�rrqr)rhZsource_typers�resrrr�source_present�s$	�
�r�cCs�|iddd�}|td�vrd|d<d|�d�|d	<|Std
r'i}d|d<ntd|�}||v|d<|drGd|�d�|d	<d
|d|<|Sd|�d�|d	<d|vr_d�|d	|d�|d	<|S)zc
    Ensure an image source is absent on the computenode

    name : string
        source url
    NrKrgryTrjrzrvrkrozimgadm.source_deleteruZdeletedriz not deletedr|r}r~)rhrsrrrr�
source_absent�s$�
�r�cCsX|iddd�}t|�r#td|�r#d|d<d�|td|��|d<|S|td	�vr8d|d<d
|�d�|d<|St|�r@|g}ntd�}||vr�td
rcd|d<i}t|�r\||d<n&||||<ntd|�}t|�rt||v|d<nt|�r�td|�du|d<|dr�d
|�d�|d<||d<|Sd
|�d�|d<|Sd|d<d
|�d�|d<|S)z]
    Ensure image is present on the computenode

    name : string
        uuid of image
    NrKrg�imgadm.docker_to_uuidTrjzimage {} ({}) is presentrkr�image r{zimgadm.availroz$00000000-0000-0000-0000-000000000000�
imgadm.importz	 importedriz was unable to be importedFz does not exists)rrrrqr)rhrsZavailable_imagesrrrr�
image_present�sH
�'� �

��r�cCs`|iddd�}d}t|�r|}t|�rtd|�}|r"|td�vr0d|d<d|�d	�|d
<|S|tddd
�vrGd|d<d|�d�|d
<|StdrPd|d<n<td|�}d}|dddkr�|r�|d7}td|dd�d|dvr�td|dd�}nd}|sbntd|�|td�v|d<|r�d�||�|d
<nd|�d�|d
<d|d|<|S)z�
    Ensure image is absent on the computenode

    name : string
        uuid of image

    .. note::

        computenode.image_absent will only remove the image if it is not used
        by a vm.
    NrKrgr�rTrjr�rvrk�
vmadm.listrT��orderFz currently in use by a vmrorUrrVrh�docker-layerr�
imgadm.deleter�originz image {} and {} children deletedruri)rrrrqr)rhrsr�imageZimage_countrrr�image_absent#sH#��
��	
�r�cCs�|��}|iddd�}g}td�D]C}d|vrq|dtkr q|ddvr'qd|vrUt|d�r9|�|d�qt|d�rUtd	|d�|d<|dsNq|�|d�qtd
dd�D]}||vrh|�|�q]d
|d<td�D]a}||vryqrtd|�}|dddkr�|r�|dd}|td|�vr�d|d|<nd|d<d|d<d|dvr�td|dd�}nd}|s�qr|td|�vr�d|d|<qrd|d<d|d<qr|dr�|ds�d|d<|S|dr�|dr�d|d<|S)z�
    Delete images not in use or installed via image_present

    .. warning::

        Only image_present states that are included via the
        top file will be detected.
    NrKrgzstate.show_lowstaterQZfun)r�rhr�r�rTr�TrjrrUrVr�rr�riFzfailed to delete imagesrkr�zno images deletedzimages deleted)r+rrrrEr)rhrsZimagesrQrTr�rrr�image_vacuum`sd	�
���

�r�c	CsT
|��}|iddd�}|r|ni}ddddddddd�}|�|�t�d||�gd�d	d
dd
d�d
gd�}ddg}gd�}t||d�}t�d||�d|vrT||d<d|vr�td|d�}|rd|n|d|d<|dtd�vr�|dr�tds�td|d�}	td|d�|d<|d|	vr�d|d<d�|d�|d<n
d|d<d�|d�|d<d|vr�|dngD]@}
d|
vr�|
dtd�vr�|dr�tds�td|
d�}	|
d|	vr�d|d<d�|
d�|d<q�d|d<d�|
d�|d<q�d |v�r$|D]#}||d v�r�qt|d |t	��r"t
�|d |�|d |<�q|d!d"k�r4|d#�r4t|�}|ddu�r=|S|dtd$dd%�v�r@d|d<|td&|ddd'�idd(�}d|d)v�ru|d)d|d*<|d+d|d)d<d|d)v�r�g}|d)dD]6}
d}
d|d+v�r�|d+dD]}|d
�
|
d
��r�|d
}
n�q�|
�s�|
d
=n|
|
d
<|�|
��q�||d)d<|d)D]d}||dv�s�||d,v�s�||d-v�rސq�||d+v�rt|d+|t	��s�t|d+|t��r	|d+||d)|k�r�q�nd.�|d+|�d.�|d)|�k�r�q�|d)||d/|<�q�|d,D�]}||d-v�r:�q.|d0|��}t�d1||�|d k�r�|d)�d2d��r�d |d)v�rci|d)d <|D]}|d+�|i��|d�}|du�r�||d)d |<�qe||d)v�r�|d)|du�r�|d)|D]Q}||d+|v�r�|d+|||d)||k�r��q�|�s�||d+|v�rĐq�d3|��|d/v�r�i|d/d3|��<|d)|||d/d3|��|<�q�|�rA||d+v�rA|d+|du�rA|d+|D]=}||d)v�r |d)|du�r ||d)|v�r �qd4|��|d/v�r3g|d/d4|��<|d/d4|���|��q�q.|dD�]Q}||d-v�rS�qG||d)v�r|d)|du�r|d)|D]�}d}|d+|D]�}|d||v�r��qs||d|||d|k�r�d}t||�}i}|D]	}||||<�q�|D]}t||t	��r�||�s��q�||v�r�||||<�q�|�r�d5|��|d/v�r�g|d/d5|��<||d|||d|<|d/d5|���|��qs|�rd6|��|d/v�rg|d/d6|��<|d/d6|���|��qi||d+v�r�|d+|du�r�|d+|D]e}d}||d)v�rn|d)|du�rn|d)|D]!}|d||v�rY�qL||d|||d|k�rld}�qL|�r�d4|��|d/v�r�g|d/d4|��<|d/d4|���||d|��q2�qGd}td�s!|d/�r!|d+d!d7k�r�|d8�r�d9|d/v�s�d:|d/v�s�d;|d/v�r�|d)dtd$dd<d=�v�r�d}td>|d)ddd?�td@dP|d)ddd?�|d/��}t|t��sdA|v�rd|d<d.�|dA�|d<nd|d<|d/|dB|d)d<|d�rtd�r7|d/|dB|d)d<|d)d|dBv�r�|dB|d)d�r�dC�|d)d�|d<|d8�r�|d+d!d7k�r�td�s�|d)dtd$dd<d=�v�r�tdD|d)ddd?�|�r�tdE|d)ddd?�ni|dB<dF�|d)d�|d<d|d+v�r|d*|d+dk�r|dG�rtdH|d)dd|d*dI�}t|t��s�dA|v�r�d|d<dJ�|d)d�|d<|SdK�|d)d�|d<|d)d|dBv�ri|dB|d)d<|d*|dB|d)dd<|St�dL|�|SdM�|d)d�|d<t|t��s>dA|v�r>d.�|dA�|d<|Sd|d<d|v�rdg}|dD]}
d
|
v�rY|
d
=|�|
��qO||d<|d�r�td�swtdNdPi|��nd}t|t��s�dA|v�r�d|d<d.�|dA�|d<|Sd|d<||dB|d<dO�|d�|d<|S)Qa�
    Ensure vm is present on the computenode

    name : string
        hostname of vm
    vmconfig : dict
        options to set for the vm
    config : dict
        fine grain control over vm_present

    .. note::

        The following configuration properties can be toggled in the config parameter.
          - kvm_reboot (true)                - reboots of kvm zones if needed for a config update
          - auto_import (false)              - automatic importing of missing images
          - auto_lx_vars (true)              - copy kernel_version and docker:* variables from image
          - reprovision (false)              - reprovision on image_uuid changes
          - enforce_tags (true)              - false = add tags only, true =  add, update, and remove tags
          - enforce_routes (true)            - false = add tags only, true =  add, update, and remove routes
          - enforce_internal_metadata (true) - false = add metadata only, true =  add, update, and remove metadata
          - enforce_customer_metadata (true) - false = add metadata only, true =  add, update, and remove metadata

    .. note::

        State ID is used as hostname. Hostnames must be unique.

    .. note::

        If hostname is provided in vmconfig this will take president over the State ID.
        This allows multiple states to be applied to the same vm.

    .. note::

        The following instances should have a unique ID.
          - nic : mac
          - filesystem: target
          - disk : path or diskN for zvols

        e.g. disk0 will be the first disk added, disk1 the 2nd,...

    .. versionchanged:: 2019.2.0

        Added support for docker image uuids, added auto_lx_vars configuration, documented some missing configuration options.

    NrKrgTF)�
kvm_reboot�auto_import�auto_lx_vars�reprovisionZenforce_tagsZenforce_routesZenforce_internal_metadataZenforce_customer_metadataz#smartos.vm_present::%s::config - %s)rXZcustomer_metadatarZZroutesr?r$�target)Znics�disks�filesystemsZpci_devicesr�)�
collectionrH�create_onlyz	docker:idzdocker:restartcount)r[z
docker:cmdzdocker:entrypointrHz%smartos.vm_present::%s::vmconfig - %s�hostnamerTr�rr�ror�rjzfailed to import image {}rkzimage {} not installedr�rZZbrandZlxr�r�r�z	vmadm.get��key)rQrPrR�reprovision_uuidrQr�rPr�r�z{}rRZenforce_z#smartos.vm_present::enforce_%s = %srYZset_Zremove_Zupdate_Zadd_Zkvmr�Z	add_disksZupdate_disksZremove_disks�
state=running�r��search�
vmadm.stop)�vmr��vmadm.updater|riz
vm {} updatedzvmadm.reboot�vmadm.startzvm {} is up to dater�zvmadm.reprovision)r�r�r�z!vm {} updated, reprovision failedzvm {} updated and reprovisionedzismartos.vm_present::%s::reprovision - image_uuid in state does not match current, reprovision not allowedzvm {} failed to be updatedrz
vm {} createdr)r+�updater,r-rIrrqrrArr]rbrfr;rE�dictr\rSrp�warning)rhrGr.rsZstate_configZ
vmconfig_typeZvmconfig_docker_keepZvmconfig_docker_arrayZdocker_uuidrZdiskrcZ	new_disksr$Zcdiskr=r�ZenforcerdrHZ	state_cfgZadd_instanceZcurrent_cfgrRZ
update_cfgZremove_instanceZkvm_needs_startZrretrrrr�
vm_present�s�.�

���������

������
��
�������
��
���������
����

���
����
�

�
�3�
��*��&�
��


��r�FcCs�|��}|iddd�}|tddd�vr"d|d<d	|�d
�|d<|Stds<|r1td
|ddd�td|dd�|d<nd|d<t|dt�s[|d�d�r[d|d<d|��|d<|Sd	|�d�|d<d|d|<|S)z�
    Ensure vm is absent on the computenode

    name : string
        hostname of vm
    archive : boolean
        toggle archiving of vm on removal

    .. note::

        State ID is used as hostname. Hostnames must be unique.

    NrKrgr�r�r�Trj�vm rvrkror�)r�r�Zarchive_on_deletezvmadm.deleter�r|Fzfailed to delete vm ruri�r+rrqrArpr\)rh�archiversrrr�	vm_absent�s(���r�cC�|��}|iddd�}|tdddd�vr#d|d	<d
|�d�|d<|Std
r)dntd|dd�|d	<t|d	t�sN|d	�d�rNd|d	<d|��|d<|Sd|d|<d
|�d�|d<|S)z�
    Ensure vm is in the running state on the computenode

    name : string
        hostname of vm

    .. note::

        State ID is used as hostname. Hostnames must be unique.

    NrKrgr�r�r�r�Trjr�z already runningrkror�r�r|Fzfailed to start Zrunningriz startedr��rhrsrrr�
vm_running��
���r�cCr�)z�
    Ensure vm is in the stopped state on the computenode

    name : string
        hostname of vm

    .. note::

        State ID is used as hostname. Hostnames must be unique.

    NrKrgr�r�z
state=stoppedr�Trjr�z already stoppedrkror�r�r|Fzfailed to stop �stoppedriz stoppedr�r�rrr�
vm_stopped�r�r�)rxr)F) �__doc__r]�loggingr#Zsalt.utils.atomicfiler&Zsalt.utils.dataZsalt.utils.files�	getLogger�__name__r,rr	rrrr0r>rIrSrfrtrwr�r�r�r�r�r�r�r�r�rrrr�<module>sBx


#:6
 #!6=
N
,"