U
    -_g#!                     @   sZ   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eZG dd deeZdS )	    N)PluginRedHatPluginDebianPluginUbuntuPluginc                   @   sH   e Zd ZdZdZdZdZdZed Zg Z	dZ
dd	 Zd
d Zdd ZdS )OpenStackIroniczOpenStack IronicZopenstack_ironic)Z	openstackZopenstack_undercloud).*ironic_apiz,/var/lib/config-data/puppet-generated/ironicZ
_inspectorFc                 C   s4  |  d}|rV| jd | jd | jd | jd | jd g| _| dd| jd | jd	 | jd
 | jd | jd | jd | jd | jd | jd | jd | jd | jd | jd | jd | jd g | dr| ddg n| ddg ddd| jd | jd fD ]"}| j|| j | gdd  qd!D ]$}|  d"| r.| jd#|d$ q.n^ddg| _| d
ddd%ddg | dr| d&d'g n| d(d)g | jdddgdd  | d*d+i d,d- d.D }d/d- d0D }t	|ot
|| _| js| jd1 n(| d2 | d3 | d4 | d5 d S )6Nr   z/etc/ironic/*z/etc/ironic-inspector/*z_api/etc/ironic/*z /var/lib/httpboot/inspector.ipxez/var/lib/ironic-inspector/z-/var/log/containers/ironic-inspector/ramdisk/z/etc/xinetd.confz/etc/xinetd.d/z/etc/ironic/z/etc/ironic-inspector/z/etc/httpd/conf/z/etc/httpd/conf.d/z /etc/httpd/conf.modules.d/*.confz/etc/my.cnf.d/tripleo.cnfz_api/etc/ironic/z_api/etc/httpd/conf/z_api/etc/httpd/conf.d/z$_api/etc/httpd/conf.modules.d/*.confz_api/etc/my.cnf.d/tripleo.cnfall_logsz/var/log/containers/ironic/z%/var/log/containers/ironic-inspector/z /var/log/containers/ironic/*.logz*/var/log/containers/ironic-inspector/*.logz/var/lib/ironicz	/httpbootz	/tftpbootz/var/lib/httpboot/z/var/lib/tftpboot/T)	recursive)Zironic_inspector_dnsmasqZironic_inspectorZironic_pxe_httpZironic_pxe_tftpZironic_neutron_agentZironic_conductorZ
ironic_apiz.*zrpm -qa)Z	containerz"/var/log/ironic-inspector/ramdisk/z/var/log/ironic/z/var/log/ironic-inspector/z/var/log/ironic/*.logz/var/log/ironic-inspector/*.logz.*/etc/ironic/ironic.confZironic_confc                 S   s   g | ]}|t jkqS  osenviron.0pr
   r
   E/usr/lib/python3/dist-packages/sos/report/plugins/openstack_ironic.py
<listcomp>x   s     z)OpenStackIronic.setup.<locals>.<listcomp>)ZOS_USERNAMEZOS_PASSWORDc                 S   s   g | ]}|t jkqS r
   r   r   r
   r
   r   r   {   s     )ZOS_TENANT_NAMEZOS_PROJECT_NAMEz}Not all environment variables set. Source the environment file for the user intended to connect to the OpenStack environment.z&openstack baremetal driver list --longz$openstack baremetal node list --longz$openstack baremetal port list --longz*openstack baremetal port group list --long)Zcontainer_existsvar_puppet_genins_puppet_gen	conf_listadd_copy_spec
get_optionZadd_dir_listingadd_cmd_outputZadd_file_tagsallanyosc_availablesoslogwarning)selfZin_containerpathZcontainer_nameZvars_allZvars_anyr
   r
   r   setup   s    


	 


zOpenStackIronic.setupc                 C   s   | j D ]}| ||| qdS )z Apply regex substitution N)r   Zdo_path_regex_sub)r   ZregexpZsubstconfr
   r
   r   apply_regex_sub   s    
zOpenStackIronic.apply_regex_subc              	   C   sZ   ddddddddd	g	}d
dg}d |}| dd | dd | d| dd d S )NZdns_passkeyZmemcache_secret_keyZrabbit_passwordZpasswordZqpid_passwordZadmin_passwordZssl_key_passwordZos_passwordZtransport_urlZ
connectionZsql_connection|z(^\s*(z)\s*=\s*)(.*)z\1*********z!)\s*=\s*(.*)://(\w*):)(.*)(@(.*))z\1*********\6)joinr"   )r   Zprotect_keysZconnection_keysZjoin_con_keysr
   r
   r   postproc   s(          

zOpenStackIronic.postprocN)__name__
__module____qualname__Z
short_descZplugin_nameZprofilesZ
containersr   r   r   r   r    r"   r%   r
   r
   r
   r   r      s   nr   c                   @   s   e Zd ZdZdS )DebianIronic)z
ironic-apizironic-commonzironic-conductorN)r&   r'   r(   packagesr
   r
   r
   r   r)      s   r)   c                       s0   e Zd ZdZddgZdd Z fddZ  ZS )RedHatIronic)zopenstack-selinuxopenstack-ironic-discoverdz"openstack-ironic-discoverd-ramdiskc                 C   sV   |  d}|d r"| jd dS dd |d  D }|D ]}| d|  q<dS )	z& Capture baremetal introspection data z.openstack baremetal node list -f value -c UUIDZstatuszPFailed to fetch list of ironic node UUIDs, introspection data won't be collectedNc                 S   s   g | ]}|  r|qS r
   )strip)r   uuidr
   r
   r   r      s    z;RedHatIronic.collect_introspection_data.<locals>.<listcomp>outputz,openstack baremetal introspection data save )Zcollect_cmd_outputr   r   splitr   )r   Zuuids_resultZuuidsr.   r
   r
   r   collect_introspection_data   s    z'RedHatIronic.collect_introspection_datac                    s   t    t fdd jD rd jd  d  d  d  jdd  jd	d  jd
d  jr 	d  
dr   d S )Nc                 3   s   | ]}  |V  qd S )N)Zis_installedr   r   r
   r   	<genexpr>   s     z%RedHatIronic.setup.<locals>.<genexpr>z/etc/ironic-discoverd/*z/etc/ironic-discoverd/z/var/lib/ironic-discoverd/z/var/log/ironic-discoverd/r,   )Zunitsz"openstack-ironic-discoverd-dnsmasqz"openstack-ironic-inspector-dnsmasqz&openstack baremetal introspection listr   )superr    r   discoverd_packagesr   appendr   Zadd_journalr   r   r   r1   r2   	__class__r2   r   r       s    





zRedHatIronic.setup)r&   r'   r(   r*   r5   r1   r    __classcell__r
   r
   r7   r   r+      s   r+   )	r   Zsos.report.pluginsr   r   r   r   r   r)   r+   r
   r
   r
   r   <module>   s
    