U
    -_g%                     @   sj   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 deZG dd deeZ	G dd deeeZ
dS )	    N)PluginRedHatPluginDebianPluginUbuntuPluginc                   @   s\   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d Zg fdd	Zd
d Zdd ZdS )
OVNCentralz
OVN NorthdZovn_central)ZnetworkZvirt)zovn-dbs-bundle.*Zovn_cluster_north_db_server c                 C   s   |  ||}| jr| jd| | jd}|d dks@d|d krT| d| j  n8t|}|d dD ]}||rl|  ||  S ql|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pathZ
regex_nameZ_sfilerespatternfilename r   @/usr/lib/python3/dist-packages/sos/report/plugins/ovn_central.py
_find_sock%   s    


zOVNCentral._find_sockc           	   
      sz  | j rd| }| j|dd| j d}|d dkrF| d| j   dS zt|d }W n& tk
r~   | d	|  Y dS X nzj| |}t|d
ddH}zt|}W n2 tk
r   | d	|  Y W 5 Q R  W dS X W 5 Q R X W n@ t	k
r, } z | d| d|  W Y dS d}~X Y nX z fddt
|d D W S  tk
rt   | d| d Y nX dS )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: c                    s   g | ]}| kr|qS r   r   .0tableskipr   r   
<listcomp>S   s    z5OVNCentral.get_tables_from_schema.<locals>.<listcomp>tablesz
DB schema z has no 'tables' key)r   r   r   jsonloads	Exceptionr   openloadIOErrordictkeysAttributeError)	r   r   r$   cmdr   Z	db_schemafnamefileexr   r#   r   get_tables_from_schema6   sB    



"
z!OVNCentral.get_tables_from_schemac                    s   |r fdd|D S dS )z Collect OVN database output c                    s   g | ]}  d | qS )z list r   r    ovn_cmdr   r   r%   \   s     z2OVNCentral.add_database_output.<locals>.<listcomp>Nr   )r   r&   r6   r   r5   r   add_database_outputY   s    zOVNCentral.add_database_outputc              
   C   sF  |  | jd r$| | jd | _n| | jd | _tjd}dD ]L}| | d|| d|| d|| d|g |rF| | || qF| 	d	r| d
 n
| d | 
| j| j}| 
| j| j}d}g }| j}| d| j d| d| d| j d| d| d| d| d| dg}| j|d| jdd |spd}	| j| d| d|	 d| jdd d}
| d|
 d| d|
 d| d|
 dg}| j|d| jdd | d|
 d| d|
 d| d|
 d| d|
 dg}| j|d| jdd dD ]H}| | |d r
| | |d }|| || d|
  q
dD ]L}| | |d!rX| | |d!d"g}|| || d|
  qXtt|}| j|d| jd# | d$ tjd%}d&D ]V}d'D ]2}| ||}| |r| | | | q|r| | || q| jd(d) d S )*N   r   Z
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/ovnZ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.ovsschemaZLogical_Flow)r   r   z/etc/sysconfig/ovn-northdZ	OVS_DBDIR)zovnnb_db.dbzovnsb_db.db)r9   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)Zunits)Zcontainer_exists
containersZget_container_by_namer   osenvirongetZadd_copy_specr   Z
get_optionr   
ovn_socketovn_controller_sock_regexovn_northd_sock_regexpfxovn_nbdb_socketovn_sbdb_socketZadd_cmd_outputpath_existsr4   extendr7   listsetZadd_dir_listingZadd_journal)r   Z
ovs_rundirZpidfileZovn_controller_socketZnorthd_socketZcsZcmdsrD   Zappctl_cmdsZdflZnoloZ
nbctl_cmdsZ
sbctl_cmdsr   Z	nb_tablesZ	sb_tablesZ	ovs_dbdirZdbfileZ
dbfilepathr   r   r   setup_   s    





      

 

  
	
zOVNCentral.setupN)__name__
__module____qualname__Z
short_descZplugin_nameZprofilesr=   r   rE   rF   rA   rB   rC   rD   r   r4   r7   rK   r   r   r   r   r      s   #r   c                   @   s$   e Zd ZdZdZdZdZdZdZdS )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)	rL   rM   rN   packagesrE   rF   rA   rB   rC   r   r   r   r   rO      s   rO   c                       s(   e Zd ZdZ fddZdZdZ  ZS )DebianOVNCentral)zovn-centralZmicroovnc                    sT   |  dr4d| _| j d| _| j d| _d| _nd| _d| _d| _t   d S )	Nz/snap/bin/microovnr:   z/ovnnb_db.ctlz/ovnsb_db.ctlz	microovn.z/var/run/ovnz/var/run/ovn/ovnnb_db.ctlz/var/run/ovn/ovnsb_db.ctl)rG   rA   rE   rF   rD   superrK   )r   	__class__r   r   rK      s    
zDebianOVNCentral.setuprP   rQ   )rL   rM   rN   rR   rK   rB   rC   __classcell__r   r   rU   r   rS      s   rS   )r'   r>   r   Zsos.report.pluginsr   r   r   r   r   rO   rS   r   r   r   r   <module>   s    E
