您的位置:首页 > 其它

新手上路saltstack常见命令与一些简单配置

2016-07-26 18:49 267 查看
1、salt 分组操作
修改master配置文件,在/etc/salt/master文件中添加如下配置
nodegroups:
  app_pick:'L@YTJ159-93,YTJ159-92'
  app_pack:'L@YTJ159-91,YTJ159-92'


L@ 和G@ 分别表示minion和grain信息

配置之后不需要重启salt-master; 然后就可以通过group来执行命令了,例如:
salt -N app_pick cmd.run ifconfig


表示对app_pick组执行命令
nodegroups:
  app_pick:'L@YTJ159-93,YTJ159-92'
  app_pack:'G@app:pack'
  app_pick_and_pack:'G@app:pack and G@app:pick'


上面定义了三个group
第一个L@开通的是指定的以逗号分隔的多个minionId
第二个G@表示匹配grain信息,G@app:pack表示grains app项内有pack值
第三个and连接了两个G@表示grains app的值中既有pack也有pick

2、salt 帮助命令
master端-->salt命令帮助查
20000


minion端-->salt-call帮助查看

master端-->查看saltstack内置模块信息

 
 
salt
'salt02'
 
sys.list_modules

 
  salt 
'salt02'
 
sys.list_functions


 
  
salt 
'salt02'
sys.list_functions status

 
  salt 
'salt02'
 
sys.doc

 
  salt 
'salt02'
 
sys.doc status


1
salt 
'*'
 
sys.doc
| grep 
"salt '\*' cp"  只看模块方法


3、信息查看

1、显示版本号:

1

2
[root@salt01 salt]
#salt --version

salt 2015.5.8 (Lithium)


2、显示依赖关系及版本号:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18
[root@salt01 salt]
#salt --versions-report 

           
Salt: 2015.5.8

         
Python: 2.6.6 (r266:84292, Jul 232015, 15:22:56)

         
Jinja2: 2.2.1

       
M2Crypto: 0.20.2

 
msgpack-python: 0.4.6

   
msgpack-pure: Not Installed

       
pycrypto: 2.0.1

        
libnacl: Not Installed

         
PyYAML: 3.10

          
ioflo: Not Installed

          
PyZMQ: 14.3.1

           
RAET: Not Installed

            
ZMQ: 3.2.5

           
Mako: Not Installed

        
Tornado: Not Installed

        
timelib: Not Installed

       
dateutil: Not Installed


3、所有操作目标参数:

    

    3.1、正则匹配的方式去管理

1

2

3

4

5
[root@salt01 init]
#salt -E 'salt*' test.ping

salt03:

    
True

salt02:

    
True


    3.2、列表匹配

1

2

3

4

5
[root@salt01 init]
#salt -L 'salt02,salt03' test.ping

salt02:

    
True

salt03:

    
True


    3.3、Grians匹配

1

2

3

4

5
[root@salt01 init]
#salt -G 'os:CentOS' test.ping

salt03:

    
True

salt02:

    
True


    3.4、组匹配

1

2

3

4

5
SaltStack@Master: salt -N 
groups
 
test
.
ping

Minion:

True

Minion1:

True


    3.5、复合匹配

1

2

3

4

5

6
SaltStack@Master: salt -C 
'G@os:MacOS or L@Minion1'
 
test
.
ping

Minion:

True

Minion1:

True

提示:os:MacOS or L@Minion1是一个复合组合,支持使用and和or关联多个条件。


    3.6、Pillar值匹配

1

2

3

4

5
SaltStack@Master: salt -I 
'key:value'
 
test
.
ping

Minion:

True

Minion1:

True


    3.7、CIDR匹配

1

2

3

4

5
SaltStack@Master: salt -S 
'192.168.1.0/24'
 
test
.
ping

Minion:

True

Minion1:

True


4、文件的传送

1

2
salt 
'*'
cp
.get_file salt:
//apache-tomcat-7
.0.41.
tar
.gz
/home/jack/apache-tomcat-7
.0.41.
tar
.gz

#将salt目录下apache-tomcat-7.0.41.tar.gz复制到所有minion的/home/jack目录下


5、显示当前活着的minion

1

2

3
[root@salt01 salt]
#salt-run manage.up 

- salt02

- salt03


6、显示未存活的minion

1
salt-run manage.down


7、显示未存活的minion,并将其删除

