Remote Execution

  • salt命令执行后的返回结果的数据结构都一致,保证能够很容易地检查数据,并存储在数据库中。

  • salt 使用python modules来进行远程管理,可以自己增加python module来扩展。所有可以用python访问的应用或者服务,如一个shell命令,都可以作为salt中的一个执行模块。

  • 命令执行

salt '*' test.rand_sleep 120

'*'是指机器名称,test.rand_sleep 即:modult.function, 120是参数

  • 命令执行过程
  1. salt master通过发布端口发送命令
  2. salt minion检查命令,看是否需要执行该命令
  3. 若需要,目标minion找到执行module 和对应的方法,执行命令,将结果返回

    每个命令,都被分成一个工作线程,保证一个salt minion可以同事处理多个jobs

salt state

salt state 系统

salt state系统在salt remote系统不就之后就出现了,对其影响很大。二者非常相似,一个很大的不同在于,state系统包含一个检查系统是否处于正常状态的逻辑,检查完毕之后,会交给salt remote执行命令。

  • state 模块用于跨作业和夸平台系统
  • 返回的结果是连续的数据结构,便于检查和存储到数据库

salt state 系统流程

salt sate 和salt remote的主要区别是state 系统内的控制流程。 salt提供特殊命令,用于定义依赖,重用代码,控制流程,影响变量和模板。

Runner

salt runner

runner 子系统提供了一些在salt master上执行的salt mudule,实时事件视图,管理salt的文件server,查看salt的采集资料,向minion发送网络唤醒,调用webhook和其它http 请求等

命令:salt-run,不需要taget server,因为target就是salt master本身

参数传递方式和向satl 执行模块发送参数的方式相同。

Orchestrate Runner

orchestrate runner 提供了salt的一个核心功能:运行命令,在多个minion上依照一定义好的顺序运用配置.

System Data

data

系统数据的两个主要方面:获取系统相关数据,传递数据至系统。salt提供了两个不同的子系统,来分别执行这两个任务:salt grains和salt pillar

salt mine是用于将数据从minion上推送到master上的一个公共的数据存储库上,这个库可以被所有的minion访问。

grains

grains用于获取agent的系统数据,是关于操作系统、内存、磁盘和其他系统属性的静态信息。

机器启动时开始采集数据,数据会阶段性刷新,或者使用远程命令执行。

grains的使用场景:使用grains的某一个值,来列出所有的grains,从而周到所有的agent

grains也是trageting系统不可缺少的一部分,用于定位salt state 和 salt pillar数据。

salt pillar

salt pillar用于传输数据到系统。 一个场景应用场景就是,不同的minion机器的配置不同,salt pillar使我们可以定义这些数据值,然后使用target的形式赋值给minion,然后值以变量的形式给salt state.

salt pillar数据使用minion 的公钥编码,通过加密渠道传输,因而salt pillar也适用于发送如密码,ssh key之类的秘密数据,因为只有target minion机器才能解码。salt pillar数据从不会被写入minon的磁盘。

salt pillar 模块使用yaml文件定义pillar,超过20个salt module(即插件)用于支持一个多变的后端环境。常见的有:Mongo和Redis,都是用于存储结构化的数据的。有的用户使用yaml文件存储,然后使用git 仓库来管理和发送pillar data。

salt mine

salt mine用于在minion间共享数据。如果建立一个共享DB,可以给运行依赖于db server的salt minion添加配置,使之自动推送自己的ip到salt mine。这比存储在salt state和salt pillar上好,因为它们需要进行手动更新。

之后若需要数据,可以直接使用salt state file 去salt mine中获取。

基本子系统的重置,在其它文档中有介绍。

Python

modules

salt中,每一个子系统都是一个python module

  • salt源码中,所有的module都在salt文件夹下。一个子文件夹就是一个子系统
  • modules的命名规则salt.subsystem.module

执行函数的参数

需要的参数值以特定的顺序传进来,参数之间用空格隔开。optional 参数以键值对的形式传递

示例命令

salt '*' network.connect google-public-dns-a.google.com port=53 proto=udp timeout=3
salt '*' cp.get_file salt://vimrc /etc/vimrc gzip=5
`salt ns1 pkg.install pkgs=['bind9','bind9-docs','bind-utils']`
`salt '*' pkg.install sources='[{"foo": "salt://foo.deb"},{"bar": "salt://bar.deb"}]'`

State function arguments

state file中,state 函数的调用使用yaml 语法。yaml展示数据类型时,表现更为突出。使用key 获取参数值

a state example that calls user.present:
user.present:
- name: fred
- shell: /bin/zsh list:
install bind packages:
pkg.installed:
- pkgs:
- bind9
- bind9-docs
- bind-utils

list dictornary

