Looker部署工具
项目描述
Looker Deployer
简介
Looker Deployer(又称'ldeploy')是一个命令行工具,用于帮助在不同实例之间移动Looker对象。这包括内容(外观、仪表板、整个空间等)、板和连接。
状态和支持
截至2023年,Looker Deployer由Google支持,但不提供保修。可以通过https://github.com/llooker/looker_deployer/issues报告问题和功能请求,这些问题和请求将定期监控并排序。
要求
为了让这些命令正确工作,您的环境需要满足一些假设/要求
- Python Looker Deployer 需要 Python 3.6-3.9
- Gazer 内容部署命令使用 gzr来自动化内容部署,因此您需要安装并正确配置它。Gazer 需要 Ruby 的最新版本。
身份验证和配置
Looker Deployer 使用 Looker SDK 与您的 Looker 实例进行通信。需要一个 looker.ini
文件来进行身份验证。默认情况下,该工具会在您的当前工作目录中查找此文件,但如果文件名不同或在不同的位置,您可以使用 --ini
参数指定其位置。以下是一个示例 ini 文件
[dev]
base_url=https://looker-dev.company.com:19999
client_id=abc
client_secret=xyz
verify_ssl=True
[prod]
base_url=https://looker-prod.company.com:19999
client_id=abc
client_secret=xyz
verify_ssl=True
安装
Looker Deployer 在 PyPi 上!您可以使用 pip install looker-deployer
来安装它。
Dockerfile
需要 looker.ini
文件进行 API 身份验证。您可以在运行容器时将 ini 文件卷映射,或者(推荐)从该文件构建一个将相关 ini 文件“烧录”到容器中的镜像。
为此,创建一个包含 looker.ini
文件和以下内容的 Dockerfile
目录
FROM python:3.9-slim
RUN apt update
RUN apt -y install ruby ruby-dev
RUN gem install gazer
RUN apt -y install git
RUN git clone https://github.com/looker-open-source/looker_deployer.git
WORKDIR /looker_deployer
COPY looker.ini .
RUN pip install .
ENTRYPOINT ["ldeploy"]
然后只需
docker build -t ldeploy .
您可以使用: docker run ldeploy <command> <parameters> ...
请注意,为了获取输出,您需要将本地目录映射到 Docker 中的目录,因此实际使用可能如下所示
docker run \
-v /local/path/to/ldeploy/settings:/ldeploy_settings \
-v /local/path/to/ldeploy/output:/ldeploy_output \
ldeploy content export \
--ini /ldeploy_settins/looker.ini \
--local-target /ldeploy_output \
<additional parameters>
您可以将您的 looker.ini
文件放在 /local/path/to/ldeploy/settings
,命令生成的输出将位于 /local/path/to/ldeploy/output
。
本地安装
如果您打算在本地机器上使用 looker-deployer 而不是使用 Docker 镜像,则建议设置 Python 虚拟环境。这将防止其他模块与 looker-deployer 安装发生冲突。
pyenv 提供了 Python 版本和虚拟环境的简单管理。
安装 pyenv 后,安装所需的 Python 版本,并创建名为 ldeploy 的虚拟环境
pyenv install 3.8.3
pyenv virtualenv 3.8.3 ldeploy
激活虚拟环境并安装 looker-deployer
pyenv activate ldeploy
pip install looker-deployer
looker-deployer 现在已准备好使用!完成操作后,请取消激活虚拟环境
source deactivate
用法
使用 ldeploy
命令调用该工具,后跟相关子命令。可用的子命令包括: boards
、code
、connections
和 content
。
每个子命令都可以配置其相关参数,可以使用 -h
或 --help
参数进行查看。例如
ldeploy content -h
内容部署
此命令使用 gazer
从您的开发 Looker 实例将内容拉到本地机器上的目录结构,或将内容从该目录结构部署到指定的 Looker 实例。该命令可以为特定的一组 Look 或仪表板或整个文件夹工作,并在目标实例中正确创建找不到的任何文件夹。
内容命令进一步分为两个子命令: export
和 import
内容导出
所有内容部署任务都从使用 export
命令将开发环境内容文件夹树表示导出到本地磁盘开始。然后,此目录树在后续的导入命令中使用,以将仪表板、Look 或整个树导入到另一个实例。
该命令接受以下参数
usage: ldeploy content export [-h] --env ENV [--ini INI] [--debug] --folders
FOLDERS [FOLDERS ...] --local-target
LOCAL_TARGET
optional arguments:
-h, --help show this help message and exit
--env ENV What environment to deploy from
--ini INI ini file to parse for credentials
--debug set logger to debug for more verbosity
--folders FOLDERS [FOLDERS ...]
What folders to export content from
--local-target LOCAL_TARGET
Local directory to store content
内容导入
从您的开发环境导出内容后,您可以使用 import
命令将其引入生产环境。
usage: ldeploy content import [-h] --env ENV [--ini INI] [--debug]
[--recursive] [--target-folder TARGET_FOLDER]
(--folders FOLDERS [FOLDERS ...] | --dashboards DASHBOARDS [DASHBOARDS ...] | --looks LOOKS [LOOKS ...])
optional arguments:
-h, --help show this help message and exit
--env ENV What environment to deploy to
--ini INI ini file to parse for credentials
--debug set logger to debug for more verbosity
--recursive Should folders deploy recursively
--target-folder TARGET_FOLDER
override the default target folder with a custom path
--folders FOLDERS [FOLDERS ...]
Folders to fully deploy
--dashboards DASHBOARDS [DASHBOARDS ...]
Dashboards to deploy
--looks LOOKS [LOOKS ...]
Looks to deploy
导入基本文件夹 已添加对导入到除共享之外的基本文件夹的支持。与此相关有一些重要注意事项
- 在运行导入之前,必须存在用户、嵌入用户和嵌入组文件夹,ldeploy 无法创建它们。
- 用户、嵌入用户和嵌入组文件夹必须具有唯一名称。
- 如果没有使用“--target-folder”指定其他文件夹,则“共享”是默认的基本文件夹。
示例
ldeploy content export --env dev --folders 1 --local-target ./foo/bar/
<- 将共享文件夹(ID 1)及其所有子文件夹导出到目录位置./foo/bar/
ldeploy content export --env dev --folders 5 8 --local-target ./foo/bar/
<- 将文件夹5和8(及其所有子文件夹)导出到目录位置./foo/bar/
ldeploy content import --env prod --folders ./foo/bar/Shared/Public
<- 将Shared/Public
中的所有内容部署到生产实例ldeploy content import --env prod --folders ./foo/bar/Shared/Public --recursive --target-folder Shared/FromDev/Public
<- 将Shared/Public
中的所有内容及其所有子文件夹部署到生产实例的Shared/FromDev/Public
文件夹中。ldeploy content import --env prod --dashboards ./foo/bar/Shared/Public/Dashboard_1.json ./foo/bar/Shared/Restricted/Dashboard_2.json
<- 将Dashboard1
和Dashboard2
部署到生产实例中各自的文件夹ldeploy content import --env prod --folders ./dev/Users --recursive --target-folder Users
<- 将dev/Users
中的所有内容及其所有子文件夹部署到生产实例的Users
文件夹ldeploy content import --env prod --folders "./dev/Embed Users" --recursive --target-folder "Embed Users"
<- 将dev/Embed Users
中的所有内容及其所有子文件夹部署到生产实例的Embed Users
文件夹ldeploy content import --env prod --folders "./dev/Embed Groups" --recursive --target-folder "Embed Groups"
<- 将dev/Embed Groups
中的所有内容及其所有子文件夹部署到生产实例的Embed Groups
文件夹
看板部署
此命令允许跨实例部署看板/主页。它尝试解决实例之间仪表板/外观ID的差异,并在构建新看板之前确认内容的存在。看板通过标题进行匹配 - 更新现有看板将导致相关部分和项目的重建,以防止通过标题尝试匹配时出现的问题。如果需要更新看板标题,请使用title-change
参数,以便命令能够找到旧标题。该命令接受以下参数
usage: ldeploy boards [-h] --source SOURCE --target TARGET [TARGET ...]
--board BOARD [--ini INI] [--allow-partial]
[--title-change TITLE_CHANGE] [--debug]
optional arguments:
-h, --help show this help message and exit
--source SOURCE which environment to source the board from
--target TARGET [TARGET ...]
which target environment(s) to deploy to
--board BOARD which board to deploy
--ini INI ini file to parse for credentials
--allow-partial allow partial deployment of board content if not all
content is present on target instance?
--title-change TITLE_CHANGE
if updating title, the old title to replace in target
environments
--debug set logger to debug for more verbosity
示例
ldeploy boards --source dev --target prod --board 'My Cool Board'
<- 将“我的酷看板”从开发部署到生产ldeploy boards --source dev --target prod_1 prod_2 --allow-partial --board 'My Updated Title Board' --title-change 'My Cool Board'
<- 这将部署标题已从“我的酷看板”更改为“我的更新标题看板”的看板,从开发部署到两个实例:prod_1和prod_2。任何在任一生产实例中不存在的内容都将被跳过,而不会引发任何错误。
连接部署
此命令允许跨实例迁移数据库连接。出于安全考虑,Looker的API不传输密码凭据,因此此命令允许从.ini
文件中注入这些凭据。
该命令接受以下参数
usage: ldeploy connections [-h] --source SOURCE [--ini INI] --target TARGET
[TARGET ...] [--pattern PATTERN]
[--include-password] [--debug]
optional arguments:
-h, --help show this help message and exit
--source SOURCE which environment to source the board from
--ini INI ini file to parse for credentials
--target TARGET [TARGET ...]
which target environment(s) to deploy to
--pattern PATTERN regex pattern to filter which connections are deployed
--include-password should passwords be set from the ini file?
--debug set logger to debug for more verbosity
示例
ldeploy connections --source dev --target prod
<- 这将部署开发实例中的所有连接到生产实例。不会包含任何凭据,需要从Looker UI手动添加。ldeploy connections --source dev --target prod --pattern ^bigquery --include-password
<- 这将部署所有以bigquery
开头的连接从开发部署到生产,并尝试注入.ini
文件中包含的密码。
代码部署
此命令将管理从当前Github master分支到相关生产实例的hub/spoke LookML代码的部署。这是通过向每个实例的部署端点发送GET
请求并使用webhook密钥进行身份验证来完成的。
相关架构概述(点击放大)
为了使用代码部署工具,需要一个 code_config.yaml
文件。该文件需要包含实例列表 - 每个客户端生产实例一个。该列表必须包括名称(用于在命令中引用该实例)、端点和该实例的分支项目名称。此外,配置文件需要包含对公共中心项目的条目,并且可以可选地包含要排除在中心部署之外的实例名称列表。以下是一个示例配置:
instances:
- name: calvin
endpoint: https://looker-dev.company.com
spoke_project: powered_by_spoke_ck
- name: levis
endpoint: https://looker-dev.company.com
spoke_project: powered_by_spoke_lv
hub_project: powered_by_hub
该命令接受以下参数
usage: ldeploy code [-h] [--hub] [--spoke SPOKE [SPOKE ...]]
[--hub-exclude HUB_EXCLUDE [HUB_EXCLUDE ...]] [--debug]
optional arguments:
-h, --help show this help message and exit
--hub flag to deploy hub project
--spoke SPOKE [SPOKE ...]
which spoke(s) to deploy
--hub-exclude HUB_EXCLUDE [HUB_EXCLUDE ...]
which projects should be ignored from hub deployment
--debug set logger to debug for more verbosity
示例
ldeploy code --hub
<- 这将部署中心项目到所有生产实例ldeploy code --spoke foo
<- 这将部署名为 "foo" 的分支项目到相关实例ldeploy code --hub --spoke foo bar --hub-exclude bar --debug
<- 这将部署中心项目到除bar
以外的所有实例,然后部署分支项目foo
和bar
到各自的实例
管理员角色设置
由于 Looker 中角色设置的相关性,建议按以下顺序运行这些命令以确保先前的信息可用:
- 模型集
- 权限集
- 角色
- 组
- 组中的组
- 角色到组
- 用户属性
特殊注意事项
如果您有外部管理的组,您需要确保在组中的组之前完成 SAML/LDAP 的更新。上述代码引用不会迁移这些特殊组。
模型集部署
此命令允许在实例之间迁移模型集。
创建/更新/删除的匹配将基于设置的名称,因为 ID 是自动递增的。
该命令接受以下参数
usage: ldeploy model_sets [-h] --source SOURCE [--ini INI] --target TARGE [TARGET ...] [--pattern PATTERN] [--delete] [--debug]
optional arguments:
-h, --help show this help message and exit
--source SOURCE which environment to source the model sets from
--ini INI ini file to parse for credentials
--target TARGET [TARGET ...]
which target environment(s) to deploy to
--pattern PATTERN regex pattern to filter
--delete allows for deletion from target based on name
--debug set logger to debug for more verbosity
示例
ldeploy model_sets --source dev --target prod
<- 这将部署开发实例中的所有模型集到生产实例。ldeploy model_sets --source dev --target prod --pattern ^test
<- 这将部署以 test 开头的所有模型集。
权限集部署
此命令允许在实例之间迁移权限集。
创建/更新/删除的匹配将基于设置的名称,因为 ID 是自动递增的。
该命令接受以下参数
usage: ldeploy permission_sets [-h] --source SOURCE [--ini INI] --target TARGE [TARGET ...] [--pattern PATTERN] [--delete] [--debug]
optional arguments:
-h, --help show this help message and exit
--source SOURCE which environment to source the permission sets from
--ini INI ini file to parse for credentials
--target TARGET [TARGET ...]
which target environment(s) to deploy to
--pattern PATTERN regex pattern to filter
--delete allows for deletion from target based on name
--debug set logger to debug for more verbosity
示例
ldeploy permission_sets --source dev --target prod
<- 这将部署开发实例中的所有权限集到生产实例。ldeploy permission_sets --source dev --target prod --pattern ^test
<- 这将部署以 test 开头的所有权限集。
角色部署
此命令允许在实例之间迁移角色。
创建/更新/删除的匹配将基于设置的名称,因为 ID 是自动递增的。
该命令接受以下参数
usage: ldeploy roles [-h] --source SOURCE [--ini INI] --target TARGE [TARGET ...] [--pattern PATTERN] [--delete] [--debug]
optional arguments:
-h, --help show this help message and exit
--source SOURCE which environment to source the roles from
--ini INI ini file to parse for credentials
--target TARGET [TARGET ...]
which target environment(s) to deploy to
--pattern PATTERN regex pattern to filter
--delete allows for deletion from target based on name
--debug set logger to debug for more verbosity
示例
ldeploy roles --source dev --target prod
<- 这将部署开发实例中的所有角色到生产实例。ldeploy roles --source dev --target prod --pattern ^test
<- 这将部署以 test 开头的所有角色。
组部署
此命令允许在实例之间迁移非外部管理的组。
创建/更新/删除的匹配将基于设置的名称,因为 ID 是自动递增的。
该命令接受以下参数
usage: ldeploy groups [-h] --source SOURCE [--ini INI] --target TARGE [TARGET ...] [--pattern PATTERN] [--delete] [--debug]
optional arguments:
-h, --help show this help message and exit
--source SOURCE which environment to source the groups from
--ini INI ini file to parse for credentials
--target TARGET [TARGET ...]
which target environment(s) to deploy to
--pattern PATTERN regex pattern to filter
--delete allows for deletion from target based on name
--debug set logger to debug for more verbosity
示例
ldeploy groups --source dev --target prod
<- 这将部署开发实例中的所有组到生产实例。ldeploy groups --source dev --target prod --pattern ^test
<- 这将部署以 test 开头的所有组。
组中的组(即组层次结构)部署
此命令允许在实例之间迁移属于其他组的组。
创建或删除的匹配将基于设置的名称,因为 ID 是自动递增的。
该命令接受以下参数
usage: ldeploy group_in_group [-h] --source SOURCE [--ini INI] --target TARGE [TARGET ...] [--pattern PATTERN] [--debug]
optional arguments:
-h, --help show this help message and exit
--source SOURCE which environment to source the group hierarchy from
--ini INI ini file to parse for credentials
--target TARGET [TARGET ...]
which target environment(s) to deploy to
--pattern PATTERN regex pattern to filter
--debug set logger to debug for more verbosity
示例
ldeploy group_in_group --source dev --target prod
<- 这将部署开发实例中的所有组中的组到生产实例。ldeploy group_in_group --source dev --target prod --pattern ^test
<- 这将部署以 test 开头的所有组中的组。
角色到组部署
此命令允许在实例之间迁移与组关联的角色。
创建或更新的匹配将基于设置的名称,因为 ID 是自动递增的。
该命令接受以下参数
usage: ldeploy role_to_group [-h] --source SOURCE [--ini INI] --target TARGE [TARGET ...] [--pattern PATTERN] [--debug]
optional arguments:
-h, --help show this help message and exit
--source SOURCE which environment to source the role to group from
--ini INI ini file to parse for credentials
--target TARGET [TARGET ...]
which target environment(s) to deploy to
--pattern PATTERN regex pattern to filter
--debug set logger to debug for more verbosity
示例
ldeploy role_to_group --source dev --target prod
<- 这将把开发实例中的所有角色部署到生产实例的组中。ldeploy role_to_group --source dev --target prod --pattern ^test
<- 这将部署所有以 test 开头的角色的组。
用户属性部署
此命令允许在不同实例之间迁移非系统管理的用户属性(例如 id、first_name、last_name、email)。
匹配创建/更新/删除将基于设置的名称,因为 ID 是自动递增的。这包括通过组名创建的用户属性的分配。
该命令接受以下参数
usage: ldeploy user_attributes [-h] --source SOURCE [--ini INI] --target TARGE [TARGET ...] [--pattern PATTERN] [--delete] [--debug]
optional arguments:
-h, --help show this help message and exit
--source SOURCE which environment to source the user attributes from
--ini INI ini file to parse for credentials
--target TARGET [TARGET ...]
which target environment(s) to deploy to
--pattern PATTERN regex pattern to filter
--delete allows for deletion from target based on name
--debug set logger to debug for more verbosity
示例
ldeploy user_attributes --source dev --target prod
<- 这将把开发实例中的所有用户属性部署到生产实例。ldeploy user_attributes --source dev --target prod --pattern ^test
<- 这将部署所有以 test 开头的用户属性。
开发
本项目使用 pipenv
管理依赖项。请遵循安装说明。建议使用 pyenv 来管理安装 Python 版本。
安装 pipenv
后,克隆此仓库,进入它,并调用 pipenv install --ignore-pipfile
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
looker_deployer-0.3.11.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | defea971be84b516ace9673ed9e443032c4feae1908958ff0ca9592469067d2f |
|
MD5 | 3803faac0eea8499070e86f22197a68f |
|
BLAKE2b-256 | 09705d2342e0b15eee91dc0bcb3c3698b0875f8e479da47fc052bb4f8230487c |
looker_deployer-0.3.11-py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 1a05dbbcd54abd36166dc90e5bfe0630c3031a5e358e602d6ded911ac88ce5f6 |
|
MD5 | 54441c5c579f81fdc92cadb600260ad1 |
|
BLAKE2b-256 | 02b1447a7a7f955140beb86a867447af0f99fc17dbde7b57c6dda74029f198be |