SaltStack学习(二) 通过 salt 远程执行管理 minion

1  salt 远程执行命令的组成结构

# salt "*" test.ping
m01:
    True
master:
    True
 
## 查看 salt 命令的帮助信息
# salt -h
Usage: salt [options] '<target>' <function> [arguments]

salt 远程执行命令由五部分组成

第一部分: salt  命令本身

第二部分: options  命令选项

第三部分: target  目标minion,也就是要操作的目标 minion

第四部分: function  远程执行的 salt函数

第五部分: 远程执行函数的参数

来一个例子:

# salt --summary "*" cmd.run "uptime"
m01:
     22:45:22 up 54 min,  2 users,  load average: 0.00, 0.01, 0.03
master:
     22:45:22 up 54 min,  2 users,  load average: 0.00, 0.01, 0.05
 
-------------------------------------------
Summary
-------------------------------------------
# of Minions Targeted: 2
# of Minions Returned: 2
# of Minions Did Not Return: 0
-------------------------------------------

options  命令选项

salt 命令的几个主要参数

-v, --verbose Turn on command verbosity, display jid and active job queries

            开启命令的详细描述,详细描述运行命令后会发生什么

 

--summary             Display summary information about a salt command

            显示一条 salt 命令的概要信息

 

--out=OUTPUT, --output=OUTPUT  
                     Print the output from the 'salt' command using the
                     specified outputter. The builtins are 'key', 'yaml',
                     'overstatestage', 'newline_values_only', 'pprint',
                     'txt', 'raw', 'virt_query', 'compact', 'json',
                     'highstate', 'nested', 'quiet', 'no_return'.

           控制 salt 执行后输出结果的格式,可指定的格式有 'key', 'yaml','overstatestage', 'newline_values_only', 'pprint', 'txt', 'raw', 'virt_query', 'compact', 'json',  'highstate', 'nested', 'quiet', 'no_return'

 

 target  目标minion

在实际环境中 salt 通常都是控制着成百上千的 minion,通过指定 target 可以灵活的定位所有的服务器并执行远程命令

a  全局匹配

和 linux 的通配符类似,

   •   *    表示任意字符,包括空字符串 

   •   ?  表示一个字符,但不可以为空

   •   []   表示字符集合,比如 [a-z] 表示任意一个小写字母

示例如下:

## 向所有 minion 发送命令
# salt "*" test.ping
master:
    True
m01:
    True
 
## 向所有以01结尾的 minion 发送命令
# salt "*01" test.ping
m01:
    True
 
## 想所有是三个字符并且以01结果的 minion 发送命令
# salt "?01" test.ping
m01:
    True
 
## 想所有第一个字符是小写字母,第二三个字符是01的三字符组成的 minion 发送命令
# salt "[a-z]01" test.ping
m01:
    True

 

b 正则表达式匹配

salt 使用了 python 的 re 模块来做正则表达式匹配,这里不对正则表达式进行介绍。

简单的说就是使用正则表达式来描述 target,达到匹配指定minion 的效果。

使用正则表达式需要指定-E 或者 --pcre选项

示例如下

# salt -E "[mM]" test.ping
m01:
    True
master:
    True
 
# salt -E "[a-zA-z]+[0-9]+" test.ping
m01:
    True

 

c 列表匹配

以主机id名列表的形式进行过滤,格式与Python的列表相似,即不同主机id名称使用逗号分隔,命令:

# salt -L "master,m01" test.ping
m01:
    True
master:
    True

 

d 分组管理

/etc/salt/master 配置文件中有如何内容,在这里我们可以配置分组

# Node groups allow for logical groupings of minion nodes. A group consists of a group
# name and a compound target.
#nodegroups:
# group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com'
# group2: 'G@os:Debian and foo.domain.com'

目标服务器分组有以下七种方式,这七种方式的标示符分别为:

    1. G -- 针对 Grains 做单个匹配,例如:G@os:Ubuntu
    2. E -- 针对 minion 针对正则表达式做匹配,例如:E@web\d+.(dev|qa|prod).loc
    3. P -- 针对 Grains 做正则表达式匹配,例如:P@os:(RedHat|Fedora|CentOS)
    4. L -- 针对 minion 做列表匹配,例如:L@minion1.example.com,minion3.domain.com or bl*.domain.com
    5. I -- 针对 Pillar 做单个匹配,例如:I@pdata:foobar
    6. S -- 针对子网或是 IP 做匹配,例如:S@192.168.1.0/24 or S@192.168.1.100
    7. R -- 针对客户端范围做匹配,例如: R@%foo.bar
## 在 /etc/salt/master 配置文件中 设置如下内容:
nodegroups:
  group1: 'L@master,m01'
 
## 执行如下命令
# salt -N group1 test.ping
m01:
    True
master:
    True

e  grain 和 pillar 匹配 (后面再讲)

grain 和 pillar 是 salt 独有的两个概念,两者都是以key  value 形式存储的数据。

grain 是有 minion 返回给 master 的数据,pillar 数据则是存储在 master 上的。

每个 minion 只能看到自己的 pillar,grain 可以看做是 host 的 metadata,例如 CPU 数量

pillars 则是主机所需要的数据,例如数据库密码。

简单的说就是: 一个 minion 可以告诉 master 她的 grain 数据,而 minion 则需要从 master 索要 pillar 数据。

 

f  复合匹配

将之前各种匹配方式混合使用的匹配方式

## 使用grains属性来匹配
[root@hadoop0 pillar]# salt -C 'G@os:Ubuntu' test.ping
uadoop1:
    True
## 使用Minion ID的正则表达式来匹配   
[root@hadoop0 pillar]# salt -C 'E@uadoop\d+' test.ping          
uadoop2:
    True
uadoop3:
    True
uadoop1:
    True
## 使用grains属性的正则表达式来匹配   
[root@hadoop0 pillar]# salt -C 'P@os:(RedHat|Ubuntu|CentOS)' test.ping            
uadoop2:
    True
uadoop3:
    True
uadoop1:
    True
## 使用Minion ID来匹配   
[root@hadoop0 pillar]# salt -C 'L@uadoop2,uadoop3' test.ping                           
uadoop2:
    True
uadoop3:
    True
## 使用pillar定义的属性来匹配   
[root@hadoop0 pillar]# salt -C 'I@users:foway:1200' test.ping
uadoop2:
    True
uadoop1:
    True
uadoop3:
    True
## 使用IP段匹配   
[root@hadoop0 pillar]# salt -C 'S@192.168.0.0/24' test.ping                  
uadoop3:
    True
uadoop2:
    True
uadoop1:
    True

 

 
 

 

posted on 2017-10-23 15:00  R_e  阅读(494)  评论(0)    收藏  举报

导航