salt基本使用之一(1)
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>