In this article, we will walk you through a list of useful commands to interact with salt clients and get your work done.
We have covered SUSE Manager right from installation till configuration and client registration in our list of articles in the past. For now, let’s dive into a list of commands you can use to complete tasks on salt clients remotely via SUSE Manager.
You can always check out the list of salt modules available to choose from. I am listing our only a few of them which are useful in day-to-day tasks. Few of these tasks can be done from SUSE Manager UI as well but if you want to script them then using salt CLI is a way better option.
In the below examples, we have our SUSE Manager kerneltalks
and salt client k-client1
Copy files from SUSE Manager to salt clients
There are two ways to copy a file. If you are copying simple text files then below command is just fine for you. salt-cp clientname/FQDN source destination
kerneltalks:~ # salt-cp k-client1 test1 /tmp/
k-client1:
----------
/tmp/test1:
True
Here we copied test1
file in the current directory from SUSE Manager to k-client1:/tmp
.
It will treat files in question as text files and hence should not be used for a binary files. It will corrupt binary files or just fails to copy them. So if I try to copy zip file from SUSE Manager I see below error –
kerneltalks:~ # salt-cp k-client1 test2.gz /tmp/
[ERROR ] An un-handled exception was caught by salt's global exception handler:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
Traceback (most recent call last):
File "/usr/bin/salt-cp", line 10, in <module>
salt_cp()
File "/usr/lib/python3.6/site-packages/salt/scripts.py", line 418, in salt_cp
client.run()
File "/usr/lib/python3.6/site-packages/salt/cli/cp.py", line 52, in run
cp_.run()
File "/usr/lib/python3.6/site-packages/salt/cli/cp.py", line 142, in run
ret = self.run_oldstyle()
File "/usr/lib/python3.6/site-packages/salt/cli/cp.py", line 153, in run_oldstyle
arg = [self._load_files(), self.opts['dest']]
File "/usr/lib/python3.6/site-packages/salt/cli/cp.py", line 126, in _load_files
files.update(self._file_dict(fn_))
File "/usr/lib/python3.6/site-packages/salt/cli/cp.py", line 115, in _file_dict
data = fp_.read()
File "/usr/lib64/python3.6/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
In such cases, you can use the below salt module to copy over files from SUSE Manager to salt clients. For that, you need to keep your file under /srv/salt
directory on the SUSE Manager server.
kerneltalks:/srv/salt # ls -lrt
total 4
-rw-r--r-- 1 root root 44 Apr 3 12:26 test2.gz
kerneltalks:~ # salt k-client1 cp.get_file salt://test2.gz /tmp/
k-client1:
/tmp/test2.gz
Now we successfully copied zip file from SUSE Manager kerneltalks:/srv/salt/test2.gz
to salt client k-client1:/tmp
Execute remote commands on salt clients from SUSE Manager
Now this part where we will run commands on the salt client from SUSE Manager. The command output will be returned to you on current session. You can run a couple of commands together separated by ;
same as the shell.
kerneltalks:/srv/salt # salt k-client1 cmd.run 'df -Ph; date'
k-client1:
Filesystem Size Used Avail Use% Mounted on
devtmpfs 489M 0 489M 0% /dev
tmpfs 496M 12K 496M 1% /dev/shm
tmpfs 496M 14M 482M 3% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/xvda1 9.8G 1.6G 7.7G 17% /
Fri Apr 3 12:30:49 UTC 2020
Here we successfully ran df -Ph
and date command on salt client remotely from SUSE Manager.
Make sure if you have multiple commands to run then bundle them to script, copy it over to the client using the above method and then execute the script on the client from SUSE Manager using run command module.
If you see below error that means your mentioned client is not registered with SUSE Manager or you have misspelled client name or use FQDN
kerneltalks:~ # salt-cp k-client1 test1 /tmp/
No minions matched the target. No command was sent, no jid was assigned.
Installing packages on salt client using salt cli
You can execute this task from the SUSE Manager web UI as well. But if you want to script it then salt CLI is a better option.
Installing a package is an easy task. Use pkg.install
salt module and submit one or more lists of packages to be installed on the remote salt system.
Install single package using –
kerneltalks:~ # salt k-client1 pkg.install 'telnet'
k-client1:
----------
telnet:
----------
new:
1.2-165.63
old:
Install multiple packages using –
kerneltalks:~ # salt k-client1 pkg.install pkgs='["telnet", "apache2"]'
k-client1:
----------
apache2:
----------
new:
2.4.23-29.40.1
old:
apache2-prefork:
----------
new:
2.4.23-29.40.1
old:
apache2-utils:
----------
new:
2.4.23-29.40.1
old:
libapr-util1:
----------
new:
1.5.3-2.8.1
old:
libapr1:
----------
new:
1.5.1-4.5.1
old:
liblua5_2:
----------
new:
5.2.4-6.1
old:
libnghttp2-14:
----------
new:
1.7.1-1.84
old:
telnet:
----------
new:
1.2-165.63
old:
Here you can see it installed telnet
and apache2
packages remotely along with its dependencies. Be sure that if the package is already installed and its updated version is available to install then the salt will update it. Hence you can see new and old version details in output.