Files
proxmox/__pycache__/list_vms.cpython-312.pyc

86 lines
18 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00><>Ti<54>4<00>
<00><00>dZddlZddlZddlZddlmZmZmZmZddl m
Z
dde de fd<07>Z de
fd<08>Zd e
d
e d e d e de f
d <0A>Zd e
d
e d e d e de f
d<0E>Zd e
d
e d e d e de f
d<0F>Zd e
deee effd<10>Zdeee effd<12>Zd<13>Zedk(re<14>yy)z<>
List all Proxmox VMs with VMID, Name, IP Address, FQDN, and Description.
This script connects to a Proxmox cluster and retrieves comprehensive
information about all virtual machines (both QEMU VMs and LXC containers).
<EFBFBD>N)<04>Dict<63>List<73>Optional<61>Any)<01>
ProxmoxAPI<EFBFBD>env_path<74>returnc<00>V<00>|<00>tjjd<02>}i}tjj|<00>r<> t |d<03>5}|D]<5D>}|j <00>}|r|j d<04>r<01>'d|vs<01>,|jdd<06>\}}|j <00>}|j <00>j d<07>j d<08>}|||<<00><> ddd<01>|S|S#1swY|SxYw#t$r,}td |<00>d
|<06><00>tj<00> <0B>Yd}~|Sd}~wwxYw) z*Load environment variables from .env file.Nz~/.env<6E>r<>#<23>=<3D><00>"<22>'zWarning: Could not load <20>: <20><01>file) <0C>os<6F>path<74>
expanduser<EFBFBD>exists<74>open<65>strip<69>
startswith<EFBFBD>split<69> Exception<6F>print<6E>sys<79>stderr)r<00>env_vars<72>f<>line<6E>key<65>value<75>es <20>(/home/intlc/projects/proxmox/list_vms.py<70> load_env_filer's<00><00><0F><17><15>7<EFBFBD>7<EFBFBD>%<25>%<25>h<EFBFBD>/<2F><08><11>H<EFBFBD> <09>w<EFBFBD>w<EFBFBD>~<7E>~<7E>h<EFBFBD><1F> O<01><15>h<EFBFBD><03>$<24> .<2E><01><1D>
.<2E>D<EFBFBD><1F>:<3A>:<3A><<3C>D<EFBFBD><1F>4<EFBFBD>?<3F>?<3F>3<EFBFBD>#7<> <20><1A>d<EFBFBD>{<7B>%)<29>Z<EFBFBD>Z<EFBFBD><03>Q<EFBFBD>%7<>
<EFBFBD><03>U<EFBFBD>!<21>i<EFBFBD>i<EFBFBD>k<EFBFBD><03> %<25> <0B> <0B> <0A> 3<> 3<>C<EFBFBD> 8<> ><3E> ><3E>s<EFBFBD> C<><05>(-<2D><08><13> <0A>
.<2E> .<2E> <14>O<EFBFBD>8<EFBFBD>O<EFBFBD> .<2E> <14>O<EFBFBD><4F><19> O<01> <11>,<2C>X<EFBFBD>J<EFBFBD>b<EFBFBD><11><03><<3C>3<EFBFBD>:<3A>:<3A> N<> N<> <13>O<EFBFBD><4F> O<01>s=<00> C3<00>.C&<03>?AC&<03>C3<00>&C0<07>+C3<00>0C3<00>3 D(<03><!D#<03>#D(c <00>p
<00>t<00>}tjd|jdd<02><00>}t tjd|jdd<04><00><00>}tjd|jdd<06><00>}tjd|jdd<08><00>}tjd |jd <09><00>}tjd
|jd
<EFBFBD><00>}tjd |jd d <0C><00>j <00>d k(}|<05>sP|<06>sMtjd<0E>}|<08>r5tj j|<08><00>rt|<08>5} tj| <09>}
|
jdi<00>jd|<01>}|
jdi<00>jd|<02>}|
jdi<00>jd|<07>}|
jdi<00>jd|<03>}|
jdi<00>jd|<04>}|
jdi<00>jd<16>}|
jdi<00>jd<17>}ddd<18>|<05>s&|<06>s#tdtj<00><1A>tdtj<00><1A>tdtj<00><1A>tdtj<00><1A>tdtj<00><1A>tdtj<00><1A>td tj<00><1A>td!tj<00><1A>td"tj<00><1A>td#tj<00><1A>tjd$<24> |rt||||||d%<25>&<26>} nt|||||d%<25>'<27>} | j j<00>| S#1swY<00><01>vxYw#t"$<00>r2} t%| <0C>} d(| vsd)| vrztd*|<01>d+|<02>d,<2C>tj<00><1A>td-|<01><00>tj<00><1A>td.|<02><00>tj<00><1A>td/tj<00><1A>n<>d0| vsd1| j <00>vrRtd2tj<00><1A>td3tj<00><1A>td4tj<00><1A>ntd5| <0C><00>tj<00><1A>tjd$<24>Yd} ~ yd} ~ wwxYw)6zLInitialize Proxmox API connection from environment variables or config file.<2E> PROXMOX_HOSTz 192.168.6.247<EFBFBD> PROXMOX_PORT<52>8006<30> PROXMOX_USERzroot@pam<61>PROXMOX_TOKEN_NAME<4D> mcpserver<65>PROXMOX_TOKEN_VALUE<55>PROXMOX_PASSWORD<52>PROXMOX_VERIFY_SSL<53>false<73>true<75>PROXMOX_MCP_CONFIG<49>proxmox<6F>host<73>port<72>
verify_ssl<EFBFBD>auth<74>user<65>
token_name<EFBFBD> token_value<75>passwordNz7Error: PROXMOX_TOKEN_VALUE or PROXMOX_PASSWORD requiredrz!
Credentials can be provided via:z 1. Environment variablesz' 2. ~/.env file (automatically loaded)z. 3. JSON config file (set PROXMOX_MCP_CONFIG)z
Example ~/.env file:z PROXMOX_HOST=your-proxmox-hostz PROXMOX_USER=root@pamz$ PROXMOX_TOKEN_NAME=your-token-namez& PROXMOX_TOKEN_VALUE=your-token-valuer<00>PVE)r6r7r:r;r<r8<00>service)r6r7r:r=r8r?<00>ConnectTimeoutErrorz timed outz#Error: Connection to Proxmox host '<27>:z ' timed outz' - Verify the host is reachable: ping z - Check firewall allows port z, - Verify PROXMOX_HOST in ~/.env is correct<63>401<30>authenticationzError: Authentication failedz< - Verify PROXMOX_TOKEN_VALUE or PROXMOX_PASSWORD in ~/.envz% - Check user permissions in ProxmoxzError connecting to Proxmox: )r'r<00>getenv<6E>get<65>int<6E>lowerrrr<00>json<6F>loadrrr<00>exitr<00>versionr<00>str)r r6r7r:r;r<r=r8<00> config_pathr!<00>configr5r%<00> error_msgs r&<00>get_proxmox_connectionrP's<><00><00><1D><EFBFBD>H<EFBFBD> <0E>9<EFBFBD>9<EFBFBD>^<5E>X<EFBFBD>\<5C>\<5C>.<2E>/<2F>%R<> S<>D<EFBFBD> <0E>r<EFBFBD>y<EFBFBD>y<EFBFBD><1E><18><1C><1C>n<EFBFBD>f<EFBFBD>)M<>N<> O<>D<EFBFBD> <0A>9<EFBFBD>9<EFBFBD>^<5E>X<EFBFBD>\<5C>\<5C>.<2E>*<2A>%M<> N<>D<EFBFBD><13><19><19>/<2F><18><1C><1C>>R<>T_<54>1`<60>a<>J<EFBFBD><14>)<29>)<29>1<>8<EFBFBD><<3C><<3C>@U<>3V<33>W<>K<EFBFBD><11>y<EFBFBD>y<EFBFBD>+<2B>X<EFBFBD>\<5C>\<5C>:L<>-M<>N<>H<EFBFBD><13><19><19>/<2F><18><1C><1C>>R<>T[<5B>1\<5C>]<5D>c<>c<>e<>io<69>o<>J<EFBFBD> <17>x<EFBFBD><18>i<EFBFBD>i<EFBFBD> 4<>5<> <0B> <16>2<EFBFBD>7<EFBFBD>7<EFBFBD>><3E>><3E>+<2B>6<><15>k<EFBFBD>"<22> B<01>a<EFBFBD><1D><19><19>1<EFBFBD><1C><06><1D>z<EFBFBD>z<EFBFBD>)<29>R<EFBFBD>0<>4<>4<>V<EFBFBD>T<EFBFBD>B<><04><1D>z<EFBFBD>z<EFBFBD>)<29>R<EFBFBD>0<>4<>4<>V<EFBFBD>T<EFBFBD>B<><04>#<23>Z<EFBFBD>Z<EFBFBD> <09>2<EFBFBD>6<>:<3A>:<3A><<3C><1A>T<>
<EFBFBD><1D>z<EFBFBD>z<EFBFBD>&<26>"<22>-<2D>1<>1<>&<26>$<24>?<3F><04>#<23>Z<EFBFBD>Z<EFBFBD><06><02>3<>7<>7<> <0C>j<EFBFBD>Q<>
<EFBFBD>$<24>j<EFBFBD>j<EFBFBD><16><12>4<>8<>8<><1D>G<> <0B>!<21>:<3A>:<3A>f<EFBFBD>b<EFBFBD>1<>5<>5<>j<EFBFBD>A<><08> B<01> <17>x<EFBFBD> <0A>G<>c<EFBFBD>j<EFBFBD>j<EFBFBD>Y<> <0A>2<><13><1A><1A>D<> <0A>*<2A><13><1A><1A><<3C> <0A>7<>c<EFBFBD>j<EFBFBD>j<EFBFBD>I<> <0A>><3E>S<EFBFBD>Z<EFBFBD>Z<EFBFBD>P<> <0A>&<26>S<EFBFBD>Z<EFBFBD>Z<EFBFBD>8<> <0A>0<>s<EFBFBD>z<EFBFBD>z<EFBFBD>B<> <0A>'<27>c<EFBFBD>j<EFBFBD>j<EFBFBD>9<> <0A>4<>3<EFBFBD>:<3A>:<3A>F<> <0A>6<>S<EFBFBD>Z<EFBFBD>Z<EFBFBD>H<> <0B><08><08><11> <0B>%<14> <16> <20><19><19><19>%<25>'<27>%<25><1D><0E>G<EFBFBD>!<21><19><19><19>!<21>%<25><1D> <0E>G<EFBFBD> <10><0F><0F><1B><1B><1D><16><0E>] B<01> B<01><>^ <15> <14><17><01>F<EFBFBD> <09> <20>I<EFBFBD> -<2D><1B> <09>1I<31> <11>7<><04>v<EFBFBD>Q<EFBFBD>t<EFBFBD>f<EFBFBD>K<EFBFBD>P<>WZ<57>Wa<57>Wa<57> b<> <11>;<3B>D<EFBFBD>6<EFBFBD>B<><13><1A><1A> T<> <11>3<>D<EFBFBD>6<EFBFBD>:<3A><13><1A><1A> L<> <11>@<40><03>
<EFBFBD>
<EFBFBD> S<> <12>i<EFBFBD> <1F>#3<>y<EFBFBD><EFBFBD><EFBFBD>7H<37>#H<> <11>0<><03>
<EFBFBD>
<EFBFBD> C<> <11>P<>X[<5B>Xb<58>Xb<58> c<> <11>9<><13><1A><1A> L<> <11>1<>!<21><13>5<>C<EFBFBD>J<EFBFBD>J<EFBFBD> G<> <0B><08><08><11> <0B> <0B><> <14>s'<00>6DO,<03>*AO9<00>,O6<07>9
T5<03>D(T0<03>0T5r5<00>node<64>vmid<69>vm_typec<00>$<00>g} |dk(r<> |j|<01>j|<02>jd<02>j<00>}|rhd|vrd|dD]\}d|vs<01>|dD]M}|jd<05>dk(s<01>|jdd<08>j d <09>r<01>:|j |d<00><00>O<00>^ |dk(r8|j|<01>j|<02>j j<00>n7|j|<01>j|<02>j j<00>}|j<00>D]~\} }
| j d
<EFBFBD>s<01>t|
t<00>s<01>)d |
vs<01>.|
jd <0B>d jd <0A>djd<0F>d} | s<01>i| |vs<01>n|j | <0B><00><> |dk(r<>|s<> |j|<01>j|<02>jjd<11><12>} | rVd| vrR| dj<00>j<00>} |j| D<00>cgc]}|j d <09>r<01>|<0E><02>c}<0E>|rdj#|<04>SdS#Y<00><01><>xYw#Y<00><>xYwcc}w#Y<00>-xYw#t $rY<00>;wxYw)zGet IP address of a VM.<2E>qemuznetwork-get-interfaces<65>resultz ip-addresseszip-address-type<70>ipv4z
ip-address<73>z127.<2E>netzip=r<00>,r<00>/<2F>lxcz hostname -I<><01>command<6E>outz, <20>N/A)<12>nodesrU<00>agentrEr<00>appendrNr\<00>items<6D>
isinstancerLr<00>exec<65>postr<00>extendr<00>join)r5rQrRrS<00> ip_addresses<65>
interfaces<EFBFBD>iface<63>ip_inforNr#r$<00>ip_partrV<00>ips<70>ips r&<00>get_vm_ip_addressrqws<><00><00><15>L<EFBFBD>( <0A> <12>f<EFBFBD> <1C> <15>$<24>]<5D>]<5D>4<EFBFBD>0<>5<>5<>d<EFBFBD>;<3B>A<>A<>BZ<42>[<5B>_<>_<>a<>
<EFBFBD><1D>(<28>j<EFBFBD>"8<>!+<2B>H<EFBFBD>!5<>O<01><05>)<29>U<EFBFBD>2<>+0<><1E>+@<40>O<01><07>#*<2A>;<3B>;<3B>/@<40>#A<>V<EFBFBD>#K<>T[<5B>T_<54>T_<54>`l<>np<6E>Tq<54>T|<7C>T|<7C>~D<02>UE<02>$0<>$7<>$7<><07> <0C>8M<38>$N<>O<01>O<01> <11>DK<44>v<EFBFBD>DU<44>W<EFBFBD>]<5D>]<5D>4<EFBFBD>(<28>-<2D>-<2D>d<EFBFBD>3<>:<3A>:<3A>><3E>><3E>@<40>[b<>[h<>[h<>im<69>[n<>[r<>[r<>sw<73>[x<>[<>[<>\D<02>\D<02>\F<02>F<EFBFBD>$<24>l<EFBFBD>l<EFBFBD>n<EFBFBD> 9<>
<EFBFBD><03>U<EFBFBD><16>><3E>><3E>%<25>(<28>Z<EFBFBD><05>s<EFBFBD>-C<><1C><05>~<7E>"'<27>+<2B>+<2B>e<EFBFBD>"4<>Q<EFBFBD>"7<>"=<3D>"=<3D>c<EFBFBD>"B<>1<EFBFBD>"E<>"K<>"K<>C<EFBFBD>"P<>QR<51>"S<><07>"<22>w<EFBFBD>l<EFBFBD>'B<>(<28>/<2F>/<2F><07>8<>  9<> <13>e<EFBFBD> <1B>L<EFBFBD> <15> <20><1D><1D>t<EFBFBD>,<2C>0<>0<><14>6<>;<3B>;<3B>@<40>@<40><1D>@<40>W<><06><19>e<EFBFBD>v<EFBFBD>o<EFBFBD> <20><15>-<2D>-<2D>-<2D>/<2F>5<>5<>7<>C<EFBFBD> <20>'<27>'<27>c<EFBFBD>(W<><02><12><1D><1D>v<EFBFBD>AV<41><12>(W<>X<>'3<>4<EFBFBD>9<EFBFBD>9<EFBFBD>\<5C> "<22>=<3D><05>=<3D><>= <15><14><> <11> <10><>)X<01><> <15><14><> <14> <0A> <0C> <0A>s<EFBFBD><00>J<00>AI(<00>I(<00>7!I(<00>I(<00>2BI0<00>I0<00> I0<00>%:I0<00> I0<00>%I0<00>8J<00>A0I<<00>1I7<08>I7<08> I<<00>(I-<03>*J<00>0I4<03>2J<00>7I<<00><J<03>>J<00> J<03>Jc<00>2<00>d} |dk(r8|j|<01>j|<02>jj<00>n7|j|<01>j |<02>jj<00>}|jd<03>xs$|jdd<05>j d<06>d}|r<> |dk(rB|j|<01>j|<02>j d<08>jd d
i<01> <0B>}n:|j|<01>j |<02>jjd
<EFBFBD> <0B>}|rC|dk(r"d |vrd |d vr|d d j<00>}n|dk(rd|vr|dj<00>}|r|SdS#|r|}Y<00>xYw#t$rY<00>wxYw)zGet FQDN of a VM.NrU<00>hostname<6D>namerX<00>.rrfr^z hostname -fr]rVzout-datar\r_r`) rarUrNrEr\rrbrgrfrr)r5rQrRrS<00>fqdnrNrsrVs r&<00> get_vm_fqdnrw<00>s<><00><00> <0F>D<EFBFBD> <0A>@G<>6<EFBFBD>@Q<><17><1D><1D>t<EFBFBD>$<24>)<29>)<29>$<24>/<2F>6<>6<>:<3A>:<3A><<3C>W^<5E>Wd<57>Wd<57>ei<65>Wj<57>Wn<57>Wn<57>os<6F>Wt<57>W{<7B>W{<7B>W<57>W<57>XB<02><06><19>:<3A>:<3A>j<EFBFBD>)<29>Q<>V<EFBFBD>Z<EFBFBD>Z<EFBFBD><06><02>-C<>-I<>-I<>#<23>-N<>q<EFBFBD>-Q<><08> <13> $<24><1A>f<EFBFBD>$<24>$<24>]<5D>]<5D>4<EFBFBD>0<>5<>5<>d<EFBFBD>;<3B>A<>A<>&<26>I<>N<>N<>Xa<58>cp<63>Wq<57>N<>r<>F<EFBFBD>$<24>]<5D>]<5D>4<EFBFBD>0<>4<>4<>T<EFBFBD>:<3A>?<3F>?<3F>D<>D<>]<5D>D<>[<5B>F<EFBFBD><19><1E>&<26>(<28>X<EFBFBD><16>-?<3F>J<EFBFBD>RX<52>Ya<59>Rb<52>Db<44>%<25>h<EFBFBD>/<2F>
<EFBFBD>;<3B>A<>A<>C<><04> <20>E<EFBFBD>)<29>e<EFBFBD>v<EFBFBD>o<EFBFBD>%<25>e<EFBFBD>}<7D>2<>2<>4<><04><18>4<EFBFBD>"<22>U<EFBFBD>"<22><> $<24><1B>#<23>D<EFBFBD><44> <14> <0A> <0C> <0A>s%<00>B.F
<00>3CE?<00>?F<03>F
<00>
F<03>Fc<00>0<00> |dk(r8|j|<01>j|<02>jj<00>n7|j|<01>j |<02>jj<00>}|jdd<03>S#t
$rYywxYw)zGet description of a VM.rU<00> descriptionr`)rarUrNrEr\r)r5rQrRrSrNs r&<00>get_vm_descriptionrz<00>s<><00><00><15>@G<>6<EFBFBD>@Q<><17><1D><1D>t<EFBFBD>$<24>)<29>)<29>$<24>/<2F>6<>6<>:<3A>:<3A><<3C>W^<5E>Wd<57>Wd<57>ei<65>Wj<57>Wn<57>Wn<57>os<6F>Wt<57>W{<7B>W{<7B>W<57>W<57>XB<02><06><15>z<EFBFBD>z<EFBFBD>-<2D><15>/<2F>/<2F><> <14><15><14><15>s<00>BB <00> B<03>Bc <00><><00>g} |jj<00>}|D<00>]Y}|d} |j|<04>jj<00>}|D]y}t|d<00>}|jdd|<07><00><02>}t |||d<05>} t |||d<05>}
t |||d<05>} |j||d||jdd<08>|
| | d <09><08><00>{ |j|<04>jj<00>} | D]y}t|d<00>}|jdd|<07><00><02>}t |||d<0F>} t |||d<0F>}
t |||d<0F>} |j||d||jdd<08>|
| | d <09><08><00>{<00><01>\ |jd<14><00><15>|S#t$r+} td
|<04>d | <0C><00>tj<00> <0C>Yd } ~ <0C><>d } ~ wwxYw#t$r,} td|<04>d | <0C><00>tj<00> <0C>Yd } ~ <0C><01><>d } ~ wwxYw#t$r=} td| <0C><00>tj<00> <0C>tjd<13>Yd } ~ <0C><>d } ~ wwxYw)zList all VMs across all nodes.rQrRrtzVM-rU<00>QEMU<4D>status<75>unknown)rRrt<00>typerQr}<00>
ip_addressrvryz*Warning: Could not get QEMU VMs from node rrNzCT-r\<00>LXCz0Warning: Could not get LXC containers from node zError listing VMs: rc<00><00>t|d<00>S)NrR)rF)<01>xs r&<00><lambda>zlist_all_vms.<locals>.<lambda>s<00><00>s<EFBFBD>1<EFBFBD>V<EFBFBD>9<EFBFBD>~<7E><00>)r#)rarErUrLrzrqrwrcrrrrr\rJ<00>sort)r5<00>all_vmsrarQ<00> node_name<6D>qemu_vms<6D>vmrRrtryr<>rvr%<00>lxc_vmss r&<00> list_all_vmsr<73><00>si<00><00><10>G<EFBFBD>:<14><17> <0A> <0A>!<21>!<21>#<23><05><19>3 l<01>D<EFBFBD><1C>V<EFBFBD> <0C>I<EFBFBD> f<01>"<22>=<3D>=<3D><19>3<>8<>8<><<3C><<3C>><3E><08>"<22><17>B<EFBFBD><1E>r<EFBFBD>&<26>z<EFBFBD>?<3F>D<EFBFBD><1D>6<EFBFBD>6<EFBFBD>&<26>C<EFBFBD><04>v<EFBFBD>,<2C>7<>D<EFBFBD>#5<>W<EFBFBD>i<EFBFBD><14>v<EFBFBD>"V<>K<EFBFBD>!2<>7<EFBFBD>I<EFBFBD>t<EFBFBD>V<EFBFBD>!T<>J<EFBFBD>&<26>w<EFBFBD> <09>4<EFBFBD><16>H<>D<EFBFBD><1B>N<EFBFBD>N<EFBFBD> $<24> $<24> &<26> )<29>"$<24>&<26>&<26><18>9<EFBFBD>"=<3D>&0<> $<24>'2<> $<16> <17><17>. l<01>!<21>-<2D>-<2D> <09>2<>6<>6<>:<3A>:<3A><<3C><07>!<21><17>B<EFBFBD><1E>r<EFBFBD>&<26>z<EFBFBD>?<3F>D<EFBFBD><1D>6<EFBFBD>6<EFBFBD>&<26>C<EFBFBD><04>v<EFBFBD>,<2C>7<>D<EFBFBD>#5<>W<EFBFBD>i<EFBFBD><14>u<EFBFBD>"U<>K<EFBFBD>!2<>7<EFBFBD>I<EFBFBD>t<EFBFBD>U<EFBFBD>!S<>J<EFBFBD>&<26>w<EFBFBD> <09>4<EFBFBD><15>G<>D<EFBFBD><1B>N<EFBFBD>N<EFBFBD> $<24> $<24> %<25> )<29>"$<24>&<26>&<26><18>9<EFBFBD>"=<3D>&0<> $<24>'2<> $<16> <17><17>?3 l<01>t <0C>L<EFBFBD>L<EFBFBD>-<2D>L<EFBFBD>.<2E> <12>N<EFBFBD><4E>E<1D> f<01><15>B<>9<EFBFBD>+<2B>R<EFBFBD>PQ<50>s<EFBFBD>S<>Z]<5D>Zd<5A>Zd<5A>e<>e<><65> f<01><>2<1D> l<01><15>H<><19> <0B>SU<53>VW<56>UX<55>Y<>`c<>`j<>`j<>k<>k<><6B> l<01><> <15><14> <0A>#<23>A<EFBFBD>3<EFBFBD>'<27>c<EFBFBD>j<EFBFBD>j<EFBFBD>9<> <0B><08><08><11> <0B> <0B><><14>sl<00>%H<00>B'F<02>H<00>B'G
<02>:H<00> G<05>!G<05>=H<00>G<05>H<00>
G?<05>!G:<05>4H<00>:G?<05>?H<00> I<03> 3I<03>I<03>vmsc<00>n<00>|s td<01>yttd<03>td<04>|D<00><00><00>ttd<05>td<06>|D<00><00><00>ttd<07>td<08>|D<00><00><00>ttd <09>td
<EFBFBD>|D<00><00><00>ttd <0B>td <0C>|D<00><00><00>ttd <0A>td<0E>|D<00><00><00>d<0F>}dd|d<00>d<12><03>ddd|d<00>d<12><03>ddd|d<00>d<12><03>dd d|d<00>d<12><03>dd d|d<00>d<12><03>dd d|d<00>d<12><03><04> }t|<02>tdt|<02>z<00>|D]b}|dd|d<00>d<12><03>d|dd|d<00>d<12><03>d|dd|d<00>d<12><03>d|dd|d<00>d<12><03>d|dd|d<00>d<12><03>d|dd|d<00>d<12><03><04> }t|<04><00>dy)zPrint VMs in a formatted table.z No VMs found.N<>VMIDc3<00>8K<00>|]}t|d<00><00><01><00>y<01>w)rRN<><01>len<65><02>.0r<EFBFBD>s r&<00> <genexpr>z!print_vm_table.<locals>.<genexpr><00><00><00><><00>$C<><12>S<EFBFBD><12>F<EFBFBD><1A>_<EFBFBD>$C<><43><00><01>Namec3<00>8K<00>|]}t|d<00><00><01><00>y<01>w)rtNr<4E>r<>s r&r<>z!print_vm_table.<locals>.<genexpr>r<>r<><00>Typec3<00>8K<00>|]}t|d<00><00><01><00>y<01>w)rNr<4E>r<>s r&r<>z!print_vm_table.<locals>.<genexpr>r<>r<>z
IP Addressc3<00>8K<00>|]}t|d<00><00><01><00>y<01>w)r<>Nr<4E>r<>s r&r<>z!print_vm_table.<locals>.<genexpr>s<00><00><><00>0U<30>2<EFBFBD><13>R<EFBFBD> <0C>5E<35>1F<31>0U<30>r<EFBFBD><00>FQDNc3<00>8K<00>|]}t|d<00><00><01><00>y<01>w)rvNr<4E>r<>s r&r<>z!print_vm_table.<locals>.<genexpr>r<>r<><00> Descriptionc3<00>JK<00>|]}|ddk7s<01> t|d<00><00><01><00>y<02>w)ryr`Nr<4E>r<>s r&r<>z!print_vm_table.<locals>.<genexpr>s)<00><00><><00>2v<32>b<EFBFBD>[]<5D>^k<>[l<>pu<70>[u<>3<EFBFBD>r<EFBFBD>-<2D>7H<37>3I<33>2v<32>s<00> #<01>#)rRrtrr<>rvry<00><rRrXz | rtrr<>rvry<00>-)r<00>maxr<78>)r<><00>
col_widths<EFBFBD>headerr<72><00>rows r&<00>print_vm_tabler<65>s_<00><00> <0E> <0A>o<EFBFBD><1E><0E><14>C<EFBFBD><06>K<EFBFBD><13>$C<>s<EFBFBD>$C<>!C<>D<><13>C<EFBFBD><06>K<EFBFBD><13>$C<>s<EFBFBD>$C<>!C<>D<><13>C<EFBFBD><06>K<EFBFBD><13>$C<>s<EFBFBD>$C<>!C<>D<><19>#<23>l<EFBFBD>+<2B>S<EFBFBD>0U<30>QT<51>0U<30>-U<>V<><13>C<EFBFBD><06>K<EFBFBD><13>$C<>s<EFBFBD>$C<>!C<>D<><1A>3<EFBFBD>}<7D>-<2D>s<EFBFBD>2v<32>TW<54>2v<32>/v<>w<> <06>J<EFBFBD><17>q<EFBFBD><1A>F<EFBFBD>+<2B>,<2C>@<40>,<2C>-<2D>S<EFBFBD><16><01>*<2A>V<EFBFBD>:L<>9M<39>P<EFBFBD>7M<37>0N<30>c<EFBFBD>RX<52>YZ<59>[e<>fl<66>[m<>Zn<5A>nn<6E>Xn<58>Qo<51>or<6F>s<73>AB<02>CM<02>NZ<02>C[<02>B\<02>\\<02>@\<02>s]<02>]`<02>ag<02>hi<02>jt<02>u{<02>j|<02>i}<02>}}<02>g}<02>`~<02>~A<03>BO<03>PQ<03>R\<03>]j<03>Rk<03>Ql<03>ll<03>Ol<03>Am<03>n<03>F<EFBFBD> <09>&<26>M<EFBFBD> <09>#<23><03>F<EFBFBD> <0B>
<1B><1C><12><13><02><13>F<EFBFBD><1A>A<EFBFBD>j<EFBFBD><16>0<>1<><10>1<>2<>#<23>b<EFBFBD><16>j<EFBFBD><11>:<3A>f<EFBFBD>CU<43>BV<42>VV<56>@V<>5W<35>WZ<57>[]<5D>^d<>[e<>fg<66>hr<68>sy<73>hz<68>g{<7B>{{<7B>e{<7B>Z|<7C>|<>AC<02>DP<02>AQ<02>RS<02>T^<02>_k<02>Tl<02>Sm<02>mm<02>Qm<02>@n<02>nq<02>rt<02>u{<02>r|<02>}~<02>I<03>JP<03>Q<03>~R<03>RR<03>|R<03>qS<03>SV<03>WY<03>Zg<03>Wh<03>ij<03>ku<03>vC<04>kD<04>jE<04>EE<04>hE<04>VF<04>G<04><03> <0A>c<EFBFBD>
<EFBFBD>r<>c<00>D<00>t<00>}t|<00>}t|<01>y)zMain function.N)rPr<>r<>)r5r<>s r&<00>mainr<6E>,s<00><00>$<24>&<26>G<EFBFBD>
<16>w<EFBFBD>
<1F>C<EFBFBD><12>3<EFBFBD>r<><00>__main__)N)<16>__doc__rrrH<00>typingrrrr<00> proxmoxerrrL<00>dictr'rPrqrwrzr<>r<>r<><00>__name__<5F>r<>r&<00><module>r<>s<00><01><04>
<EFBFBD>
<EFBFBD> <0B>,<2C>,<2C> <20><14>C<EFBFBD><14>4<EFBFBD><14>0N<14>
<EFBFBD>N<14>`.><3E>z<EFBFBD>.><3E><13>.><3E>C<EFBFBD>.><3E>#<23>.><3E>RU<52>.><3E>`#<23><1A>#<23>3<EFBFBD>#<23>c<EFBFBD>#<23>C<EFBFBD>#<23>C<EFBFBD>#<23>><15>
<EFBFBD><15>#<23><15>S<EFBFBD><15>3<EFBFBD><15>SV<53><15>B<13>*<2A>B<13><14>d<EFBFBD>3<EFBFBD><03>8<EFBFBD>n<EFBFBD>)=<3D>B<13>H<13><04>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E>,<2C><13>4<18>  <0C>z<EFBFBD><19><08>F<EFBFBD>r<>