SaltStack模块
SaltStack模块
介绍
saltstack模块分为
- 执行模块
- 状态模块
Module是日常使用SaltStack接触最多的一个组件,其用于管理对象操作,这也是SaltStack通过Push的方式进行管理的入口,比如我们日常简单的执行命令、查看包安装情况、查看服务运行情况等工作都是通过SaltStack Module来实现的。
当安装好Master和Minion包后,系统上会安装很多Module,大家可以通过以下命令查看支持的所有Module列表:
查看模块的方法有两种: - 在官方网站上看 - 通过命令行查看
建议去官方网站上看,结构更加清晰,一目了然
官方文档:https://docs.saltproject.io/
查看所有module数量
[root@master ~]# salt 'minion1' sys.list_modules|wc -l
169 //实际远不如这么多
查看指定module的所有function
[root@master ~]# salt 'minion1' sys.list_modules
minion1:
- acl
- aliases
- alternatives
- archive
- artifactory
- baredoc
- beacons
- bigip
- btrfs
- buildout
- chroot
- cloud
- cmd
- composer
- config
- consul
- container_resource
- cp
- cron
- cryptdev
- data
- defaults
- devinfo
- devmap
- disk
- django
- dnsmasq
- dnsutil
- drbd
- environ
- ethtool
- event
- extfs
- file
- firewalld
- freezer
- gem
- genesis
- glassfish
- gnome
- google_chat
- grafana4
- grains
- group
- hashutil
- helm
- highstate_doc
- hosts
- http
- hue
- incron
- ini
- inspector
- introspect
- iosconfig
- ip
- ipset
- iptables
- jboss7
- jboss7_cli
- jinja
- k8s
- kernelpkg
- key
- keyboard
- kmod
- kubeadm
- locale
- locate
- log
- logrotate
- lowpkg
- lvm
- mandrill
- match
- mattermost
- mine
- minion
- modjk
- mount
- msteams
- nagios_rpc
- namecheap_domains
- namecheap_domains_dns
- namecheap_domains_ns
- namecheap_ssl
- namecheap_users
- network
- nexus
- nftables
- nginx
- nova
- nspawn
- nxos
- nxos_api
- nxos_upgrade
- openscap
- openstack_config
- opsgenie
- out
- pagerduty
- pagerduty_util
- pam
- parallels
- partition
- peeringdb
- pillar
- pip
- pkg
- pkg_resource
- ps
- publish
- pushover
- pyenv
- random
- random_org
- rbenv
- rest_sample_utils
- restartcheck
- ret
- rvm
- s3
- s6
- salt_proxy
- salt_version
- saltcheck
- saltutil
- schedule
- scsi
- sdb
- seed
- serverdensity_device
- service
- shadow
- slack
- slsutil
- smbios
- smtp
- solrcloud
- sqlite3
- ssh
- state
- status
- statuspage
- supervisord
- sys
- sysctl
- sysfs
- syslog_ng
- system
- telegram
- telemetry
- temp
- test
- timezone
- tuned
- udev
- uptime
- user
- vault
- vbox_guest
- virtualenv
- vsphere
- x509
- xfs
- xml
- zabbix
- zenoss
查看test模块的函数
[root@master ~]# salt 'minion1' sys.list_functions cmd
minion1:
- cmd.exec_code
- cmd.exec_code_all
- cmd.has_exec
- cmd.powershell
- cmd.powershell_all
- cmd.retcode
- cmd.run
- cmd.run_all
- cmd.run_bg
- cmd.run_chroot
- cmd.run_stderr
- cmd.run_stdout
- cmd.script
- cmd.script_retcode
- cmd.shell
- cmd.shell_info
- cmd.shells
- cmd.tty
- cmd.which
- cmd.which_bin
查看指定module的用法
[root@master ~]# salt 'minion1' sys.doc cmd
cmd.exec_code:
Pass in two strings, the first naming the executable language, aka -
python2, python3, ruby, perl, lua, etc. the second string containing
the code you wish to execute. The stdout will be returned.
All parameters from :mod:`cmd.run_all <salt.modules.cmdmod.run_all>` except python_shell can be used.
CLI Example:
salt '*' cmd.exec_code ruby 'puts "cheese"'
salt '*' cmd.exec_code ruby 'puts "cheese"' args='["arg1", "arg2"]' env='{"FOO": "bar"}'
//内容过多省略
[root@master ~]# salt 'minion1' sys.doc cmd|less
All parameters from :mod:`cmd.run_all <salt.modules.cmdmod.run_all>` except python_shell can be used.
CLI Example:
salt '*' cmd.exec_code_all ruby 'puts "cheese"'
salt '*' cmd.exec_code_all ruby 'puts "cheese"' args='["arg1", "arg2"]' env='{"FOO": "bar"}'
cmd.has_exec:
Returns true if the executable is available on the minion, false otherwise
CLI Example:
查看某一个模块里面的某一个函数
[root@master ~]# salt 'minion1' sys.doc cmd.run
[root@master ~]# salt 'minion1' test.echo,cmd.run,service.status "hello world",date,sshd
minion1:
----------
cmd.run:
Wed Nov 3 14:12:06 EDT 2021
service.status:
True
test.echo:
hello world
常用模块
network模块
管理网络
network.active_tcp
查看主机建立的连接
返回所有活动的tcp连接
在minion端本机上查看已经建立的连接
[root@minion1 ~]# ss -ant
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
ESTAB 0 0 192.168.145.190:60660 192.168.145.188:4505
ESTAB 0 52 192.168.145.190:22 192.168.145.1:61424
LISTEN 0 128 [::]:80 [::]:*
LISTEN 0 128 [::]:22 [::]:*
在master端查看minion端已经建立的连接
[root@master ~]# salt 'minion1' network.active_tcp
minion1:
----------
0:
----------
local_addr:
192.168.145.190
local_port:
60660
remote_addr:
192.168.145.188
remote_port:
4505
1:
----------
local_addr:
192.168.145.190
local_port:
22
remote_addr:
192.168.145.1
remote_port:
61424
network.calc_net
计算网络
通过IP和子网掩码计算(calc)出网段
[root@master ~]# salt 'minion1' network.calc_net 192.168.1.1 255.255.255.0
minion1:
192.168.1.0/24
[root@master ~]# salt 'minion1' network.calc_net 192.168.1.1 255.255.0.0
minion1:
192.168.0.0/16
[root@master ~]# salt 'minion1' network.calc_net 192.168.1.1 255.255.248.0
minion1:
192.168.0.0/21
network.default_route
查看默认路由
[root@master ~]# salt 'minion1' network.default_route
minion1:
|_
----------
addr_family:
inet
destination:
0.0.0.0
flags:
UG
gateway:
192.168.145.2
interface:
ens33
netmask:
0.0.0.0
[root@master ~]# yum -y install net-tools
[root@master ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.145.2 0.0.0.0 UG 100 0 0 ens33
192.168.145.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
network.get_fqdn
查看主机的fqdn
[root@master ~]# salt 'minion1' network.get_fqdn
minion1:
minion1
network.get_hostname
获取主机名
[root@master ~]# salt 'minion1' network.get_hostname
minion1:
minion1
network.get_route
获取路由信息
查询到一个目标网络的路由信息
[root@master ~]# salt 'minion1' network.get_route 192.168.180.128
minion1:
----------
destination:
192.168.180.128
gateway:
192.168.145.2
interface:
ens33
source:
192.168.145.190
[root@master ~]# salt 'minion1' network.get_route 192.168.190.128
minion1:
----------
destination:
192.168.190.128
gateway:
192.168.145.2
interface:
ens33
source:
192.168.145.190
network.hw_addr
获取MAC地址
返回指定网卡的MAC地址
[root@master ~]# salt 'minion1' network.hw_addr ens33
minion1:
00:0c:29:62:1e:37
所谓的硬件地址就是mac地址
network.ifacestartswith
从特定CIDR检索接口名称(通过网络地址来确定它网卡的名字) 一个网卡可能有多个IP,那么想看某一个IP在哪一个网卡里面,就用这个命令
[root@master ~]# salt 'minion1' network.ifacestartswith 192
minion1:
- ens33
[root@master ~]# salt 'minion1' network.ifacestartswith 127
minion1:
- lo
[root@master ~]# salt 'minion1' network.ifacestartswith 192.168.145
minion1:
- ens33
network.in_subnet
判断当前主机是否在某一个网段内
[root@master ~]# salt 'minion1' network.in_subnet 192.168.145.0/24
minion1:
True
[root@master ~]# salt 'minion1' network.in_subnet 192.168.0.0/16
minion1:
True
network.interface
查看网卡详细信息
返回指定网卡的信息
[root@master ~]# salt 'minion1' network.interface ens33
minion1:
|_
----------
address:
192.168.145.190
broadcast:
192.168.145.255
label:
ens33
netmask:
255.255.255.0
network.interface_ip
返回指定网卡的IP地址
[root@master ~]# salt 'minion1' network.interface_ip ens33
minion1:
192.168.145.190
network.interfaces
返回当前系统中所有的网卡信息
[root@master ~]# salt 'minion1' network.interfaces
minion1:
----------
ens33:
----------
hwaddr:
00:0c:29:62:1e:37
inet:
|_
----------
address:
192.168.145.190
broadcast:
192.168.145.255
label:
ens33
netmask:
255.255.255.0
inet6:
|_
----------
address:
fe80::20c:29ff:fe62:1e37
prefixlen:
64
scope:
link
up:
True
lo:
----------
hwaddr:
00:00:00:00:00:00
inet:
|_
----------
address:
127.0.0.1
broadcast:
None
label:
lo
netmask:
255.0.0.0
inet6:
|_
----------
address:
::1
prefixlen:
128
scope:
host
up:
True
network.ip_addrs
返回一个IPv4的地址列表 该函数将会忽略掉127.0.0.1的地址
[root@master ~]# salt 'minion1' network.ip_addrs
minion1:
- 192.168.145.190
对比之前
[root@master ~]# ip a|grep 'inet '|grep -v 127|awk -F'[ /]+' '{print $3}'
192.168.145.188
network.netstat
返回所有打开的端口和状态(查看netstat命令执行的效果)
[root@master ~]# netstat -antl
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:4505 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:4506 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:57918 127.0.0.1:4506 TIME_WAIT
tcp 0 0 192.168.145.188:4505 192.168.145.190:60660 ESTABLISHED
tcp 0 184 192.168.145.188:22 192.168.145.1:61373 ESTABLISHED
tcp 0 0 192.168.145.188:50106 192.168.145.188:4505 ESTABLISHED
tcp 0 0 192.168.145.188:4505 192.168.145.188:50106 ESTABLISHED
tcp6 0 0 :::22 :::* LISTEN
[root@master ~]# salt 'minion1' network.netstat
minion1:
|_
----------
inode:
28087
local-address:
192.168.145.190%ens33:68
program:
NetworkManager
proto:
udp
recv-q:
0
remote-address:
192.168.145.254:67
send-q:
0
user:
0
|_
----------
inode:
27682
local-address:
127.0.0.1:323
program:
chronyd
proto:
udp
recv-q:
0
remote-address:
0.0.0.0:*
send-q:
0
user:
0
|_
----------
inode:
27683
local-address:
[::1]:323
program:
chronyd
proto:
udp
recv-q:
0
remote-address:
[::]:*
send-q:
0
user:
0
|_
----------
inode:
27209
local-address:
0.0.0.0:80
program:
nginx
proto:
tcp
recv-q:
0
remote-address:
0.0.0.0:*
send-q:
128
state:
LISTEN
user:
0
|_
----------
inode:
27102
local-address:
0.0.0.0:22
program:
sshd
proto:
tcp
recv-q:
0
remote-address:
0.0.0.0:*
send-q:
128
state:
LISTEN
user:
0
|_
----------
inode:
30671
local-address:
192.168.145.190:60660
program:
salt-minion
proto:
tcp
recv-q:
0
remote-address:
192.168.145.188:4505
send-q:
0
state:
ESTABLISHED
user:
0
|_
----------
inode:
27470
local-address:
192.168.145.190:22
program:
sshd
proto:
tcp
recv-q:
0
remote-address:
192.168.145.1:61424
send-q:
0
state:
ESTABLISHED
user:
0
|_
----------
inode:
27210
local-address:
[::]:80
program:
nginx
proto:
tcp
recv-q:
0
remote-address:
[::]:*
send-q:
128
state:
LISTEN
user:
0
|_
----------
inode:
27113
local-address:
[::]:22
program:
sshd
proto:
tcp
recv-q:
0
remote-address:
[::]:*
send-q:
128
state:
LISTEN
user:
0
network.ping
使用ping命令测试到某主机的连通性
[root@master ~]# salt 'minion1' network.ping www.baidu.com
minion1:
PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=128 time=26.5 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=128 time=21.7 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=3 ttl=128 time=25.2 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=4 ttl=128 time=25.10 ms
--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3007ms
rtt min/avg/max/mdev = 21.694/24.840/26.497/1.872 ms
network.reverse_ip
返回一个指定的IP地址的反向地址,在dns服务里面可能会用到,在dns里面有两个东西,一个叫正向区域(把域名解析成IP),一个叫反向区域(把IP解析成域名)
[root@master ~]# salt 'minion1' network.reverse_ip 192.168.1.0
minion1:
0.1.168.192.in-addr.arpa
service模块
service.available
判断指定的服务是否可用
[root@master ~]# salt 'minion1' service.available sshd
minion1:
True
service.get_all
获取所有正在运行的服务,准确的说是获取所有正在运行的进程
[root@master ~]# salt 'minion1' service.get_all
minion1:
- NetworkManager
- NetworkManager-dispatcher
- NetworkManager-wait-online
- auditd
- autovt@
- basic.target
- blk-availability
- bluetooth.target
- boot-complete.target
- chrony-dnssrv@
- chrony-dnssrv@.timer
- chrony-wait
- chronyd
- console-getty
- container-getty@
- cpupower
- crond
- cryptsetup-pre.target
- cryptsetup.target
- ctrl-alt-del.target
- dbus
- dbus-org.freedesktop.hostname1
- dbus-org.freedesktop.locale1
- dbus-org.freedesktop.login1
- dbus-org.freedesktop.nm-dispatcher
- dbus-org.freedesktop.portable1
- dbus-org.freedesktop.timedate1
- dbus.socket
- debug-shell
- default.target
- dev-hugepages.mount
- dev-mqueue.mount
- dm-event
- dm-event.socket
- dnf-makecache
- dnf-makecache.timer
- dracut-cmdline
- dracut-initqueue
- dracut-mount
- dracut-pre-mount
- dracut-pre-pivot
- dracut-pre-trigger
- dracut-pre-udev
- dracut-shutdown
- ebtables
- emergency
- emergency.target
- exit.target
- final.target
- firewalld
- fstrim
- fstrim.timer
- getty-pre.target
- getty.target
- getty@
- graphical.target
- grub-boot-indeterminate
- halt-local
- halt.target
- hibernate.target
- hybrid-sleep.target
- import-state
- initrd-cleanup
- initrd-fs.target
- initrd-parse-etc
- initrd-root-device.target
- initrd-root-fs.target
- initrd-switch-root
- initrd-switch-root.target
- initrd-udevadm-cleanup-db
- initrd.target
- iprdump
- iprinit
- iprupdate
- iprutils.target
- irqbalance
- kdump
- kexec.target
- kmod-static-nodes
- kvm_stat
- ldconfig
- loadmodules
- local-fs-pre.target
- local-fs.target
- lvm2-lvmpolld
- lvm2-lvmpolld.socket
- lvm2-monitor
- lvm2-pvscan@
- man-db-cache-update
- messagebus
- microcode
- multi-user.target
- network-online.target
- network-pre.target
- network.target
- nftables
- nginx
- nis-domainname
- nss-lookup.target
- nss-user-lookup.target
- paths.target
- plymouth-halt
- plymouth-kexec
- plymouth-poweroff
- plymouth-quit
- plymouth-quit-wait
- plymouth-read-write
- plymouth-reboot
- plymouth-start
- plymouth-switch-root
- plymouth-switch-root-initramfs
- polkit
- poweroff.target
- printer.target
- proc-sys-fs-binfmt_misc.automount
- proc-sys-fs-binfmt_misc.mount
- quotaon
- rc-local
- rdisc
- rdma-hw.target
- rdma-load-modules@
- rdma-ndd
- reboot.target
- remote-cryptsetup.target
- remote-fs-pre.target
- remote-fs.target
- rescue
- rescue.target
- rpcbind.target
- rsyslog
- run-vmblock\x2dfuse.mount
- runlevel0.target
- runlevel1.target
- runlevel2.target
- runlevel3.target
- runlevel4.target
- runlevel5.target
- runlevel6.target
- salt-minion
- salt-proxy@
- selinux-autorelabel
- selinux-autorelabel-mark
- selinux-autorelabel.target
- serial-getty@
- shutdown.target
- sigpwr.target
- sleep.target
- slices.target
- smartcard.target
- sockets.target
- sound.target
- sshd
- sshd-keygen.target
- sshd-keygen@
- sshd.socket
- sshd@
- sssd
- sssd-autofs
- sssd-autofs.socket
- sssd-kcm
- sssd-kcm.socket
- sssd-nss
- sssd-nss.socket
- sssd-pac
- sssd-pac.socket
- sssd-pam
- sssd-pam-priv.socket
- sssd-pam.socket
- sssd-ssh
- sssd-ssh.socket
- sssd-sudo
- sssd-sudo.socket
- suspend-then-hibernate.target
- suspend.target
- swap.target
- sys-fs-fuse-connections.mount
- sys-kernel-config.mount
- sys-kernel-debug.mount
- sysinit.target
- syslog
- syslog.socket
- system-update-cleanup
- system-update-pre.target
- system-update.target
- systemd-ask-password-console
- systemd-ask-password-console.path
- systemd-ask-password-plymouth
- systemd-ask-password-plymouth.path
- systemd-ask-password-wall
- systemd-ask-password-wall.path
- systemd-backlight@
- systemd-binfmt
- systemd-coredump.socket
- systemd-coredump@
- systemd-exit
- systemd-firstboot
- systemd-fsck-root
- systemd-fsck@
- systemd-halt
- systemd-hibernate
- systemd-hibernate-resume@
- systemd-hostnamed
- systemd-hwdb-update
- systemd-hybrid-sleep
- systemd-initctl
- systemd-initctl.socket
- systemd-journal-catalog-update
- systemd-journal-flush
- systemd-journald
- systemd-journald-audit.socket
- systemd-journald-dev-log.socket
- systemd-journald.socket
- systemd-kexec
- systemd-localed
- systemd-logind
- systemd-machine-id-commit
- systemd-modules-load
- systemd-portabled
- systemd-poweroff
- systemd-quotacheck
- systemd-random-seed
- systemd-reboot
- systemd-remount-fs
- systemd-resolved
- systemd-rfkill
- systemd-rfkill.socket
- systemd-suspend
- systemd-suspend-then-hibernate
- systemd-sysctl
- systemd-sysusers
- systemd-timedated
- systemd-tmpfiles-clean
- systemd-tmpfiles-clean.timer
- systemd-tmpfiles-setup
- systemd-tmpfiles-setup-dev
- systemd-udev-settle
- systemd-udev-trigger
- systemd-udevd
- systemd-udevd-control.socket
- systemd-udevd-kernel.socket
- systemd-update-done
- systemd-update-utmp
- systemd-update-utmp-runlevel
- systemd-user-sessions
- systemd-vconsole-setup
- systemd-volatile-root
- tcsd
- teamd@
- time-sync.target
- timedatex
- timers.target
- tmp.mount
- tuned
- umount.target
- unbound-anchor
- unbound-anchor.timer
- user-runtime-dir@
- user@
- vgauthd
- vmtoolsd
service.disabled
检查指定服务是否开机不自动启动,查看某一个服务是否处于禁用状态
[root@master ~]# salt 'minion1' service.disabled sshd
minion1:
False
service.enabled
检查指定服务是否开机自动启动,查看某一个服务是否在启用状态
[root@master ~]# salt 'minion1' service.enabled sshd
minion1:
True
service.disable
设置指定服务开机不自动启动
[root@master ~]# salt 'minion1' service.disable sshd
minion1:
True
service.enable
设置指定服务开机自动启动
[root@master ~]# salt 'minion1' service.enable sshd
minion1:
True
service.reload
重新加载指定服务
[root@master ~]# salt 'minion1' service.reload nginx
minion1:
True
service.stop
停止指定服务
[root@master ~]# salt 'minion1' service.stop nginx
minion1:
True
service.start
启动指定服务
[root@master ~]# salt 'minion1' service.start nginx
minion1:
True
service.restart
重启指定服务
[root@master ~]# salt 'minion1' service.restart nginx
minion1:
True
service.status
查看指定服务的状态
[root@master ~]# salt 'minion1' service.status nginx
minion1:
True
pkg模块
pkg.download
只下载软件包但不安装,不会下载依赖包 此功能将会下载指定的软件包,但是需要在minion端安装yum-utils,可以使用 cmd.run 进行远程安装
[root@master ~]# salt 'minion1' cmd.run 'yum -y install yum-utils'
minion1:
Last metadata expiration check: 0:27:24 ago on Wed Nov 3 14:12:10 2021.
Package yum-utils-4.0.18-4.el8.noarch is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@master ~]# salt 'minion1' pkg.download wget
minion1:
----------
wget:
/var/cache/yum/packages/wget-1.19.5-10.el8.x86_64.rpm
[root@minion1 ~]# ls /var/cache/yum/packages/
wget-1.19.5-10.el8.x86_64.rpm
pkg.file_list
列出指定包或系统中已安装的所有包的文件
[root@master ~]# salt 'minion1' pkg.file_list openssh
minion1:
----------
errors:
files:
- /etc/ssh
- /etc/ssh/moduli
- /usr/bin/ssh-keygen
- /usr/lib/.build-id
- /usr/lib/.build-id/0b
- /usr/lib/.build-id/0b/bdc4d92ff3c605b56714b6510fccde281765e5
- /usr/lib/.build-id/58
- /usr/lib/.build-id/58/7ef4180fd17a06c2f3ae9c1ccb8bcdb46b4fe5
- /usr/libexec/openssh
- /usr/libexec/openssh/ssh-keysign
- /usr/share/doc/openssh
- /usr/share/doc/openssh/CREDITS
- /usr/share/doc/openssh/ChangeLog
- /usr/share/doc/openssh/INSTALL
- /usr/share/doc/openssh/OVERVIEW
- /usr/share/doc/openssh/PROTOCOL
- /usr/share/doc/openssh/PROTOCOL.agent
- /usr/share/doc/openssh/PROTOCOL.certkeys
- /usr/share/doc/openssh/PROTOCOL.chacha20poly1305
- /usr/share/doc/openssh/PROTOCOL.key
- /usr/share/doc/openssh/PROTOCOL.krl
- /usr/share/doc/openssh/PROTOCOL.mux
- /usr/share/doc/openssh/README
- /usr/share/doc/openssh/README.dns
- /usr/share/doc/openssh/README.platform
- /usr/share/doc/openssh/README.privsep
- /usr/share/doc/openssh/README.tun
- /usr/share/doc/openssh/TODO
- /usr/share/licenses/openssh
- /usr/share/licenses/openssh/LICENCE
- /usr/share/man/man1/ssh-keygen.1.gz
- /usr/share/man/man8/ssh-keysign.8.gz
pkg.group_info
查看包组的信息
[root@master ~]# salt 'minion1' pkg.group_info 'Development Tools'
minion1:
----------
conditional:
default:
- asciidoc
- byacc
- ctags
- diffstat
- elfutils-libelf-devel
- git
- intltool
- jna
- ltrace
- patchutils
- perl-Fedora-VSP
- perl-Sys-Syslog
- perl-generators
- pesign
- source-highlight
- systemtap
- valgrind
- valgrind-devel
description:
A basic development environment.
group:
Development Tools
id:
None
mandatory:
- autoconf
- automake
- binutils
- bison
- flex
- gcc
- gcc-c++
- gdb
- glibc-devel
- libtool
- make
- pkgconf
- pkgconf-m4
- pkgconf-pkg-config
- redhat-rpm-config
- rpm-build
- rpm-sign
- strace
optional:
- cmake
- expect
- rpmdevtools
- rpmlint
type:
package group
pkg.group_list
列出系统中所有的包组
[root@master ~]# salt 'minion1' pkg.group_list
minion1:
----------
available:
- Backup Client
- base-x
- Conflicts AppStream
- Container Management
- Debugging Tools
- Desktop Debugging and Performance Tools
- .NET Core Development
- FTP Server
- GNOME Applications
- Graphics Creation Tools
- Guest Agents
- Guest Desktop Agents
- Input Methods
- Internet Applications
- Internet Browser
- Java Platform
- Legacy X Window System Compatibility
- Multimedia
- Office Suite and Productivity
- Atomic Host ostree support
- KVM platform specific packages
- Hyper-v platform specific packages
- Printing Client
- Remote Desktop Clients
- RPM Development Tools
- TeX formatting system
- Virtualization Client
- Virtualization Hypervisor
- Virtualization Platform
- Virtualization Tools
- Basic Web Server
- Additional Development
- Anaconda tools
- Base
- Conflicts BaseOS
- Development Tools
- Dial-up Networking Support
- File and Storage Server
- Fonts
- GNOME
- Graphical Administration Tools
- Hardware Monitoring Utilities
- Hardware Support
- Headless Management
- Infiniband Support
- Large Systems Performance
- Legacy UNIX Compatibility
- Mail Server
- Mainframe Access
- Network File System Client
- Network Servers
- Networking Tools
- Common NetworkManager submodules
- Performance Tools
- Platform Development
- Python Web
- Remote Management for Linux
- Scientific Support
- Security Tools
- Server product core
- Smart Card Support
- Windows File Server
- Standard
- System Tools
- Workstation product core
available environments:
- Server with GUI
- Server
- Workstation
- Virtualization Host
- Custom Operating System
available languages:
----------
installed:
- VMware platform specific packages
- Core
installed environments:
- Minimal Install
pkg.install
安装软件
[root@master ~]# salt 'minion1' pkg.install wget
minion1:
----------
wget:
----------
new:
1.19.5-10.el8
old:
[root@master ~]# salt 'minion1' pkg.install vim
minion1:
----------
pkg.list_downloaded
列出已下载到本地的软件包
[root@master ~]# salt 'minion1' pkg.list_downloaded
minion1:
----------
pkg.list_pkgs
以字典的方式列出当前已安装的软件包
[root@master ~]# salt 'minion1' pkg.list_pkgs
minion1:
----------
NetworkManager:
1:1.30.0-7.el8
NetworkManager-libnm:
1:1.30.0-7.el8
NetworkManager-team:
1:1.30.0-7.el8
NetworkManager-tui:
1:1.30.0-7.el8
acl:
2.2.53-1.el8
audit:
3.0-0.17.20191104git1c2f876.el8
audit-libs:
3.0-0.17.20191104git1c2f876.el8
authselect:
1.2.2-2.el8
authselect-libs:
1.2.2-2.el8
basesystem:
11-5.el8
bash:
4.4.19-14.el8
bind-export-libs:
32:9.11.26-3.el8
biosdevname:
0.7.3-2.el8
brotli:
1.0.6-3.el8
bzip2-libs:
1.0.6-26.el8
c-ares:
1.13.0-5.el8
//后面省略
[root@master ~]# salt 'minion1' pkg.list_pkgs|wc -l
970
pkg.owner
列出指定文件是由哪个包提供的
[root@master ~]# salt 'minion1' pkg.owner /usr/bin/ls
minion1:
coreutils
pkg.remove
卸载指定软件
[root@master ~]# salt 'minion1' pkg.remove wget
minion1:
----------
wget:
----------
new:
old:
1.19.5-10.el8
pkg.upgrade
升级系统中所有的软件包或升级指定的软件包
[root@master ~]# salt 'minion1' pkg.upgrade name=openssl
minion1:
----------
state模块
state.show_highstate
[root@master ~]# salt 'minion1' state.show_highstate
minion1:
----------
nginx-install:
----------
__env__:
base
__sls__:
web.nginx.install
pkg:
|_
----------
name:
nginx
- installed
|_
----------
order:
10000
nginx-service:
----------
__env__:
base
__sls__:
web.nginx.install
service:
|_
----------
name:
nginx
|_
----------
enable:
True
- running
|_
----------
order:
10001
state.highstate
执行高级状态
[root@master ~]# salt 'minion1' state.highstate web.apache.installminion:
minion1:
----------
ID: nginx-install
Function: pkg.installed
Name: nginx
Result: True
Comment: All specified packages are already installed
Started: 14:49:13.596876
Duration: 707.103 ms
Changes:
----------
ID: nginx-service
Function: service.running
Name: nginx
Result: True
Comment: The service nginx is already running
Started: 14:49:14.309187
Duration: 47.961 ms
Changes:
Summary for minion1
------------
Succeeded: 2
Failed: 0
------------
Total states run: 2
Total run time: 755.064 ms
state.show_state_usage
显示当前系统中的高级状态执行情况
[root@master ~]# salt 'minion1' state.show_state_usage
minion1:
----------
base:
----------
count_all:
3
count_unused:
2
count_used:
1
unused:
- top
- web.apache.install
used:
- web.nginx.install
dev:
----------
count_all:
0
count_unused:
0
count_used:
0
unused:
used:
prod:
----------
count_all:
0
count_unused:
0
count_used:
0
unused:
used:
test:
----------
count_all:
0
count_unused:
0
count_used:
0
unused:
used:
tate.show_top
返回minion将用于highstate的顶级数据
[root@master ~]# salt 'minion1' state.show_top
minion1:
----------
base:
- web.nginx.install
state.top
执行指定的top file,而不是默认的
[root@master ~]# salt 'minion1' state.top top.sls
minion1:
----------
ID: nginx-install
Function: pkg.installed
Name: nginx
Result: True
Comment: All specified packages are already installed
Started: 14:51:02.552129
Duration: 711.454 ms
Changes:
----------
ID: nginx-service
Function: service.running
Name: nginx
Result: True
Comment: The service nginx is already running
Started: 14:51:03.265137
Duration: 47.873 ms
Changes:
Summary for minion1
------------
Succeeded: 2
Failed: 0
------------
Total states run: 2
Total run time: 759.327 ms
state.show_sls
显示 master 上特定sls或sls文件列表中的状态数据
[root@master ~]# salt 'minion1' state.show_sls web.apache.install
minion1:
----------
apache-install:
----------
__env__:
base
__sls__:
web.apache.install
pkg:
|_
----------
name:
httpd
- installed
|_
----------
order:
10000
apache-service:
----------
__env__:
base
__sls__:
web.apache.install
service:
|_
----------
name:
httpd
|_
----------
enable:
True
- running
|_
----------
order:
10001
user模块
user.add
创建用户
[root@master ~]# salt 'minion1' user.add sz
minion1:
True
[root@minion1 ~]# id sz
uid=1931(sz) gid=1931(sz) groups=1931(sz)
user.chgid
更改用户的默认组
[root@master ~]# salt 'minion1' user.chgid sz 999
minion1:
True
[root@master ~]# salt 'minion1' cmd.run 'id sz'
minion1:
uid=1931(sz) gid=999(input) groups=999(input)
user.chgroups
更改用户的所属组
[root@master ~]# salt 'minion1' user.chgroups sz sz
minion1:
True
[root@master ~]# salt 'minion1' cmd.run 'id sz'
minion1:
uid=1931(sz) gid=999(input) groups=999(input),1931(sz)
user.chhome
更改用户的家目录,如果旧的家目录存在,则将家目录的文件移动到新的家目录
[root@master ~]# salt 'minion1' user.chhome sz /home/sz
minion1:
True
user.chuid
更改指定用户的uid
[root@master ~]# salt 'minion1' user.chuid sz 1234
minion1:
True
[root@master ~]# salt 'minion1' cmd.run 'id sz'
minion1:
uid=1234(sz) gid=999(input) groups=999(input),1931(sz)
user.delete
从minion中删除一个用户
[root@master ~]# salt 'minion1' user.delete sz
minion1:
True
[root@master ~]# salt 'minion1' cmd.run 'id sz'
minion1:
id: 'sz': no such user
ERROR: Minions returned with non-zero exit code
user.rename
更改用户名
[root@master ~]# salt 'minion1' user.add dd
minion1:
True
[root@master ~]# salt 'minion1' user.rename dd DD
minion1:
False
[root@master ~]# salt 'minion1' cmd.run 'id DD'
minion1:
uid=1931(DD) gid=1932(dd) groups=1932(dd)
cp模块
cp.get_file
cp.get_file用于minion从master下载一个文件,语法:
- 文件在base环境下
salt ‘*’ cp.get_file salt://testfile /root/testfile
cp.get_dir
从master下载整个目录
[root@master ~]# salt 'minion1' cp.get_dir salt://httpd /root
minion1:
- /root/httpd/httpd.conf
file模块
file.access
检查指定路径是否存在
[root@minion1 ~]# ls /usr/src/
debug kernels
[root@master ~]# salt minion1 file.access /usr/src/debug f
minion1:
True
[root@master ~]# salt minion1 file.access /usr/src/zs f
minion1:
False
检查指定文件的权限信息
[root@minion1 ~]# ll /usr/src/
total 0
drwxr-xr-x. 2 root root 6 Nov 3 2020 debug
drwxr-xr-x. 2 root root 6 Nov 3 2020 kernels
[root@master ~]# salt minion1 file.access /usr/src/debug r 是否有读权限
minion1:
True
[root@master ~]# salt minion1 file.access /usr/src/debug w 是否有写权限
minion1:
True
[root@master ~]# salt minion1 file.access /usr/src/debug x 是否有执行权限
minion1:
True
file.append
往一个文件里追加内容,若此文件不存在则会报异常
[root@minion1 ~]# ll
total 4
-rw-------. 1 root root 1251 Oct 13 03:27 anaconda-ks.cfg
drw-r--r-- 2 root root 6 Nov 5 00:11 dd
[root@master ~]# salt minion1 file.append /root/dd "hello" "zs"
zs:
Wrote 2 lines to "/root/dd"
[root@minion ~]# cat dd
hello
zs
file.basename
获取指定路径的基名
[root@master ~]# salt minion1 file.basename '/usr/src/debug'
minion1:
debug
file.dirname
获取指定路径的目录名
[root@master ~]# salt minion1 file.dirname '/usr/src/debug'
minion1:
/usr/src
file.check_hash
检查指定的文件与hash字符串是否匹配,匹配则返回 True 否则返回 False
[root@minion1 ~]# md5sum /etc/passwd
efb6f6eff3f7ea171fbc34bf467e3b35 /etc/passwd
[root@master ~]# salt minion1 file.check_hash /etc/passwd efb6f6eff3f7ea171fbc34bf467e3b35
minion1:
True
file.chattr
修改指定文件的属性
| 属性 | 对文件的意义 | 对目录的意义 |
|---|---|---|
| a | 只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件 | 只允许在这个目录下建立和修改文件,而不允许删除任何文件 |
| i | 不允许对这个文件进行任何的修改,不能删除、更改、移动 | 任何的进程只能修改目录之下的文件,不允许建立和删除文件 |
给指定文件添加属性
[root@master ~]# salt 'minion1' cmd.run 'lsattr /root'
minion1:
-------------------- /root/anaconda-ks.cfg
-------------------- /root/dd
[root@master ~]# salt 'minion1' file.chattr /root/dd operator=add attributes=ai
minion1:
True
[root@master ~]# salt 'minion1' cmd.run 'lsattr /root'
minion1:
-------------------- /root/anaconda-ks.cfg
----ia-------------- /root/dd
给指定文件去除属性
[root@master ~]# salt 'minion1' cmd.run 'lsattr /root'
minion1:
-------------------- /root/anaconda-ks.cfg
----ia-------------- /root/dd
[root@master ~]# salt 'minion1' file.chattr /root/dd operator=remove attributes=ai
minion1:
True
[root@master ~]# salt 'minion1' cmd.run 'lsattr /root'
minion1:
-------------------- /root/anaconda-ks.cfg
-------------------- /root/dd
file.chown
设置指定文件的属主、属组信息
[root@master ~]# salt 'minion1' cmd.run 'ls -l /root/'
minion1:
total 4
-rw-------. 1 root root 1251 Oct 13 03:27 anaconda-ks.cfg
drw-r--r-- 2 root root 6 Nov 5 00:11 dd
[root@master ~]# salt minion1 file.chown /root/dd tom tom
minion1:
User does not exist
Group does not exist
[root@master ~]# salt minion1 cmd.run 'ls -l /root/'
minion1:
total 4
-rw-------. 1 root root 1251 Oct 13 03:27 anaconda-ks.cfg
drw-r--r-- 2 root root 6 Nov 5 00:11 dd
file.copy
在远程主机上复制文件或目录
[root@master ~]# salt 'minion1' file.copy /etc/passwd /opt/123
minion1:
True
[root@master ~]# salt 'minion1' cmd.run 'ls /opt'
minion1:
123
file.ditectory_exists
判断指定目录是否存在,存在则返回 True ,否则返回 False
[root@master ~]# salt 'minion1' cmd.run 'ls -l /opt'
minion1:
total 4
-rw-r--r-- 1 root root 1225 Nov 5 00:29 123
drwxr-xr-x 2 root root 6 Nov 5 00:32 abc
[root@master ~]# salt 'minion1' file.directory_exists /opt/abc
minion1:
True
[root@master ~]# salt 'minion1' file.directory_exists /opt/123
minion1:
False
file.file_exists
判断指定文件是否存在
[root@master ~]# salt 'minion1' file.file_exists /root/dd
minion1:
True
[root@master ~]# salt 'minion1' file.file_exists /root/123
minion1:
False
file.find
类似 find 命令并返回符合指定条件的路径列表 The options include match criteria:
name = path-glob # 区分大小写
iname = path-glob # 不区分大小写
regex = path-regex # 区分大小写
iregex = path-regex # 不区分大小写
type = file-types # 匹配任何列出的类型
user = users # 匹配任何列出的用户
group = groups # 匹配任何列出的组
size = [+-]number[size-unit] # 默认单位=字节
mtime = interval # 从日期开始修改
grep = regex # 搜索文件内容
and/or actions:
delete [= file-types] # default type = 'f'
exec = command [arg ...] # where {} is replaced by pathname
print [= print-opts]
and/or depth criteria:
maxdepth = maximum depth to transverse in path
mindepth = minimum depth to transverse before checking files or directories
The default action is print=path
path-glob:
* = 匹配零个或多个字符
? = 匹配任意字符
[abc] = 匹配a, b或c
[!abc] or [^abc] = 匹配除a, b, c之外的任何东西
[x-y] = 匹配字符x到y
[!x-y] or [^x-y] = 匹配除了字符x到y以外的任何字符
{a,b,c} = 匹配 a or b or c
path-regex: a Python Regex (regular expression) pattern to match pathnames
file-types: a string of one or more of the following:
a: all file types
b: block device
c: character device
d: directory
p: FIFO (named pipe)
f: plain file
l: symlink
s: socket
--------------------
a: 所有文件类型
b: 块设备
c: 字符设备
d: 目录
p: FIFO(命名管道)
f: 普通文件
l: 符号链接
s: 套接字
users: a space and/or comma separated list of user names and/or uids
groups: a space and/or comma separated list of group names and/or gids
size-unit:
b: bytes
k: kilobytes
m: megabytes
g: gigabytes
t: terabytes
print-opts: a comma and/or space separated list of one or more of the following:
group: :组名
md5: 文件内容的md5摘要
mode: 文件权限(以整数形式)
mtime: 最后一次修改时间(as time_t)
name: file basename
path: 文件的绝对路径
size: 以字节为单位的文件大小
type: 文件类型
user: 用户名
salt '*' file.find / type=f name=\*.bak size=+10m
salt '*' file.find /var mtime=+30d 30天以前文件被修改的时间 size=+10m 大于等于10m的文件 print=path,size,mtime
salt '*' file.find /var/log name=\*.[0-9] mtime=+30d size=+10m delete
file.get_gid
获取指定文件的gid
[root@master ~]# salt 'minion1' cmd.run 'ls -l /root/dd'
minion1:
total 0
[root@master ~]# salt 'minion1' file.get_gid /root/dd
minion1:
0
file.get_group
获取指定文件的组名
[root@master ~]# salt 'minion1' cmd.run 'ls -l /root/dd'
minion1:
total 0
[root@master ~]# salt 'minion1' file.get_group /root/dd
minion1:
root
file.get_hash
获取指定文件的hash值,该值通过 sha256 算法得来
[root@master ~]# salt 'minion1' cmd.run 'sha256sum /root/dd'
minion1:
e3b0c44298fc1c149afbf4c8996fb92427ae41eef200d0be919d36e6bae31fc /root/dd
[root@master ~]# salt 'minion1' file.get_hash /root/dd
minion1:
51cbfc85c15e0fb92427ae41e4649b934ca495991b7852b855
file.get_mode
获取指定文件的权限,以数字方式显示
[root@master ~]# salt 'minion1' cmd.run 'ls -l /root/dd'
minion1:
total 0
[root@master ~]# salt 'minion1' file.get_mode /root/dd
minion1:
0644
file.get_selinux_context
获取指定文件的 SELINUX 上下文信息
获取/varlog目录的上下文
[root@master ~]# salt 'minion1' file.get_selinux_context /var/log
minion1:
system_u:object_r:var_log_t:s0
获取/root/目录的上下文
[root@master ~]# salt 'minion1' file.get_selinux_context /root/
minion1:
system_u:object_r:admin_home_t:s0
file.get_sum
按照指定的算法计算指定文件的特征码并显示,默认使用的sha256算法。 该函数可使用的算法参数有:
md5 sha1 sha224 sha256 (default) sha384 sha512
[root@master ~]# salt 'minion1' file.get_sum /etc/httpd/conf/httpd.conf
minion1:
4d4f8f5c7f0a6a369ebb2fe687a8f9ad58d80b7961c44c595c1351f7
[root@master ~]# salt 'minion1' file.get_sum /etc/httpd/conf/httpd.conf md5
minion:
58b5a8f9ad58d80b7961c44c595c1351f7
[root@master ~]# salt 'minion1' file.get_sum /etc/httpd/conf/httpd.conf sha512
minion1:
c51c29687d0c6fd19fa8f9ad58d80b7961c44c595c1351f78d80b7961c44c595c1351f75ac2e86ce86d978b260ac0d04dfcec20752b971510fcb5a
[root@master ~]# salt 'minion1' file.get_sum /etc/httpd/conf/httpd.conf sha224
minion1:
4d4f8f5c7f0a6a369ebb2f896c433fe897ec0bf96e7032d5f45a649b
file.get_uid与file.get_user
获取指定文件的 uid 或 用户名
[root@minion1 ~]# touch test.sh
[root@minion1 ~]# ls
123 anaconda-ks.cfg dd test.sh
[root@master ~]# salt 'minion1' file.get_uid /root/test.sh
minion1:
0
[root@master ~]# salt 'minion1' file.get_user /root/test.sh
minion1:
root
[root@master ~]# salt 'minion1' file.get_gid /root/test.sh
minion1:
0
[root@master ~]# salt 'minion1' file.get_group /root/test.sh
minion1:
root
file.gid_to_group
将指定的 gid 转换为组名并显示
[root@master ~]# salt 'minion1' file.gid_to_group 0
minion1:
root
file.group_to_gid
将指定的组名转换为 gid 并显示
[root@master ~]# salt 'minion1' file.group_to_gid root
minion1:
0
[root@master ~]# salt 'minion1' file.group_to_gid tom
minion1:
file.grep
在指定文件中检索指定内容 该函数支持通配符,若在指定的路径中用通配符则必须用双引号引起来
salt '*' file.grep /etc/passwd nobody
salt '*' file.grep /etc/sysconfig/network-scripts/ifcfg-eth0 ipaddr -- -i
salt '*' file.grep /etc/sysconfig/network-scripts/ifcfg-eth0 ipaddr -- -i -B2
salt '*' file.grep "/etc/sysconfig/network-scripts/*" ipaddr -- -i -l
[root@master ~]# salt 'minion1' file.grep /etc/passwd "^root"
minion1:
----------
pid:
80607
retcode:
0
stderr:
stdout:
root:x:0:0:root:/root:/bin/bash
[root@master ~]# salt 'minion1' file.grep /etc/sysconfig/network-scripts/ifcfg-ens33 ipaddr -- -i
minion1:
----------
pid:
80948
retcode:
1
stderr:
stdout:
IPADDR=192.168.47.161
[root@master ~]# salt 'minion1' file.grep /etc/sysconfig/network-scripts/ifcfg-ens33 ipaddr -- -il
minion1:
----------
pid:
81417
retcode:
1
stderr:
stdout:
/etc/sysconfig/network-scripts/ifcfg-ens33
file.is_blkdev
判断指定的文件是否是块设备文件
[root@master ~]# salt 'minion1' cmd.run 'ls -l /dev/sr0'
minion1:
brw-rw---- 1 root cdrom 11, 0 Nov 5 00:05 /dev/sr0
[root@master ~]# salt 'minion1' file.is_blkdev /dev/sr0
minion1:
True
file.lsattr
检查并显示出指定文件的属性信息
[root@master ~]# salt 'minion1' cmd.run 'lsattr /etc/passwd'
minion1:
-------------------- /etc/passwd
[root@master ~]# salt 'minion1' cmd.run 'chattr +a /etc/passwd'
minion1:
[root@master ~]# salt 'minion1' cmd.run 'lsattr /etc/passwd'
minion1:
-----a-------------- /etc/passwd
[root@master ~]# salt 'minion1' cmd.run 'chattr -a /etc/passwd'
minion1:
[root@master ~]# salt 'minion1' cmd.run 'lsattr /etc/passwd'
minion1:
-------------------- /etc/passwd
file.mkdir
创建目录并设置属主、属组及权限
[root@master ~]# salt 'minion1' file.mkdir /opt/hehe root alice 755
minion1:
True
[root@master ~]# salt 'minion1' cmd.run 'ls -l /opt/'
minion1:
total 4
-rw-r--r-- 1 root root 1225 Nov 5 00:29 123
drwxr-xr-x 2 root root 6 Nov 5 00:32 abc
drwxr-xr-x 2 root root 6 Nov 5 00:58 hehe
file.move
移动或重命名
## 重命名 ##
[root@master ~]# salt 'minion1' cmd.run 'ls -l /opt/'
minion1:
total 4
-rw-r--r-- 1 root root 1225 Nov 5 00:29 123
drwxr-xr-x 2 root root 6 Nov 5 00:32 abc
drwxr-xr-x 2 root root 6 Nov 5 00:58 hehe
[root@master ~]# salt minion1 cmd.run 'ls -l /root'
minion1:
total 4
drwxr-xr-x 2 root root 6 Nov 5 00:34 123
-rw-------. 1 root root 1251 Oct 13 03:27 anaconda-ks.cfg
drw-r--r-- 2 root root 6 Nov 5 00:11 dd
-rw-r--r-- 1 root root 0 Nov 5 00:50 test.sh
[root@master ~]# salt minion1 file.move /root/123 /root/321
minion1:
----------
comment:
'/root/123' moved to '/root/321'
result:
True
[root@master ~]# salt minion1 cmd.run 'ls -l /root'
minion1:
total 4
drwxr-xr-x 2 root root 6 Nov 5 00:34 321
-rw-------. 1 root root 1251 Oct 13 03:27 anaconda-ks.cfg
drw-r--r-- 2 root root 6 Nov 5 00:11 dd
-rw-r--r-- 1 root root 0 Nov 5 00:50 test.sh
## 移动 ##
[root@master ~]# salt minion1 cmd.run 'ls -l /root'
minion1:
total 4
drwxr-xr-x 2 root root 6 Nov 5 00:34 321
-rw-------. 1 root root 1251 Oct 13 03:27 anaconda-ks.cfg
drw-r--r-- 2 root root 6 Nov 5 00:11 dd
-rw-r--r-- 1 root root 0 Nov 5 00:50 test.sh
[root@master ~]# salt minion1 cmd.run 'ls -l /opt'
minion1:
total 4
-rw-r--r-- 1 root root 1225 Nov 5 00:29 123
drwxr-xr-x 2 root root 6 Nov 5 00:32 abc
drwxr-xr-x 2 root root 6 Nov 5 00:58 hehe
[root@master ~]# salt minion1 file.move /root/321 /opt/
minion1:
----------
comment:
'/root/321' moved to '/opt/'
result:
True
[root@master ~]# salt minion1 cmd.run 'ls -l /opt'
minion1:
total 4
-rw-r--r-- 1 root root 1225 Nov 5 00:29 123
drwxr-xr-x 2 root root 6 Nov 5 00:34 321
drwxr-xr-x 2 root root 6 Nov 5 00:32 abc
drwxr-xr-x 2 root root 6 Nov 5 00:58 hehe
浙公网安备 33010602011771号