gamegos / consul-imex
Consul 键/值存储的导入/导出工具
Requires
- php: >=5.5.9
- ext-json: ~1.3
- guzzlehttp/guzzle: ^6.3
- symfony/console: ^3.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-08-26 18:33:41 UTC
README
Consul-Imex 是一个简单的用于通过 Consul HTTP API 导入/导出 Consul 键/值存储的工具。
- 导出前缀下的所有键,并将其保存为 json 文件。
- 从 json 文件导入键到 Consul 下的指定前缀。
- 复制键
- 从前缀到另一个前缀。
- 从服务器到另一个服务器下的指定前缀。
安装
您可以通过多种方式安装 Consul Imex
- 可执行 phar 文件(需要 PHP >=5.5.9)
- Docker 镜像(需要 Docker 引擎)
- Composer 依赖(需要 Git,Composer 和 PHP >=5.5.9)
- 单个 PHP 项目(需要 Git,Composer 和 PHP >=5.5.9)
作为可执行 phar 文件安装
从 https://github.com/gamegos/consul-imex/releases/download/1.0.0-rc1/consul-imex.phar
下载 phar 文件,然后为其分配执行权限。
示例
wget -O /usr/local/bin/consul-imex https://github.com/gamegos/consul-imex/releases/download/1.0.0-rc1/consul-imex.phar
chmod +x /usr/local/bin/consul-imex
作为 Docker 镜像安装
docker pull sozpinar/consul-imex
作为 Composer 依赖安装
composer require gamegos/consul-imex
作为 PHP 项目安装
通过 composer
安装
composer create-project gamegos/consul-imex
或克隆/下载并手动安装
git clone https://github.com/gamegos/consul-imex.git
cd consul-imex
composer install
使用方法
作为可执行 phar 文件运行
consul-imex <command> [options] [arguments]
作为 Docker 容器运行
有关 Docker 使用详细信息的说明,请参阅 Docker 使用说明。
docker run -t -v `pwd`:/consul-imex sozpinar/consul-imex <command> [options] [arguments]
作为 composer vendor 二进制运行
composer exec -- consul-imex <command> [options] [arguments]
作为 PHP 脚本运行
php scripts/consul-imex.php <command> [options] [arguments]
导出
使用方法
consul-imex export [options] <file>
参数
- file: 输出数据文件。
选项
- --url (-u): Consul 服务器 URL。
- --prefix (-p): 路径前缀。
- --token (-c): Consul 令牌。
导入
使用方法
consul-imex import [options] <file>
参数
- file: 输入数据文件。
选项
- --url (-u): Consul 服务器 URL。
- --prefix (-p): 路径前缀。
- --token (-c): Consul 令牌。
复制
使用方法
consul-imex copy [options] <source> <target>
参数
- source: 源前缀。
- target: 目标前缀。
选项
- --source-server (-s): 源服务器 URL。
- --target-server (-t): 目标服务器 URL。如果省略,则使用源服务器作为目标服务器。
- --source-server-token (-c): 源服务器 Consul 令牌。
- --target-server-token: 目标服务器 Consul 令牌。如果省略,则使用源服务器令牌作为目标服务器令牌。
示例
导出
$ consul-imex export -u https://:8500 -p /old/prefix my-data.json
93 keys are fetched.
使用令牌键导出
$ consul-imex export -c 4874874a-2a3s-7892-123e-597a4e1v87e1 -u https://:8500 -p /old/prefix my-data.json
93 keys are fetched.
导入
$ consul-imex import -u https://:8500 -p /new/prefix my-data.json
93 keys are stored. (25 new directories are created.)
使用令牌键导入
$ consul-imex import -c 4874874a-2a3s-7892-123e-597a4e1v87e1 -u https://:8500 -p /new/prefix my-data.json
93 keys are stored. (25 new directories are created.)
复制
将键从 /old/prefix
复制到 /new/prefix
$ consul-imex copy -s https://:8500 /old/prefix /new/prefix
93 keys are fetched.
93 keys are stored. (25 new directories are created.)
Operation completed.
使用令牌将键从 /old/prefix
复制到 /new/prefix
$ consul-imex copy -s https://:8500 -c 4874874a-2a3s-7892-123e-597a4e1v87e1 /old/prefix /new/prefix
93 keys are fetched.
93 keys are stored. (25 new directories are created.)
Operation completed.
将 /my/prefix
下的键复制到另一个服务器
$ consul-imex copy -s https://:8500 -t http://anotherhost:8500 /my/prefix /my/prefix
93 keys are fetched.
93 keys are stored. (25 new directories are created.)
Operation completed.
使用令牌将 /my/prefix
下的键复制到另一个服务器
$ consul-imex copy -s https://:8500 -c 4874874a-2a3s-7892-123e-597a4e1v87e1 -t http://anotherhost:8500 --target-server-token 6242c15a-9w4x-2318-61a2-8as8c47317 /my/prefix /my/prefix
93 keys are fetched.
93 keys are stored. (25 new directories are created.)
Operation completed.
将所有键复制到另一个服务器
$ consul-imex copy -s https://:8500 -t http://anotherhost:8500
492 keys are fetched.
492 keys are stored. (108 new directories are created.)
Operation completed.
Docker 使用说明
输入/输出文件位置
要使用 Docker 中的 import
和 export
命令,输入/输出文件必须可供容器访问。镜像的默认工作目录为 /consul-imex
,输入/输出文件默认放置在此目录下。
export
命令的示例
示例 1:将主机目录挂载到容器中用于 export
操作,然后容器将在主机目录中创建 my-data.json
文件。
$ docker run -it -v `pwd`:/consul-imex sozpinar/consul-imex export -u 192.168.1.20:8500 -p /foo/bar my-data.json
93 keys are fetched.
示例 2:在 export
操作完成后将输出文件复制到您的当前工作目录。
$ docker run -it sozpinar/consul-imex export -u 192.168.1.20:8500 -p /foo/bar my-data.json
93 keys are fetched.
$ docker cp `docker ps -ql`:/consul-imex/my-data.json .
import
命令的示例
示例 1:将主机目录挂载到容器中用于 import
操作,然后容器将从主机目录中读取 my-data.json
文件。
$ docker run -it -v `pwd`:/consul-imex sozpinar/consul-imex import -u 192.168.1.20:8500 -p /new/prefix my-data.json
93 keys are stored. (25 new directories are created.)
示例2:将文件挂载到容器中,并用于导入
操作。此方法不需要将输入文件放置在默认工作目录中。
$ docker run -it -v `pwd`/my-data.json:/my-data.json sozpinar/consul-imex import -u 192.168.1.20:8500 -p /new/prefix -v /my-data.json
93 keys are stored. (25 new directories are created.)
网络配置
如果您的Consul服务位于私有网络或没有公网URL,您可能需要为docker容器设置自定义网络配置。
示例
docker run -it --net=host sozpinar/consul-imex copy -s https://:8500 -t http://anotherhost:8500
如果默认的docker网络类型是bridge
,则正在运行的容器无法识别'localhost'。因此,我们简单地添加--net=host
参数,使容器使用主机机器的网络。
已知问题
包含值的目录
Consul键/值存储允许目录具有类似于普通键的值。如果目录有值,Consul Imex将忽略该值或子键;这取决于键的顺序。