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 -e '显示"只读"之类的变量' 不会 工作(由于外壳引用处理,它表示 mysql -e 显示"只读"之类的变量,但是

swk pssh^mysql"mysql"mysql -e '显示像"只读"这样的变量。

您可以通过 运行 swk -h

如果需要更改默认ssh用户,则并行进程计数, api凭证之类的,查看位于 ~/.swk

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Cassandra复制因子大于节点数   java J2EE JTA事务回滚不适用于OSE Glassfish 4.0(Build 89)   java spring安全预认证用户登录   org的java类文件。反应流。从RxJava编译示例时未找到Publisher?   java在使用dataFormat作为POJO通过Camel调用Web服务时无法设置SOAP标头   Javafx类的java静态实例   java如何防止一个部件在关闭时覆盖另一个部件的位置   sql server无法从我的java代码连接到数据库   java在JList(Swing)中显示带有的ArrayList   从Java中的CXF服务获取WSAddressing数据   使用资产文件夹进行java简单json解析(本地)   java LDAPException未绑定的无效凭据   JavaJSFspring部署到weblogic   JAVA中字符数组中的特定元素排列?   如果脚本位于不同的目录中,则ant不会使用exec标记运行Javashell脚本