saltstack 列出linux机器,SaltStack学习(四)在SaltStack中选择目标主机

Targeting

Targeting通过客户端的hostname,系统信息,预定义的分组或复合条件来选择执行命令或配置状态的目标机器。

比如说命令salt web1 apache.signal restart        #只会重启web1上的apache服务

在State系统也类似,以下的top file只让客户端web1执行webserver.slsbase:

'web1':

- webserver

Salt目前有5种方式来选择目标机器,灵活而强大。匹配minion id

*使用shell通配符

*正则(Perl风格)

*minion列表

Grains

*可用的Grains

*在客户端配置文件中定义Grains

*编写Grains

节点分组

复合匹配

批量执行

匹配minion idminion id

客户端(minion)的唯一标志符。默认值是主机的FQDN,也可以在配置文件中修改。

每一个客户端都需要唯一标志符。minion第一次启动时选择FQDN作为标志符。默认值可以在minion配置文件中用id来覆盖.tips:

minion id和minion keys

minion id 是 minion 公/私钥对的名字,如果修改了 minion id ,master 需要重新接受新的key,

否则 minion 不能通过 master 的认证。操作和添加新的 minion 一样。shell通配符Globbing

Salt默认使用shell风格通配符('*','?','[]')来匹配minion id。在State系统中的top file也一样。Note:

使用 salt 命令时必须将'*'放在单引号中,或是用'\'转义,不然 shell 会在 salt 之前扩展'*'。

匹配所有客户端:salt '*' test.ping

匹配所有example.net域或者example域的客户端:salt '*.example.net' test.ping

salt '*.example.*' test.ping

匹配example.net域中的webN客户端(web1.example.net, web2.example.net … webN.example.net):salt 'web?.example.net' test.ping

匹配web1到web5:salt 'web[1-5]' test.ping

匹配web1和web3salt 'web[1,3]' test.ping

匹配web-x,web-y,web-z:salt 'web-[x-z]' test.ping正则表达式 Regular Expressions

Salt可以使用Perl风格的正则表达式来匹配minion id,使用选项-E

匹配web1-prod和web1-devel:salt -E 'web1-(prod|devel)' test.ping

在State的top file,需要将匹配方式作为第一个选项。以下例子在和上面相同的客户端上执行webserver中的内容base:

'web1-(prod|devel)':

- match: pcre

- webserverminion列表 Lists

最基本的,可以列出每一个minion id来指定多个目标机器,使用选项'-L'。[root@localhost ~]# salt -L 'salt_minion_001,salt_minion_002' test.ping

salt_minion_001:

True

salt_minion_002:

True

使用 Grains

Grainsminion启动时收集的关于系统的静态信息。

需要注意的是,grains是minion启动时加载的,在运行过程中不会发生变化,所以是静态数据。grains中包含诸如运行的内核版本,操作系统等信息。grains示例

匹配所有系统是CentOS的客户端:salt -G 'os:CentOS' test.ping

匹配所有64位CPU的机器,并返回CPU核心数:salt -G 'cpuarch:x86_64' grains.item num_cpus

grains.item列出所有grains的名字及内容。salt '*' grains.items

有哪些可用的grains?

grains在客户端上运行,收集客户端的信息,所有不同的客户端可以有不同的grains。使用grains.ls模块列出目标机器上所有可用的grains的名字。salt '*' grains.ls

grains.item列出所有grains的名字及内容。salt '*' grains.items在客户端配置文件中定义grains

内置的grains不一定满足需求,可以在minion的配置文件中静态定义grains。grains:

roles:

- webserver

- memcache

deployment: datacenter4

cabinet: 13

cab_u: 14-15

重启minion服务后,grains.ls就可以列出roles等自定义的grains。grains数据不仅可以用salt命令查询,还可以在state系统和Targeting中用来匹配目标机器。编写Grains

在minion配置文件中定义的grains是静态的,不能够动态的在minion上生成。可以用Python非常方便的写动态的grains。minion启动时,会执行grains包所带的模块及自定义grains模块中的公开函数,返回的结果就是grains。grains模块中的函数必须返回一个dict,其中key是grains的名字,value是值。

很明显,自定义的grains并不是直接放在minion上,而是放在master配置文件中定义的file_roots下的_grains目录中。执行state.highstate,saltutil.sync_grains,saltutil.sync_all时,会将_grains中的文件分发到客户端上。

假定file_roots为/srv/salt,增加自定义grain的操作如下:# mkdir /srv/salt/_grains# vim /srv/salt/_grains/custom_grain.py

def custom_grains():