install bind packages:
pkg.installed:
- pkgs:
- bind9
- bind9-docs
- bind-utils

具体见salt.states.user.present

tips:

并非所有的参数都会列在function 注释中,有时候需要check source code 去看到底支持什么类型。

saltstack执行远程命令的更多相关文章

  1. Ubuntu 14.10 下SSH执行远程命令

    有些时候需要在远程机器上执行命令,如果每次都等进去挺麻烦的,所以用脚本执行会方便很多.下面介绍一下在shell脚本中执行远程命令. 1,首先写好要运行的脚本 run-command.sh, 加上执行权 ...

  2. 在地铁上看了zabbix 的书发现 "报警执行远程命令"

    在地铁上看了zabbix 的书发现 "报警执行远程命令" 远程命令整个过程:  items -> triggers -> action -> remote com ...

  3. Zabbix报警执行远程命令

    日常Zabbix报警案例中,大多都是报警发送邮件,场景里很少有需要报警后执行一个命令(启动服务.清空磁盘空间.关停服务器);而今天就给大家讲讲最近需要做的事:报警后执行远程命令 刚好zabbix动作中 ...

  4. 如何使用 PsExec 执行远程命令

    前言 这紧紧只是一篇纯技术分享.我们的程序在运行时需要连接多台目标机器,并拷贝目标机器上特定文件夹中的文件.为了方便访问,要在每台目标机器上建立一个特定用户,所以 PsExec 成了实现此功能的一个方 ...

  5. (29)zabbix执行远程命令

    概述 监控,有的人只把他当做报警使用,出现问题之后打开跑回家打开电脑,巴拉巴拉的处理掉,大多数时候都是一些小问题,为何不让zabbix帮你把这些事情处理掉呢?和朋友具体,收到xx硬盘空间慢了.xx服务 ...

  6. psexec局域网执行远程命令

    执行远程命令的工具psexec.exe 下载 一.首先,被控制机器必须开启ipc$,以及admin$,否则无法执行 开启ipc$ net share IPC$ 开启admin$ net share A ...

  7. Python中使用os模块执行远程命令

    1. 使用os模块远程执行命令 服务端代码 1 import socket 2 import os 3 4 sh_server = socket.socket() #创建一个socket对象 5 sh ...

  8. Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信

    Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...

  9. linux shell 执行远程命令

    我在本地的shell脚本中,想要直接执行远程服务器的一个shell脚本: ssh -l root 192.168.1.1 "/data/t.sh" 记得提前给远程服务器的 /dat ...

随机推荐

  1. (C#) 线程之 AutoResetEvent, EventHandle.

    AutoResetEvent 允许线程通过发信号互相通信.通常,此通信涉及线程需要独占访问的资源. 线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号.如果 AutoRese ...

  2. 给大家推荐一个.Net的混淆防反编译工具ConfuserEx

    给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...

  3. VirtualBox中linux虚拟机和主机间的共享文件设置

    设置共享文件路径 点击虚拟机 设置-->选择 共享文件夹 (图1 设置共享文件夹) 设置共享文件夹路径 1 选择路径 2 填写自定义的共享名称(在后面需要与挂载路径相对应) 3 设置自动挂载/固 ...

  4. 新人学习微信小程序开发之框架篇

    大家好我是智哥,一名专注于前端领域的一名码农. 咱们今天主要来说说微信小程序, 最近一段时间微信群里的小程序,小游戏各种分享是突然一下子就爆发了,现在来看小程序作为微信的重磅功能无疑又是下一个风口.咱 ...

  5. 前端怎样学习react

    这是一个很长的话题.....慢慢写

  6. 通过HTTP响应头让浏览器自动刷新

    以前如果需要让网页过几秒自动刷新一次,我都会在页面通过JS调用setTimeout来做,最近发现原来服务器通过添加响应头部信息来提示浏览器需要在多少时间之后重新加载页面. 代码很简单: respons ...

  7. 【CSS】等高布局

    1. 负margin:   margin-bottom:-3000px; padding-bottom:3000px; 再配合父标签的overflow:hidden属性即可实现高度自动相等的效果.   ...

  8. Sublime插件支持Sass编译和Babel解析ES6 & .sublime-build文件初探(转载自imwtr)

    原文请看:http://www.cnblogs.com/imwtr/p/6010550.html   用Sublime Text蛮久了,配置配来配去的,每次换电脑都得重头再配过,奈何人老了脑子不中用了 ...

  9. JS回调函数(理解篇)

    概述: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而 ...

  10. Ubuntu Deb包安装<个人笔记>

    安装 删除 卸载 Deb 包文件   图形界面: 安装deb 直接双击图标,输入密码后就可自动安装. 卸载deb 1. 菜单-系统->系统管理->新立得软件包管理器 或 Alt+F2(运行 ...