sysadmins的可扩展命令行实用程序
swk的Python项目详细描述
请更新
如果您使用的是早于v0.0.4a13的swk,请更新到 最新版本。每周都有很多错误修复,比如 开发正在进行中,因此我包括自动检查更新 功能。当您运行swk时,它每天运行一次,如果 新版本可用。你可以通过设置 swk.ini中"check_updates"除了"yes"之外的任何内容
它能做什么?
基本思想是:指定要执行的操作(命令)、主机列表 或要使用的主机组,以及其他参数(如果需要) (取决于你想做什么)。你可以很容易地定义你自己的 通过插件界面的命令,以及您自己的主机组 解析器(通常他们会询问您环境中的一些api 哪些主机包含在提供的主机组中)。基本工头,扎比 api和ssh功能是现成的。
请注意,这是 而不是 织物(尽管它使用 paramiko , 两者都是了不起的软件),这是 而不是 pssh (它 使用自己的方式并行ssh会话,并使用自己的输出 处理)。此实用程序设计用于小型环境和 执行特别操作,非常容易使用(不比shell难) 而且要配置,它没有学习曲线,它提供了一种方法 在手头的许多主机上执行快速而肮脏的命令。你可以 把它想象成一个不需要太多 在您的基础设施中获得可用性的努力(编写解析器以获得 将主机划分为主机组的工具的优势)或 如果您碰巧使用Foreman、Zabbix或第三方主机分组 工具。< /P>
安装
pip install swk
如果您需要casp、foreman或zabbix的插件,也可以运行
pip install swk-casp pip install swk-foreman pip install swk-zabbix
第一次执行"swk"时,将创建 ~/.swk 目录,其中 您应该找到 swk.ini 配置文件,该文件用于存储 shell模式命令历史记录、程序日志、各种插件缓存等。
请注意,您应该使用python3.3+的shell模式才能工作。 其他一切都应该和python2.7.6+一起工作。你可能不得不 更新 pip 和 setuptools ( pip install --升级 pip setuptools )。你可能还得做所有的事 其中有一种是带sudo的,如果你用的话,它会落入你的virtualenv中。
用法
典型用法如下
swk pssh"%hostgroup1[ [-]^hostgroup2 。主机1 [-]主机2]" 正常运行时间
它以并行方式通过ssh在所有主机上执行正常运行时间。
% , ^ 和其他非字母字符被视为 主机组修饰符,指示哪个解析器应展开给定的 主机组到主机列表中。主机组前面的连字符( - )或 主机意味着将从结果列表中排除主机组或主机。 主机可以是一个简单的regex(没有*quantificator或anychar(.),没有 lookahead/lookbehinds), swk 将生成与之匹配的字符串 把它当作主人。如果排除尚未包含的主机, 什么都没发生。主机列表从左到右展开。例子:
swk pssh"^g1 -主机[1234]" echo yay
将以并行方式在 Zabbix主机组 g1 e除了hosts host1 , host2 , host3 和 主机4
提供和捆绑的插件
swk支持:通过ssh( ssh 和 pssh 命令),通过ssh将文件复制到多个主机( dist 命令,递归,默认情况下不保留时间),复制 通过ssh( gather )从多个主机发送的文件-仅显示 主机列表扩展的结果( dr 表示"干运行")
通过安装名为 swk-<;plugin_name>; 的附加包,您还可以 get-expanding zabbix 主机组( ^ 修饰符),列表,添加 删除zabbix中的维护周期( lsmntnce , addmntnce 和 rmmntnce 命令)-展开 casp 主机组( % 修饰符),特殊 全部 主机组扩展到所有主机- 在 foreman 中获取和设置主机环境( getenv 和 setenv 命令),获取、添加和删除链接到 主机和主机组( getcls , addcls , rmcls , getgcls , addgcls , rmgcls ,分别搜索主机和主机组 根据给定的标准( srch 和 srchg ),可以列出 类( lscls )和描述主机( desc )。
要安装它们,请参阅安装 以上章节。另外,请阅读下面的使用说明 使用前。
在使用插件之前,不要忘记对swk.ini进行更改 (凭证/网址等)。
希望会有更多的插件出现。
示例
假设您需要将所有前端nginx日志grep为string "/api/do_something."您的前端主机名是 前端00 , 前端01 ,…, 前端99 。您可以使用类似于
swk pssh 前端[0-9][0-9] grep'/api/do_something'/var/log/nginx/access.log
您可以随时用ctrl-c中断命令的执行。
假设您的服务器命名得更复杂一些,比如 前端01 , 前端02 ,…, 前端25 。这个命令会 做这个技巧(注意主机表达式周围的引号):
swk pssh '前端([0-1][0-9]2[0-5]) -frontend00' grep'/api/do嫒something'/var/log/nginx/access.log
您始终可以验证主机表达式是否正确:
swk dr '前端([0-1][0-9]2[0-5]) -前端00'
输出:
frontend01 frontend02 <...skipped...> frontend24 frontend25
假设您还有服务器 backend01 , backend02 ,…, 后端10 ,您希望在前端和 后端。试试这个:
swk pssh '前端([0-1][0-9]2[0-5]) -前端00 后端(0[1-9]10) 正常运行时间
现在假设您必须在 这25个是本地的前端。首先,将其复制到目标主机:
swk dist '前端([0-1][0-9]2[0-5]) -frontend00' /myu scripts/test.sh/usr/share/
然后执行:
swk pssh '前端([0-1][0-9]2[0-5]) -前端00' /usr/share/test.sh
假设您需要在本地使用nginx日志 计算机(例如,一个简单的统计计算)。你可以收集所有的 使用一个命令登录到您的计算机:
swk gather前端([0-1][0-9]2[0-5]) -frontend00' /var/log/nginx/access.log ./nginx生产日志
这将在您当前的 工作目录,并复制所有access.log文件,附加一个 后缀,这样您就可以知道每个日志是从哪个主机复制的。
假设您的环境中安装了zabbix,并且 前端位于"前端"主机组中。你也可以这么做 使用zabbix主机组扩展(请注意, zabbix 模块是 默认情况下禁用。有关此功能的更多信息,请访问 Available 插件 以上部分)
swk gather^前端/var/log/nginx/access.log 。/nginx生产日志
您可能已经有了一些用于查找以下主机的cli工具 一些搜索条件。假设你有一个叫做 我的超棒工具 它在调用时返回一些主机名,例如:
$ my_awesome_tool host1 host2 host3
如果要将工具用作 swk 的主机列表源,则 可以通过两种方式实现:
swk pssh "`my_awesome_tool`" uptime
或
my_awesome_tool | swk pssh - uptime
其中 - 而不是宿主表达式表示 swk 从 STDIN</P>
假设你安装了工头,你需要设置所有 前端"开发环境"(请注意,您仍在使用^ 在这里,主机扩展机制与zabbix主机组一起工作)
swk setenv^前端开发
…或将全新的 nginx::详细访问日志 傀儡类
swk addgcls前端nginx::详细访问日志
注意:如果你有几个同名的领班主机组,但是 不同的层次结构(例如, debian/mysql 和 mysql ), getgcls , addgcls 和 rmgcls 将与第一组一起工作 由Foreman API返回。
您还可以获取现有主机的说明:
swk desc myhost
输出:
[myhost.example_domain.com]: Hostgroup: mysql OS: Debian 7.9 IP: 192.168.1.1 Resource: myhypervisor Env: production Comment: my favorite host!
或者按给定的标准搜索主机(foreman不支持所有的功能 搜索标准)。有几个简短的关键字 现在方便了:对于hostgroup, cls, hg 对于类, env 对于 环境和操作系统系列的操作系统(debian、redhat等)。指定 几个暗示和逻辑:
swk pssh ^mysql 'sudo rm -rf /var/lib/mysql'0
输出:
swk pssh ^mysql 'sudo rm -rf /var/lib/mysql'1
这样,您就可以将 swk 调用组合在一起 像
swk pssh ^mysql 'sudo rm -rf /var/lib/mysql'2
记住在需要时使用和转义引号!
swk pssh^mysql"mysql"mysql -e '显示像"只读"这样的变量。
您可以通过 运行 swk -h
如果需要更改默认ssh用户,则并行进程计数, api凭证之类的,查看位于 ~/.swk