ACIL FM
Dark
Refresh
Current DIR:
/usr/lib/python3.9/site-packages/sos/collector/transports
/
usr
lib
python3.9
site-packages
sos
collector
transports
Upload
Zip Selected
Delete Selected
Pilih semua
Nama
Ukuran
Permission
Aksi
__pycache__
-
chmod
Open
Rename
Delete
control_persist.py
8.46 MB
chmod
View
DL
Edit
Rename
Delete
juju.py
3.01 MB
chmod
View
DL
Edit
Rename
Delete
local.py
1.42 MB
chmod
View
DL
Edit
Rename
Delete
oc.py
9.41 MB
chmod
View
DL
Edit
Rename
Delete
saltstack.py
5.55 MB
chmod
View
DL
Edit
Rename
Delete
__init__.py
16.25 MB
chmod
View
DL
Edit
Rename
Delete
Edit file: /usr/lib/python3.9/site-packages/sos/collector/transports/juju.py
# Copyright (c) 2023 Canonical Ltd., Chi Wai Chan <chiwai.chan@canonical.com> # This file is part of the sos project: https://github.com/sosreport/sos # # This copyrighted material is made available to anyone wishing to use, # modify, copy, or redistribute it subject to the terms and conditions of # version 2 of the GNU General Public License. # # See the LICENSE file in the source distribution for further information. import subprocess from sos.collector.exceptions import JujuNotInstalledException from sos.collector.transports import RemoteTransport from sos.utilities import sos_get_command_output class JujuSSH(RemoteTransport): """ A "transport" that leverages `juju ssh` to perform commands on the remote hosts. This transport is expected to be used in juju managed environment, and the user should have the necessary credential for accessing the controller. When using this transport, the --nodes option will be expected to be a comma separated machine IDs, **not** IP addr, since `juju ssh` identifies the ssh target by machine ID. Examples: sos collect --nodes 0,1,2 --no-local --transport juju --batch """ name = "juju_ssh" default_user = "ubuntu" def _check_juju_installed(self): cmd = "juju version" try: subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) except subprocess.CalledProcessError as err: self.log_error("Failed to check `juju` version") raise JujuNotInstalledException from err return True def _chmod(self, fname): cmd = f"{self.remote_exec} sudo chmod o+r {fname}" try: subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) except subprocess.CalledProcessError: self.log_error(f"Failed to make {fname} world-readable") raise return True def _connect(self, password=""): self._connected = self._check_juju_installed() return self._connected def _disconnect(self): return True @property def connected(self): return self._connected @property def remote_exec(self): model, target_option = self.address.split(":") model_option = f"-m {model}" if model else "" option = f"{model_option} {target_option}" return f"juju ssh {option}" def _copy_file_to_remote(self, fname, dest): model, unit = self.address.split(":") model_option = f"-m {model}" if model else "" cmd = f"juju scp {model_option} -- {fname} {unit}:{dest}" res = sos_get_command_output(cmd, timeout=15) return res["status"] == 0 def _retrieve_file(self, fname, dest): self._chmod(fname) # juju scp needs the archive to be world-readable model, unit = self.address.split(":") model_option = f"-m {model}" if model else "" cmd = f"juju scp {model_option} -- -r {unit}:{fname} {dest}" res = sos_get_command_output(cmd) return res["status"] == 0 # vim: set et ts=4 sw=4 :
Simpan
Batal
Isi Zip:
Unzip
Create
Buat Folder
Buat File
Terminal / Execute
Run
Chmod Bulk
All File
All Folder
All File dan Folder
Apply