
    -_g%                     |    d dl Z d dlZd dlZd dlmZmZmZmZ  G d de      Z G d dee      Z	 G d deee      Z
y)	    N)PluginRedHatPluginDebianPluginUbuntuPluginc                   T    e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZd Zg fdZd Zd	 Zy
)
OVNCentralz
OVN Northdovn_central)networkvirt)zovn-dbs-bundle.*ovn_cluster_north_db_server c                    | j                  ||      }| j                  r| j                  d| | j                        }|d   dk7  sd|d   vr | j                  d| j                          |S t	        j
                  |      }|d   j                  d      D ]'  }|j                  |      s| j                  ||      c S  |S )Nzls )	containerstatusr   
outputz=Could not retrieve ovn_controller socket path from container )	path_joincontainer_nameexec_cmd
_log_errorrecompilesplitmatch)selfpath
regex_name_sfilerespatternfilenames          @/usr/lib/python3/dist-packages/sos/report/plugins/ovn_central.py
_find_sockzOVNCentral._find_sock%   s    j1--#dV8K8K-LC8}!TX%>&&*&9&9%:<  **Z0 #H 3 3D 9 >H}}X.#~~dH==>     c                    | j                   red| }| j                  |dd| j                         }|d   dk7  r| j                  d| j                           y	 t        j                  |d         }n@	 | j                  |      }t        |d
d      5 }	 t        j                  |      }	 ddd       	 t        j                  d         D 	cg c]  }	|	|vr|	
 c}	S # t
        $ r | j                  d	|        Y yw xY w# t
        $ r | j                  d	|        Y ddd       yw xY w# 1 sw Y   xY w# t        $ r!}| j                  d| d|        Y d}~yd}~ww xY wc c}	w # t        $ r | j                  d| d       Y yw xY w)z Get tables from schema zcat NT)timeout
foregroundr   r   r   z1Could not retrieve DB schema file from container r   zCannot parse JSON file rzUTF-8)encodingzCould not open DB schema file z: tablesz
DB schema z has no 'tables' key)r   r   r   jsonloads	Exceptionr   openloadIOErrordictkeysAttributeError)
r   r!   skipcmdr   	db_schemafnamefileextables
             r"   get_tables_from_schemaz!OVNCentral.get_tables_from_schema6   s   
#C--Td*.*=*=   ?C8}! !--1-@-@,A!C D JJs8}5	
x0%w7 $4$$(IIdO	$	I'+yy(#(% ;e(-T(9  ; ;#  "9( DE % $*A((LM#$ $$$ $  4XJbEG
; 	IOOj
2FGH	Is   C 3D7 D+D *D7 3E) E$E) C=<C= D(D+D7 'D((D++D40D7 7	E! EE!$E) )F
	F
c                 <    |r|D cg c]	  }| d|  c}S yc c}w )z Collect OVN database output z list N )r   r*   ovn_cmdr:   s       r"   add_database_outputzOVNCentral.add_database_outputY   s*    ;AB%wiveW-BB Cs   c           
         | j                  | j                  d         r$| j                  | j                  d         | _        n#| j                  | j                  d         | _        t        j
                  j                  d      }dD ]{  }| j                  | j                  d|      | j                  d|      | j                  d|      | j                  d|      g       |s[| j                  | j                  ||             } | j                  d	      r| j                  d
       n| j                  d       | j                  | j                  | j                        }| j                  | j                  | j                        }d}g }| j                  }| d| j                   d| d| d| j                    d| d| d| d| d| dg}| j#                  |d| j                  d       |s)d}	| j#                  | d| d|	 d| j                  d       d}
| d|
 d| d|
 d| d|
 dg}| j#                  |d| j                  d       | d|
 d| d|
 d| d|
 d| d|
 dg}| j#                  |d| j                  d       dD ]k  }| j%                  | j                  |d             s%| j'                  | j                  |d             }|j)                  | j+                  || d|
              m dD ]m  }| j%                  | j                  |d!            s%| j'                  | j                  |d!      d"g      }|j)                  | j+                  || d|
              o t-        t/        |            }| j#                  |d| j                  #       | j                  d$       t        j
                  j                  d%      }d&D ]s  }d'D ]H  }| j                  ||      }| j%                  |      s'| j                  |       | j1                  |       J |sS| j                  | j                  ||             u | j3                  d()       y )*N   r   