'''

only a test grain.

you could use any Python code to generate the grains list dynamicly.

'''

grains = {'role' : 'LB'}

return grains# salt '*' saltutil.sync_grains# salt '*' grains.item role

由于是作为模块导入,custom_grain.py中不需要#!/usr/bin/env python行,也不需要有执行权限。

节点组 Node GroupsNode group在master中nodegroups用复合条件定义的一组minion。

复合匹配在下面的内容有详细介绍。

nodegroups配置示例:nodegroups:

group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'

group2: 'G@os:Debian and foo.domain.com

使用-N选项:salt -N group1 test.ping

在top file中用 - match: nodegroup来指定使用节点组匹配。base:

group1:

- match: nodegroup

- webserver

复合匹配 Compound matchersCompound matcher用布尔操作符连接的多个目标条件。

复合匹配可以用前面讨论的几种方式实现更精确的匹配。复合匹配默认使用Globbing,要使用其他匹配方式的话,需要加上类型前缀字母,现在实现的字母详细列表,请参考文档。LetterMatch Type例如:GGrains globG@os:Ubuntu

EPCRE Minion IDE@web\d+\.(dev|qa|prod)\.loc

PGrains PCREP@os:(RedHat|Fedora|CentOS)

LList of minionsL@minion(奴才)1.example.com,minion3.domain.com or bl*.domain.com

IPillar globI@pdata:foobar

SSubnet/IP addressS@192.168.1.0/24 or S@192.168.1.100

RRange clusterR@%foo.bar

复合匹配中也可以使用and,or,not操作符,比如说,下面的命令匹配主机名以webserv开始且运行Debian系统的minion,还匹配主机名满足正则web-dc1-srv.*的minion。salt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.ping

本例中,G表示用shell通配符匹配grains;E表示用正则匹配minion id。

这个例子在top file中如下base:

'webserv* and G@os:Debian or E@web-dc1-srv.*':

- match: compound

- webserver

注意not不能用于第一个条件,需要用如下命令:salt -C '* and not G@kernel:Darwin' test.ping

批量执行 Batch Size在指定数量或百分比的机器上执行命令。

在指定数量或百分比的机器上执行命令。salt '*' -b 10 test.ping

salt -G 'os:RedHat' --batch-size 25% apache.signal restart

第一条命令在所有的客户端上执行test.ping,但同一时间只有10台机器运行此命令,当有minion返回执行结果是,再让下一个minion执行。

第二条命令在系统是RedHat的客户端中重启apache服务,但同一时间只有25%的机器执行重启,直到所有目标机器执行完成。

Batch Size并不减少总的数量,只是限制同时执行任务的机器数量。这非常有用,比如,在负载均衡web集群中,可以只用一条命令分批的重启web服务。

子网/IP地址匹配salt -S 192.168.40.20 test.ping

salt -S 10.0.0.0/24 test.ping

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Docker 安装 SaltStack 需要先创建一个基础镜像并在其安装 SaltStack。 以下是基础镜像的 Dockerfile 示例: ``` FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y curl gnupg2 && \ curl -fsSL https://repo.saltstack.com/py3/ubuntu/18.04/amd64/latest/SALTSTACK-GPG-KEY.pub | apt-key add - && \ echo "deb http://repo.saltstack.com/py3/ubuntu/18.04/amd64/latest bionic main" > /etc/apt/sources.list.d/saltstack.list && \ apt-get update && \ apt-get install -y salt-minion ``` 该 Dockerfile 基于 Ubuntu 18.04 镜像,并安装了 SaltStack 的最新版本。在构建该镜像时,会从 SaltStack 的官方仓库下载并安装 SaltStack。 构建镜像的命令如下: ``` docker build -t saltstack:latest . ``` 然后,可以使用该镜像启动一个 SaltStack Minion 容器: ``` docker run -d --name salt-minion saltstack:latest ``` 需要确保在启动容器时,将容器与 SaltStack Master 进行连接。可以通过在启动容器时设置环境变量来完成此操作: ``` docker run -d --name salt-minion -e "MASTER=salt-master" saltstack:latest ``` 其,salt-master 为 SaltStack Master 的主机名或 IP 地址。 启动容器后,可以通过以下命令进入容器内部: ``` docker exec -it salt-minion bash ``` 在容器内部,可以使用 SaltStack 的命令行工具与 Master 进行交互。例如,可以使用以下命令测试与 Master 的连接: ``` salt-call test.ping ``` 这将会向 Master 发送一个 ping 请求,并返回响应。如果响应为 True,则表示连接成功。 希望这些信息能够对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值