1
salt-run manage.downremovekeys=True


8、显示当前up和down的minion

1
salt-run manage.status


9、显示Master和所有minion的版本,可以通过此命令找到版本不一致的minion

1

2

3

4

5

6

7

8

9
[root@salt01 init]
#salt-run manage.versions

Master:

    
2015.5.8

Up to 
date
:

    
----------

    
salt02:

        
2015.5.8

    
salt03:

        
2015.5.8



10、获取系统静态信息
获取系统所有静态信息

[root@master ~]# salt 'slaver.test.com' grains.ls            //列出所有的 grains 项目名字

[root@master ~]# salt 'slaver.test.com' grains.items      //列出所有的 grains 项目名以及值

[root@master ~]# salt 'slaver.test.com' grains.item role env myname    //列出多个
[root@master ~]# salt 'slaver.test.com' grains.get myname                    //列出单个

grains的信息并不是动态的,并不会时时变更,它只是在 minion 启动时收集到的。grains 也可以做配置管理。

下面我们来自定义 grains

1)客户端上配置

[root@slaver ~]# vim /etc/salt/grains               //添加如下,注意冒号后有空格
role: nginx
env: test
myname: tpp
或者

[root@slaver ~]# vim /etc/salt/minion            //在最下面添加或更改
grains:

  role:

    - nginx

  env:

    - test
  myname:
    - tpp
重启minion服务

[root@slaver ~]# /etc/init.d/salt-minion restart

:grains 在远程执行命令时很方便。我们可以按照 grains 的一些指标来操作。比如把所有的 web 服务器的 grains 的 role 设置为 nginx,那这样我们就可以批量对 nginx 的服务器进行操作了:

[root@master ~]# salt -G role:nginx cmd.run 'hostname'

[root@master ~]# salt -G os:CentOS cmd.run 'hostname'

 注:grains的优先级

    grains可以保持在minion端、通过master端下发等多个方式来分发。但不同的方法有不同的优先级的:

      a. /etc/salt/grains

      b. /etc/salt/minion

      c./srv/salt/_grains/  master端_grains目录下

   优先级顺序依次为存在在minion端/etc/salt/minion配置文件中的同名grains会覆盖/etc/salt/grains文件中的值,而通过master端_grains目录下grains文件下发的值可以会覆盖minion端的所有同名值。比较拗口,总之记得,通过master下发的grains优先级是最高的可,/etc/salt/minion次之,/etc/salt/grains最低(core grains不大懂,就不讨论了,这个比/etc/salt/grains还低)

获取主机名

1
salt '*' grains.item host


获取IP地址

1
salt '*' grains.item ipv4


获取CPU核数

1
salt '*' grains.item num_cpus


11、获取磁盘信息
salt '*' disk.usage

12、runas,定义执行此条命令的用户,使用哪个用户执行这条命令Salt \* cmd.run runas=nobody ‘touch /tmp/file’
13、

cwd 定义命令所在的目录,即工作目录,在哪个目录执行操作

如:

Salt \* cmd.run cwd=/opt ‘pwd’(默认为/root)

4、文件目录管理

1、文件管理

1)服务端配置

接着编辑之前的 top.sls 文件

[root@master ~]# vim /srv/salt/top.sls              //修改为如下
base:
  'slaver.test.com':
    - filetest
新建 filetest.sls 文件

[root@master ~]# vim /srv/salt/filetest.sls
file-test:
  file.managed:
    - name: /tmp/filetest.txt
    - source: salt://test/123/1.txt
    - user: root
    - group: root
    - mode: 644
注意:第一行的 file-test 为自定的名字,表示该配置段的名字,可以在别的配置段中引用它(如果不写下面不写-name的话,默认为-name的内容);source指定文件从哪里拷贝,这里的
test 目录相当于是 /srv/salt/test 目录;name指定远程客户端要生成的文件。

新建所要测试的源文件

[root@master ~]# mkdir -p /srv/salt/test/123/

[root@master ~]# vim /srv/salt/test/123/1.txt
msiyuetian.blog.51cto.com
执行命令:

[root@master ~]# salt 'slaver.test.com' state.highstate   --->state.higstate 就是从top.sls加载sls文件

