2.saltstack笔记之目标,模块,返回写入数据库

作者:刘耀
QQ:22102107

一、目标(targeting Minions)

1.匹配Minions Id

匹配所有 (*)

[root@node1 salt]# salt '*' test.ping
node2.minion:
True

匹配后面是.minion的

[root@node1 salt]# salt '*.minion' test.ping
node2.minion:
True

匹配一个(?)

[root@node1 salt]# salt '*node?.minion' test.ping
node2.minion:
True

匹配多个[1-5]

[root@node1 salt]# salt 'node[1-5].minion' test.ping
node2.minion:
True

匹配某个主机和某个

[root@node1 salt]# salt 'node[2,3].minion' test.ping
node2.minion:
True

匹配a-z

[root@node1 salt]# salt 'node2.minio[n-z]' test.ping
node2.minion:
True

2.正则匹配:

-E

#匹配node2或者node3后面是.minion的主机
[root@node1 salt]# salt -E '(node2|node3).minion' test.ping
node2.minion:
	True

可以在sls的配置文件里使用
修改
 vim /etc/salt/states/top.sls
base:
  #匹配node2或者node3后面是.minion的主机
  '(node2|node3).minion':
      #使用正则
    - match: pcre
    - init.pkg             

-L

#匹配多个主机,逗号分隔
[root@node1 states]# salt -L 'node2.minion,node3,minion' test.ping
node2.minion:
	True

-S ip地址匹配

salt -S '0.0.0.0/24' test.ping

二、模块

1.hosts模块

#获取IP地址
[root@node1 states]# salt '*' hosts.get_ip node2
node2.minion:
127.0.0.1

2.service模块

获取minion主机所有服务


[root@node1 states]# salt '*' service.get_all
node2.minion:
    - abrt-ccpp
    - abrt-oops
    - abrtd
    - acpid
    - atd
    - auditd
    - blk-availability
    - control-alt-delete
    - crond
    - cups
    - elasticsearch
    - exim
    - halt
    - htcacheclean
    - httpd
    - init-system-dbus
    - ip6tables
    - ipmi
    - iptables
    - irqbalance
    - kexec-disable
    - killall
    - logstash
    - lvm2-lvmetad
    - lvm2-monitor
    - messagebus
    - netconsole
    - netfs
    - network
    - ntpd
    - ntpdate
    - php-fpm
    - plymouth-shutdown
    - portreserve
    - pptpd
    - prefdm
    - psacct
    - quit-plymouth
    - quota_nld
    - rc
    - rcS
    - rcS-emergency
    - rcS-sulogin
    - rdisc
    - readahead
    - readahead-collector
    - readahead-disable-services
    - restorecond
    - rsyslog
    - salt-minion
    - sandbox
    - saslauthd
    - serial
    - shellinaboxd
    - single
    - smartd
    - snmpd
    - snmptrapd
    - splash-manager
    - sshd
    - start-ttys
    - svnserve
    - sysstat
    - tty
    - ttyS0
    - udev-post
    - zabbix-agent
    - zabbix-agentd
    - zabbix_agentd
    - zabbix_server


查看服务运行状态

[root@node1 states]# salt '*' service.status sshd
node2.minion:
True

重启某个服务

[root@node1 states]# salt '*' service.reload sshd
node2.minion:
True

3.salt-cp

root@node1 minions]# salt-cp '*' /etc/passwd /tmp/passwd
{'node2.minion': {'/tmp/passwd': True}}
[root@node1 minions]# 

返回写入数据库

returners.mysql

默认情况下,发送给salt minion的命令执行结果将返回给salt master.
Saltstack Returner的接口允许将结果发送给任意系统

1.master端安装mysql

第一种:

源码包安装步骤省略

第二种:

yum install mysql-server -y

启动mysql服务

2.minion端部署MySQL-python

yum install MySQL-python

原理是minion把数据直接推到master的数据库中

3.在master端创建数据库

进入数据库

1.创建库名

CREATE DATABASE  `salt`
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

2.创建jid表

USE `salt`;


DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
  `jid` varchar(255) NOT NULL,
  `load` mediumtext NOT NULL,
  UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


3.创建return表 存放返回的数据

DROP TABLE IF EXISTS `salt_returns`;
CREATE TABLE `salt_returns` (
  `fun` varchar(50) NOT NULL,
  `jid` varchar(255) NOT NULL,
  `return` mediumtext NOT NULL,
  `id` varchar(255) NOT NULL,
  `success` varchar(10) NOT NULL,
  `full_ret` mediumtext NOT NULL,
  `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  KEY `id` (`id`),
  KEY `jid` (`jid`),
  KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


4.创建事件表

DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
	
5.授权访问

grant all on salt.* to salt@'%' identified by 'salt';

注:%不包括localhosts

4.在master里修改配置文件

# vi /etc/salt/master
在配置文件后面追加以下内容
	
mysql.host: '115.29.51.8'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306

5.在minion里修改配置文件

# vi /etc/salt/minion
在配置文件后面追加以下内容

mysql.host: '115.29.51.8'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306

6.master和minion端都重启服务

master端:

# service salt-master restart

minion端:

# /etc/init.d/salt-minion restart

7.测试

#salt '*' test.ping --return mysql
node2.minion:
    True

# salt '*' cmd.run 'df -TH' --return=mysql
node2.minion:
	Filesystem     Type  Size  Used Avail Use% Mounted on
	/dev/vda1      ext3  8.5G  4.3G  3.8G  54% /

在数据库里查看

方法2:

如果每次执行不加--return=mysql
由master端将返回的数据写入数据库

1.修改master配置文件

# vi /etc/salt/master
在配置文件后面追加以下内容

master_job_cache: mysql

2.重启master

# service salt-master restart

3.测试

过程略
原文地址:https://www.cnblogs.com/liu-yao/p/5644916.html