存在的记忆 - saltstack
type: channel
link: https://looaon.com/index.php/tag/saltstack/
items: saltstatck - 远程执行 3. 返回数据写入
items: saltstack 远程执行 2. 模块
items: saltstack 远程执行 1. 目标
items: saltstack-grains 静态数据采集
items: saltstack-pillar 动态数据指定
items: saltstack 管理 stalt-key

saltstatck - 远程执行 3. 返回数据写入
type: item
date: 2018-01-01T04:53:00+08:00
description: 官方https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.mysql.html#module-salt.returners.mysql 安装依赖 yum install python-devel pip install MySQL-python 两种方式配置 ### 1. 在 matser 配置 mysql -e "grant all privileges on salt.* to salt@'127.0.0.1'identified by'salt';" #数据库添加 salt 账号本地访问 vi /etc/salt/master master_job_cache: mysql mysql.host: '127.0.0.1' mysql.user: 'salt' mysql.pass: 'salt' mysql.db: 'salt' mysql.port: 3306 返回测试（master 端写数据库） salt '*' cmd.run 'uptime' 在 minion 方法 mysql -e "grant all privileges on salt.* to salt@'%' identified by 'salt';" #数据库添加salt账号授权远程访问 vi /etc/salt/minion mysql.host: '192.168.1.110'mysql.user: 'salt'mysql.pass: 'salt'mysql.db: 'salt'mysql.port: 3306return: mysql #salt操作不加--return mysql也会强制写入mysql表里面返回测试（minion 端写数据库） salt '*' test.ping --return mysql返回是minion端返回 创建表结构 ----- mysql -uroot -p #进入数据库 CREATE DATABASE salt DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; USE salt; -- -- Table structure for table jids -- 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; CREATE INDEX jid ON jids(jid) USING BTREE; -- -- Table structure for table salt_returns -- 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; -- -- Table structure for table salt_events -- 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; 数据库查询mysql> select * from salt_returnsG; 1. row ** fun: test.pi…

saltstack 远程执行 2. 模块
type: item
date: 2018-01-01T04:42:00+08:00
description: 官方所有模板>https://docs.saltstack.com/en/latest/ref/modules/all/index.html#all-salt-modules 常用模块cmdservicenetworkcmd 模块 salt '*' cmd.run 'uptime' #执行系统命令行 service 模块salt 'Test1' service.get_all 查看主机安装的服务salt 'Test1' service.start httpd 开机salt 'Test1' service.stop httpd 关机salt 'Test1' service.reload httpd 重载配置salt 'Test1' service.status httpd 查看服务状态salt 'Test1' service.available sshd 服务运行则返回Truesalt 'Test1' service.missing sshd 服务运行则返回Falsenetwork salt '*' network.active_tcp #返回活动的tcp连接 salt '*' network.arp #返回arp salt '*' network.connect 103.44.145.131 21 salt '*' network.connect archlinux.org 80 timeout=3 family=ipv4 salt '*' network.connect google-public-dns-a.google.com port=53 proto=udp timeout=3 #测试端口连通性 salt '*' network.dig archlinux.org #dns检测 salt '*' network.get_hostname #获取当前主机名 salt '*' network.interface eno16777736 #获取网卡配置信息 salt '*' network.interfaces #获取网卡所有信息

saltstack 远程执行 1. 目标
type: item
date: 2018-01-01T04:38:00+08:00
description: 官网 https://docs.saltstack.com/en/latest/topics/tutorials/modules.html#target 格式 salt '<target>' <function> [arguments] 常用方法 salt (默认支持通配符) salt -E （正则） salt -G （grains） salt -P （pillar） salt -S （ip地址） salt -C （混合） 默认 (支持通配符) salt '*' test.ping salt 'Test[0-9]' test.ping salt 'T[a-z]*' test.ping 正则 salt -E 'web1-(prod|devel)' test.ping #匹配prod 或者dev grains salt -G 'os:Ubuntu' test.ping pillarsalt -p 'os:(Ubuntu|Centos)'支持正则ip 地址 salt -S '192.168.0.109' test.ping salt -S '192.168.0.0/24' test.ping 混合 salt -C 'S@192.168.0.102 or E@T.*d.(prod|devel).com' test.ping #匹配IP地址或者正则 功能 salt '*' sys.doc salt '*' cmd.run 'uname -a' salt '*' cmd.run 'uname -a' 参数 salt '*' cmd.exec_code python 'import sys; print sys.version' salt '*' pip.install salt timeout=5 upgrade=True

saltstack-grains 静态数据采集
type: item
date: 2018-01-01T04:33:00+08:00
description: 在 minion 端, 每次启动时收集，可以使用 saltutil.sysc_grain s 进行刷新 常用例子： salt 'Test2' grains.ls #获取grains采集信息项目 salt 'Test2' grains.items #详细信息 salt '*' grains.get os #获取所有系统安装的操作系统类型 salt -G os:CentOS cmd.run 'w ' #对centos系统执行远程命令 （w查看谁登陆在做什么操作） 自定义配置 1vi /etc/salt/minion grains: roles: - webserver - memcache salt 'Test1' grains.items| grep roles -A 2 salt 'Test1' grains.get roles #重启生效后查看 salt -G 'roles:memcache' cmd.run 'ls' #远程执行定义的items 配置 2cat /etc/salt/grains (#items 不要重复) web: nginx salt 'Test1' grains.items |grep -A 1 web salt 'Test1' grains.get web #重启minion后grains.get如果卡住先grains.items下。

saltstack-pillar 动态数据指定
type: item
date: 2018-01-01T04:30:00+08:00
description: master 端，默认禁用; 存储 matser 指定的数据，只有指定的 minion 可以看到。通过 salt '*' saltutil.refresh_pillar 修改刷新启用配置并重启 salt-master vi /etc/salt/master pillar_opts: True 采集主机 items salt 'Test2' pillar.items #重启master后，采集主机（略慢） 建立 pillar 存放目录cat /etc/salt/master pillar_roots: base: - /srv/pillar #pillar 的base目录 mkdir /srv/pillar

saltstack 管理 stalt-key
type: item
date: 2018-01-01T04:25:00+08:00
description: 客户端推送的主机 key 需要 master 确认才能加入 salt 管理 master 段获取 minionid 是客户端运行后 grains 采集的, 系统主机名修改 了，agent 端删除 minion_id 文件重启 salt-minion，master 端删除 key 重新加 常用命令 salt-key #查看所有key salt-key -A #添加所有主机 salt-key -a linux* #添加指定主机支持通配符 salt-key -d linux* #删除一批主机 salt-key -D #删除所有主机（生产慎用） [root@salt 19:31:01 ~]/#tree /etc/salt//etc/salt/├── grains├── master├── minion├── minion.d│ └── _schedule.conf├── minion_id└── pki├── master│ ├── master.pem│ ├── master.pub│ ├── minions│ │ ├── Test1│ │ └── Test2│ ├── minions_autosign│ ├── minions_denied│ ├── minions_pre│ │ └── Test3│ └── minions_rejected└── minion├── minion_master.pub├── minion.pem└── minion.pubminions 下是已经同意的， minions_pre 下是 master 端收到但是没有同意的