或者 salt 'slaver.test.com' state.sls filetest           ---> 指定执行具体某个sls文件
5、salt minion 调试信息
如果minion 是以
服务进程启动,执行命令salt-call state.highstate -l debug 可以看到错误信息,便于调试。
minion 还可以直接在前台以debug 模式运行:salt-minion -l debug
6、network模块(返回被控主机网络信息)
# salt '*' network.ip_addrs

# salt '*' network.interfaces

7、查看salt-merast启动过程
修改salt-master日志级别为debug,默认为warning
默认日志文件存在/var/log/salt,重启后到/var/log/salt下查看master日志文件
8、更改master主机
1)先把原来的master主机/etc/salt/pki
目录打包 tar -zcf pki.tar.gz pki
2)把打包好的pki.tar.gz解压到新的master主机/etc/salt/目录下
3)在原来的master主机上批量修改/etc/hosts
salt 192.168.0.104(旧)内容,salt '*' cmd.run 'sed -i "s/192.168.0.104/192.168.0.105/" /etc/hosts' 
然后重启所有minion端,salt
'*' service.restart salt-minion
(注:salt minion
默认salt 为mater端,默认id为hostname)
4)到新的master
192.168.0.105上端测试是否成功 
9、saltmaster returner 

 1、将master端的返回结果存储到syslog
在master端执行
salt '*' cmd.run 'df -h' --return syslog
到minion端查看
tail /var/log/messages

10、salt执行脚本
在/srv/salt目录下
mkdir
-p etc/script
cd
 ect/script
echo
>> test.sh << EOF
#!/bin/bash
echo
"hello world" >/tmp/salt_script_test
EOF
执行命令测试
salt
'*' cmd.script salt://etc/script/test.sh
11、minion 客户端主动同master端同步配置
在客户端执行 salt-call state.sls
xxx
            命令        模块  
 要同步的sls文件
执行此命令会在master端自动搜索xxx.sls文件,然后执行里面的内容
12、pillar自定义内容
1) 把 /etc/salt/master下面的内容注释去掉
pillar_root:
  base:
    - /srv/pillar
pillar_opts: False 改为 pillar_opts: True
然后重启master端
/etc/init.d/salt-master restart
2)mkdir /srv/pillar
3)cd /srv/pillar
4)touch  package.sls top.sls
5)cat packages.sls
{% if grains['os']=='OEL' %}
apache: httpd
owner: sjw
{%  elif grains['os']=='Windows %}

apache: apache

owner: administrator

{% endif  %}

6)cat packages.sls

base:

  '*':

    - packages

7)salt '*' saltutil.refresh_pillar

8)salt '*' pillar.get apache

或者 

salt '*' pillar.get owner

可以看到刚定义的pillar变量对应的值
13、查看master执行过的命令(默认保存24小时)
salt-run jobs.list_jobs
salt-run jobs.lookup_jid xxx
xxx为jid号

14、salt 分发文件到minion

方法一:salt '*' cp.get_file salt://xxx  /tmp/

 
      命令 目标  模块     源文件    目标文件  
注:这能复制在环境目录/srv/salt下的文件
方法二:salt-cp
'*' /opt/test.txt /tmp/
        命令
目标     源文件    目标文件
注:源文件可以在任意目录下

15、master端用命令给客户端安装软件

salt  '*' pkg.install tree 

注:要minion 端yum可用

16、master端重启minion端服务

salt '*' service.start crond
17、salt 执行命令时可加-v参数查看job id 
例如:salt '*' test.ping -v 
会返回job id
18、查看正在执行的job
在master端执行salt '*' cmd.run 'sleep 60'
然后在执行salt '*' saltutil.runnig 即可查看正在执行的job
也可以到minion端默认目录为/var/cache/salt/minion/proc下ls查看正在执行的job,job
 执行完后就会被删除
19、salt-ssh 命令使用
配置/etc/salt/roster文件
例如:
client1:
  host: 192.168.0.104
  user: root
  passwd: 123456
测试是否成功 salt-ssh -i  '*' test.ping (首次执行加-i 接受host key)
20、schedule用法
[root@master pillar]#pwd

/srv/pillar

[root@master pillar]# cat cron.sls 
schedule:
  helloworld:
    function: cmd.run
    args: 
      - date >> /tmp/test.log
    minutes: 1

[root@master pillar]# cat top.sls
 base:
  '*':
    - cron 

[root@master pillar]# 

salt '*' saltutil.refresh_pillar

然后去客户端/tem/查看
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: