跳转到主要内容

Python - 基于Kazoo的 - ZooKeeper外壳

项目描述

Build Status Coverage Status PyPI version Requirements Status Python Versions Code Climate

目录

tl;dr

Apache ZooKeeper的强大且可脚本化的外壳

安装

作为Dockerfile

::

$ docker build . -f Dockerfile -t zk-shell:1.3.3

从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的更多信息请参阅 此处.

使用

Docker版本

$ docker run -it zk-shell:1.3.3

并使用connect命令连接到您的zookeeper实例

$ 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之间复制单个文件。还支持从文件系统递归复制到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集群之间复制

(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 /

可以通过find查找与给定文本匹配的路径或znode。

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

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

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

可以通过grep在znode中搜索内容。

(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

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

zk_shell-1.3.4.tar.gz (58.1 kB 查看哈希值)

上传时间:

构建分布

zk_shell-1.3.4-py2-none-any.whl (65.0 kB 查看哈希值)

上传时间: Python 2

由以下机构支持