一个基于python-kazoo的动物园管理员外壳
zk-shell的Python项目详细描述
目录
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