一个基于python-kazoo的动物园管理员外壳

zk-shell的Python项目详细描述


Build StatusCoverage StatusPyPI versionRequirements StatusPython VersionsCode Climate

目录

tl;dr

一个强大的可编写脚本的shell,用于Apache ZooKeeper

安装

来自PYPI:

$ pip install zk-shell

或从源代码运行:

# Kazoo is needed
$ pip install kazoo

$ git clone https://github.com/rgs1/zk_shell.git
$ cd zk_shell
$ export ZKSHELL_SRC=1; bin/zk-shell
Welcome to zk-shell (0.99.04)
(DISCONNECTED) />

您还可以构建一个独立的pex文件:

$ pip install pex

$ pex -v -e zk_shell.cli -o zk-shell.pex .

关于PEX here的更多信息。

用法

$ zk-shell localhost:2181
(CONNECTED) /> ls
zookeeper
(CONNECTED) /> create foo 'bar'
(CONNECTED) /> get foo
bar
(CONNECTED) /> cd foo
(CONNECTED) /foo> create ish 'barish'
(CONNECTED) /foo> cd ..
(CONNECTED) /> ls foo
ish
(CONNECTED) /> create temp- 'temp' true true
(CONNECTED) /> ls
zookeeper foo temp-0000000001
(CONNECTED) /> rmr foo
(CONNECTED) />
(CONNECTED) /> tree
.
├── zookeeper
│   ├── config
│   ├── quota

通过readline支持行编辑和命令历史记录(如果readline 是可用的)。大多数命令和它们的 参数。

可以在本地文件系统和 动物园管理员。递归地从文件系统复制到zookeeper是 也支持,但不是相反,因为znodes可以 内容和孩子。

(CONNECTED) /> cp file:///etc/passwd zk://localhost:2181/passwd
(CONNECTED) /> get passwd
(...)
unbound:x:992:991:Unbound DNS resolver:/etc/unbound:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin

也支持在一个ZooKeeper群集之间复制到另一个ZooKeeper群集:

(CONNECTED) /> cp zk://localhost:2181/passwd zk://othercluster:2183/mypasswd

还支持在zookeeper集群和json文件之间进行复制:

(CONNECTED) /> cp zk://localhost:2181/something json://!tmp!backup.json/ true true

还支持在集群或json文件之间镜像到的路径。 镜像将目标路径替换为内容和结构 源路径的。

(CONNECTED) /> create /source/znode1/znode11 'Hello' false false true
(CONNECTED) /> create /source/znode2 'Hello' false false true
(CONNECTED) /> create /target/znode1/znode12 'Hello' false false true
(CONNECTED) /> create /target/znode3 'Hello' false false true
(CONNECTED) /> tree
.
├── target
│   ├── znode3
│   ├── znode1
│   │   ├── znode12
├── source
│   ├── znode2
│   ├── znode1
│   │   ├── znode11
├── zookeeper
│   ├── config
│   ├── quota
(CONNECTED) /> mirror /source /target
Are you sure you want to replace /target with /source? [y/n]:
y
Mirroring took 0.04 secs
(CONNECTED) /> tree
.
├── target
│   ├── znode2
│   ├── znode1
│   │   ├── znode11
├── source
│   ├── znode2
│   ├── znode1
│   │   ├── znode11
├── zookeeper
│   ├── config
│   ├── quota
(CONNECTED) /> create /target/znode4 'Hello' false false true
(CONNECTED) /> mirror /source /target false false true
Mirroring took 0.03 secs
(CONNECTED) />

可以使用watch命令来调试监视。它允许 监视所有的孩子,递归地观察在以下条件下触发:

(CONNECTED) /> watch start /
(CONNECTED) /> create /foo 'test'
(CONNECTED) /> create /bar/foo 'test'
(CONNECTED) /> rm /bar/foo
(CONNECTED) /> watch stats /

Watches Stats

/foo: 1
/bar: 2
/: 1
(CONNECTED) /> watch stop /

搜索与给定文本匹配的路径或znode可以通过 查找:

(CONNECTED) /> find / foo
/foo2
/fooish/wayland
/fooish/xorg
/copy/foo

或者使用ifind进行不区分大小写的匹配:

(CONNECTED) /> ifind / foo
/foo2
/FOOish/wayland
/fooish/xorg
/copy/Foo

可以通过grep:

(CONNECTED) /> grep / unbound true
/passwd: unbound:x:992:991:Unbound DNS resolver:/etc/unbound:/sbin/nologin
/copy/passwd: unbound:x:992:991:Unbound DNS resolver:/etc/unbound:/sbin/nologin

对于不区分大小写的版本,也可以通过igrep。

可以使用非交互模式通过--run-once

传递命令
$ zk-shell --run-once "create /foo 'bar'" localhost
$ zk-shell --run-once "get /foo" localhost
bar

或通过stdin发送命令:

$ echo "get /foo" | zk-shell --run-from-stdin localhost
bar

通过指定主机,也可以使用ssh隧道进行连接 使用:

$ zk-shell --tunnel ssh-host zk-host

依赖关系

  • python 2.7、3.3、3.4、3.5或3.6
  • Kazoo=2.2

测试和开发

请看CONTRIBUTING.rst

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

推荐PyPI第三方库


热门话题
JavaEclipseMars没有保存首选项   java梯度同步失败:原因:启动失败:   java如何从嵌套的JSON获取数据?   java如何判断可观察对象中的任何对象满足一个条件?   java将字符串转换为保持相同值的byte[]数组   java有没有办法绕过AuditingEntityListener为测试设置数据?   从/usr/share/java中解析linux JAR依赖关系   安卓 My java函数抛出nullpointerexception?   java Gradle使用正确版本的依赖项   JBoss和Java6中带注释的WebService中的web服务ClassCastException   java如何修复codename one中的简单逻辑错误?   java如何迭代矩阵的索引?   java如何在JPanel不可见时将其保存为图像?   java HashMap如何在Kotlin中实现MutableMap接口?   javascript如何在单击后加载特定片段?   EclipseJava为纳什均衡获取所有玩家/策略组合   JavaSpring:Web服务REST在JSON上产生双反斜杠   java为什么ServletContext#getRealPath(“/”)返回相对路径?   java当我的游戏应该重新启动时,我应该如何处理重置SurfaceView和线程?