3
ܓi @ sB d dl Z d dlZd dlZd dlmZmZmZ G dd deeZdS ) N)PluginUbuntuPlugin PluginOptc @ sx e Zd ZdZdZdZdZdZedde d d
edde
d
d
edde
dd
edde
dd
gZdZdd Z
dd Zdd ZdS )Jujua3 The 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 toolZjujuvirtsysmgmt
/var/log/jujuz
juju-stateFz Include Juju state in the report)defaultZval_typeZdescz 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 C sn x&| j dD ]}| j| | j| qW dddddddd d
d }| jdrtx(|j D ]\}}| j| j||d
qTW | jd | jddgdd | j dr| jdddg | j
d | j
d n
| jd | j dsd S | j d}ytj| W n( t
k
r | jd| d d S X | j dr@| j dr@| jd d S | jd!|d"}|d# d$krt| j djd%}|r|d&hkr|}nttj|d' d j }ni }| j drx| j djd%D ] } d(| d)}
| j|
|d" qW n~x||D ]t}| jd*| d)|d"}|d# d$krtj|d' d }
x6|
D ].} | d+ }d(| d,| d)}
| j|
|d" q2W qW d S )-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_profileZjuju_metricsZjuju_pubsub_reportZjuju_presence_reportZjuju_statepool_reportZjuju_statetracker_reportZjuju_unit_statusz/var/lib/juju/agents)Zsuggest_filenamez!/var/lib/juju/agents/*/agent.confz/var/log/juju*z/var/lib/juju*T) recursiveZall_logsz
/var/log/jujuz
/var/lib/jujuz/var/lib/juju/**/.*z/var/lib/juju/kvmz/var/lib/juju/toolsz/var/log/juju/*.logz
juju-statez juju-userzUser "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)ZrunasZstatusr r outputzjuju status -m z --format=jsonzjuju models --all -c z
short-name:)Zget_service_namesZadd_journalZadd_service_statusZpath_existsitemsZadd_cmd_output_juju_agentZ
add_copy_specZadd_dir_listingZ
get_optionZadd_forbidden_pathpwdgetpwnamKeyErrorZ _log_warnZcollect_cmd_outputsetsplitjsonloadskeysZexec_cmd)selfZserviceZjuju_agent_cmdscmdZ agent_cmdZ juju_userZcontrollers_jsonZdesired_controllersr
ZmodelcommandZ
controllerZmodels_jsonr Z
short_name r /usr/lib/python3.6/juju.pysetupR s
z
Juju.setupc C sD | j dkr2x&| jdD ]}tjd|r|| _ P qW d| j d| S )Nr z/var/lib/juju/agentsz$machine-*|controller-*|application-*zjuju-introspect --agent=r )
agent_namelistdirresearch)r r Zdir_namer r r r s
zJuju._juju_agentc C sZ d}ddddg}ddj | d}d }| j||| | jd
dd | j| | jd
d S )Nz/var/lib/juju/agents/*ZsharedsecretZapipasswordZoldpasswordZ
statepasswordz(^\s*(|z
)\s*:\s*)(.*)z\1*********z,/var/log/juju/unit-nova-compute-(.*).log(.*)zauth\(key=(.*)\)zauth(key=******)zjuju controllers)joinZdo_path_regex_subZdo_file_private_subZdo_cmd_private_sub)r Zagents_pathZprotect_keysZ
keys_regexZ sub_regexr r r postproc s
z
Juju.postprocN)r r )r )__name__
__module____qualname____doc__Z
short_descZplugin_nameZprofilesfilesr boolstrZoption_listr! r r r' r r r r r s:
u r )r r r# Zsos.report.pluginsr r r r r r r r