设为首页 收藏本站
查看: 1248|回复: 0

[经验分享] 3、SaltStack之远程执行

[复制链接]

尚未签到

发表于 2018-1-4 07:34:35 | 显示全部楼层 |阅读模式
  远程执行主要为:目标模块返回值
  执行格式: salt '<target>' <function> [arguments]

target(目标)
  使用通配符
  

salt '*' test.ping  
salt '*.heboan.com' test.ping
  
salt 'redis-node?-heboan.com' test.ping
  

  

  使用正则表达式
  

salt -E 'c[0-9].heboan.com' test.ping  

  

  使用列表
  

salt -L 'c1.heboan.com,c2.heboan.com' test.ping  

  

  使用grains
  

salt -G 'os:CentOS' test.ping  

  

  使用pillar(要自己定义)
  

salt -I 'apache:httpd' test.ping  

  

  
# cd /srv/pillar/
  apache.sls  top.sls
  
# cat apache.sls
  {% if grains['os'] == 'CentOS' %}
  apache: httpd
  {% elif grains['os'] == 'Debian' %}
  apache: apache2
  {% endif %}
  
# cat top.sls
  base:
  '*':
  - apache
  

  

  混合方式
  

salt -C 'G@os:Ubuntu and webser* or E@database.*' test.ping  

  

  使用节点组
  

salt -N 'web' test.ping  

  
//定义组
  
# vim /etc/salt/master
  
...
  
nodegroups:
  web: 'L@c2.heboan.com,c3.heboan.com'
  
...
  

  

  使用ip方式
  

salt -S '192.168.88.2' test.ping  
salt -S '192.168.88.0/24' test.ping
  

  


function [arguments]模块
  sys.list_modules查看所有模块列表
  

[iyunv@c1 ~]# salt 'c2.heboan.com' sys.list_modules  
c2.heboan.com:
  - acl
  - aliases
  ->  - apache
  - archive
  - artifactory
  - blockdev
  - btrfs
  - buildout
  - cloud
  - cmd
  - composer
  - config
  - container_resource
  - cp
  - cron
  - data
  - defaults
  - devmap
  - disk
  - django
  - dnsmasq
  - dnsutil
  - drbd
  - elasticsearch
  - environ
  - etcd
  - event
  - extfs
  - file
  - gem
  - genesis
  - gnome
  - grains
  - group
  - hashutil
  - hg
  - hipchat
  - hosts
  - http
  - img
  - incron
  - ini
  - introspect
  - ip
  - iptables
  - jboss7
  - jboss7_cli
  - key
  - keyboard
  - kmod
  - locale
  - locate
  - logrotate
  - lowpkg
  - match
  - mine
  - modjk
  - mount
  - network
  - openstack_config
  - pagerduty
  - partition
  - pillar
  - pip
  - pkg
  - pkg_resource
  - postfix
  - publish
  - pyenv
  - random
  - random_org
  - rbenv
  - ret
  - rsync
  - runit
  - rvm
  - s3
  - saltutil
  - schedule
  - scsi
  - sdb
  - seed
  - serverdensity_device
  - service
  - shadow
  - slack
  - smtp
  - sqlite3
  - ssh
  - state
  - status
  - supervisord
  - sys
  - sysctl
  - syslog_ng
  - system
  - test
  - timezone
  - user
  - vbox_guest
  - virtualenv
  - webutil
  - xfs
  

  

  sys.doc模块可以很方便的查看相关模块的介绍和用法
  

//查看service模块的用法  
salt 'c2.heboan.com' sys.doc service
  

  

  普通用户运行模块acl控制
  

创建一个普通用户heboan  

  
添加权限,否则普通用户无法执行salt命令
  
chmod 777  /var/log/salt/master
  

  
编辑master配置文件,配置client_acl
  
# vim /etc/salt/master
  
client_acl:      //用户heboan只能执行test.ping模块和sys.doc模块
  heboan:
  - test.ping
  - sys.doc
  

  

  
测试
  
[iyunv@c1 ~]# su - heboan
  

  
[heboan@c1 ~]$ salt '*' test.ping   //正常执行
  
c2.heboan.com:
  True
  
c3.heboan.com:
  True
  

  
[heboan@c1 ~]$ salt '*' cmd.run 'w'   //没有权限
  
Failed to authenticate! This is most likely because this user is not permitted
  
to execute commands, but there is a small possibility that a disk error occurred
  (check disk/inode usage).
  

  黑名单设置
  

//禁止root用户,非sudo用户执行salt  
//禁止执行cmd模块
  

  
# vim /etc/salt/master
  
...
  
client_acl_blacklist:
  users:
  - root
  - '^(?!sudo_).*$'   #  all non sudo users
  modules:
  - cmd
  
...
  

  


返回值
  执行任务后,任务结果会被每个salt minion返回给salt master。这些结果存储在/var/cache/salt/master/jobs
  默认返回值是临时缓存,将被存储24小时。我们可以通过更改master配置文件中的keep_jobs参数来调整时间。单位是小时
  

keep_jobs: 24  

  默认的返回值缓存有时可能成为大型部署的负担,我们可以通过更改master配置文件将job_cache设置为false将其禁用,或者设置keep_jobs选项为较小的值,因而减小负担
  我们还可以把返回值存储到外部系统中,比如mysql,redis等等,这里演示存储到mysql
  创建数据库和表
  

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;
  

  

  创建数据库授权账号
  

grant all privileges on salt.* to 'salt'@'192.168.88.%'>
flush privileges;
  

  安装mysql驱动模块
  

yum install gcc gcc-c++  
yum install python-devel
  
yum install -y mysql-devel
  
pip install mysql-python
  

  

  修改salt master配置文件,末尾添加如下配置
  

# vim /etc/salt/master  #return: mysql
  master_job_cache: mysql
  mysql.host: '192.168.88.1'
  mysql.user: 'salt'
  mysql.pass: 'salt'
  mysql.db: 'salt'
  mysql.port: 3306
  

  
# systemctl restart salt-master
  

  测试执行,看看返回结果是否记录到数据库
  

[iyunv@c1 ~]# salt 'c2.heboan.com' cmd.run 'uptime' --return mysql  
c2.heboan.com:
  15:26:03 up 1 day,  1:03,  1 user,  load average: 0.00, 0.01, 0.05
  

  查看数据库结果,发现已经存入到数据库了

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431394-1-1.html 上篇帖子: 12-saltstack之系统环境初始化 下篇帖子: saltstack系列(三)——zmq订阅/发布模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表