设为首页 收藏本站
查看: 1268|回复: 0

[经验分享] SaltStack学习(四)在SaltStack中选择目标主机

[复制链接]

尚未签到

发表于 2018-8-1 09:17:25 | 显示全部楼层 |阅读模式
Targeting
  Targeting
  通过客户端的hostname,系统信息,预定义的分组或复合条件来选择执行命令或配置状态的目标机器。
  比如说命令
salt web1 apache.signal restart        #只会重启web1上的apache服务  在State系统也类似,以下的top file只让客户端web1执行webserver.sls
base:  
  'web1':
  
    - webserver
  Salt目前有5种方式来选择目标机器,灵活而强大。

  •   匹配minion>  *使用shell通配符
      *正则(Perl风格)
        *minion列表
  •   Grains
      *可用的Grains
      *在客户端配置文件中定义Grains
      *编写Grains
  •   节点分组
  •   复合匹配
  •   批量执行
  匹配minion>

  •   minion>
  客户端(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>。在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和web3
salt 'web[1,3]' test.ping  匹配web-x,web-y,web-z:
salt 'web-[x-z]' test.ping

  •   正则表达式 Regular Expressions
  Salt可以使用Perl风格的正则表达式来匹配minion>,使用选项-E
  匹配web1-prod和web1-devel:
salt -E 'web1-(prod|devel)' test.ping  在State的top file,需要将匹配方式作为第一个选项。以下例子在和上面相同的客户端上执行webserver中的内容
base:  
  'web1-(prod|devel)':
  
  - match: pcre
  
  - webserver

  • minion列表 Lists
  最基本的,可以列出每一个minion>来指定多个目标机器,使用选项'-L'。
[root@localhost ~]# salt -L 'salt_minion_001,salt_minion_002' test.ping  
salt_minion_001:
  
    True
  
salt_minion_002:
  
    True
使用 Grains
  Grains
  minion启动时收集的关于系统的静态信息。
  需要注意的是,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 Groups

  •   Node 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 matchers

  •   Compound matcher
  用布尔操作符连接的多个目标条件。
  复合匹配可以用前面讨论的几种方式实现更精确的匹配。复合匹配默认使用Globbing,要使用其他匹配方式的话,需要加上类型前缀字母,现在实现的字母详细列表,请参考文档。
LetterMatch Type  例如:
GGrains globG@os:UbuntuEPCRE Minion>复合匹配中也可以使用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>。
这个例子在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>

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

  
salt -G 'os:RedHat' --batch-size 25% apache.signal restart
  第一条命令在所有的客户端上执行test.ping,但同一时间只有10台机器运行此命令,当有minion返回执行结果是,再让下一个minion执行。
第二条命令在系统是RedHat的客户端中重启apache服务,但同一时间只有25%的机器执行重启,直到所有目标机器执行完成。
  Batch>并不减少总的数量,只是限制同时执行任务的机器数量。这非常有用,比如,在负载均衡web集群中,可以只用一条命令分批的重启web服务。
  本文转自:http://www.ituring.com.cn/article/41737
  
  子网/IP地址匹配
salt -S 192.168.40.20 test.ping  
salt -S 10.0.0.0/24 test.ping

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-544513-1-1.html 上篇帖子: SaltStack学习笔记(三)详解Grain-Linux革命 下篇帖子: SaltStack学习(五)SaltStack中的文件服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表