HEX
Server: Apache
System: Linux 185.122.168.184.host.secureserver.net 5.14.0-570.60.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Nov 5 05:00:59 EST 2025 x86_64
User: barbeatleanalyti (1024)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //lib/python3.9/site-packages/sos/report/plugins/__pycache__/juju.cpython-39.pyc
a

\��h" �@sBddlZddlZddlZddlmZmZmZGdd�dee�ZdS)�N)�Plugin�UbuntuPlugin�	PluginOptc	@sxeZdZdZdZdZdZdZedde	dd	�ed
de
dd	�ed
de
dd	�edde
dd	�gZdZdd�Z
dd�Zdd�ZdS)�Jujua3The Juju plugin is aimed at collecting Juju-related logs,
    configurations, and controller/model state(s).

    Logs and agent configuration information (/var/log/juju and /var/lib/juju)
    is collected by default since these are useful for troubleshooting.

    The Juju state collection is disabled by default and can be enabled with
    the 'juju-state' option. Collecting Juju state is safe in theory, but it
    does act on the live controller(s)/model(s) and is therefore optional.

    The default Juju state collection collects all controllers and models that
    the 'juju-user' (default=ubuntu) has access to.

    Specific controllers or models can be collected using the 'controllers'
    and 'models' options.

    Important: the string list is whitespace delimited, not colon delimited
    (sos plugin standard). This is due to the underlying Juju CLI accepting
    specific models in the format 'controller:model' and whitespaces are not
    allowed in either controller and model names.

    Example: models="controller_a:model_x controller_b:model_y"
    zJuju orchestration toolZjuju)ZvirtZsysmgmt)�
/var/log/juju�
juju-stateFz Include Juju state in the report)�defaultZval_typeZdesc�	juju-userZubuntuzJuju client user.�controllers�z[Collect Juju state for specified controllers. Uses a             whitespace delimited list.�modelszVCollect Juju state for specified models. Uses a whitespace             delimited list.c
CsX|�d�D]}|�|�|�|�q
dddddddd	d
d�	}|�d�rl|��D]\}}|j|�|�|d
�qN|�d�|jddgdd�|�	d�r�|�gd��|�
d�|�
d�n
|�d�|�	d�s�dS|�	d�}zt�|�Wn(t
�y|�d|�d��YdS0|�	d��r6|�	d��r6|�d�dS|jd|d �}|d!d"k�r�t|�	d��d#��}|�r~|d$hk�r~|}ntt�|d%�d���}ni}|�	d��r�|�	d��d#�D] }	d&|	�d'�}
|j|
|d ��q�nv|D]p}|jd(|�d'�|d �}|d!d"k�r�t�|d%�d}
|
D].}	|	d)}d&|�d*|�d'�}
|j|
|d ��q �q�dS)+Nzjuju*Z	depenginezdebug/pprof/goroutine?debug=1zdebug/pprof/heap?debug=1ZmetricsZpubsubZpresenceZ	statepoolz&debug/pprof/juju/state/tracker?debug=1zunits?action=status)	Zjuju_engine_reportZjuju_goroutinesZjuju_heap_profileZjuju_metricsZjuju_pubsub_reportZjuju_presence_reportZjuju_statepool_reportZjuju_statetracker_reportZjuju_unit_status�/var/lib/juju/agents)Zsuggest_filenamez!/var/lib/juju/agents/*/agent.confz/var/log/juju*z/var/lib/juju*T)�	recursiveZall_logs)rz
/var/lib/jujuz/var/lib/juju/**/.*z/var/lib/juju/kvmz/var/lib/juju/toolsz/var/log/juju/*.logrr	zUser "z4" does not exist, will not collect Juju information.r
rzWOptions: controllers, models are mutually exclusive. Will not collect Juju information.zjuju controllers --format=json)Zrunas�statusr� r�outputzjuju status -m z --format=jsonzjuju models --all -c z
short-name�:)Zget_service_namesZadd_journalZadd_service_statusZpath_exists�itemsZadd_cmd_output�_juju_agentZ
add_copy_specZadd_dir_listingZ
get_optionZadd_forbidden_path�pwd�getpwnam�KeyErrorZ	_log_warnZcollect_cmd_output�set�split�json�loads�keysZexec_cmd)�selfZserviceZjuju_agent_cmds�cmdZ	agent_cmdZ	juju_userZcontrollers_jsonZdesired_controllersr
Zmodel�commandZ
controllerZmodels_jsonrZ
short_name�r �;/usr/lib/python3.9/site-packages/sos/report/plugins/juju.py�setupRs�
�
�
��





������
��z
Juju.setupcCsB|jdkr0|�d�D]}t�d|�r||_q0qd|j�d|��S)Nrr
z$machine-*|controller-*|application-*zjuju-introspect --agent=r)�
agent_name�listdir�re�search)rrZdir_namer r r!r�s
zJuju._juju_agentcCsHd}gd�}dd�|��d�}d}|�|||�|�|�|�d�dS)Nz/var/lib/juju/agents/*)ZsharedsecretZapipasswordZoldpasswordZ
statepasswordz(^\s*(�|z
)\s*:\s*)(.*)z\1*********zjuju controllers)�joinZdo_path_regex_subZdo_file_private_subZdo_cmd_private_sub)rZagents_pathZprotect_keysZ
keys_regexZ	sub_regexr r r!�postproc�s
z
Juju.postprocN)�__name__�
__module__�__qualname__�__doc__Z
short_descZplugin_nameZprofiles�filesr�bool�strZoption_listr#r"rr)r r r r!rsD�����u	r)rrr%Zsos.report.pluginsrrrrr r r r!�<module>s