o
    *b                      @   sZ   d dl mZmZmZmZ d dlZG dd deZG dd deeeZG dd deeZdS )	    )PluginRedHatPluginDebianPluginUbuntuPluginNc                   @   s@   e Zd ZdZdZdZdZdZe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
_inspectorc                 C   s  |  d}|r| 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rn| ddg n| ddg ddd| jd | jd fD ]}| d|  | d| j|   qd D ]}|  d!| r| jd"|d# qn,ddg| _| g d$ | dr| d%d&g n| d'd(g d)D ]	}| d|  qd*d+ d,D }d-d+ d.D }t|ot|| _	| j	s| j
d/ d S | d0 | d1 | d2 | d3 d S )4Nr   z/etc/ironic/*z/etc/ironic-inspector/*z_api/etc/ironic/* /var/lib/httpboot/inspector.ipxe/var/lib/ironic-inspector/z-/var/log/containers/ironic-inspector/ramdisk/z/etc/xinetd.confz/etc/xinetd.d//etc/ironic//etc/ironic-inspector/z/etc/httpd/conf/z/etc/httpd/conf.d/z /etc/httpd/conf.modules.d/*.conf/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/*.log/var/lib/ironic	/httpboot	/tftpbootz/var/lib/httpboot/z/var/lib/tftpboot/zls -laRt %s)Zironic_inspector_dnsmasqZironic_inspectorZironic_pxe_httpZironic_pxe_tftpZironic_neutron_agentZironic_conductorZ
ironic_apiz.*zrpm -qa)	container)r
   r   r	   z"/var/log/ironic-inspector/ramdisk/r   r   z/var/log/ironic/z/var/log/ironic-inspector/z/var/log/ironic/*.logz/var/log/ironic-inspector/*.log)r   r   r   c                 S      g | ]}|t jv qS  osenviron.0pr   r   E/usr/lib/python3/dist-packages/sos/report/plugins/openstack_ironic.py
<listcomp>q       z)OpenStackIronic.setup.<locals>.<listcomp>)ZOS_USERNAMEZOS_PASSWORDc                 S   r   r   r   r   r   r   r   r   t   r   )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_optionadd_cmd_output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 N)r   Zdo_path_regex_sub)r(   Zregexpsubstconfr   r   r   apply_regex_sub   s   
zOpenStackIronic.apply_regex_subc                 C   s@   g d}ddg}|  dd| d |  dd| d d S )	N)	Zdns_passkeyZmemcache_secret_keyZrabbit_passwordZpasswordZqpid_passwordZadmin_passwordZssl_key_passwordZos_passwordZtransport_urlZ
connectionZsql_connectionz((?m)^\s*(%s)\s*=\s*)(.*)|z\1*********z-((?m)^\s*(%s)\s*=\s*(.*)://(\w*):)(.*)(@(.*))z\1*********\6)r.   join)r(   Zprotect_keysZconnection_keysr   r   r   postproc   s   zOpenStackIronic.postprocN)__name__
__module____qualname__Z
short_descZplugin_nameZprofilesZ
containersr   r   r*   r.   r1   r   r   r   r   r      s    ir   c                       s    e Zd ZdZ fddZ  ZS )DebianIronic)z
ironic-apizironic-commonzironic-conductorc                    s   t t|   d S r+   )superr5   r*   r(   	__class__r   r   r*      s   zDebianIronic.setup)r2   r3   r4   packagesr*   __classcell__r   r   r8   r   r5      s    r5   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   sT   |  d}|d r| jd d S dd |d  D }|D ]	}| d|  qd S )Nz.openstack baremetal node list -f value -c UUIDstatuszPFailed to fetch list of ironic node UUIDs, introspection data won't be collectedc                 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 %s)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   t fdd jD r4 jd  d  d  d  jdd  jd	d  jd
d  j	rM 
d  drO   d S d S d S )Nc                    s   g | ]}  |qS r   )Zis_installedr   r7   r   r   r      r   z&RedHatIronic.setup.<locals>.<listcomp>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   )r6   r<   r*   r$   discoverd_packagesr   appendr    Zadd_journalr%   r"   r!   rC   r7   r8   r7   r   r*      s   




zRedHatIronic.setup)r2   r3   r4   r:   rD   rC   r*   r;   r   r   r8   r   r<      s    r<   )	Zsos.report.pluginsr   r   r   r   r   r   r5   r<   r   r   r   r   <module>   s    