o
    O6uf!  ã                   @   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 IronicÚopenstack_ironic)Ú	openstackÚopenstack_undercloud)ú.*ironic_apiz,/var/lib/config-data/puppet-generated/ironicÚ
_inspectorFc                 C   s2  |   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| › �¡ q‚d D ]}|   d!| ¡rª| jd"|d#� qšn-ddg| _|  g d$¢¡ |  d¡rÅ|  d%d&g¡ n|  d'd(g¡ d)D ]
}|  d|› �¡ qÎ|  d*d+i¡ d,d-„ d.D ƒ}d/d-„ d0D ƒ}t|ƒoõt	|ƒ| _
| j
�s| j d1¡ d S |  d2¡ |  d3¡ |  d4¡ |  d5¡ d S )6Nr
   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 )Úironic_inspector_dnsmasqÚironic_inspectorÚironic_pxe_httpÚironic_pxe_tftpÚironic_neutron_agentÚironic_conductorÚ
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   z.*/etc/ironic/ironic.confÚironic_confc                 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>v   ó    z)OpenStackIronic.setup.<locals>.<listcomp>)ÚOS_USERNAMEÚOS_PASSWORDc                 S   r   r   r    r#   r   r   r&   r'   y   r(   )ÚOS_TENANT_NAMEÚ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)Úcontainer_existsÚvar_puppet_genÚins_puppet_genÚ	conf_listÚadd_copy_specÚ
get_optionÚadd_cmd_outputÚadd_file_tagsÚallÚanyÚosc_availableÚsoslogÚwarning)ÚselfÚin_containerÚpathÚcontainer_nameÚvars_allÚvars_anyr   r   r&   Úsetup   s”   
ûï
þþþ€û	þ
	þþÿ


zOpenStackIronic.setupc                 C   s   | j D ]	}|  |||¡ qdS )z Apply regex substitution N)r0   Údo_path_regex_sub)r:   ÚregexpÚsubstÚconfr   r   r&   Úapply_regex_subˆ   s   
ÿzOpenStackIronic.apply_regex_subc                 C   sL   g d¢}ddg}d  |¡}|  dd  |¡› d�d¡ |  d|› d�d	¡ d S )
N)	Údns_passkeyÚmemcache_secret_keyÚrabbit_passwordÚpasswordÚqpid_passwordÚadmin_passwordÚssl_key_passwordÚos_passwordÚtransport_urlÚ
connectionÚsql_connectionú|z(^\s*(z)\s*=\s*)(.*)z\1*********z!)\s*=\s*(.*)://(\w*):)(.*)(@(.*))z\1*********\6)ÚjoinrE   )r:   Úprotect_keysÚconnection_keysÚjoin_con_keysr   r   r&   Úpostproc�   s   
þ
þzOpenStackIronic.postprocN)Ú__name__Ú
__module__Ú__qualname__Ú
short_descÚplugin_nameÚprofilesÚ
containersr.   r/   r0   r7   r@   rE   rV   r   r   r   r&   r      s    lr   c                   @   s   e Zd ZdZdS )ÚDebianIronic)z
ironic-apizironic-commonzironic-conductorN)rW   rX   rY   Ú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 UUIDÚ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 )Úcollect_cmd_outputr8   r9   Úsplitr3   )r:   Úuuids_resultÚuuidsrd   r   r   r&   Úcollect_introspection_data¯   s   ÿ
ÿÿz'RedHatIronic.collect_introspection_datac                    sž   t ƒ  ¡  t‡ fdd„ˆ jD ƒƒr2ˆ j d¡ ˆ  d¡ ˆ  d¡ ˆ  d¡ ˆ jdd� ˆ jd	d� ˆ jd
d� ˆ jrKˆ  	d¡ ˆ  
d¡rMˆ  ¡  d S d S d S )Nc                 3   s   � | ]}ˆ   |¡V  qd S )N)Ú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/ra   )Úunitsz"openstack-ironic-discoverd-dnsmasqz"openstack-ironic-inspector-dnsmasqz&openstack baremetal introspection listr   )Úsuperr@   r6   Údiscoverd_packagesr0   Úappendr1   Úadd_journalr7   r3   r2   rj   rl   ©Ú	__class__rl   r&   r@   ¿   s   





ýzRedHatIronic.setup)rW   rX   rY   r_   rp   rj   r@   Ú__classcell__r   r   rs   r&   r`   ¦   s    þr`   )	r!   Úsos.report.pluginsr   r   r   r   r   r^   r`   r   r   r   r&   Ú<module>   s    