1.帮助文档

以cmd函数为例子说下salt中的一些帮助信息



# 查看指定modules用法
	salt '*' sys.doc cmd

# 查看所有的modules列表
	salt '*' sys.list_modules 

# 查看模块下的方法
	salt '*' sys.list_functions cmd
	
	
# 查看所有states列表
	salt '*' sys.list_state_modules
	
# 查看指定state的所有functions
	salt '*' sys.list_state_functions
	
# 查看指定states的用法
	salt '*' sys.state_doc cmd

# 查看指定states指定function用法
	salt '*' sys.state_doc cmd.run



2.准备工作

一台master(192.168.111.128)

两台minion(192.168.111.129,192.168.111.133)

minion需要配置/etc/salt/minion中的id(为minion ID)和master(设置为master地址)

1.加入认证列表



[root@master salt]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
Centos
Ubuntu
Rejected Keys:
[root@master salt]# salt-key -A -y
The following keys are going to be accepted:
Unaccepted Keys:
Centos
Ubuntu
Key for minion Centos accepted.
Key for minion Ubuntu accepted.



2.测试是否可以远程操作



[root@master salt]# salt '*' test.ping # 测试服务器是否联通
Centos:
    True
Ubuntu:
    True



2.state.sls文件入门

salt默认的管理目录为/srv/salt,在这里我们改为了/base/salt(在master的/etc/salt/master中修改file_roots)

看下/base/salt中的文件结构



├── foo.conf  # 配置文件(需要下发到minion)
├── one
│   └── init.sls
├── three
│   └── init.sls
├── top.sls
└── tow
    └── init.sls



在看下各个文件里的内容



[root@master salt]# cat top.sls 
base:  # base环境
  '*':
    - one  # 执行one.sls或者one下的init.sls
  'Centos':
    - tow  # 执行tow.;sls或者tow下的init.sls
  'Ubuntu':
    - three  # 执行three.sls或者three下的init.sls
[root@master salt]# cat one/init.sls 
/tmp/foo.conf:  # 如果为指定name参数,这name的参数为这个
  file.managed:  # 上传文件
    - source: salt://foo.conf  # 源地址为/base/salt下(salt://表示在master配置文件中配置的地址)
    - user: root
    - group: root
    - mode: 777
    #- name: /tmp/foo.conf  # 或在这里定义name并赋值
[root@master salt]# cat tow/init.sls 
show_ip:
  cmd.run: # 远程执行命令的函数
    - name: ifconfig
[root@master salt]# cat three/init.sls 
show_file:
  cmd.run:
    - name: cat /tmp/foo.conf
[root@master salt]#



3.关于sls文件的说明

一,普通的state文件说明:

  1.state文件的编写时YAML语法(后面会介绍YAML的具体规则)

  2.文件的执行使用state.sls



salt '*' state.sls one  # 默认找到/base/salt下的one.sls,如果没有找one/init.sls,如果在没有则报错



二,top.sls文件说明:

  1.top.sls文件不是必须的。

  2.top.sls入口文件可以同时对多台机器进行一个简单的配置管理。

  3.运行top.sls文件使用state.highstate。



salt '*' state.highstate



4.执行结果处理(redis)

Teturn是在Master端触发任务,然后Minion接受处理任务后直接与Return存储服务器建立连接

Return组件可以理解为salt的执行结果返回存储或者返回给其他程序,可以对salt的操作进行记录。

查看所有的Return列表



salt '*' sys.list_returners



下面我来演示下把执行结果返回到redis中

一,环境配置

  1.在所有的minion端安装pip,通过pip安装python的redis模块。

  2.所有的minion端配置文件中添加以下内容(Return 数据库信息)



redis.db: '0'
redis.host: '127.0.0.1'  # 这里的主机为192.168.111.131
redis.port: 6379



二,安装redis并配置

  3.在192.168.111.129上用yum安装redis数据库,并配置redis地址



yum install redis
sed -i -e 's@^bind 127.0.0.1@bind 192.168.111.129@g' /etc/redis.conf



三,信息的查看

  4.在redis上查看信息



redis-cli -h 192.168.111.129 monitor  # 动态查看数据库信息
redis-cli -h 192.168.111.129  # 连接数据库查询



四,执行命令



[root@master jobs]# salt '*' test.ping
Centos:
    True
Ubuntu:
    True
# 此时去redis服务器就可以查看job的信息了。



4.Job管理

在salt里执行任何一个操作都会在master上产生一个jid号,minion端在/var/cache/salt/minion/proc目录下创建一个以jid号码为名称的文件,文件内是此次操作的记录,操作处理完成后改文件会自动删除。而master端会记录每次操作的详细信息,这个记录保存到/var/cache/salt/master/jobs目录下两位16进制数组成的目录名下。

一,salt-run jobs管理

下面列除salt-run中jobs的用法:



[root@master jobs]# salt-run -d | grep jobs
'jobs.active:'  # 查看正在运行的jobs
    Return a report on all actively running jobs from a job id centric
        salt-run jobs.active
'jobs.list_job:'  # 指定jid查看jobs详细信息
        salt-run jobs.list_job 20130916125524463507
'jobs.list_jobs:'  # 查看所有jobs信息
    List all detectable jobs and associated functions
        salt-run jobs.list_jobs
'jobs.lookup_jid:'  # 指定jid查询jobs结果
        salt-run jobs.lookup_jid 20130916125524463507
        salt-run jobs.lookup_jid 20130916125524463507 outputter=highstate
'jobs.print_job:'  # 指定jid查询jobs详细信息
        salt-run jobs.print_job 20130916125524463507



二,通过saltutil模块管理job

salt-run不支持kill某个job,所有使用saltutil模块管理job

先来看看saltutil模块的使用:



[root@master jobs]# salt \* sys.doc saltutil | grep job
'saltutil.find_cached_job:'  # 查询job cache信息
    Return the data for a specific cached job id
        salt '*' saltutil.find_cached_job <job id>
'saltutil.find_job:'  # 指定jid查看job信息
    Return the data for a specific job id
        salt '*' saltutil.find_job <job id>
'saltutil.kill_job:'  # 杀掉job(发送SIGTERM 9信号方式)
    Sends a kill signal (SIGKILL 9) to the named salt job's process
        salt '*' saltutil.kill_job <job id>
        salt '*' saltutil.runner jobs.list_jobs
'saltutil.signal_job:'  # 发送指定信号
    Sends a signal to the named salt job's process
        salt '*' saltutil.signal_job <job id> 15
'saltutil.term_job:'  # 删掉job(发送SIGTERM 15信号方式)
    Sends a termination signal (SIGTERM 15) to the named salt job's process
        salt '*' saltutil.term_job <job id>