OVS_RUNDIR)zovnnb_db.pidzovnsb_db.pidzovn-northd.pid/var/lib/openvswitch/ovnz/usr/local/var/run/openvswitchz/run/openvswitch/!/var/snap/microovn/common/run/ovnall_logsz/var/log/ovn/z/var/log/ovn/*.logzcluster/statuszovs-appctl -t  z OVN_Northboundz OVN_Southboundzovn-appctl -t z statusz connection-statusT   )r'   r   r&   zdebug/chassis-features-listz--no-leader-onlyz
ovn-nbctl z showz get-sslz get-connectionz
ovn-sbctl z lflow-list)z/usr/share/openvswitchz/usr/share/ovnz /snap/microovn/current/share/ovnzovn-nb.ovsschemazovn-sb.ovsschemaLogical_Flow)r'   r   z/etc/sysconfig/ovn-northd	OVS_DBDIR)zovnnb_db.dbzovnsb_db.db)rC   z/usr/local/etc/openvswitchz/etc/openvswitchz/var/lib/openvswitchz/var/lib/ovn/etcz/var/lib/ovnz)/var/snap/microovn/common/data/central/dbz
ovn-northd)units)container_exists
containersget_container_by_namer   osenvirongetadd_copy_specr   
get_optionr#   
ovn_socketovn_controller_sock_regexovn_northd_sock_regexpfxovn_nbdb_socketovn_sbdb_socketadd_cmd_outputpath_existsr;   extendr?   listsetadd_dir_listingadd_journal)r   
ovs_rundirpidfileovn_controller_socketnorthd_socketcscmdsrV   appctl_cmdsdflnolo
nbctl_cmds
sbctl_cmdsr   	nb_tables	sb_tables	ovs_dbdirdbfile
dbfilepaths                      r"   setupzOVNCentral.setup_   s     !34"&"<"<"#$D #'"<"<"#$D ZZ^^L1
I 		HG97C?I2G<BGL	   ""4>>*g#FG		H ??:&/34 $OOT;;!= (,(B(BD hh e>$"6"6!7qOLe>$"6"6!7qOLe>-8e>"7!88JK	
 	KD&*&9&92 	 	G /C3%~m_AcU K+/*.*=*=r   K
 "e:dV5)e:dV8,e:dV?3

 	J4&*&9&92 	 	G e:dV5)e:dV;/e:dV8,e:dV?3	

 	J4&*&9&92 	 	G9 	PDt5G HI 77,9. /	D44Y8;uJtf5MO P	P9 	PDt5G HI 77,9.0>/?A	D44Y8;uJtf5MO P	P CITT-@-@ 	 	
 	67JJNN;/	4 	FF 5 "^^D&9
##J/&&z2((45 ""4>>)V#DE!	F$ 	|,r$   N)__name__
__module____qualname__
short_descplugin_nameprofilesrL   r   rW   rX   rS   rT   rU   rV   r#   r;   r?   rp   r=   r$   r"   r   r      sV    JK"HDJNOOJ "
C" 57 !Fy-r$   r   c                   $    e Zd ZdZdZdZdZdZdZy)RedHatOVNCentral)zopenvswitch-ovn-centralzovn.*-centralz!/var/run/openvswitch/ovnnb_db.ctlz!/var/run/openvswitch/ovnsb_db.ctlz/var/run/openvswitchovn-controller.*.ctlovn-northd.*.ctlN)	rq   rr   rs   packagesrW   rX   rS   rT   rU   r=   r$   r"   rx   rx      s"    =H9O9O'J 6.r$   rx   c                   *     e Zd ZdZ fdZdZdZ xZS )DebianOVNCentral)zovn-centralmicroovnc                     | j                  d      r7d| _        | j                   d| _        | j                   d| _        d| _        nd| _        d| _        d| _        t
        |           y )	Nz/snap/bin/microovnrD   z/ovnnb_db.ctlz/ovnsb_db.ctlz	microovn.z/var/run/ovnz/var/run/ovn/ovnnb_db.ctlz/var/run/ovn/ovnsb_db.ctl)rZ   rS   rW   rX   rV   superrp   )r   	__class__s    r"   rp   zDebianOVNCentral.setup   sh    01ADO&*oo%6m#DD &*oo%6m#DD "DH,DO#>D #>D r$   ry   rz   )rq   rr   rs   r{   rp   rT   rU   __classcell__)r   s   @r"   r}   r}      s    ,H
 !7.r$   r}   )r+   rN   r   sos.report.pluginsr   r   r   r   r   rx   r}   r=   r$   r"   <module>r      sG     	 	 A- A-H/z< //z< /r$   